mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-02-15 04:15:53 +08:00
Compare commits
53 Commits
core-linux
...
core-linux
| Author | SHA1 | Date | |
|---|---|---|---|
| aca5ffa36f | |||
| 4fc3726f37 | |||
| 2682e1fbac | |||
| f5c3ae779b | |||
| 068c60afa0 | |||
| 5b8ca5b417 | |||
| acfd12ea30 | |||
| a04b83cada | |||
| a7bf12c052 | |||
| 5c01b23dee | |||
| db11b75a2e | |||
| 2ba4c18cdf | |||
| b264f20f29 | |||
| 5e04ea62f7 | |||
| 3d1db63c0e | |||
| f124d18256 | |||
| 9bffb65dcb | |||
| 2fbcc3832f | |||
| 97b4311e95 | |||
| 228b3a52e9 | |||
| 2f2236646d | |||
| 30603d0561 | |||
| 933af771b7 | |||
| c04a537d69 | |||
| e49d78db47 | |||
| 99ec420ee5 | |||
| f764b034a1 | |||
| 73fe023460 | |||
| 242af3c80e | |||
| 7756e4b8bd | |||
| 56a1d1f627 | |||
| 11bd4ff61d | |||
| 93a06d7f86 | |||
| 76d2d429b7 | |||
| c6de37dbad | |||
| d022e669f0 | |||
| 184e79bae1 | |||
| e6581671c8 | |||
| e0a1c688bf | |||
| 9e0b301179 | |||
| 8680fb2e0e | |||
| c7c605a970 | |||
| 23d648d92d | |||
| b098c98dbb | |||
| b88726beaf | |||
| b2d3e5e194 | |||
| a8315efae0 | |||
| 3781cf6774 | |||
| 7e36d47991 | |||
| 419a01bd09 | |||
| 804a01cab3 | |||
| 931d6aa17c | |||
| 2861539949 |
@ -69,8 +69,13 @@ namespace OpenXmlContentTypes
|
||||
static const wchar_t* Tiff = L"image/tiff";
|
||||
static const wchar_t* Wmf = L"image/x-wmf";
|
||||
static const wchar_t* Bmp = L"image/bmp";
|
||||
static const wchar_t* Pcz = L"image/x-pcz";
|
||||
}
|
||||
namespace DocPrContentTypes
|
||||
{
|
||||
static const wchar_t* App = L"application/vnd.openxmlformats-officedocument.extended-properties+xml";
|
||||
static const wchar_t* Core = L"application/vnd.openxmlformats-package.core-properties+xml";
|
||||
}
|
||||
|
||||
namespace WordprocessingMLContentTypes
|
||||
{
|
||||
// WordprocessingML content types
|
||||
@ -136,7 +141,7 @@ namespace OpenXmlNamespaces
|
||||
|
||||
namespace OpenXmlRelationshipTypes
|
||||
{
|
||||
static const wchar_t* CoreProperties = L"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";
|
||||
static const wchar_t* CoreProperties = L"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";
|
||||
static const wchar_t* ExtendedProperties = L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";
|
||||
|
||||
static const wchar_t* Theme = L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";
|
||||
|
||||
@ -110,6 +110,11 @@ namespace DocFileFormat
|
||||
unused2 = Reader->ReadByte();
|
||||
unused3 = Reader->ReadByte();
|
||||
|
||||
if (btMacOS != btWin32)
|
||||
{
|
||||
btWin32 = btMacOS = (Global::BlipType)this->Instance;
|
||||
}
|
||||
|
||||
if (BodySize > 0x24)
|
||||
{
|
||||
Blip = RecordFactory::ReadRecord(Reader, 0);
|
||||
|
||||
@ -192,14 +192,14 @@ public:
|
||||
{
|
||||
if (!bIsCompressed)
|
||||
{
|
||||
m_pMetaFile = pCompress;
|
||||
m_lMetaFileSize = lUncompressSize;
|
||||
m_pMetaFile = new BYTE[lCompressSize];
|
||||
m_lMetaFileSize = lCompressSize;
|
||||
memcpy(m_pMetaFile, pCompress, lCompressSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
ULONG lSize = lUncompressSize;
|
||||
m_pMetaFile = new BYTE[lUncompressSize];
|
||||
//bool bRes = NSZLib::Decompress(pCompress, (ULONG)lCompressSize, m_pMetaFile, lSize);
|
||||
|
||||
HRESULT res = S_OK;
|
||||
COfficeUtils* pOfficeUtils = new COfficeUtils(NULL);
|
||||
@ -340,6 +340,8 @@ typedef enum _BlipCompression
|
||||
|
||||
if (typeCode == 0xf01b)
|
||||
{
|
||||
oMetaFile.m_sExtension = L".wmf";
|
||||
|
||||
WmfPlaceableFileHeader oWmfHeader = {};
|
||||
oMetaHeader.ToWMFHeader(&oWmfHeader);
|
||||
|
||||
@ -349,24 +351,12 @@ typedef enum _BlipCompression
|
||||
|
||||
oMetaFile.SetHeader(pMetaHeader, lLenHeader);
|
||||
}
|
||||
|
||||
if (typeCode == 0xf01c)
|
||||
{
|
||||
oMetaFile.m_sExtension = L".pcz";
|
||||
//decompress???
|
||||
}
|
||||
oMetaFile.SetData(m_pvBits, oMetaHeader.cbSave, oMetaHeader.cbSize, 0 == oMetaHeader.compression);
|
||||
|
||||
//if (pos < sz)
|
||||
//{
|
||||
// NSFile::CFileBinary oFile;
|
||||
|
||||
// if (oFile.CreateFile(L"d:\\blop.dat"))
|
||||
// {
|
||||
// BYTE * d = Reader->ReadBytes( sz - pos, true );
|
||||
// if (d)
|
||||
// {
|
||||
// oFile.WriteFile (d, sz - pos);
|
||||
// delete []d;
|
||||
// oFile.CloseFile();
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
virtual ~MetafilePictBlip()
|
||||
|
||||
@ -64,6 +64,8 @@ namespace DocFileFormat
|
||||
DocumentContentTypesFile._defaultTypes.insert( make_pair( L"xml", std::wstring( OpenXmlContentTypes::Xml ) ) );
|
||||
|
||||
MainRelationshipsFile.Relationships.push_back( Relationship( std::wstring( L"rId1"), OpenXmlRelationshipTypes::OfficeDocument, L"word/document.xml") );
|
||||
MainRelationshipsFile.Relationships.push_back( Relationship( std::wstring( L"rId2"), OpenXmlRelationshipTypes::CoreProperties, L"docProps/core.xml") );
|
||||
MainRelationshipsFile.Relationships.push_back( Relationship( std::wstring( L"rId3"), OpenXmlRelationshipTypes::ExtendedProperties, L"docProps/app.xml") );
|
||||
}
|
||||
|
||||
|
||||
@ -195,14 +197,18 @@ namespace DocFileFormat
|
||||
delete storageOut;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
int OpenXmlPackage::RegisterDocument()
|
||||
void OpenXmlPackage::RegisterDocPr()
|
||||
{
|
||||
return AddPart( L"word", L"document.xml", WordprocessingMLContentTypes::MainDocument, L"");
|
||||
AddPart( L"docProps", L"app.xml", DocPrContentTypes::App, L"");
|
||||
AddPart( L"docProps", L"core.xml", DocPrContentTypes::Core, L"");
|
||||
}
|
||||
int OpenXmlPackage::RegisterDocumentMacros()
|
||||
void OpenXmlPackage::RegisterDocument()
|
||||
{
|
||||
return AddPart( L"word", L"document.xml", WordprocessingMLContentTypes::MainDocumentMacro, L"");
|
||||
AddPart( L"word", L"document.xml", WordprocessingMLContentTypes::MainDocument, L"");
|
||||
}
|
||||
void OpenXmlPackage::RegisterDocumentMacros()
|
||||
{
|
||||
AddPart( L"word", L"document.xml", WordprocessingMLContentTypes::MainDocumentMacro, L"");
|
||||
}
|
||||
int OpenXmlPackage::RegisterVbaProject()
|
||||
{
|
||||
|
||||
@ -165,8 +165,9 @@ namespace DocFileFormat
|
||||
HRESULT SaveOLEObject ( const std::wstring& fileName, const OleObjectFileStructure& oleObjectFileStructure );
|
||||
HRESULT SaveEmbeddedObject ( const std::wstring& fileName, const std::string& data );
|
||||
|
||||
int RegisterDocument();
|
||||
int RegisterDocumentMacros();
|
||||
void RegisterDocPr();
|
||||
void RegisterDocument();
|
||||
void RegisterDocumentMacros();
|
||||
int RegisterFontTable();
|
||||
int RegisterNumbering();
|
||||
int RegisterSettings();
|
||||
|
||||
@ -500,6 +500,7 @@ namespace DocFileFormat
|
||||
{
|
||||
case Global::msoblipEMF:
|
||||
case Global::msoblipWMF:
|
||||
case Global::msoblipPICT:
|
||||
{
|
||||
MetafilePictBlip* metaBlip = static_cast<MetafilePictBlip*>(oBlipEntry->Blip);
|
||||
if (metaBlip)
|
||||
@ -567,6 +568,9 @@ namespace DocFileFormat
|
||||
case Global::msoblipWMF:
|
||||
return std::wstring(L".wmf");
|
||||
|
||||
case Global::msoblipPICT:
|
||||
return std::wstring(L".pcz");
|
||||
|
||||
default:
|
||||
return std::wstring(L".png");
|
||||
}
|
||||
@ -601,6 +605,9 @@ namespace DocFileFormat
|
||||
case Global::msoblipWMF:
|
||||
return std::wstring(OpenXmlContentTypes::Wmf);
|
||||
|
||||
case Global::msoblipPICT:
|
||||
return std::wstring(OpenXmlContentTypes::Pcz);
|
||||
|
||||
case Global::msoblipDIB:
|
||||
return std::wstring(OpenXmlContentTypes::Bmp);
|
||||
|
||||
|
||||
@ -1287,6 +1287,7 @@ namespace DocFileFormat
|
||||
{
|
||||
case Global::msoblipEMF:
|
||||
case Global::msoblipWMF:
|
||||
case Global::msoblipPICT:
|
||||
{
|
||||
//it's a meta image
|
||||
MetafilePictBlip* metaBlip = static_cast<MetafilePictBlip*>(RecordFactory::ReadRecord(&reader, 0));
|
||||
@ -1373,6 +1374,9 @@ namespace DocFileFormat
|
||||
case Global::msoblipWMF:
|
||||
return std::wstring( L".wmf" );
|
||||
|
||||
case Global::msoblipPICT:
|
||||
return std::wstring( L".pcz" );
|
||||
|
||||
default:
|
||||
return std::wstring( L".png" );
|
||||
}
|
||||
|
||||
@ -35,6 +35,10 @@
|
||||
#include "../../DesktopEditor/raster/BgraFrame.h"
|
||||
#include "../../DesktopEditor/common/Directory.h"
|
||||
|
||||
#include "../../Common/DocxFormat/Source/DocxFormat/App.h"
|
||||
#include "../../Common/DocxFormat/Source/DocxFormat/Core.h"
|
||||
#include "../../Common/DocxFormat/Source/DocxFormat/ContentTypes.h"
|
||||
|
||||
namespace ImageHelper
|
||||
{
|
||||
struct __BITMAPINFOHEADER
|
||||
@ -211,6 +215,37 @@ namespace DocFileFormat
|
||||
{
|
||||
RegisterDocument();
|
||||
}
|
||||
OOX::CContentTypes oContentTypes;
|
||||
OOX::CPath pathDocProps = m_strOutputPath + FILE_SEPARATOR_STR + _T("docProps");
|
||||
NSDirectory::CreateDirectory(pathDocProps.GetPath());
|
||||
|
||||
OOX::CPath DocProps = std::wstring(_T("docProps"));
|
||||
|
||||
OOX::CApp* pApp = new OOX::CApp(NULL);
|
||||
if (pApp)
|
||||
{
|
||||
pApp->SetApplication(L"ONLYOFFICE");
|
||||
#if defined(INTVER)
|
||||
pApp->SetAppVersion(VALUE2STR(INTVER));
|
||||
#endif
|
||||
pApp->SetDocSecurity(0);
|
||||
pApp->SetScaleCrop(false);
|
||||
pApp->SetLinksUpToDate(false);
|
||||
pApp->SetSharedDoc(false);
|
||||
pApp->SetHyperlinksChanged(false);
|
||||
|
||||
pApp->write(pathDocProps + FILE_SEPARATOR_STR + _T("app.xml"), DocProps, oContentTypes);
|
||||
delete pApp;
|
||||
}
|
||||
OOX::CCore* pCore = new OOX::CCore(NULL);
|
||||
if (pCore)
|
||||
{
|
||||
pCore->SetCreator(_T(""));
|
||||
pCore->SetLastModifiedBy(_T(""));
|
||||
pCore->write(pathDocProps + FILE_SEPARATOR_STR + _T("core.xml"), DocProps, oContentTypes);
|
||||
delete pCore;
|
||||
}
|
||||
RegisterDocPr();
|
||||
|
||||
WritePackage();
|
||||
|
||||
|
||||
@ -21,8 +21,6 @@ include($$PWD/../../../Common/3dParty/boost/boost.pri)
|
||||
|
||||
DEFINES += UNICODE \
|
||||
_UNICODE \
|
||||
_USE_XMLLITE_READER_ \
|
||||
USE_LITE_READER \
|
||||
_USE_LIBXML2_READER_ \
|
||||
LIBXML_READER_ENABLED \
|
||||
DONT_WRITE_EMBEDDED_FONTS \
|
||||
|
||||
@ -52,6 +52,7 @@
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
DisableSpecificWarnings="4005;4311;4312"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
|
||||
@ -318,20 +318,29 @@ public:
|
||||
docRGB Color;
|
||||
CThemeColor ThemeColor;
|
||||
|
||||
bool bValue;
|
||||
bool bColor;
|
||||
bool bThemeColor;
|
||||
Shd()
|
||||
{
|
||||
Value = shd_Nil;
|
||||
bValue = false;
|
||||
bColor = false;
|
||||
bThemeColor = false;
|
||||
}
|
||||
std::wstring ToString()
|
||||
{
|
||||
std::wstring sShd;
|
||||
if(bColor || (bThemeColor && ThemeColor.IsNoEmpty()))
|
||||
if(bValue || bColor || (bThemeColor && ThemeColor.IsNoEmpty()))
|
||||
{
|
||||
sShd += L"<w:shd w:val=\"clear\" w:color=\"auto\"";
|
||||
sShd += L"<w:shd";
|
||||
if(bValue)
|
||||
{
|
||||
if(shd_Nil == Value)
|
||||
sShd += L" w:val=\"nil\"";
|
||||
else
|
||||
sShd += L" w:val=\"clear\"";
|
||||
}
|
||||
sShd += L" w:color=\"auto\"";
|
||||
if(bColor)
|
||||
sShd += L" w:fill=\"" + Color.ToString() + L"\"";
|
||||
if(bThemeColor && ThemeColor.IsNoEmpty())
|
||||
|
||||
@ -266,7 +266,10 @@ private:
|
||||
Shd* pShd = static_cast<Shd*>(poResult);
|
||||
switch(type)
|
||||
{
|
||||
case c_oSerShdType::Value: pShd->Value = m_oBufferedStream.GetUChar();break;
|
||||
case c_oSerShdType::Value:
|
||||
pShd->bValue = true;
|
||||
pShd->Value = m_oBufferedStream.GetUChar();
|
||||
break;
|
||||
case c_oSerShdType::Color:
|
||||
pShd->bColor = true;
|
||||
pShd->Color = ReadColor();
|
||||
@ -451,11 +454,8 @@ public:
|
||||
{
|
||||
Shd oShd;
|
||||
oBinary_CommonReader2.ReadShdOut(length, &oShd);
|
||||
if(shd_Nil != oShd.Value)
|
||||
{
|
||||
orPr->bShd = true;
|
||||
orPr->Shd = oShd.ToString();
|
||||
}
|
||||
orPr->bShd = true;
|
||||
orPr->Shd = oShd.ToString();
|
||||
break;
|
||||
}
|
||||
case c_oSerProp_rPrType::RStyle:
|
||||
@ -801,15 +801,7 @@ public:
|
||||
{
|
||||
Shd oShd;
|
||||
oBinary_CommonReader2.ReadShdOut(length, &oShd);
|
||||
if(shd_Nil != oShd.Value)
|
||||
{
|
||||
pCStringWriter->WriteString(oShd.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
std::wstring sShd(L"<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"auto\"/>");
|
||||
pCStringWriter->WriteString(sShd);
|
||||
}
|
||||
pCStringWriter->WriteString(oShd.ToString());
|
||||
break;
|
||||
}
|
||||
case c_oSerProp_pPrType::WidowControl:
|
||||
@ -1782,11 +1774,8 @@ public:
|
||||
{
|
||||
Shd oShd;
|
||||
oBinary_CommonReader2.ReadShdOut(length, &oShd);
|
||||
if(shd_Nil != oShd.Value)
|
||||
{
|
||||
pWiterTblPr->Shd = oShd.ToString();
|
||||
m_sCurTableShd = pWiterTblPr->Shd;
|
||||
}
|
||||
pWiterTblPr->Shd = oShd.ToString();
|
||||
m_sCurTableShd = pWiterTblPr->Shd;
|
||||
}
|
||||
else if( c_oSerProp_tblPrType::tblpPr == type )
|
||||
{
|
||||
@ -2244,10 +2233,7 @@ public:
|
||||
bCellShd = true;
|
||||
Shd oShd;
|
||||
oBinary_CommonReader2.ReadShdOut(length, &oShd);
|
||||
if(shd_Nil != oShd.Value)
|
||||
{
|
||||
pCStringWriter->WriteString(oShd.ToString());
|
||||
}
|
||||
pCStringWriter->WriteString(oShd.ToString());
|
||||
}
|
||||
else if( c_oSerProp_cellPrType::TableCellBorders == type )
|
||||
{
|
||||
@ -7449,6 +7435,8 @@ public:
|
||||
{
|
||||
PPTX::Logic::CNvPr pNonVisualDrawingProps(L"wp");
|
||||
res = Read1(length, &Binary_DocumentTableReader::ReadDocPr, this, &pNonVisualDrawingProps);
|
||||
|
||||
pNonVisualDrawingProps.id = pDrawingProperty->m_nDocPr;
|
||||
pDrawingProperty->sDocPr = pNonVisualDrawingProps.toXML2(L"wp:docPr");
|
||||
}
|
||||
else
|
||||
|
||||
@ -416,7 +416,7 @@ namespace MathEquation
|
||||
|
||||
virtual void BeginEquation()
|
||||
{
|
||||
int nCurPos = WriteItemStart(BinDocxRW::c_oSerParType::OMath);
|
||||
int nCurPos = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::OMath);
|
||||
m_aEquationStack.push(nCurPos);
|
||||
}
|
||||
virtual void EndEquation()
|
||||
@ -618,7 +618,7 @@ namespace MathEquation
|
||||
nRows = m_aRowsCounter.top();
|
||||
m_aRowsCounter.pop();
|
||||
}
|
||||
int nPos = m_oStream.GetPosition();
|
||||
int nPos = 0;
|
||||
if (!m_aRowsPosCounter.empty())
|
||||
{
|
||||
nPos = m_aRowsPosCounter.top();
|
||||
|
||||
@ -87,10 +87,14 @@ namespace BinDocxRW
|
||||
|
||||
BinaryDocumentTableWriter oBinaryDocumentTableWriter(m_oParamsWriter, oParamsDocumentWriter, m_mapIgnoreComments, NULL);
|
||||
|
||||
oBinaryDocumentTableWriter.prepareOfficeDrawingConverter(m_pOfficeDrawingConverter, oParamsDocumentWriter.m_pRels, pHdrFtr->m_arrShapeTypes);
|
||||
|
||||
smart_ptr<OOX::IFileContainer> oldRels = m_pOfficeDrawingConverter->GetRels();
|
||||
m_pOfficeDrawingConverter->SetRels(oParamsDocumentWriter.m_pRels);
|
||||
m_pOfficeDrawingConverter->ClearShapeTypes();
|
||||
|
||||
nCurPos = m_oBcw.WriteItemStart(c_oSerHdrFtrTypes::HdrFtr_Content);
|
||||
oBinaryDocumentTableWriter.WriteDocumentContent(pHdrFtr->m_arrItems);
|
||||
m_oBcw.WriteItemEnd(nCurPos);
|
||||
|
||||
m_pOfficeDrawingConverter->SetRels(oldRels);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3016,25 +3016,13 @@ namespace BinDocxRW
|
||||
bool m_bWriteSectPr;//Записывать ли свойства верхнего уровня в данном экземпляре BinaryOtherTableWriter
|
||||
//---------------------------------
|
||||
BinaryDocumentTableWriter(ParamsWriter& oParamsWriter, ParamsDocumentWriter& oParamsDocumentWriter, std::map<int, bool>* mapIgnoreComments, BinaryHeaderFooterTableWriter* oBinaryHeaderFooterTableWriter):
|
||||
m_oParamsWriter(oParamsWriter), m_oParamsDocumentWriter(oParamsDocumentWriter),m_oBcw(oParamsWriter),bpPrs(oParamsWriter, oBinaryHeaderFooterTableWriter),brPrs(oParamsWriter),btblPrs(oParamsWriter),m_oSettings(oParamsWriter.m_oSettings),m_pOfficeDrawingConverter(oParamsWriter.m_pOfficeDrawingConverter),m_mapIgnoreComments(mapIgnoreComments)
|
||||
m_oParamsWriter(oParamsWriter), m_oParamsDocumentWriter(oParamsDocumentWriter), m_oBcw(oParamsWriter),bpPrs(oParamsWriter, oBinaryHeaderFooterTableWriter),brPrs(oParamsWriter),btblPrs(oParamsWriter),m_oSettings(oParamsWriter.m_oSettings),m_pOfficeDrawingConverter(oParamsWriter.m_pOfficeDrawingConverter),m_mapIgnoreComments(mapIgnoreComments)
|
||||
{
|
||||
pBackground = NULL;
|
||||
pSectPr = NULL;
|
||||
poDocument = NULL;
|
||||
m_bWriteSectPr = false;
|
||||
}
|
||||
void prepareOfficeDrawingConverter(NSBinPptxRW::CDrawingConverter* pOfficeDrawingConverter, OOX::IFileContainer *rels, std::vector<std::wstring>& aShapeTypes)
|
||||
{
|
||||
smart_ptr<OOX::IFileContainer> oldRels = pOfficeDrawingConverter->GetRels();
|
||||
pOfficeDrawingConverter->SetRels(rels);
|
||||
|
||||
for(size_t i = 0, length = aShapeTypes.size(); i < length; ++i)
|
||||
{
|
||||
std::wstring& sShapeType = aShapeTypes[i];
|
||||
pOfficeDrawingConverter->AddShapeType(sShapeType);
|
||||
}
|
||||
pOfficeDrawingConverter->SetRels(oldRels);
|
||||
}
|
||||
void WriteVbaProject(OOX::VbaProject& oVbaProject)
|
||||
{
|
||||
m_oBcw.m_oStream.StartRecord(0);
|
||||
@ -3131,23 +3119,6 @@ namespace BinDocxRW
|
||||
m_oBcw.WriteItemEnd(nCurPos);
|
||||
}
|
||||
}
|
||||
//Write JsaProject
|
||||
if (NULL != poDocument)
|
||||
{
|
||||
smart_ptr<OOX::File> pFile = poDocument->Get(OOX::FileTypes::JsaProject);
|
||||
if (pFile.IsInit() && OOX::FileTypes::JsaProject == pFile->type())
|
||||
{
|
||||
OOX::JsaProject& jsaProject = pFile.as<OOX::JsaProject>();
|
||||
BYTE* pData = NULL;
|
||||
DWORD nBytesCount;
|
||||
if(NSFile::CFileBinary::ReadAllBytes(jsaProject.filename().GetPath(), &pData, nBytesCount))
|
||||
{
|
||||
nCurPos = m_oBcw.WriteItemStart(c_oSerParType::JsaProject);
|
||||
m_oBcw.m_oStream.WriteBYTEArray(pData, nBytesCount);
|
||||
m_oBcw.WriteItemEnd(nCurPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
void WriteBackground (OOX::Logic::CBackground* pBackground)
|
||||
{
|
||||
@ -7741,7 +7712,7 @@ namespace BinDocxRW
|
||||
m_oParamsWriter.m_pCurRels = oParamsDocumentWriter.m_pRels;
|
||||
|
||||
int nStart = m_oBcw.WriteItemWithLengthStart();
|
||||
WriteNotes(oFootnotes.m_arrFootnote, oParamsDocumentWriter, oFootnotes.m_arrShapeTypes);
|
||||
WriteNotes(oFootnotes.m_arrFootnote, oParamsDocumentWriter);
|
||||
m_oBcw.WriteItemWithLengthEnd(nStart);
|
||||
}
|
||||
void WriteEndnotes(OOX::CEndnotes& oEndnotes)
|
||||
@ -7750,20 +7721,27 @@ namespace BinDocxRW
|
||||
m_oParamsWriter.m_pCurRels = oParamsDocumentWriter.m_pRels;
|
||||
|
||||
int nStart = m_oBcw.WriteItemWithLengthStart();
|
||||
WriteNotes(oEndnotes.m_arrEndnote, oParamsDocumentWriter, oEndnotes.m_arrShapeTypes);
|
||||
WriteNotes(oEndnotes.m_arrEndnote, oParamsDocumentWriter);
|
||||
m_oBcw.WriteItemWithLengthEnd(nStart);
|
||||
}
|
||||
void WriteNotes(const std::vector<OOX::CFtnEdn*>& arrNotes, ParamsDocumentWriter& oParamsDocumentWriter, std::vector<std::wstring>& arrShapeTypes)
|
||||
void WriteNotes(const std::vector<OOX::CFtnEdn*>& arrNotes, ParamsDocumentWriter& oParamsDocumentWriter)
|
||||
{
|
||||
BinaryDocumentTableWriter oBinaryDocumentTableWriter(m_oParamsWriter, oParamsDocumentWriter, &m_oParamsWriter.m_mapIgnoreComments, NULL);
|
||||
|
||||
smart_ptr<OOX::IFileContainer> oldRels = m_pOfficeDrawingConverter->GetRels();
|
||||
m_pOfficeDrawingConverter->SetRels(oParamsDocumentWriter.m_pRels);
|
||||
m_pOfficeDrawingConverter->ClearShapeTypes();
|
||||
|
||||
int nCurPos = 0;
|
||||
for(size_t i = 0 ; i < arrNotes.size(); ++i)
|
||||
{
|
||||
nCurPos = m_oBcw.WriteItemStart(c_oSerNotes::Note);
|
||||
WriteNote(*arrNotes[i], oParamsDocumentWriter, arrShapeTypes);
|
||||
WriteNote(*arrNotes[i], oBinaryDocumentTableWriter);
|
||||
m_oBcw.WriteItemEnd(nCurPos);
|
||||
}
|
||||
m_pOfficeDrawingConverter->SetRels(oldRels);
|
||||
}
|
||||
void WriteNote(const OOX::CFtnEdn& oFtnEdn, ParamsDocumentWriter& oParamsDocumentWriter, std::vector<std::wstring>& arrShapeTypes)
|
||||
void WriteNote(const OOX::CFtnEdn& oFtnEdn, BinaryDocumentTableWriter & oBinaryDocumentTableWriter)
|
||||
{
|
||||
int nCurPos = 0;
|
||||
if(oFtnEdn.m_oType.IsInit())
|
||||
@ -7778,10 +7756,6 @@ namespace BinDocxRW
|
||||
m_oBcw.m_oStream.WriteLONG(oFtnEdn.m_oId->GetValue());
|
||||
m_oBcw.WriteItemEnd(nCurPos);
|
||||
}
|
||||
|
||||
BinaryDocumentTableWriter oBinaryDocumentTableWriter(m_oParamsWriter, oParamsDocumentWriter, &m_oParamsWriter.m_mapIgnoreComments, NULL);
|
||||
|
||||
oBinaryDocumentTableWriter.prepareOfficeDrawingConverter(m_pOfficeDrawingConverter, oParamsDocumentWriter.m_pRels, arrShapeTypes);
|
||||
|
||||
nCurPos = m_oBcw.WriteItemStart(c_oSerNotes::NoteContent);
|
||||
oBinaryDocumentTableWriter.WriteDocumentContent(oFtnEdn.m_arrItems);
|
||||
@ -7864,101 +7838,93 @@ namespace BinDocxRW
|
||||
|
||||
OOX::CDocx oDocx = OOX::CDocx(OOX::CPath(sDir));
|
||||
|
||||
m_oParamsWriter.m_poTheme = oDocx.GetTheme();
|
||||
m_oParamsWriter.m_oSettings = oDocx.GetSettings();
|
||||
m_oParamsWriter.m_poTheme = oDocx.m_pTheme;
|
||||
m_oParamsWriter.m_oSettings = oDocx.m_pSettings;
|
||||
|
||||
*oBufferedStream.m_pTheme = smart_ptr<PPTX::Theme>(oDocx.GetTheme());
|
||||
*oBufferedStream.m_pTheme = smart_ptr<PPTX::Theme>(oDocx.m_pTheme);
|
||||
oBufferedStream.m_pTheme->AddRef();
|
||||
|
||||
OOX::CFontTable* pFontTable = oDocx.GetFontTable();
|
||||
|
||||
if(NULL != pFontTable)
|
||||
m_oParamsWriter.m_pFontProcessor->setFontTable(pFontTable);
|
||||
if(NULL != oDocx.m_pFontTable)
|
||||
m_oParamsWriter.m_pFontProcessor->setFontTable(oDocx.m_pFontTable);
|
||||
|
||||
//ищем первый SectPr и расставляем pageBreak
|
||||
OOX::CDocument* poDocument = oDocx.GetDocument();
|
||||
|
||||
if (poDocument == NULL) return;
|
||||
OOX::Logic::CSectionProperty* pFirstSectPr = poDocument->m_oSectPr.GetPointer();
|
||||
if (oDocx.m_pDocument == NULL) return;
|
||||
OOX::Logic::CSectionProperty* pFirstSectPr = oDocx.m_pDocument->m_oSectPr.GetPointer();
|
||||
|
||||
this->WriteMainTableStart();
|
||||
|
||||
int nCurPos = 0;
|
||||
|
||||
//Write Settings
|
||||
OOX::CSettings* pSettings = oDocx.GetSettings();
|
||||
if(NULL != pSettings)
|
||||
if(NULL != oDocx.m_pSettings)
|
||||
{
|
||||
BinDocxRW::BinarySettingsTableWriter oBinarySettingsTableWriter(m_oParamsWriter);
|
||||
int nCurPos = this->WriteTableStart(BinDocxRW::c_oSerTableTypes::Settings);
|
||||
oBinarySettingsTableWriter.Write(*pSettings);
|
||||
oBinarySettingsTableWriter.Write(*oDocx.m_pSettings);
|
||||
this->WriteTableEnd(nCurPos);
|
||||
}
|
||||
|
||||
//Write Comments
|
||||
OOX::CComments* pComments = oDocx.GetComments();
|
||||
OOX::CCommentsExt* pCommentsExt = oDocx.GetCommentsExt();
|
||||
OOX::CPeople* pPeople = oDocx.GetPeople();
|
||||
if(NULL != pComments)
|
||||
if(NULL != oDocx.m_pComments)
|
||||
{
|
||||
BinDocxRW::BinaryCommentsTableWriter oBinaryCommentsTableWriter(m_oParamsWriter);
|
||||
int nCurPos = this->WriteTableStart(BinDocxRW::c_oSerTableTypes::Comments);
|
||||
oBinaryCommentsTableWriter.Write(*pComments, pCommentsExt, pPeople, m_oParamsWriter.m_mapIgnoreComments);
|
||||
oBinaryCommentsTableWriter.Write(*oDocx.m_pComments, oDocx.m_pCommentsExt, oDocx.m_pPeople, m_oParamsWriter.m_mapIgnoreComments);
|
||||
this->WriteTableEnd(nCurPos);
|
||||
}
|
||||
|
||||
//Write StyleTable
|
||||
OOX::CStyles* pStyles = oDocx.GetStyles();
|
||||
BinDocxRW::BinaryStyleTableWriter oBinaryStyleTableWriter(m_oParamsWriter);
|
||||
if(NULL != pStyles)
|
||||
if(NULL != oDocx.m_pStyles)
|
||||
{
|
||||
int nCurPos = this->WriteTableStart(BinDocxRW::c_oSerTableTypes::Style);
|
||||
oBinaryStyleTableWriter.Write(*pStyles);
|
||||
oBinaryStyleTableWriter.Write(*oDocx.m_pStyles);
|
||||
this->WriteTableEnd(nCurPos);
|
||||
}
|
||||
//Write Numbering
|
||||
OOX::CNumbering* pNumbering = oDocx.GetNumbering();
|
||||
BinDocxRW::BinaryNumberingTableWriter oBinaryNumberingTableWriter(m_oParamsWriter);
|
||||
if(NULL != pNumbering)
|
||||
if(NULL != oDocx.m_pNumbering)
|
||||
{
|
||||
nCurPos = this->WriteTableStart(BinDocxRW::c_oSerTableTypes::Numbering);
|
||||
oBinaryNumberingTableWriter.Write(*pNumbering);
|
||||
oBinaryNumberingTableWriter.Write(*oDocx.m_pNumbering);
|
||||
this->WriteTableEnd(nCurPos);
|
||||
}
|
||||
|
||||
BinDocxRW::BinaryNotesTableWriter oBinaryNotesWriter(m_oParamsWriter);
|
||||
//Write Footnotes
|
||||
OOX::CFootnotes* pFootnotes = oDocx.GetFootnotes();
|
||||
if(NULL != pFootnotes)
|
||||
if(NULL != oDocx.m_pFootnotes)
|
||||
{
|
||||
nCurPos = this->WriteTableStart(BinDocxRW::c_oSerTableTypes::Footnotes);
|
||||
oBinaryNotesWriter.WriteFootnotes(*pFootnotes);
|
||||
oBinaryNotesWriter.WriteFootnotes(*oDocx.m_pFootnotes);
|
||||
this->WriteTableEnd(nCurPos);
|
||||
}
|
||||
//Write Endnotes
|
||||
OOX::CEndnotes* pEndnotes = oDocx.GetEndnotes();
|
||||
if(NULL != pEndnotes)
|
||||
if(NULL != oDocx.m_pEndnotes)
|
||||
{
|
||||
nCurPos = this->WriteTableStart(BinDocxRW::c_oSerTableTypes::Endnotes);
|
||||
oBinaryNotesWriter.WriteEndnotes(*pEndnotes);
|
||||
oBinaryNotesWriter.WriteEndnotes(*oDocx.m_pEndnotes);
|
||||
this->WriteTableEnd(nCurPos);
|
||||
}
|
||||
|
||||
BinDocxRW::BinaryHeaderFooterTableWriter oBinaryHeaderFooterTableWriter(m_oParamsWriter, poDocument, &m_oParamsWriter.m_mapIgnoreComments);
|
||||
BinDocxRW::BinaryHeaderFooterTableWriter oBinaryHeaderFooterTableWriter(m_oParamsWriter, oDocx.m_pDocument, &m_oParamsWriter.m_mapIgnoreComments);
|
||||
|
||||
//Write DocumentTable
|
||||
ParamsDocumentWriter oParamsDocumentWriter(poDocument);
|
||||
ParamsDocumentWriter oParamsDocumentWriter(oDocx.m_pDocument);
|
||||
m_oParamsWriter.m_pCurRels = oParamsDocumentWriter.m_pRels;
|
||||
|
||||
//DocumentTable всегда пишем последней, чтобы сначала заполнить все вспомогательные структуры, а при заполении документа, вызывать методы типа Style_Add...
|
||||
BinDocxRW::BinaryDocumentTableWriter oBinaryDocumentTableWriter(m_oParamsWriter, oParamsDocumentWriter, &m_oParamsWriter.m_mapIgnoreComments, &oBinaryHeaderFooterTableWriter);
|
||||
oBinaryDocumentTableWriter.prepareOfficeDrawingConverter(m_oParamsWriter.m_pOfficeDrawingConverter, oParamsDocumentWriter.m_pRels, poDocument->m_arrShapeTypes);
|
||||
|
||||
m_oParamsWriter.m_pOfficeDrawingConverter->SetRels(oParamsDocumentWriter.m_pRels);
|
||||
m_oParamsWriter.m_pOfficeDrawingConverter->ClearShapeTypes();
|
||||
|
||||
oBinaryDocumentTableWriter.pSectPr = pFirstSectPr;
|
||||
oBinaryDocumentTableWriter.pBackground = poDocument->m_oBackground.GetPointer();
|
||||
oBinaryDocumentTableWriter.poDocument = poDocument;
|
||||
oBinaryDocumentTableWriter.pBackground = oDocx.m_pDocument->m_oBackground.GetPointer();
|
||||
oBinaryDocumentTableWriter.poDocument = oDocx.m_pDocument;
|
||||
|
||||
oBinaryDocumentTableWriter.m_bWriteSectPr = true;
|
||||
|
||||
//Write Vba
|
||||
if(NULL != oDocx.m_pVbaProject)
|
||||
{
|
||||
@ -7966,9 +7932,22 @@ namespace BinDocxRW
|
||||
oBinaryDocumentTableWriter.WriteVbaProject(*oDocx.m_pVbaProject);
|
||||
this->WriteTableEnd(nCurPos);
|
||||
}
|
||||
//Write JsaProject
|
||||
if (NULL != oDocx.m_pJsaProject)
|
||||
{
|
||||
BYTE* pData = NULL;
|
||||
DWORD nBytesCount;
|
||||
if(NSFile::CFileBinary::ReadAllBytes(oDocx.m_pJsaProject->filename().GetPath(), &pData, nBytesCount))
|
||||
{
|
||||
nCurPos = m_oBcw.WriteItemStart(c_oSerParType::JsaProject);
|
||||
m_oBcw.m_oStream.WriteBYTEArray(pData, nBytesCount);
|
||||
m_oBcw.WriteItemEnd(nCurPos);
|
||||
}
|
||||
}
|
||||
|
||||
// Write content
|
||||
nCurPos = this->WriteTableStart(BinDocxRW::c_oSerTableTypes::Document);
|
||||
oBinaryDocumentTableWriter.Write(poDocument->m_arrItems);
|
||||
oBinaryDocumentTableWriter.Write(oDocx.m_pDocument->m_arrItems);
|
||||
this->WriteTableEnd(nCurPos);
|
||||
|
||||
nCurPos = this->WriteTableStart(BinDocxRW::c_oSerTableTypes::HdrFtr);
|
||||
|
||||
@ -146,7 +146,8 @@ namespace BinXlsxRW{
|
||||
void ChartWriter::toXlsx(OOX::Spreadsheet::CXlsx& oXlsx)
|
||||
{
|
||||
std::vector<std::wstring> aSharedStrings;
|
||||
//Sheet
|
||||
|
||||
oXlsx.CreateWorkbook();
|
||||
oXlsx.m_pWorkbook->m_oSheets.Init();
|
||||
|
||||
int nSheetId = 1;
|
||||
|
||||
@ -298,8 +298,10 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const std::wstring& sSrcFileName,
|
||||
OOX::CApp* pApp = new OOX::CApp(NULL);
|
||||
if (pApp)
|
||||
{
|
||||
pApp->SetApplication(_T("OnlyOffice"));
|
||||
pApp->SetAppVersion(_T("5.0"));
|
||||
pApp->SetApplication(L"ONLYOFFICE");
|
||||
#if defined(INTVER)
|
||||
pApp->SetAppVersion(VALUE2STR(INTVER));
|
||||
#endif
|
||||
pApp->SetDocSecurity(0);
|
||||
pApp->SetScaleCrop(false);
|
||||
pApp->SetLinksUpToDate(false);
|
||||
|
||||
@ -85,7 +85,7 @@ namespace BinXlsxRW{
|
||||
sMediaPath = pathMediaDir.GetPath();
|
||||
sEmbedPath = pathEmbedDir.GetPath();
|
||||
}
|
||||
bool CXlsxSerializer::loadFromFile(const std::wstring& sSrcFileName, const std::wstring& sDstPath, const std::wstring& sXMLOptions, const std::wstring& sMediaDir, const std::wstring& sEmbedDir)
|
||||
int CXlsxSerializer::loadFromFile(const std::wstring& sSrcFileName, const std::wstring& sDstPath, const std::wstring& sXMLOptions, const std::wstring& sMediaDir, const std::wstring& sEmbedDir)
|
||||
{
|
||||
std::wstring strFileInDir = NSSystemPath::GetDirectoryName(sSrcFileName);
|
||||
|
||||
@ -97,11 +97,10 @@ namespace BinXlsxRW{
|
||||
oDrawingConverter.SetMediaDstPath(sMediaDir);
|
||||
oDrawingConverter.SetEmbedDstPath(sEmbedDir);
|
||||
|
||||
BinXlsxRW::BinaryFileReader oBinaryFileReader;
|
||||
oBinaryFileReader.ReadFile(sSrcFileName, sDstPath, &oDrawingConverter, sXMLOptions);
|
||||
return true;
|
||||
BinXlsxRW::BinaryFileReader oBinaryFileReader;
|
||||
return oBinaryFileReader.ReadFile(sSrcFileName, sDstPath, &oDrawingConverter, sXMLOptions);
|
||||
}
|
||||
bool CXlsxSerializer::saveToFile(const std::wstring& sDstFileName, const std::wstring& sSrcPath, const std::wstring& sXMLOptions)
|
||||
int CXlsxSerializer::saveToFile(const std::wstring& sDstFileName, const std::wstring& sSrcPath, const std::wstring& sXMLOptions)
|
||||
{
|
||||
COfficeFontPicker* pFontPicker = new COfficeFontPicker();
|
||||
pFontPicker->Init(m_sFontDir);
|
||||
@ -137,10 +136,10 @@ namespace BinXlsxRW{
|
||||
oOfficeDrawingConverter.SetFontPicker(pFontPicker);
|
||||
|
||||
BinXlsxRW::BinaryFileWriter oBinaryFileWriter(fp);
|
||||
oBinaryFileWriter.Open(sSrcPath, sDstFileName, pEmbeddedFontsManager, &oOfficeDrawingConverter, sXMLOptions, m_bIsNoBase64);
|
||||
int result = oBinaryFileWriter.Open(sSrcPath, sDstFileName, pEmbeddedFontsManager, &oOfficeDrawingConverter, sXMLOptions, m_bIsNoBase64);
|
||||
|
||||
RELEASEOBJECT(pFontPicker);
|
||||
return true;
|
||||
return result;
|
||||
}
|
||||
bool CXlsxSerializer::saveChart(NSBinPptxRW::CBinaryFileReader* pReader, long lLength, const std::wstring& sFilepath, const long& lChartNumber)
|
||||
{
|
||||
|
||||
@ -62,8 +62,8 @@ namespace BinXlsxRW {
|
||||
|
||||
static void CreateXlsxFolders (const std::wstring& sXmlOptions, const std::wstring& sDstPath, std::wstring& sMediaPath, std::wstring& sEmbedPath);
|
||||
|
||||
bool loadFromFile (const std::wstring& sSrcFileName, const std::wstring& sDstPath, const std::wstring& sXMLOptions, const std::wstring& sMediaDir, const std::wstring& sEmbedPath);
|
||||
bool saveToFile (const std::wstring& sSrcFileName, const std::wstring& sDstPath, const std::wstring& sXMLOptions);
|
||||
int loadFromFile (const std::wstring& sSrcFileName, const std::wstring& sDstPath, const std::wstring& sXMLOptions, const std::wstring& sMediaDir, const std::wstring& sEmbedPath);
|
||||
int saveToFile (const std::wstring& sSrcFileName, const std::wstring& sDstPath, const std::wstring& sXMLOptions);
|
||||
|
||||
bool saveChart (NSBinPptxRW::CBinaryFileReader* pReader, long lLength, const std::wstring& sFilename, const long& lChartNumber);
|
||||
|
||||
|
||||
@ -16,8 +16,6 @@ include($$PWD/../../Common/3dParty/boost/boost.pri)
|
||||
|
||||
DEFINES += UNICODE \
|
||||
_UNICODE \
|
||||
_USE_XMLLITE_READER_ \
|
||||
USE_LITE_READER \
|
||||
USE_AVSOFFICESTUDIO_XMLUTILS \
|
||||
SOLUTION_ASCOFFICEDOCXFILE2 \
|
||||
#DISABLE_FILE_DOWNLOADER \
|
||||
|
||||
@ -22,8 +22,6 @@ include($$PWD/../../Common/3dParty/boost/boost.pri)
|
||||
DEFINES += UNICODE \
|
||||
_UNICODE \
|
||||
_USE_LIBXML2_READER_ \
|
||||
_USE_XMLLITE_READER_ \
|
||||
USE_LITE_READER \
|
||||
LIBXML_READER_ENABLED \
|
||||
DONT_WRITE_EMBEDDED_FONTS
|
||||
|
||||
@ -288,6 +286,7 @@ SOURCES += \
|
||||
../src/docx/xlsx_table_state.cpp \
|
||||
../src/docx/xlsx_textcontext.cpp \
|
||||
../src/docx/xlsx_pivots_context.cpp \
|
||||
../src/docx/xlsx_data_validation.cpp \
|
||||
../src/docx/xlsx_utils.cpp \
|
||||
../src/docx/xlsx_xf.cpp
|
||||
}
|
||||
@ -551,6 +550,7 @@ HEADERS += \
|
||||
../src/docx/xlsx_table_position.h \
|
||||
../src/docx/xlsx_table_state.h \
|
||||
../src/docx/xlsx_textcontext.h \
|
||||
../src/docx/xlsx_data_validation.h \
|
||||
../src/docx/xlsx_utils.h \
|
||||
../src/docx/xlsx_xf.h \
|
||||
../include/logging.h \
|
||||
|
||||
@ -101,3 +101,4 @@
|
||||
#include "../src/docx/xlsx_utils.cpp"
|
||||
#include "../src/docx/xlsx_xf.cpp"
|
||||
#include "../src/docx/xlsx_pivots_context.cpp"
|
||||
#include "../src/docx/xlsx_data_validation.cpp""
|
||||
|
||||
@ -777,7 +777,8 @@ void docx_conversion_context::process_section(std::wostream & strm, odf_reader::
|
||||
{
|
||||
double page_width = 0;
|
||||
const odf_reader::page_layout_instance * pp = root()->odf_context().pageLayoutContainer().page_layout_first();
|
||||
if (pp)
|
||||
|
||||
if ((pp) && (pp->properties()))
|
||||
{
|
||||
odf_reader::style_page_layout_properties_attlist & attr_page = pp->properties()->attlist_;
|
||||
if (attr_page.fo_page_width_)
|
||||
@ -1169,7 +1170,7 @@ void docx_conversion_context::docx_convert_delayed()
|
||||
{
|
||||
odf_reader::office_element * elm = delayed_elements_.front();
|
||||
elm->docx_convert(*this);
|
||||
delayed_elements_.pop_front();
|
||||
delayed_elements_.erase(delayed_elements_.begin(), delayed_elements_.begin() + 1);
|
||||
}
|
||||
delayed_converting_=false;
|
||||
}
|
||||
|
||||
@ -763,7 +763,7 @@ private:
|
||||
std::wstring automatic_parent_style_;
|
||||
std::wstring current_master_page_name_;
|
||||
std::wstring text_list_style_name_;
|
||||
std::list<std::wstring> list_style_stack_;
|
||||
std::vector<std::wstring> list_style_stack_;
|
||||
bool first_element_list_item_;
|
||||
|
||||
bool page_break_after_;
|
||||
@ -781,9 +781,9 @@ private:
|
||||
|
||||
int new_list_style_number_; // счетчик для нумерации имен созданных в процессе конвертации стилей
|
||||
NoteType process_note_;
|
||||
std::list<odf_reader::office_element *> delayed_elements_;
|
||||
std::vector<odf_reader::office_element*> delayed_elements_;
|
||||
|
||||
std::list< const odf_reader::style_text_properties * > text_properties_stack_;
|
||||
std::vector< const odf_reader::style_text_properties*> text_properties_stack_;
|
||||
std::map<std::wstring, text_tracked_context::_state> map_current_changes_;
|
||||
boost::unordered_map<std::wstring, std::wstring> list_style_renames_;// цепочки переименований нумераций
|
||||
};
|
||||
|
||||
@ -73,7 +73,7 @@ public:
|
||||
private:
|
||||
docx_conversion_context & context_;
|
||||
std::wstring table_style_;
|
||||
std::list<std::wstring> table_row_style_stack_;
|
||||
std::vector<std::wstring> table_row_style_stack_;
|
||||
std::wstring default_row_cell_style_name_;
|
||||
int current_table_column_;
|
||||
unsigned int columns_spanned_num_;
|
||||
@ -188,7 +188,7 @@ public:
|
||||
|
||||
private:
|
||||
docx_conversion_context & context_;
|
||||
std::list<docx_table_state> table_states_;
|
||||
std::vector<docx_table_state> table_states_;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -40,6 +40,7 @@
|
||||
#include "../../DesktopEditor/common/File.h"
|
||||
#include "../../DesktopEditor/raster/Metafile/MetaFile.h"
|
||||
#include "../../DesktopEditor/raster/ImageFileFormatChecker.h"
|
||||
#include "../../Common/DocxFormat/Source/Base/Base.h"
|
||||
|
||||
namespace cpdoccore {
|
||||
namespace oox {
|
||||
@ -284,8 +285,8 @@ void core_file::write(const std::wstring & RootPath)
|
||||
L"xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcmitype=\"http://purl.org/dc/dcmitype/\" "
|
||||
L"xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" >";
|
||||
|
||||
//resStream << L"<dc:creator>ONLYOFFICE Online Editor</dc:creator>";
|
||||
//resStream << L"<cp:lastModifiedBy>ONLYOFFICE Online Editor</cp:lastModifiedBy>";
|
||||
//resStream << L"<dc:creator>ONLYOFFICE</dc:creator>";
|
||||
//resStream << L"<cp:lastModifiedBy>ONLYOFFICE</cp:lastModifiedBy>";
|
||||
resStream << L"<cp:revision>1</cp:revision>";
|
||||
resStream << L"</cp:coreProperties>";
|
||||
|
||||
@ -300,8 +301,12 @@ void app_file::write(const std::wstring & RootPath)
|
||||
resStream << L"<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" "
|
||||
L"xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\" >";
|
||||
|
||||
resStream << L"<Application>OnlyOffice</Application>";
|
||||
resStream << L"</Properties>";
|
||||
resStream << L"<Application>ONLYOFFICE";
|
||||
#if defined(INTVER)
|
||||
std::string s = VALUE2STR(INTVER);
|
||||
resStream << L"/" << std::wstring(s.begin(), s.end()) ;
|
||||
#endif
|
||||
resStream << L"</Application></Properties>";
|
||||
|
||||
simple_element elm(L"app.xml", resStream.str());
|
||||
elm.write(RootPath);
|
||||
|
||||
@ -82,7 +82,7 @@ private:
|
||||
|
||||
std::wstring table_style_;
|
||||
|
||||
std::list<std::wstring> table_row_style_stack_;
|
||||
std::vector<std::wstring> table_row_style_stack_;
|
||||
|
||||
std::wstring default_row_cell_style_name_;
|
||||
int current_table_column_;
|
||||
@ -214,7 +214,7 @@ public:
|
||||
private:
|
||||
std::wstringstream output_stream_;
|
||||
pptx_conversion_context & context_;
|
||||
std::list<pptx_table_state> table_states_;
|
||||
std::vector<pptx_table_state> table_states_;
|
||||
};
|
||||
|
||||
void oox_serialize_tcPr(std::wostream & strm, std::vector<const odf_reader::style_instance *> & style_inst, oox::pptx_conversion_context & Context);
|
||||
|
||||
@ -126,13 +126,13 @@ private:
|
||||
|
||||
std::wstring base_style_name_;
|
||||
odf_types::style_family::type base_style_family_;//Presentation Or SpreadSheet
|
||||
/////////////lists////////////
|
||||
std::list<std::wstring> list_style_stack_;
|
||||
//-------------------------------------------------------------------------------
|
||||
std::vector<std::wstring> list_style_stack_;
|
||||
bool first_element_list_item_;
|
||||
// счетчик для нумерации имен созданных в процессе конвертации стилей
|
||||
int new_list_style_number_;
|
||||
// цепочки переименований нумераций
|
||||
boost::unordered_map<std::wstring, std::wstring> list_style_renames_;
|
||||
|
||||
int new_list_style_number_; // счетчик для нумерации имен созданных в процессе конвертации стилей
|
||||
|
||||
boost::unordered_map<std::wstring, std::wstring> list_style_renames_; // цепочки переименований нумераций
|
||||
|
||||
void write_list_styles(std::wostream & strm);
|
||||
//void write_list_properties(std::wostream & strm);
|
||||
|
||||
@ -116,7 +116,7 @@ public:
|
||||
int priority = 1;
|
||||
CP_XML_WRITER(_Wostream)
|
||||
{
|
||||
for (int i = 0 ; i < conditionalFormattings_.size(); i++)
|
||||
for (size_t i = 0 ; i < conditionalFormattings_.size(); i++)
|
||||
{
|
||||
conditionalFormatting & c = conditionalFormattings_[i];
|
||||
|
||||
@ -126,7 +126,7 @@ public:
|
||||
{
|
||||
CP_XML_ATTR(L"sqref", c.ref);
|
||||
|
||||
for (int j = 0 ; j < c.rules.size(); j++)
|
||||
for (size_t j = 0 ; j < c.rules.size(); j++)
|
||||
{
|
||||
if (c.rules[j].type < 1 || c.rules[j].type > 5) continue;
|
||||
|
||||
@ -171,7 +171,7 @@ public:
|
||||
if (c.rules[j].minLength) CP_XML_ATTR(L"minLength", *c.rules[j].minLength);
|
||||
if (c.rules[j].maxLength) CP_XML_ATTR(L"maxLength", *c.rules[j].maxLength);
|
||||
|
||||
for (int k = 0; k < c.rules[j].cfvo.size(); k++)
|
||||
for (size_t k = 0; k < c.rules[j].cfvo.size(); k++)
|
||||
{
|
||||
c.rules[j].cfvo[k].serialize(CP_XML_STREAM());
|
||||
}
|
||||
@ -189,11 +189,11 @@ public:
|
||||
CP_XML_ATTR(L"type", L"colorScale");
|
||||
CP_XML_NODE(L"colorScale")
|
||||
{
|
||||
for (int k = 0; k < c.rules[j].cfvo.size(); k++)
|
||||
for (size_t k = 0; k < c.rules[j].cfvo.size(); k++)
|
||||
{
|
||||
c.rules[j].cfvo[k].serialize(CP_XML_STREAM());
|
||||
}
|
||||
for (int k = 0; k < c.rules[j].color.size(); k++)
|
||||
for (size_t k = 0; k < c.rules[j].color.size(); k++)
|
||||
{
|
||||
CP_XML_NODE(L"color")
|
||||
{
|
||||
@ -209,7 +209,7 @@ public:
|
||||
{
|
||||
if (c.rules[j].showValue) CP_XML_ATTR(L"showValue", *c.rules[j].showValue);
|
||||
|
||||
for (int k = 0; k < c.rules[j].cfvo.size(); k++)
|
||||
for (size_t k = 0; k < c.rules[j].cfvo.size(); k++)
|
||||
{
|
||||
c.rules[j].cfvo[k].serialize(CP_XML_STREAM());
|
||||
}
|
||||
|
||||
212
ASCOfficeOdfFile/src/docx/xlsx_data_validation.cpp
Normal file
212
ASCOfficeOdfFile/src/docx/xlsx_data_validation.cpp
Normal file
@ -0,0 +1,212 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2017
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
|
||||
#include "xlsx_data_validation.h"
|
||||
#include "xlsx_utils.h"
|
||||
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
#include <cpdoccore/xml/simple_xml_writer.h>
|
||||
#include <cpdoccore/CPSharedPtr.h>
|
||||
|
||||
#include "../formulasconvert/formulasconvert.h"
|
||||
#include "../../../Common/DocxFormat/Source/XML/Utils.h"
|
||||
|
||||
namespace cpdoccore {
|
||||
namespace oox {
|
||||
|
||||
class xlsx_dataValidation
|
||||
{
|
||||
public:
|
||||
xlsx_dataValidation() : showErrorMessage(false), showInputMessage(false), showDropDown(false), allowBlank(false) {}
|
||||
|
||||
std::wstring ref;
|
||||
std::wstring activate_ref;
|
||||
std::wstring type;
|
||||
std::wstring formula1;
|
||||
std::wstring formula2;
|
||||
std::wstring operator_;
|
||||
bool showErrorMessage;
|
||||
bool showInputMessage;
|
||||
bool showDropDown;
|
||||
bool allowBlank;
|
||||
};
|
||||
typedef shared_ptr<xlsx_dataValidation>::Type xlsx_dataValidation_ptr;
|
||||
|
||||
class xlsx_dataValidations_context::Impl
|
||||
{
|
||||
public:
|
||||
|
||||
void serialize(std::wostream & _Wostream)
|
||||
{
|
||||
if (mapActivateDataValidations.empty()) return;
|
||||
|
||||
CP_XML_WRITER(_Wostream)
|
||||
{
|
||||
CP_XML_NODE(L"dataValidations")
|
||||
{
|
||||
CP_XML_ATTR(L"count", mapActivateDataValidations.size());
|
||||
|
||||
for (std::map<std::wstring, xlsx_dataValidation_ptr>::iterator it = mapActivateDataValidations.begin();
|
||||
it != mapActivateDataValidations.end(); ++it)
|
||||
{
|
||||
CP_XML_NODE(L"dataValidation")
|
||||
{
|
||||
CP_XML_ATTR(L"sqref", it->second->activate_ref);
|
||||
CP_XML_ATTR(L"allowBlank", it->second->allowBlank);
|
||||
CP_XML_ATTR(L"operator", it->second->operator_);
|
||||
CP_XML_ATTR(L"showDropDown", it->second->showDropDown);
|
||||
CP_XML_ATTR(L"showErrorMessage", it->second->showErrorMessage);
|
||||
CP_XML_ATTR(L"showInputMessage", it->second->showInputMessage);
|
||||
CP_XML_ATTR(L"type", it->second->type);
|
||||
|
||||
if (!it->second->formula1.empty())
|
||||
{
|
||||
CP_XML_NODE(L"formula1")
|
||||
{
|
||||
CP_XML_STREAM() << it->second->formula1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!it->second->formula2.empty())
|
||||
{
|
||||
CP_XML_NODE(L"formula2")
|
||||
{
|
||||
CP_XML_STREAM() << it->second->formula2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mapActivateDataValidations.clear();
|
||||
}
|
||||
|
||||
std::map<std::wstring, xlsx_dataValidation_ptr> mapDataValidations; //for all tables
|
||||
std::map<std::wstring, xlsx_dataValidation_ptr> mapActivateDataValidations; //in current table
|
||||
};
|
||||
|
||||
xlsx_dataValidations_context::xlsx_dataValidations_context() :
|
||||
impl_(new xlsx_dataValidations_context::Impl())
|
||||
{}
|
||||
|
||||
xlsx_dataValidations_context::~xlsx_dataValidations_context()
|
||||
{
|
||||
}
|
||||
void xlsx_dataValidations_context::serialize(std::wostream & _Wostream)
|
||||
{
|
||||
return impl_->serialize(_Wostream);
|
||||
}
|
||||
void xlsx_dataValidations_context::activate(const std::wstring & name, const std::wstring & ref)
|
||||
{
|
||||
std::map<std::wstring, xlsx_dataValidation_ptr>::iterator pFindActivate = impl_->mapActivateDataValidations.find(name);
|
||||
|
||||
if (pFindActivate != impl_->mapActivateDataValidations.end())
|
||||
{
|
||||
pFindActivate->second->activate_ref += L" " + ref;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::map<std::wstring, xlsx_dataValidation_ptr>::iterator pFind = impl_->mapDataValidations.find(name);
|
||||
|
||||
if (pFind != impl_->mapDataValidations.end())
|
||||
{
|
||||
pFind->second->activate_ref = ref;
|
||||
impl_->mapActivateDataValidations.insert(std::make_pair(name, pFind->second));
|
||||
}
|
||||
}
|
||||
}
|
||||
void xlsx_dataValidations_context::add_help_msg(const std::wstring & name, bool val)
|
||||
{
|
||||
std::map<std::wstring, xlsx_dataValidation_ptr>::iterator pFind = impl_->mapDataValidations.find(name);
|
||||
|
||||
if (pFind == impl_->mapDataValidations.end()) return;
|
||||
|
||||
pFind->second->showInputMessage = val;
|
||||
}
|
||||
|
||||
void xlsx_dataValidations_context::add_error_msg(const std::wstring & name, bool val)
|
||||
{
|
||||
std::map<std::wstring, xlsx_dataValidation_ptr>::iterator pFind = impl_->mapDataValidations.find(name);
|
||||
|
||||
if (pFind == impl_->mapDataValidations.end()) return;
|
||||
|
||||
pFind->second->showErrorMessage = val;
|
||||
}
|
||||
|
||||
void xlsx_dataValidations_context::add(const std::wstring & name, const std::wstring &ref)
|
||||
{
|
||||
xlsx_dataValidation_ptr _new = xlsx_dataValidation_ptr(new xlsx_dataValidation());
|
||||
|
||||
formulasconvert::odf2oox_converter converter;
|
||||
_new->ref = converter.convert_named_ref(ref, false, L";");
|
||||
|
||||
impl_->mapDataValidations.insert(std::make_pair(name, _new));
|
||||
}
|
||||
|
||||
void xlsx_dataValidations_context::add_formula(const std::wstring & name, const std::wstring & f) // todooo пооптимальней
|
||||
{
|
||||
std::map<std::wstring, xlsx_dataValidation_ptr>::iterator pFind = impl_->mapDataValidations.find(name);
|
||||
|
||||
if (pFind == impl_->mapDataValidations.end()) return;
|
||||
|
||||
formulasconvert::odf2oox_converter converter;
|
||||
int pos = -1;
|
||||
std::wstring val;
|
||||
|
||||
if ( 0 <= (pos = f.find(L"cell-content-is-in-list"))) //oooc: , of:
|
||||
{
|
||||
pFind->second->type = L"list";
|
||||
val = f.substr(24 + pos, f.size() - 25 - pos);
|
||||
|
||||
if ( val.substr(0, 1) == L"\"")
|
||||
{
|
||||
XmlUtils::replace_all(val, L"\"", L"");
|
||||
|
||||
pFind->second->formula1 = converter.convert(val);
|
||||
|
||||
if ( std::wstring::npos != val.find(L";") )//convert formula replacing ; on ,
|
||||
{
|
||||
pFind->second->formula1 = L"\"" + pFind->second->formula1 + L"\"";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pFind->second->formula1 = converter.convert(val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,44 +1,61 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2017
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef COMMON_UTILS_INCLUDE_H_
|
||||
#define COMMON_UTILS_INCLUDE_H_
|
||||
|
||||
#include "../SystemUtility/SystemUtility.h"
|
||||
#include <vector>
|
||||
|
||||
namespace Common
|
||||
{
|
||||
void readAllShapeTypes(const OOX::CPath& oPath, std::vector<std::wstring>& aShapetypes);
|
||||
} // namespace Common
|
||||
|
||||
#endif // COMMON_UTILS_INCLUDE_H_
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2017
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <cpdoccore/CPOptional.h>
|
||||
#include <cpdoccore/CPScopedPtr.h>
|
||||
#include <string>
|
||||
|
||||
namespace cpdoccore {
|
||||
namespace oox {
|
||||
|
||||
class xlsx_dataValidations_context
|
||||
{
|
||||
public:
|
||||
xlsx_dataValidations_context();
|
||||
~xlsx_dataValidations_context();
|
||||
|
||||
void add(const std::wstring & name, const std::wstring & ref);
|
||||
void add_formula(const std::wstring & name, const std::wstring & f);
|
||||
void add_help_msg(const std::wstring & name, bool val);
|
||||
void add_error_msg(const std::wstring & name, bool val);
|
||||
|
||||
void activate(const std::wstring & name, const std::wstring & ref);
|
||||
|
||||
void serialize(std::wostream & _Wostream);
|
||||
private:
|
||||
class Impl;
|
||||
_CP_SCOPED_PTR(Impl) impl_;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
@ -54,6 +54,8 @@ public:
|
||||
std::wstringstream sort_;
|
||||
std::wstringstream autofilter_;
|
||||
std::wstringstream conditionalFormatting_;
|
||||
std::wstringstream picture_background_;
|
||||
std::wstringstream dataValidations_;
|
||||
std::wstringstream ole_objects_;
|
||||
std::wstringstream page_props_;
|
||||
|
||||
@ -138,7 +140,14 @@ std::wostream & xlsx_xml_worksheet::page_properties()
|
||||
{
|
||||
return impl_->page_props_;
|
||||
}
|
||||
|
||||
std::wostream & xlsx_xml_worksheet::picture_background()
|
||||
{
|
||||
return impl_->picture_background_;
|
||||
}
|
||||
std::wostream & xlsx_xml_worksheet::dataValidations()
|
||||
{
|
||||
return impl_->dataValidations_;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------
|
||||
rels & xlsx_xml_worksheet::sheet_rels()
|
||||
{
|
||||
@ -178,6 +187,7 @@ void xlsx_xml_worksheet::write_to(std::wostream & strm)
|
||||
|
||||
CP_XML_STREAM() << impl_->conditionalFormatting_.str();
|
||||
|
||||
CP_XML_STREAM() << impl_->dataValidations_.str();
|
||||
if (!impl_->hyperlinks_.str().empty())
|
||||
{
|
||||
CP_XML_NODE(L"hyperlinks")
|
||||
@ -207,6 +217,7 @@ void xlsx_xml_worksheet::write_to(std::wostream & strm)
|
||||
CP_XML_STREAM() << impl_->ole_objects_.str();
|
||||
}
|
||||
}
|
||||
CP_XML_STREAM() << impl_->picture_background_.str();
|
||||
|
||||
//CP_XML_NODE(L"headerFooter){}
|
||||
|
||||
|
||||
@ -61,6 +61,8 @@ public:
|
||||
std::wostream & comments();
|
||||
std::wostream & autofilter();
|
||||
std::wostream & conditionalFormatting();
|
||||
std::wostream & picture_background();
|
||||
std::wostream & dataValidations();
|
||||
std::wostream & sort();
|
||||
std::wostream & ole_objects();
|
||||
std::wostream & page_properties();
|
||||
|
||||
@ -120,7 +120,7 @@ public:
|
||||
xlsx_table_metrics & get_table_metrics() { return xlsx_table_metrics_; }
|
||||
xlsx_drawing_context & get_drawing_context() { return xlsx_drawing_context_; }
|
||||
xlsx_comments_context & get_comments_context() { return xlsx_comments_context_; }
|
||||
xlsx_conditionalFormatting_context & get_conditionalFormatting_context() {return xlsx_conditionalFormatting_context_;}
|
||||
xlsx_conditionalFormatting_context & get_conditionalFormatting_context() { return xlsx_conditionalFormatting_context_;}
|
||||
|
||||
void table_column_last_width(double w) { table_column_last_width_ = w; }
|
||||
double table_column_last_width() const { return table_column_last_width_; };
|
||||
|
||||
@ -324,6 +324,10 @@ void xlsx_table_context::serialize_background(std::wostream & _Wostream)
|
||||
{
|
||||
return state()->serialize_background(_Wostream);
|
||||
}
|
||||
void xlsx_table_context::serialize_data_validation(std::wostream & _Wostream)
|
||||
{
|
||||
return xlsx_conversion_context_->get_dataValidations_context().serialize(_Wostream);
|
||||
}
|
||||
void xlsx_table_context::serialize_hyperlinks(std::wostream & _Wostream)
|
||||
{
|
||||
return state()->serialize_hyperlinks(_Wostream);
|
||||
|
||||
@ -91,6 +91,7 @@ public:
|
||||
void serialize_ole_objects (std::wostream & _Wostream);
|
||||
void serialize_page_properties (std::wostream & _Wostream);
|
||||
void serialize_background (std::wostream & _Wostream);
|
||||
void serialize_data_validation (std::wostream & _Wostream);
|
||||
|
||||
xlsx_table_metrics & get_table_metrics();
|
||||
|
||||
|
||||
@ -49,13 +49,6 @@
|
||||
namespace cpdoccore {
|
||||
namespace oox {
|
||||
|
||||
void removeCharsFromString( std::wstring &str, std::wstring charsToRemove )
|
||||
{
|
||||
for ( unsigned int i = 0; i < charsToRemove.length(); ++i )
|
||||
{
|
||||
str.erase( std::remove(str.begin(), str.end(), charsToRemove[i]), str.end() );
|
||||
}
|
||||
}
|
||||
|
||||
class xlsx_text_context::Impl: boost::noncopyable
|
||||
{
|
||||
|
||||
@ -437,6 +437,7 @@ void xlsx_conversion_context::end_table()
|
||||
get_table_context().serialize_autofilter (current_sheet().autofilter());
|
||||
get_table_context().serialize_sort (current_sheet().sort());
|
||||
get_table_context().serialize_merge_cells (current_sheet().mergeCells());
|
||||
get_table_context().serialize_data_validation (current_sheet().dataValidations());
|
||||
|
||||
get_drawing_context().set_odf_packet_path (root()->get_folder());
|
||||
get_drawing_context().process_objects (get_table_metrics());
|
||||
|
||||
@ -49,6 +49,7 @@
|
||||
#include "xlsx_defined_names.h"
|
||||
#include "xlsx_table_metrics.h"
|
||||
#include "xlsx_pivots_context.h"
|
||||
#include "xlsx_data_validation.h"
|
||||
#include "oox_chart_context.h"
|
||||
|
||||
#include "mediaitems.h"
|
||||
@ -179,6 +180,7 @@ public:
|
||||
xlsx_drawing_context_handle & get_drawing_context_handle();
|
||||
xlsx_comments_context & get_comments_context();
|
||||
xlsx_comments_context_handle & get_comments_context_handle();
|
||||
xlsx_dataValidations_context& get_dataValidations_context() { return xlsx_dataValidations_context_;}
|
||||
|
||||
mediaitems & get_mediaitems() { return mediaitems_; }
|
||||
|
||||
@ -212,6 +214,7 @@ private:
|
||||
xlsx_pivots_context xlsx_pivots_context_;
|
||||
xlsx_drawing_context_handle xlsx_drawing_context_handle_;
|
||||
xlsx_comments_context_handle xlsx_comments_context_handle_;
|
||||
xlsx_dataValidations_context xlsx_dataValidations_context_;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@ -233,8 +233,9 @@ void object_odf_context::docx_convert(oox::docx_conversion_context & Context)
|
||||
Context.set_paragraph_state (false);
|
||||
Context.set_run_state (false);
|
||||
|
||||
Context.get_math_context().base_font_size_ = baseFontHeight_;
|
||||
|
||||
Context.start_math_formula();
|
||||
Context.get_math_context().base_font_size_ = baseFontHeight_;
|
||||
office_math_->oox_convert(Context.get_math_context());
|
||||
Context.end_math_formula();
|
||||
|
||||
|
||||
@ -41,9 +41,10 @@ std::wostream & operator << (std::wostream & _Wostream, const chart_data_label_n
|
||||
{
|
||||
switch(_Val.get_type())
|
||||
{
|
||||
case chart_data_label_number::none: _Wostream << L"none"; break;
|
||||
case chart_data_label_number::value: _Wostream << L"value"; break;
|
||||
case chart_data_label_number::percentage : _Wostream << L"percentage"; break;
|
||||
case chart_data_label_number::none: _Wostream << L"none"; break;
|
||||
case chart_data_label_number::value: _Wostream << L"value"; break;
|
||||
case chart_data_label_number::percentage : _Wostream << L"percentage"; break;
|
||||
case chart_data_label_number::value_and_percentage: _Wostream << L"value-and-percentage"; break;
|
||||
}
|
||||
return _Wostream;
|
||||
}
|
||||
@ -59,9 +60,10 @@ chart_data_label_number chart_data_label_number::parse(const std::wstring & Str)
|
||||
return chart_data_label_number( value );
|
||||
else if (tmp == L"percentage")
|
||||
return chart_data_label_number( percentage );
|
||||
else
|
||||
else if (tmp == L"value-and-percentage")
|
||||
return chart_data_label_number( value_and_percentage );
|
||||
else
|
||||
{
|
||||
BOOST_THROW_EXCEPTION( errors::invalid_attribute() );
|
||||
return chart_data_label_number( none );
|
||||
}
|
||||
}
|
||||
|
||||
@ -45,7 +45,8 @@ public:
|
||||
{
|
||||
none,
|
||||
value,
|
||||
percentage
|
||||
percentage,
|
||||
value_and_percentage
|
||||
};
|
||||
|
||||
chart_data_label_number() {}
|
||||
|
||||
@ -61,6 +61,7 @@ private:
|
||||
|
||||
document_context::document_context() : impl_( new document_context::Impl() )
|
||||
{
|
||||
level = 0;
|
||||
}
|
||||
|
||||
document_context::~document_context()
|
||||
|
||||
@ -45,10 +45,11 @@ class document_context
|
||||
public:
|
||||
document_context();
|
||||
virtual ~document_context();
|
||||
|
||||
public:
|
||||
|
||||
void set_last_paragraph(text::paragraph * Paragraph);
|
||||
text::paragraph * get_last_paragraph();
|
||||
|
||||
int level;
|
||||
|
||||
private:
|
||||
class Impl;
|
||||
|
||||
@ -144,7 +144,6 @@ private:
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
virtual void add_text(const std::wstring & Text);
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(svg_font_face_name);
|
||||
|
||||
// svg:definition-src
|
||||
@ -164,10 +163,8 @@ private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(svg_definition_src);
|
||||
|
||||
|
||||
// style:font-face
|
||||
class style_font_face : public office_element_impl<style_font_face>
|
||||
{
|
||||
@ -233,7 +230,6 @@ public:
|
||||
|
||||
friend class odf_document;
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(style_font_face);
|
||||
|
||||
// office-font-face-decls
|
||||
@ -257,7 +253,6 @@ private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(office_font_face_decls);
|
||||
|
||||
}
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
|
||||
#include "paragraph_elements.h"
|
||||
|
||||
|
||||
@ -38,7 +38,6 @@
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/utils.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/CPColorUtils.h>
|
||||
|
||||
#include "serialize_elements.h"
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
|
||||
namespace cpdoccore {
|
||||
namespace odf_reader {
|
||||
|
||||
@ -36,7 +36,6 @@
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
|
||||
#include <cpdoccore/odf/odf_document.h>
|
||||
|
||||
@ -152,6 +151,8 @@ void office_body::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
if (page_layout_instance * lastPageLayout = Context.root()->odf_context().pageLayoutContainer().page_layout_by_name(Context.get_page_properties()))
|
||||
{
|
||||
Context.next_dump_page_properties(true);
|
||||
|
||||
lastPageLayout->docx_serialize(Context.output_stream(), Context);
|
||||
//Context.remove_page_properties();
|
||||
}
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
|
||||
#include "serialize_elements.h"
|
||||
|
||||
@ -81,7 +80,16 @@ void chart_chart::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
|
||||
void chart_chart::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
if CP_CHECK_NAME(L"text", L"tracked-changes")
|
||||
{
|
||||
CP_CREATE_ELEMENT(tracked_changes_);
|
||||
}
|
||||
else if CP_CHECK_NAME(L"table", L"content-validations")
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_validations_);
|
||||
}
|
||||
else
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
}
|
||||
void chart_title_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
|
||||
@ -60,7 +60,10 @@ private:
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
|
||||
public:
|
||||
office_element_ptr_array content_;
|
||||
office_element_ptr tracked_changes_;
|
||||
office_element_ptr content_validations_;
|
||||
|
||||
office_element_ptr_array content_;
|
||||
|
||||
};
|
||||
|
||||
@ -105,6 +108,10 @@ private:
|
||||
|
||||
public:
|
||||
chart_chart_attlist attlist_;
|
||||
|
||||
office_element_ptr tracked_changes_;
|
||||
office_element_ptr content_validations_;
|
||||
|
||||
office_element_ptr_array content_;
|
||||
};
|
||||
|
||||
|
||||
@ -69,8 +69,14 @@ enum ElementType
|
||||
typeTextTime,
|
||||
typeTextModificationTime,
|
||||
typeTextFileName,
|
||||
typeTextSequence,
|
||||
typeTextSheetName,
|
||||
typeTextTemplateName,
|
||||
typeTextDropDown,
|
||||
typeTextLabel,
|
||||
|
||||
typeTextSequenceDecls,
|
||||
typeTextSequenceDecl,
|
||||
typeTextSequence,
|
||||
|
||||
typePresentationFooter,
|
||||
typePresentationDateTime,
|
||||
@ -78,6 +84,8 @@ enum ElementType
|
||||
typeDcCreator,
|
||||
typeDcDate,
|
||||
|
||||
typeDrawA,
|
||||
|
||||
typeTextH,
|
||||
typeTextP,
|
||||
|
||||
@ -90,28 +98,42 @@ enum ElementType
|
||||
typeTextSectionSource,
|
||||
typeTextIndexTitle,
|
||||
typeTextIndexBody,
|
||||
|
||||
typeTextNumberedParagraph,
|
||||
|
||||
typeDrawA,
|
||||
typeTextNumberedParagraph,
|
||||
typeTextExpression,
|
||||
|
||||
typeTextTableOfContent,
|
||||
typeTextIllustrationIndex,
|
||||
typeTextTableIndex,
|
||||
typeTextObjectIndex,
|
||||
typeTextUserIndex,
|
||||
typeTextAlphabeticalIndex,
|
||||
typeTextBibliography,
|
||||
|
||||
typeTextBibliographyMark,
|
||||
|
||||
typeTextTableOfContentSource,
|
||||
|
||||
typeTextIllustrationIndex,
|
||||
typeTextIllustrationIndexSource,
|
||||
|
||||
typeTextTableIndex,
|
||||
typeTextTableIndexSource,
|
||||
|
||||
typeTextObjectIndex,
|
||||
typeTextObjectIndexSource,
|
||||
|
||||
typeTextUserIndex,
|
||||
typeTextUserIndexSource,
|
||||
|
||||
typeTextAlphabeticalIndex,
|
||||
typeTextAlphabeticalIndexSource,
|
||||
typeTextBibliographySource,
|
||||
|
||||
typeTextBibliography,
|
||||
typeTextBibliographyMark,
|
||||
typeTextBibliographySource,
|
||||
|
||||
typeTextVariableInput,
|
||||
typeTextVariableGet,
|
||||
typeTextVariableSet,
|
||||
typeTextVariableDecl,
|
||||
typeTextVariableDecls,
|
||||
|
||||
typeTextUserFieldDecls,
|
||||
typeTextUserFieldDecl,
|
||||
typeTextUserFieldGet,
|
||||
typeTextUserFieldSet,
|
||||
typeTextUserFieldInput,
|
||||
|
||||
typeTextTrackedChanges,
|
||||
typeTextChangedRegion,
|
||||
@ -125,6 +147,11 @@ enum ElementType
|
||||
typeTextFormatChange,
|
||||
typeTextInsertion,
|
||||
|
||||
typeTextMeta,
|
||||
typeTextMetaField,
|
||||
|
||||
typeTextTextInput,
|
||||
|
||||
typeShape,
|
||||
typeChangeMarks,
|
||||
|
||||
@ -206,6 +233,14 @@ enum ElementType
|
||||
typeTableDatabaseRange,
|
||||
typeTableSort,
|
||||
typeTableSortBy,
|
||||
typeTableCalculationSettings,
|
||||
typeTableNullDate,
|
||||
typeTableShapes,
|
||||
typeTableContentValidation,
|
||||
typeTableContentValidations,
|
||||
typeTableHelpMassage,
|
||||
typeTableErrorMassage,
|
||||
typeTableErrorMacro,
|
||||
|
||||
typeTableFilter,
|
||||
typeTableFilterAnd,
|
||||
@ -384,9 +419,6 @@ enum ElementType
|
||||
|
||||
typeScriptEventListener,
|
||||
|
||||
typeTableCalculationSettings,
|
||||
typeTableNullDate,
|
||||
|
||||
typeNumberNumberStyle,
|
||||
typeNumberDataStyle,
|
||||
typeNumberText,
|
||||
@ -409,7 +441,6 @@ enum ElementType
|
||||
typeNumberMinutes,
|
||||
typeNumberSeconds,
|
||||
typeNumberAmPm,
|
||||
typeTableShapes,
|
||||
|
||||
typeChartChart,
|
||||
typeChartTitle,
|
||||
|
||||
@ -54,11 +54,25 @@ const wchar_t * office_presentation::name = L"presentation";
|
||||
void office_presentation::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
if CP_CHECK_NAME(L"draw", L"page")
|
||||
{
|
||||
CP_CREATE_ELEMENT(pages_);
|
||||
}
|
||||
else if CP_CHECK_NAME(L"table", L"tracked-changes")
|
||||
{
|
||||
CP_CREATE_ELEMENT(tracked_changes_);
|
||||
}
|
||||
else if CP_CHECK_NAME(L"table", L"content-validations")
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_validations_);
|
||||
}
|
||||
else if CP_CHECK_NAME(L"presentation", L"footer-decl")
|
||||
{
|
||||
CP_CREATE_ELEMENT(footer_decls_);
|
||||
}
|
||||
else if CP_CHECK_NAME(L"presentation", L"date-time-decl")
|
||||
{
|
||||
CP_CREATE_ELEMENT(date_time_decls_);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -62,10 +62,13 @@ private:
|
||||
|
||||
public:
|
||||
|
||||
office_element_ptr_array date_time_decls_;
|
||||
office_element_ptr_array footer_decls_;
|
||||
office_element_ptr tracked_changes_;
|
||||
office_element_ptr content_validations_;
|
||||
|
||||
office_element_ptr_array date_time_decls_;
|
||||
office_element_ptr_array footer_decls_;
|
||||
|
||||
office_element_ptr_array pages_;
|
||||
office_element_ptr_array pages_;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
|
||||
#include "serialize_elements.h"
|
||||
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
|
||||
#include "serialize_elements.h"
|
||||
|
||||
|
||||
@ -63,6 +63,10 @@ void office_spreadsheet::add_child_element( xml::sax * Reader, const std::wstrin
|
||||
{
|
||||
CP_CREATE_ELEMENT(tracked_changes_);
|
||||
}
|
||||
else if CP_CHECK_NAME(L"table", L"content-validations")
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_validations_);
|
||||
}
|
||||
else
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
}
|
||||
@ -88,6 +92,9 @@ void office_spreadsheet::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
if (database_ranges_)
|
||||
database_ranges_->xlsx_convert(Context);
|
||||
|
||||
if (content_validations_)
|
||||
content_validations_->xlsx_convert(Context);
|
||||
|
||||
if (data_pilot_tables_)
|
||||
data_pilot_tables_->xlsx_convert(Context);
|
||||
|
||||
|
||||
@ -62,12 +62,12 @@ public:
|
||||
office_element_ptr database_ranges_;
|
||||
office_element_ptr data_pilot_tables_;
|
||||
office_element_ptr tracked_changes_;
|
||||
|
||||
office_element_ptr content_validations_;
|
||||
|
||||
office_element_ptr_array content_;
|
||||
|
||||
// table:calculation-settings
|
||||
// table:consolidation
|
||||
// table:content-validations
|
||||
// table:dde-links
|
||||
// table:label-ranges
|
||||
|
||||
|
||||
@ -101,6 +101,10 @@ void office_text::add_child_element( xml::sax * Reader, const std::wstring & Ns,
|
||||
{
|
||||
CP_CREATE_ELEMENT(tracked_changes_);
|
||||
}
|
||||
else if CP_CHECK_NAME(L"table", L"content-validations")
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_validations_);
|
||||
}
|
||||
else if (is_text_content(Ns, Name))
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
|
||||
@ -67,7 +67,9 @@ private:
|
||||
// TODO: table-decls
|
||||
|
||||
office_element_ptr tracked_changes_;
|
||||
office_element_ptr_array content_;
|
||||
office_element_ptr content_validations_;
|
||||
|
||||
office_element_ptr_array content_;
|
||||
// TODO: text-page-sequence
|
||||
// TODO: office-text-content-epilogue:
|
||||
// TODO: table-functions
|
||||
|
||||
@ -39,7 +39,6 @@
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/utils.h>
|
||||
#include <cpdoccore/common/readstring.h>
|
||||
#include <cpdoccore/odf/odf_document.h>
|
||||
@ -742,7 +741,7 @@ std::wostream & title::text_to_stream(std::wostream & _Wostream) const
|
||||
|
||||
void title::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
common_field_fixed_attlist_.add_attributes(Attributes);
|
||||
attlist_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
void title::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
@ -806,7 +805,7 @@ std::wostream & subject::text_to_stream(std::wostream & _Wostream) const
|
||||
|
||||
void subject::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
common_field_fixed_attlist_.add_attributes(Attributes);
|
||||
attlist_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
void subject::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
@ -823,8 +822,8 @@ void subject::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
std::wostream & strm = Context.output_stream();
|
||||
Context.finish_run();
|
||||
strm << L"<w:r><w:fldChar w:fldCharType=\"begin\" /></w:r>";
|
||||
strm << L"<w:r><w:instrText>SUBJECT</w:instrText></w:r><w:r><w:fldChar w:fldCharType=\"separate\" /></w:r>";
|
||||
strm << L"<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>";
|
||||
strm << L"<w:r><w:instrText>SUBJECT</w:instrText></w:r><w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>";
|
||||
Context.add_new_run();
|
||||
|
||||
std::wstring textNode = L"w:t";
|
||||
@ -838,7 +837,7 @@ void subject::docx_convert(oox::docx_conversion_context & Context)
|
||||
strm << L"</" << textNode << L">";
|
||||
|
||||
Context.finish_run();
|
||||
strm << L"<w:r><w:fldChar w:fldCharType=\"end\" /></w:r>";
|
||||
strm << L"<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>";
|
||||
}
|
||||
|
||||
void subject::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
@ -869,7 +868,7 @@ std::wostream & chapter::text_to_stream(std::wostream & _Wostream) const
|
||||
|
||||
void chapter::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
common_field_fixed_attlist_.add_attributes(Attributes);
|
||||
attlist_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
void chapter::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
@ -1379,9 +1378,77 @@ void sequence::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
text_[i]->pptx_convert(Context);
|
||||
}
|
||||
}
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:drop-down
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * text_drop_down::ns = L"text";
|
||||
const wchar_t * text_drop_down::name = L"drop-down";
|
||||
|
||||
// text:sequesheet-namence
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void text_drop_down::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:name", text_name_);
|
||||
}
|
||||
|
||||
void text_drop_down::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
if CP_CHECK_NAME(L"text", L"label")
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
void text_drop_down::add_text(const std::wstring & Text)
|
||||
{
|
||||
text_ = Text;
|
||||
}
|
||||
std::wostream & text_drop_down::text_to_stream(std::wostream & _Wostream) const
|
||||
{
|
||||
_Wostream << xml::utils::replace_text_to_xml( text_ );
|
||||
return _Wostream;
|
||||
}
|
||||
|
||||
void text_drop_down::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
std::wostream & strm = Context.output_stream();
|
||||
Context.finish_run();
|
||||
|
||||
strm << L"<w:r><w:fldChar w:fldCharType=\"begin\"><w:ffData><w:name w:val=\"" << text_name_.get_value_or(L"") << L"\"/><w:enabled/>";
|
||||
|
||||
strm << L"<w:ddList><w:result w:val=\"0\"/>";
|
||||
for (size_t i = 0; i < content_.size(); i++)
|
||||
{
|
||||
content_[i]->docx_convert(Context);
|
||||
}
|
||||
strm << L"</w:ddList></w:ffData>";
|
||||
|
||||
strm << L"</w:fldChar></w:r>";
|
||||
strm << L"<w:r><w:instrText>FORMDROPDOWN</w:instrText></w:r>";
|
||||
strm << L"<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>";
|
||||
strm << L"<w:r><w:t>" << text_ << L"</w:t></w:r>";
|
||||
strm << L"<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>";
|
||||
}
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:label
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * text_label::ns = L"text";
|
||||
const wchar_t * text_label::name = L"label";
|
||||
|
||||
void text_label::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:value", text_value_);
|
||||
}
|
||||
void text_label::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
std::wostream & strm = Context.output_stream();
|
||||
|
||||
strm << L"<w:listEntry w:val=\"" << text_value_.get_value_or(L"") << L"\"/>";
|
||||
}
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:sheet-name
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * sheet_name::ns = L"text";
|
||||
const wchar_t * sheet_name::name = L"sheet-name";
|
||||
|
||||
|
||||
@ -122,7 +122,6 @@ private:
|
||||
_CP_OPT(unsigned int) text_c_;
|
||||
_CP_OPT(std::wstring) content_;
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(s);
|
||||
|
||||
// text:tab
|
||||
@ -431,7 +430,6 @@ CP_REGISTER_OFFICE_ELEMENT2(a);
|
||||
|
||||
// text:note
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class note : public paragraph_content_element<note>
|
||||
{
|
||||
public:
|
||||
@ -452,18 +450,16 @@ private:
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
virtual void add_text(const std::wstring & Text);
|
||||
|
||||
std::wstring text_id_;
|
||||
odf_types::noteclass text_note_class_;
|
||||
office_element_ptr text_note_citation_;
|
||||
office_element_ptr text_note_body_;
|
||||
std::wstring text_id_;
|
||||
odf_types::noteclass text_note_class_;
|
||||
office_element_ptr text_note_citation_;
|
||||
office_element_ptr text_note_body_;
|
||||
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(note);
|
||||
|
||||
// text:ruby
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class ruby : public paragraph_content_element<ruby>
|
||||
{
|
||||
public:
|
||||
@ -485,7 +481,6 @@ private:
|
||||
office_element_ptr text_ruby_text_;
|
||||
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(ruby);
|
||||
|
||||
class common_field_fixed_attlist
|
||||
@ -521,8 +516,8 @@ private:
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
virtual void add_text(const std::wstring & Text);
|
||||
|
||||
common_field_fixed_attlist common_field_fixed_attlist_;
|
||||
office_element_ptr_array content_;
|
||||
common_field_fixed_attlist attlist_;
|
||||
office_element_ptr_array content_;
|
||||
|
||||
};
|
||||
|
||||
@ -549,7 +544,7 @@ private:
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
virtual void add_text(const std::wstring & Text);
|
||||
|
||||
common_field_fixed_attlist common_field_fixed_attlist_;
|
||||
common_field_fixed_attlist attlist_;
|
||||
office_element_ptr_array content_;
|
||||
|
||||
};
|
||||
@ -577,7 +572,7 @@ private:
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
virtual void add_text(const std::wstring & Text);
|
||||
|
||||
common_field_fixed_attlist common_field_fixed_attlist_;
|
||||
common_field_fixed_attlist attlist_;
|
||||
office_element_ptr_array content_;
|
||||
|
||||
};
|
||||
@ -687,7 +682,7 @@ public:
|
||||
_CP_OPT(bool) text_fixed_;
|
||||
_CP_OPT(std::wstring) text_date_value_;//with format
|
||||
|
||||
office_element_ptr_array text_;
|
||||
office_element_ptr_array text_;
|
||||
|
||||
private:
|
||||
void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
@ -715,8 +710,9 @@ public:
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_modification_date);
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:time
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class text_time : public paragraph_content_element<text_time>
|
||||
{
|
||||
public:
|
||||
@ -745,8 +741,9 @@ private:
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_time);
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:modification-date
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class text_modification_time : public text_time
|
||||
{
|
||||
public:
|
||||
@ -762,8 +759,9 @@ public:
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_modification_time);
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:file-name
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class text_file_name : public paragraph_content_element<text_file_name>
|
||||
{
|
||||
public:
|
||||
@ -787,11 +785,11 @@ private:
|
||||
office_element_ptr_array text_;
|
||||
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_file_name);
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:sequence
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class sequence : public paragraph_content_element<sequence>
|
||||
{
|
||||
public:
|
||||
@ -815,11 +813,58 @@ private:
|
||||
office_element_ptr_array text_;
|
||||
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(sequence);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
//text:drop-down
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class text_drop_down : public paragraph_content_element<text_drop_down>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextDropDown;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
virtual void add_text(const std::wstring & Text);
|
||||
|
||||
_CP_OPT(std::wstring) text_name_;
|
||||
office_element_ptr_array content_;
|
||||
|
||||
std::wstring text_;
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_drop_down);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
//text:drop-down
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class text_label : public paragraph_content_element<text_label>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextLabel;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
|
||||
|
||||
_CP_OPT(std::wstring) text_value_;
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_label);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:sheet-name
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class sheet_name : public paragraph_content_element<sheet_name>
|
||||
{
|
||||
public:
|
||||
@ -837,11 +882,11 @@ private:
|
||||
office_element_ptr_array text_;
|
||||
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(sheet_name);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
//presentation:footer
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class presentation_footer : public paragraph_content_element<presentation_footer>
|
||||
{
|
||||
public:
|
||||
@ -861,8 +906,9 @@ private:
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(presentation_footer);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
//presentation:date-time
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class presentation_date_time: public paragraph_content_element<presentation_date_time>
|
||||
{
|
||||
public:
|
||||
|
||||
@ -33,7 +33,6 @@
|
||||
|
||||
#include "ruby.h"
|
||||
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
|
||||
#include "serialize_elements.h"
|
||||
|
||||
|
||||
@ -213,7 +213,7 @@ void style_table_column_properties::docx_convert(oox::docx_conversion_context &
|
||||
double kf_max_width_ms =1.;
|
||||
|
||||
const page_layout_instance * pp = Context.root()->odf_context().pageLayoutContainer().page_layout_first();//
|
||||
if (pp)
|
||||
if ((pp) && (pp->properties()))
|
||||
{
|
||||
style_page_layout_properties_attlist & attr_page = pp->properties()->attlist_;
|
||||
if (attr_page.fo_page_width_)
|
||||
|
||||
@ -53,7 +53,7 @@ namespace odf_reader {
|
||||
|
||||
void removeCharsFromString( std::wstring &str, std::wstring charsToRemove )
|
||||
{
|
||||
for ( unsigned int i = 0; i < charsToRemove.length(); ++i )
|
||||
for ( size_t i = 0; i < charsToRemove.length(); ++i )
|
||||
{
|
||||
str.erase( std::remove(str.begin(), str.end(), charsToRemove[i]), str.end() );
|
||||
}
|
||||
@ -292,14 +292,14 @@ void text_format_properties_content::pptx_convert_as_list(oox::pptx_conversion_c
|
||||
w_font = font->name();
|
||||
|
||||
//'Arial' глючит
|
||||
removeCharsFromString(w_font, _T("'"));
|
||||
removeCharsFromString(w_font, L"'");
|
||||
}
|
||||
|
||||
if (w_font.length()>0)
|
||||
{
|
||||
CP_XML_NODE(L"a:buFont")
|
||||
{
|
||||
removeCharsFromString(w_font, _T("'"));
|
||||
removeCharsFromString(w_font, L"'");
|
||||
CP_XML_ATTR(L"typeface", w_font);
|
||||
if ((style_font_charset_))
|
||||
{
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
#include "styles.h"
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/simple_xml_writer.h>
|
||||
|
||||
#include <cpdoccore/odf/odf_document.h>
|
||||
|
||||
@ -35,7 +35,6 @@
|
||||
#include <boost/make_shared.hpp>
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
|
||||
#include "serialize_elements.h"
|
||||
|
||||
@ -729,7 +728,61 @@ void table_shapes::add_child_element( xml::sax * Reader, const std::wstring & Ns
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// table:content-validations
|
||||
const wchar_t * table_content_validations::ns = L"table";
|
||||
const wchar_t * table_content_validations::name = L"content-validations";
|
||||
|
||||
void table_content_validations::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// table:content-validation
|
||||
const wchar_t * table_content_validation::ns = L"table";
|
||||
const wchar_t * table_content_validation::name = L"content-validation";
|
||||
|
||||
void table_content_validation::add_attributes(xml::attributes_wc_ptr const & Attributes)
|
||||
{
|
||||
CP_APPLY_ATTR(L"table:name", table_name_);
|
||||
CP_APPLY_ATTR(L"table:condition", table_condition_);
|
||||
CP_APPLY_ATTR(L"table:display-list", table_display_list_);
|
||||
CP_APPLY_ATTR(L"table:allowempty-cell", table_allowempty_cell_);
|
||||
CP_APPLY_ATTR(L"table:base-cell-address", table_base_cell_address_);
|
||||
}
|
||||
void table_content_validation::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// table:content-validation
|
||||
const wchar_t * table_error_message::ns = L"table";
|
||||
const wchar_t * table_error_message::name = L"error-message";
|
||||
|
||||
void table_error_message::add_attributes(xml::attributes_wc_ptr const & Attributes)
|
||||
{
|
||||
CP_APPLY_ATTR(L"table:title", table_title_);
|
||||
CP_APPLY_ATTR(L"table:message-type", table_message_type_);
|
||||
CP_APPLY_ATTR(L"table:display", table_display_);
|
||||
}
|
||||
void table_error_message::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// table:content-validation
|
||||
const wchar_t * table_help_message::ns = L"table";
|
||||
const wchar_t * table_help_message::name = L"help-message";
|
||||
|
||||
void table_help_message::add_attributes(xml::attributes_wc_ptr const & Attributes)
|
||||
{
|
||||
CP_APPLY_ATTR(L"table:title", table_title_);
|
||||
CP_APPLY_ATTR(L"table:message-type", table_message_type_);
|
||||
CP_APPLY_ATTR(L"table:display", table_display_);
|
||||
}
|
||||
void table_help_message::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -653,6 +653,7 @@ public:
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(table_table);
|
||||
|
||||
//table:content-shapes
|
||||
class table_shapes : public office_element_impl<table_shapes>
|
||||
{
|
||||
public:
|
||||
@ -676,5 +677,105 @@ private:
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(table_shapes);
|
||||
|
||||
//table:content-validations
|
||||
class table_content_validations : public office_element_impl<table_content_validations>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTableContentValidations;
|
||||
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual void xlsx_convert(oox::xlsx_conversion_context & Context) ;
|
||||
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes ){}
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
|
||||
office_element_ptr_array content_;
|
||||
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(table_content_validations);
|
||||
|
||||
//table:content-validation
|
||||
class table_content_validation : public office_element_impl<table_content_validation>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTableContentValidation;
|
||||
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual void xlsx_convert(oox::xlsx_conversion_context & Context) ;
|
||||
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
|
||||
_CP_OPT(std::wstring) table_name_;
|
||||
_CP_OPT(odf_types::Bool) table_allowempty_cell_;
|
||||
_CP_OPT(std::wstring) table_display_list_;
|
||||
_CP_OPT(std::wstring) table_condition_;
|
||||
_CP_OPT(std::wstring) table_base_cell_address_;
|
||||
|
||||
office_element_ptr_array content_;
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(table_content_validation);
|
||||
|
||||
//table:error-message
|
||||
class table_error_message : public office_element_impl<table_error_message>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTableErrorMassage;
|
||||
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual void xlsx_convert(oox::xlsx_conversion_context & Context) ;
|
||||
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
|
||||
_CP_OPT(std::wstring) table_title_;
|
||||
_CP_OPT(odf_types::Bool) table_display_;
|
||||
_CP_OPT(std::wstring) table_message_type_;
|
||||
|
||||
office_element_ptr_array content_;
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(table_error_message);
|
||||
|
||||
//table:help-message
|
||||
class table_help_message : public office_element_impl<table_help_message>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTableHelpMassage;
|
||||
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual void xlsx_convert(oox::xlsx_conversion_context & Context) ;
|
||||
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
|
||||
_CP_OPT(std::wstring) table_title_;
|
||||
_CP_OPT(odf_types::Bool) table_display_;
|
||||
_CP_OPT(std::wstring) table_message_type_;
|
||||
|
||||
office_element_ptr_array content_;
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(table_help_message);
|
||||
|
||||
//table:error-macro
|
||||
}
|
||||
}
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
|
||||
#include "serialize_elements.h"
|
||||
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
|
||||
#include "serialize_elements.h"
|
||||
#include "odfcontext.h"
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/simple_xml_writer.h>
|
||||
|
||||
#include "serialize_elements.h"
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/utils.h>
|
||||
#include <cpdoccore/odf/odf_document.h>
|
||||
#include <cpdoccore/xml/simple_xml_writer.h>
|
||||
@ -804,11 +803,13 @@ void table_table_cell::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
|
||||
is_style_visible = (!cellStyleName.empty() || defaultColumnCellStyle) ? true : false;
|
||||
|
||||
if ( content_.elements_.size() > 0 ||
|
||||
!formula.empty() ||
|
||||
if ( content_.elements_.size() > 0 || attlist_.table_content_validation_name_ || !formula.empty() ||
|
||||
( t_val == oox::XlsxCellType::n && !number_val.empty()) ||
|
||||
( t_val == oox::XlsxCellType::b && bool_val) ||
|
||||
(( t_val == oox::XlsxCellType::str || oox::XlsxCellType::inlineStr) && str_val)) is_data_visible = true;
|
||||
(( t_val == oox::XlsxCellType::str || oox::XlsxCellType::inlineStr) && str_val))
|
||||
{
|
||||
is_data_visible = true;
|
||||
}
|
||||
|
||||
if (attlist_.table_number_columns_repeated_ < 199 && last_cell_) last_cell_ = false;
|
||||
|
||||
@ -838,15 +839,20 @@ void table_table_cell::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
t_val = oox::XlsxCellType::s;//в случае текста, если он есть берем кэшированное значение
|
||||
|
||||
if (skip_next_cell)break;
|
||||
|
||||
// пустые ячейки пропускаем.
|
||||
|
||||
// пустые ячейки пропускаем.
|
||||
if ( is_data_visible || ((cellStyle || defaultColumnCellStyle) && is_style_visible))
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
std::wstring ref = oox::getCellAddress(Context.current_table_column(), Context.current_table_row());
|
||||
if (attlist_.table_content_validation_name_)
|
||||
{
|
||||
Context.get_dataValidations_context().activate(*attlist_.table_content_validation_name_, ref);
|
||||
}
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"c")
|
||||
{
|
||||
CP_XML_ATTR(L"r", oox::getCellAddress(Context.current_table_column(), Context.current_table_row()));
|
||||
CP_XML_ATTR(L"r", ref);
|
||||
CP_XML_ATTR(L"t", oox::cellType2Str(t_val));
|
||||
CP_XML_ATTR(L"s", xfId_last_set);
|
||||
|
||||
@ -888,6 +894,7 @@ void table_table_cell::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
{
|
||||
CP_XML_NODE(L"v") { CP_XML_CONTENT((int)(bool_val.get())); }
|
||||
}
|
||||
|
||||
}
|
||||
if ( is_data_visible || (cellStyle && is_style_visible && !last_cell_))
|
||||
{
|
||||
@ -1180,5 +1187,38 @@ void table_covered_table_cell::xlsx_convert(oox::xlsx_conversion_context & Conte
|
||||
}
|
||||
}
|
||||
|
||||
void table_content_validations::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
{
|
||||
for (size_t i = 0 ; i < content_.size(); i++)
|
||||
{
|
||||
content_[i]->xlsx_convert(Context);
|
||||
}
|
||||
}
|
||||
void table_content_validation::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
{
|
||||
std::wstring name = table_name_.get_value_or(L"");
|
||||
|
||||
Context.get_dataValidations_context().add(name, table_base_cell_address_.get_value_or(L""));
|
||||
Context.get_dataValidations_context().add_formula(name, table_condition_.get_value_or(L""));
|
||||
|
||||
for (size_t i = 0 ; i < content_.size(); i++)
|
||||
{
|
||||
if (content_[i]->get_type() == typeTableErrorMassage)
|
||||
{
|
||||
Context.get_dataValidations_context().add_error_msg(name, true);
|
||||
}
|
||||
else if (content_[i]->get_type() == typeTableErrorMassage)
|
||||
{
|
||||
Context.get_dataValidations_context().add_help_msg(name, true);
|
||||
}
|
||||
content_[i]->xlsx_convert(Context);
|
||||
}
|
||||
}
|
||||
void table_error_message::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
{
|
||||
}
|
||||
void table_help_message::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/utils.h>
|
||||
|
||||
#include "paragraph_elements.h"
|
||||
#include "serialize_elements.h"
|
||||
@ -312,14 +312,29 @@ void paragraph::afterCreate(document_context * Context)
|
||||
// вызывается сразу после создания объекта
|
||||
if (Context)
|
||||
{
|
||||
// выставляем у предыдущего параграфа указатель на следующий (т.е. на вновь созданный)
|
||||
if (paragraph * prevPar = Context->get_last_paragraph())
|
||||
prevPar->set_next(this);
|
||||
|
||||
// запоминаем в контексте вновь созданный параграф
|
||||
Context->set_last_paragraph(this);
|
||||
Context->level++;
|
||||
// выставляем у предыдущего параграфа указатель на следующий (т.е. на вновь созданный)
|
||||
|
||||
if (Context->level == 1)
|
||||
{
|
||||
if (paragraph * prevPar = Context->get_last_paragraph())
|
||||
{
|
||||
prevPar->set_next(this);
|
||||
}
|
||||
|
||||
// запоминаем в контексте вновь созданный параграф
|
||||
Context->set_last_paragraph(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
void paragraph::afterReadContent(document_context * Context)
|
||||
{
|
||||
if (Context)
|
||||
{
|
||||
Context->level--;
|
||||
}
|
||||
}
|
||||
|
||||
const wchar_t * emptyParagraphContent = L"<w:pPr></w:pPr><w:r><w:rPr></w:rPr></w:r>";
|
||||
|
||||
const wchar_t * emptyParagraphDrawing = L"<w:p><w:pPr></w:pPr></w:p>";
|
||||
@ -341,13 +356,13 @@ void paragraph::drop_cap_text_docx_convert(office_element_ptr first_text_element
|
||||
int textStyle = process_paragraph_attr(attrs_, Context);
|
||||
first_text_paragraph->docx_convert(Context);
|
||||
|
||||
int str_start = Context.get_drop_cap_context().Length;
|
||||
int str_size = store_str.length()-Context.get_drop_cap_context().Length;
|
||||
size_t str_start = Context.get_drop_cap_context().Length;
|
||||
size_t str_size = store_str.length() - Context.get_drop_cap_context().Length;
|
||||
|
||||
if (str_size < 0) str_size = 0; // это если на буквы в буквице разные стили
|
||||
if (str_start > store_str.length()) str_start = store_str.length(); // это если на буквы в буквице разные стили
|
||||
|
||||
str=store_str.substr(str_start, str_size);
|
||||
str = store_str.substr(str_start, str_size);
|
||||
}
|
||||
|
||||
size_t paragraph::drop_cap_docx_convert(oox::docx_conversion_context & Context)
|
||||
@ -435,27 +450,6 @@ void paragraph::docx_convert(oox::docx_conversion_context & Context)
|
||||
|
||||
std::wostream & _Wostream = Context.output_stream();
|
||||
|
||||
if (next_par_)
|
||||
{
|
||||
// проверяем не сменит ли следующий параграф свойства страницы.
|
||||
// если да — устанавливаем контексту флаг на то что необходимо в конце текущего параграфа
|
||||
// распечатать свойства раздела
|
||||
//проверить ... не она ли текущая - может быть прописан дубляж - и тогда разрыв нарисуется ненужный
|
||||
const std::wstring & next_styleName = next_par_->attrs_.text_style_name_;
|
||||
const _CP_OPT(std::wstring) next_masterPageName = Context.root()->odf_context().styleContainer().master_page_name_by_name(next_styleName);
|
||||
|
||||
if ((next_masterPageName) && (Context.get_master_page_name() != *next_masterPageName))
|
||||
{
|
||||
Context.next_dump_page_properties(true);
|
||||
is_empty = false;
|
||||
}
|
||||
}
|
||||
if (next_section_ || next_end_section_)
|
||||
{
|
||||
Context.get_section_context().get().is_dump_ = true;
|
||||
is_empty = false;
|
||||
}
|
||||
|
||||
const _CP_OPT(std::wstring) masterPageName = Context.root()->odf_context().styleContainer().master_page_name_by_name(styleName);
|
||||
|
||||
if (masterPageName)
|
||||
@ -469,6 +463,27 @@ void paragraph::docx_convert(oox::docx_conversion_context & Context)
|
||||
|
||||
is_empty = false;
|
||||
}
|
||||
|
||||
if (next_par_)
|
||||
{
|
||||
// проверяем не сменит ли следующий параграф свойства страницы.
|
||||
// если да — устанавливаем контексту флаг на то что необходимо в текущем параграфе
|
||||
// распечатать свойства раздела/секции
|
||||
//проверить ... не она ли текущая - может быть прописан дубляж - и тогда разрыв нарисуется ненужный
|
||||
const std::wstring & next_styleName = next_par_->attrs_.text_style_name_;
|
||||
const _CP_OPT(std::wstring) next_masterPageName = Context.root()->odf_context().styleContainer().master_page_name_by_name(next_styleName);
|
||||
|
||||
if ((next_masterPageName) && (Context.get_master_page_name() != *next_masterPageName))
|
||||
{
|
||||
Context.next_dump_page_properties(true);
|
||||
is_empty = false;
|
||||
}
|
||||
}
|
||||
if (next_section_/* || next_end_section_*/)
|
||||
{
|
||||
Context.get_section_context().get().is_dump_ = true;
|
||||
is_empty = false;
|
||||
}
|
||||
std::wstringstream strm;
|
||||
if (Context.process_page_properties(strm))
|
||||
{
|
||||
@ -604,7 +619,10 @@ void h::afterCreate()
|
||||
{
|
||||
paragraph_.afterCreate( getContext() );
|
||||
}
|
||||
|
||||
void h::afterReadContent()
|
||||
{
|
||||
paragraph_.afterReadContent( getContext() );
|
||||
}
|
||||
void h::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
paragraph_.docx_convert(Context);
|
||||
@ -627,7 +645,10 @@ void p::afterCreate()
|
||||
{
|
||||
paragraph_.afterCreate( getContext() );
|
||||
}
|
||||
|
||||
void p::afterReadContent()
|
||||
{
|
||||
paragraph_.afterReadContent( getContext() );
|
||||
}
|
||||
std::wostream & p::text_to_stream(std::wostream & _Wostream) const
|
||||
{
|
||||
return paragraph_.text_to_stream(_Wostream);
|
||||
@ -1424,7 +1445,119 @@ void text_change_end::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
Context.end_text_changes (*text_change_id_);
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
const wchar_t * text_variable_input::ns = L"text";
|
||||
const wchar_t * text_variable_input::name = L"variable-input";
|
||||
|
||||
void text_variable_input::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"office:value-type", office_value_type_);
|
||||
CP_APPLY_ATTR(L"style:data-style-name", style_data_style_name_);
|
||||
CP_APPLY_ATTR(L"text:description", text_description_);
|
||||
CP_APPLY_ATTR(L"text:display", text_display_);
|
||||
CP_APPLY_ATTR(L"text:name", text_name_);
|
||||
}
|
||||
void text_variable_input::add_text(const std::wstring & Text)
|
||||
{
|
||||
text_ = Text;
|
||||
}
|
||||
std::wostream & text_variable_input::text_to_stream(std::wostream & _Wostream) const
|
||||
{
|
||||
_Wostream << xml::utils::replace_text_to_xml( text_ );
|
||||
return _Wostream;
|
||||
}
|
||||
|
||||
void text_variable_input::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
std::wostream & strm = Context.output_stream();
|
||||
Context.finish_run();
|
||||
|
||||
strm << L"<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>";
|
||||
strm << L"<w:r><w:instrText>ASK "" << text_name_.get_value_or(L"") << L"" " << text_description_.get_value_or(L"") << L" \\d ";
|
||||
strm << text_;
|
||||
strm << L"</w:instrText></w:r>";
|
||||
strm << L"<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>";
|
||||
strm << L"<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>";
|
||||
|
||||
strm << L"<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>";
|
||||
strm << L"<w:r><w:instrText>REF "" << text_name_.get_value_or(L"") << L"" </w:instrText></w:r>";
|
||||
strm << L"<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>";
|
||||
strm << L"<w:r><w:t>" << text_ << L"</w:t></w:r>";
|
||||
strm << L"<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>";
|
||||
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
const wchar_t * text_variable_get::ns = L"text";
|
||||
const wchar_t * text_variable_get::name = L"variable-get";
|
||||
|
||||
void text_variable_get::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"style:data-style-name", style_data_style_name_);
|
||||
CP_APPLY_ATTR(L"text:display", text_display_);
|
||||
CP_APPLY_ATTR(L"text:name", text_name_);
|
||||
}
|
||||
void text_variable_get::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
const wchar_t * text_variable_set::ns = L"text";
|
||||
const wchar_t * text_variable_set::name = L"variable-set";
|
||||
|
||||
void text_variable_set::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"office:value-type", office_value_type_);
|
||||
CP_APPLY_ATTR(L"style:data-style-name", style_data_style_name_);
|
||||
CP_APPLY_ATTR(L"text:display", text_display_);
|
||||
CP_APPLY_ATTR(L"text:name", text_name_);
|
||||
|
||||
CP_APPLY_ATTR(L"office:value", office_value_);
|
||||
CP_APPLY_ATTR(L"office:boolean-value", office_boolean_value_);
|
||||
CP_APPLY_ATTR(L"office:date-value", office_date_value_);
|
||||
CP_APPLY_ATTR(L"office:time-value", office_time_value_);
|
||||
CP_APPLY_ATTR(L"office:string-value", office_string_value_);
|
||||
CP_APPLY_ATTR(L"office:currency", office_currency_);
|
||||
CP_APPLY_ATTR(L"office:formula", office_formula_);
|
||||
}
|
||||
void text_variable_set::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
const wchar_t * text_variable_decl::ns = L"text";
|
||||
const wchar_t * text_variable_decl::name = L"variable-decl";
|
||||
|
||||
void text_variable_decl::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"office:value-type", office_value_type_);
|
||||
CP_APPLY_ATTR(L"text:display", text_display_);
|
||||
CP_APPLY_ATTR(L"text:name", text_name_);
|
||||
}
|
||||
void text_variable_decl::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
const wchar_t * text_variable_decls::ns = L"text";
|
||||
const wchar_t * text_variable_decls::name = L"variable-decls";
|
||||
|
||||
void text_variable_decls::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
if CP_CHECK_NAME(L"text", L"variable-decl")
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
void text_variable_decls::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
for (size_t i = 0; i < content_.size(); i++)
|
||||
{
|
||||
content_[i]->docx_convert(Context);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -73,7 +73,8 @@ public:
|
||||
}
|
||||
|
||||
void afterCreate(document_context * ctx);
|
||||
|
||||
void afterReadContent(document_context * ctx);
|
||||
|
||||
void docx_convert (oox::docx_conversion_context & Context) ;
|
||||
void xlsx_convert (oox::xlsx_conversion_context & Context) ;
|
||||
void pptx_convert (oox::pptx_conversion_context & Context) ;
|
||||
@ -114,7 +115,9 @@ public:
|
||||
void pptx_convert(oox::pptx_conversion_context & Context) ;
|
||||
|
||||
virtual void afterCreate();
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
virtual void afterReadContent();
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
paragraph paragraph_;
|
||||
|
||||
@ -151,8 +154,9 @@ public:
|
||||
void pptx_convert(oox::pptx_conversion_context & Context) ;
|
||||
|
||||
virtual void afterCreate();
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
virtual void afterReadContent();
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
p(){};
|
||||
paragraph paragraph_;
|
||||
@ -245,7 +249,8 @@ public:
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
virtual void afterCreate();
|
||||
|
||||
virtual void afterCreate();
|
||||
virtual void afterReadContent();
|
||||
|
||||
private:
|
||||
@ -535,8 +540,6 @@ public:
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_index_title);
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class text_unknown_base_change : public office_element_impl<text_unknown_base_change>
|
||||
{
|
||||
@ -717,8 +720,137 @@ public:
|
||||
virtual void docx_convert(oox::docx_conversion_context & Context);
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_change_end);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
//text:variable-input
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class text_variable_input : public office_element_impl<text_variable_input>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextVariableInput;
|
||||
CPDOCCORE_DEFINE_VISITABLE()
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
|
||||
virtual void add_text(const std::wstring & Text);
|
||||
|
||||
_CP_OPT(odf_types::office_value_type) office_value_type_;
|
||||
_CP_OPT(std::wstring) style_data_style_name_;
|
||||
_CP_OPT(std::wstring) text_description_;
|
||||
_CP_OPT(std::wstring) text_display_;
|
||||
_CP_OPT(std::wstring) text_name_;
|
||||
|
||||
std::wstring text_;
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_variable_input);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
//text:variable-get
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class text_variable_get : public office_element_impl<text_variable_get>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextVariableGet;
|
||||
CPDOCCORE_DEFINE_VISITABLE()
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
|
||||
|
||||
_CP_OPT(std::wstring) style_data_style_name_;
|
||||
_CP_OPT(std::wstring) text_display_;
|
||||
_CP_OPT(std::wstring) text_name_;
|
||||
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_variable_get);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
//text:variable-set
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class text_variable_set : public office_element_impl<text_variable_set>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextVariableSet;
|
||||
CPDOCCORE_DEFINE_VISITABLE()
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
|
||||
|
||||
_CP_OPT(odf_types::office_value_type) office_value_type_;
|
||||
|
||||
_CP_OPT(std::wstring) office_boolean_value_;
|
||||
_CP_OPT(std::wstring) office_date_value_;
|
||||
_CP_OPT(std::wstring) office_time_value_;
|
||||
_CP_OPT(std::wstring) office_string_value_;
|
||||
_CP_OPT(std::wstring) office_value_;
|
||||
_CP_OPT(std::wstring) office_currency_;
|
||||
_CP_OPT(std::wstring) office_formula_;
|
||||
_CP_OPT(std::wstring) style_data_style_name_;
|
||||
_CP_OPT(std::wstring) text_display_;
|
||||
_CP_OPT(std::wstring) text_name_;
|
||||
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_variable_set);
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//text:variable-decl
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class text_variable_decl : public office_element_impl<text_variable_decl>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextVariableDecl;
|
||||
CPDOCCORE_DEFINE_VISITABLE()
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
|
||||
|
||||
_CP_OPT(odf_types::office_value_type) office_value_type_;
|
||||
_CP_OPT(std::wstring) text_display_;
|
||||
_CP_OPT(std::wstring) text_name_;
|
||||
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_variable_decl);
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//text:variable-decls
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class text_variable_decls : public office_element_impl<text_variable_decls>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextVariableDecls;
|
||||
CPDOCCORE_DEFINE_VISITABLE()
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes ){}
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
|
||||
office_element_ptr_array content_;
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_variable_decls);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -53,7 +53,7 @@
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
DisableSpecificWarnings="4311;4267;4996;4172"
|
||||
DisableSpecificWarnings="4005;4311;4312"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
|
||||
@ -53,7 +53,7 @@
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="4"
|
||||
DisableSpecificWarnings="4311;4267;4996;4172"
|
||||
DisableSpecificWarnings="4005;4311;4312"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
@ -642,6 +642,14 @@
|
||||
RelativePath="..\src\docx\xlsx_conditionalFormatting.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\docx\xlsx_data_validation.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\docx\xlsx_data_validation.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\docx\xlsx_defined_names.cpp"
|
||||
>
|
||||
|
||||
@ -53,7 +53,7 @@
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
DisableSpecificWarnings="4311;4267;4996;4172"
|
||||
DisableSpecificWarnings="4005;4311;4312"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
|
||||
@ -49,7 +49,7 @@
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
DisableSpecificWarnings="4311;4267;4996;4172"
|
||||
DisableSpecificWarnings="4005;4311;4312"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
|
||||
@ -22,8 +22,6 @@ include($$PWD/../../Common/3dParty/boost/boost.pri)
|
||||
DEFINES += UNICODE \
|
||||
_UNICODE \
|
||||
_USE_LIBXML2_READER_ \
|
||||
_USE_XMLLITE_READER_ \
|
||||
USE_LITE_READER \
|
||||
LIBXML_READER_ENABLED \
|
||||
DONT_WRITE_EMBEDDED_FONTS
|
||||
|
||||
|
||||
@ -151,13 +151,17 @@ namespace odf_writer
|
||||
CP_XML_ATTR(L"xmlns:smil", L"urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0");
|
||||
CP_XML_ATTR(L"xmlns:anim", L"urn:oasis:names:tc:opendocument:xmlns:animation:1.0");
|
||||
CP_XML_ATTR(L"xmlns:chartooo", L"http://openoffice.org/2010/chart");
|
||||
CP_XML_ATTR(L"office:version", L"1.2");
|
||||
CP_XML_ATTR(L"office:version", L"1.2");
|
||||
|
||||
CP_XML_NODE(L"office:meta")
|
||||
{
|
||||
CP_XML_NODE(L"meta:generator")
|
||||
{
|
||||
CP_XML_STREAM() << L"ONLYOFFICE Online Editor";
|
||||
CP_XML_STREAM() << L"ONLYOFFICE";
|
||||
#if defined(INTVER)
|
||||
std::string s = VALUE2STR(INTVER);
|
||||
CP_XML_STREAM() << L"/" << std::wstring (s.begin(), s.end() );
|
||||
#endif
|
||||
}
|
||||
CP_XML_NODE(L"meta:initial-creator");
|
||||
CP_XML_NODE(L"meta:creation-date");
|
||||
|
||||
@ -1624,9 +1624,9 @@ void odf_chart_context::set_cash(std::wstring format, std::vector<std::wstring>
|
||||
ref1 = std::wstring(L"local-table.") + utils::getColAddress(start_col) + boost::lexical_cast<std::wstring>(start_row);
|
||||
//
|
||||
if (by_row)
|
||||
ref2 = std::wstring(L"local-table.") + utils::getColAddress(start_col) + boost::lexical_cast<std::wstring>(start_row + count_cash_values);
|
||||
ref2 = std::wstring(L"local-table.") + utils::getColAddress(start_col) + std::to_wstring(start_row + count_cash_values);
|
||||
else
|
||||
ref2 = std::wstring(L"local-table.") + utils::getColAddress(start_col + count_cash_values) + boost::lexical_cast<std::wstring>(start_row);
|
||||
ref2 = std::wstring(L"local-table.") + utils::getColAddress(start_col + count_cash_values) + std::to_wstring(start_row);
|
||||
|
||||
ref = ref1 + L":" + ref2;
|
||||
}
|
||||
|
||||
@ -540,6 +540,7 @@ void odf_number_styles_context::create_date_style(number_format_state & state, o
|
||||
boost::algorithm::to_lower(s);
|
||||
|
||||
boost::wregex re(L"([a-zA-Z]+)(\\W+)");//(L"(\\w+)");
|
||||
|
||||
std::list<std::wstring> result;
|
||||
bool b = boost::regex_split(std::back_inserter(result),s, re);
|
||||
result.push_back(s);//последний ..выносится - так уж работает boost.regex_split
|
||||
@ -627,12 +628,12 @@ void odf_number_styles_context::create_time_style(number_format_state & state, o
|
||||
|
||||
int res;
|
||||
int sz=0;
|
||||
for (std::list<std::wstring>::iterator i=result.begin(); i!=result.end(); ++i)
|
||||
for (std::list<std::wstring>::iterator it = result.begin(); it != result.end(); ++it)
|
||||
{
|
||||
office_element_ptr elm;
|
||||
s = *i;
|
||||
s = *it;
|
||||
sz = s.length();
|
||||
if ((res=s.find(L"h")) >=0)
|
||||
if ((res=s.find(L"h")) >= 0)
|
||||
{
|
||||
create_element(L"number", L"hours", elm, odf_context_);
|
||||
number_hours* number_hours_ = dynamic_cast<number_hours*>(elm.get());
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <list>
|
||||
#include <vector>
|
||||
#include "odp_page_state.h"
|
||||
|
||||
#include "odf_table_context.h"
|
||||
@ -83,7 +83,7 @@ private:
|
||||
odf_table_context table_context_;
|
||||
odf_comment_context comment_context_;
|
||||
|
||||
std::list<odp_page_state> page_state_list_;
|
||||
std::vector<odp_page_state> page_state_list_;
|
||||
int count_slides_;
|
||||
|
||||
friend class odp_conversion_context;
|
||||
|
||||
@ -115,6 +115,10 @@ void ods_conversion_context::set_table_part_autofilter(bool val)
|
||||
{
|
||||
table_context_.set_table_part_autofilter(val);
|
||||
}
|
||||
void ods_conversion_context::add_table_part_column(std::wstring name)
|
||||
{
|
||||
table_context_.add_table_part_column(name);
|
||||
}
|
||||
void ods_conversion_context::end_table_part()
|
||||
{
|
||||
table_context_.end_table_part();
|
||||
|
||||
@ -110,6 +110,7 @@ public:
|
||||
void start_table_part (std::wstring name, std::wstring ref);
|
||||
void end_table_part ();
|
||||
void set_table_part_autofilter(bool val);
|
||||
void add_table_part_column(std::wstring name);
|
||||
|
||||
void start_conditional_formats();
|
||||
void end_conditional_formats(){}
|
||||
|
||||
@ -78,8 +78,36 @@ void ods_table_context::start_table_part(std::wstring name, std::wstring ref)
|
||||
|
||||
table_database_ranges_.root->add_child_element(elm);
|
||||
table_database_ranges_.elements.push_back(elm);
|
||||
|
||||
table_part_state part_state;
|
||||
part_state.name = name;
|
||||
part_state.ref = ref;
|
||||
|
||||
int r = ref.rfind(L":");
|
||||
if (r < 0) return;//тута однозначно .. по правилам оох
|
||||
|
||||
utils::parsing_ref (ref.substr(0, r), part_state.col_start, part_state.row_start);
|
||||
utils::parsing_ref (ref.substr(r + 1, ref.size() - r), part_state.col_end, part_state.row_end);
|
||||
|
||||
state().table_parts_.push_back(part_state);
|
||||
}
|
||||
|
||||
void ods_table_context::add_table_part_column(std::wstring name)
|
||||
{
|
||||
if (state().table_parts_.empty()) return;
|
||||
|
||||
size_t column = state().table_parts_.back().columns.size();
|
||||
|
||||
std::wstring sCol = utils::getColAddress(state().table_parts_.back().col_start + column - 1);
|
||||
|
||||
std::wstring ref;//table name ????
|
||||
|
||||
ref += sCol + std::to_wstring(state().table_parts_.back().row_start);
|
||||
ref += L":";
|
||||
ref += sCol + std::to_wstring(state().table_parts_.back().row_end);
|
||||
|
||||
state().table_parts_.back().columns.push_back(std::make_pair(name, ref));
|
||||
}
|
||||
void ods_table_context::set_table_part_autofilter(bool val)
|
||||
{
|
||||
if (!val) return;
|
||||
@ -152,15 +180,13 @@ void ods_table_context::add_defined_range(const std::wstring & name, const std::
|
||||
|
||||
if (sheet_id >=0)
|
||||
{
|
||||
int i=0;
|
||||
for (std::list<ods_table_state>::iterator iter = table_state_list_.begin(); iter != table_state_list_.end(); iter++)
|
||||
for (size_t i = 0; i < table_state_list_.size(); ++i)
|
||||
{
|
||||
if (i == sheet_id)
|
||||
{
|
||||
iter->add_definded_expression(elm);
|
||||
table_state_list_[i].add_definded_expression(elm);
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -187,31 +213,23 @@ void ods_table_context::add_defined_expression(const std::wstring & name, const
|
||||
named_expression->table_name_ = name;
|
||||
named_expression->table_expression_ = odf_value;
|
||||
|
||||
if (sheet_id >=0)
|
||||
if (sheet_id >=0 && sheet_id < table_state_list_.size())
|
||||
{
|
||||
int i=0;
|
||||
for (std::list<ods_table_state>::iterator iter = table_state_list_.begin(); iter != table_state_list_.end(); iter++)
|
||||
odf_base_cell = table_state_list_[sheet_id].office_table_name_ + L".$A$1";
|
||||
table_state_list_[sheet_id].add_definded_expression(elm);
|
||||
|
||||
if ( printable)
|
||||
{
|
||||
if (i == sheet_id)
|
||||
{
|
||||
odf_base_cell = iter->office_table_name_ + L".$A$1";
|
||||
iter->add_definded_expression(elm);
|
||||
if ( printable)
|
||||
{
|
||||
XmlUtils::replace_all( odf_value, L"[", L"");
|
||||
XmlUtils::replace_all( odf_value, L"]", L"");
|
||||
XmlUtils::replace_all( odf_value, L";", L" ");
|
||||
XmlUtils::replace_all( odf_value, L"[", L"");
|
||||
XmlUtils::replace_all( odf_value, L"]", L"");
|
||||
XmlUtils::replace_all( odf_value, L";", L" ");
|
||||
|
||||
iter->set_print_range(odf_value);
|
||||
}
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
table_state_list_[sheet_id].set_print_range(odf_value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!table_defined_expressions_.root)create_element(L"table", L"named-expressions",table_defined_expressions_.root,&context_);
|
||||
if (!table_defined_expressions_.root)create_element(L"table", L"named-expressions", table_defined_expressions_.root,&context_);
|
||||
table_defined_expressions_.root->add_child_element(elm);
|
||||
}
|
||||
|
||||
|
||||
@ -52,8 +52,6 @@ struct table_additional_elements_state
|
||||
std::vector<office_element_ptr> elements;
|
||||
};
|
||||
|
||||
|
||||
/// \class ods_table_context
|
||||
class ods_table_context
|
||||
{
|
||||
public:
|
||||
@ -76,13 +74,14 @@ public:
|
||||
|
||||
void start_table_part(std::wstring name, std::wstring ref);
|
||||
void set_table_part_autofilter(bool val);
|
||||
void add_table_part_column(std::wstring name);
|
||||
void end_table_part();
|
||||
|
||||
private:
|
||||
|
||||
ods_conversion_context & context_;
|
||||
|
||||
std::list<ods_table_state> table_state_list_;
|
||||
std::vector<ods_table_state> table_state_list_;
|
||||
|
||||
table_additional_elements_state table_defined_expressions_;
|
||||
table_additional_elements_state table_database_ranges_;
|
||||
|
||||
@ -634,15 +634,15 @@ void ods_table_state::set_merge_cells(int start_col, int start_row, int end_col,
|
||||
|
||||
if (spanned_cols > 10000)spanned_cols = 1024;
|
||||
|
||||
for (std::list<ods_cell_state>::iterator cell = cells_.begin(); cell != cells_.end(); cell++)
|
||||
for (size_t i = 0; i < cells_.size(); ++i)
|
||||
{
|
||||
if (cell->row > end_row) break;
|
||||
if (cells_[i].row > end_row) break;
|
||||
|
||||
if (cell->row >= start_row)
|
||||
if (cells_[i].row >= start_row)
|
||||
{
|
||||
if (cell->col >= start_col)
|
||||
if (cells_[i].col >= start_col)
|
||||
{
|
||||
table_table_cell* cell_elm = dynamic_cast<table_table_cell*>(cell->elm.get());
|
||||
table_table_cell* cell_elm = dynamic_cast<table_table_cell*>(cells_[i].elm.get());
|
||||
if (cell_elm == NULL)return;
|
||||
|
||||
cell_elm->table_table_cell_attlist_extra_.table_number_columns_spanned_ = spanned_cols;
|
||||
@ -668,6 +668,24 @@ void ods_table_state::set_cell_formula(std::wstring & formula)
|
||||
}
|
||||
|
||||
std::wstring odfFormula = formulas_converter_table.convert_formula(formula);
|
||||
|
||||
if (std::wstring::npos != odfFormula.find(L"["))
|
||||
{
|
||||
for (size_t i = 0; i < table_parts_.size(); i++)
|
||||
{
|
||||
if (table_parts_[i].in_ref(current_table_column_, current_table_row_))
|
||||
{
|
||||
for (size_t j = 0; j < table_parts_[i].columns.size(); j ++)
|
||||
{
|
||||
std::wstring name = table_parts_[i].name + L"[" + table_parts_[i].columns[j].first + L"]";
|
||||
//Таблица1[ Сумма за кв. 3 ]
|
||||
|
||||
XmlUtils::replace_all(odfFormula, name, table_parts_[i].columns[j].second);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
table_table_cell* cell = dynamic_cast<table_table_cell*>(cells_.back().elm.get());
|
||||
if (cell == NULL)return;
|
||||
@ -684,7 +702,7 @@ std::wstring ods_table_state::replace_cell_row(boost::wsmatch const & what)
|
||||
int col_formula=0, row_formula=0;
|
||||
utils::parsing_ref(ref_formula, col_formula, row_formula);col_formula--;//инче отсчет с 1
|
||||
|
||||
ref_formula = utils::getColAddress(col_formula)+boost::lexical_cast<std::wstring>(row_formula+current_table_row_ -tmp_row_);
|
||||
ref_formula = utils::getColAddress(col_formula) + std::to_wstring(row_formula +current_table_row_ - tmp_row_);
|
||||
|
||||
|
||||
return ref_formula;
|
||||
|
||||
@ -69,7 +69,8 @@ class odf_text_context;
|
||||
class table_table;
|
||||
class style;
|
||||
|
||||
namespace utils {
|
||||
namespace utils
|
||||
{
|
||||
static std::wstring getColAddress(size_t col)
|
||||
{
|
||||
static const size_t r = (L'Z' - L'A' + 1);
|
||||
@ -78,8 +79,8 @@ namespace utils {
|
||||
|
||||
if (r0 > 0)
|
||||
{
|
||||
const std::wstring rest = getColAddress(col - r*r0);
|
||||
const std::wstring res = getColAddress(r0-1) + rest;
|
||||
const std::wstring rest = getColAddress(col - r * r0);
|
||||
const std::wstring res = getColAddress(r0 - 1) + rest;
|
||||
return res;
|
||||
}
|
||||
else
|
||||
@ -210,6 +211,24 @@ struct ods_shared_formula_state
|
||||
int moving_type; //1 - col, 2 - row
|
||||
};
|
||||
|
||||
struct table_part_state
|
||||
{
|
||||
std::wstring name;
|
||||
std::wstring ref;
|
||||
|
||||
int col_start = 0;
|
||||
int row_start = 0;
|
||||
|
||||
int col_end = 0;
|
||||
int row_end = 0;
|
||||
|
||||
bool in_ref(int col, int row)
|
||||
{
|
||||
return (col >= col_start && col <= col_end && row >= row_start && row <= row_end);
|
||||
}
|
||||
|
||||
std::vector<std::pair<std::wstring, std::wstring>> columns; //name, odf_ref
|
||||
};
|
||||
struct ods_array_formula_state
|
||||
{
|
||||
std::wstring formula;
|
||||
@ -341,12 +360,14 @@ private:
|
||||
|
||||
std::vector<office_element_ptr> current_level_;//постоянно меняющийся список уровней ("0-й элемент - сама таблица)
|
||||
|
||||
std::list<ods_cell_state> cells_;
|
||||
std::vector<ods_cell_state> cells_;
|
||||
long cells_size_;
|
||||
|
||||
std::vector<ods_hyperlink_state> hyperlinks_;
|
||||
std::vector<ods_shared_formula_state> shared_formulas_;
|
||||
|
||||
std::vector<table_part_state> table_parts_;
|
||||
|
||||
odf_drawing_context drawing_context_;
|
||||
|
||||
friend class ods_table_context;
|
||||
|
||||
@ -141,7 +141,7 @@ odf_writer::odf_conversion_context* DocxConverter::odf_context()
|
||||
PPTX::Theme* DocxConverter::oox_theme()
|
||||
{
|
||||
if (docx_document)
|
||||
return docx_document->GetTheme();
|
||||
return docx_document->m_pTheme;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
@ -151,22 +151,17 @@ OOX::IFileContainer* DocxConverter::current_document()
|
||||
return oox_current_child_document;
|
||||
else
|
||||
{
|
||||
OOX::CDocument *oox_doc = docx_document->GetDocument();
|
||||
return dynamic_cast<OOX::IFileContainer*>(oox_doc);
|
||||
return dynamic_cast<OOX::IFileContainer*>(docx_document->m_pDocument);
|
||||
}
|
||||
}
|
||||
NSCommon::smart_ptr<OOX::File> DocxConverter::find_file_by_id(std::wstring sId)
|
||||
{
|
||||
OOX::CDocument *oox_doc = docx_document->GetDocument();
|
||||
|
||||
smart_ptr<OOX::File> oFile;
|
||||
if (oox_doc)
|
||||
{
|
||||
if (oox_current_child_document)
|
||||
oFile = oox_current_child_document->Find(sId);
|
||||
else
|
||||
oFile = oox_doc->Find(sId);
|
||||
}
|
||||
|
||||
if (oox_current_child_document)
|
||||
oFile = oox_current_child_document->Find(sId);
|
||||
else if (docx_document->m_pDocument)
|
||||
oFile = docx_document->m_pDocument->Find(sId);
|
||||
|
||||
return oFile;
|
||||
}
|
||||
@ -185,10 +180,9 @@ std::wstring DocxConverter::find_link_by_id (std::wstring sId, int type)
|
||||
}
|
||||
if (!ref.empty()) return ref;
|
||||
|
||||
OOX::CDocument *oox_doc = docx_document->GetDocument();
|
||||
if (oox_doc == NULL) return L"";
|
||||
if (docx_document->m_pDocument == NULL) return L"";
|
||||
|
||||
oFile = oox_doc->Find(sId);
|
||||
oFile = docx_document->m_pDocument->Find(sId);
|
||||
ref = OoxConverter::find_link_by(oFile, type);
|
||||
|
||||
return ref;
|
||||
@ -221,8 +215,7 @@ void DocxConverter::convertDocument()
|
||||
|
||||
void DocxConverter::convert_document()
|
||||
{
|
||||
const OOX::CDocument* document = docx_document->GetDocument();
|
||||
if (!document)return;
|
||||
if (!docx_document->m_pDocument)return;
|
||||
|
||||
std::vector<_section> sections;
|
||||
//----------------------------------------------------------------------------------------------------------
|
||||
@ -231,13 +224,13 @@ void DocxConverter::convert_document()
|
||||
|
||||
OOX::Logic::CSectionProperty* prev = NULL;
|
||||
|
||||
for (size_t i = 0; i < document->m_arrItems.size(); ++i)
|
||||
for (size_t i = 0; i < docx_document->m_pDocument->m_arrItems.size(); ++i)
|
||||
{
|
||||
if ((document->m_arrItems[i]) == NULL) continue;
|
||||
if ((docx_document->m_pDocument->m_arrItems[i]) == NULL) continue;
|
||||
|
||||
if (document->m_arrItems[i]->getType() == OOX::et_w_p)
|
||||
if (docx_document->m_pDocument->m_arrItems[i]->getType() == OOX::et_w_p)
|
||||
{
|
||||
OOX::Logic::CParagraph * para = dynamic_cast<OOX::Logic::CParagraph *>(document->m_arrItems[i]);
|
||||
OOX::Logic::CParagraph * para = dynamic_cast<OOX::Logic::CParagraph *>(docx_document->m_pDocument->m_arrItems[i]);
|
||||
|
||||
if ((para) && (para->m_oParagraphProperty))
|
||||
{
|
||||
@ -260,15 +253,17 @@ void DocxConverter::convert_document()
|
||||
}
|
||||
_section section;
|
||||
|
||||
section.props = document->m_oSectPr.GetPointer();
|
||||
section.props = docx_document->m_pDocument->m_oSectPr.GetPointer();
|
||||
section.start_para = last_section_start;
|
||||
section.end_para = document->m_arrItems.size();
|
||||
section.end_para = docx_document->m_pDocument->m_arrItems.size();
|
||||
section.bContinue = compare (prev, section.props);
|
||||
|
||||
sections.push_back(section);
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------
|
||||
|
||||
convert(docx_document->m_pDocument->m_oSectPr.GetPointer(), false, L"Standard");
|
||||
|
||||
odt_context->text_context()->clear_params();
|
||||
|
||||
for (size_t sect = 0; sect < sections.size(); sect++)
|
||||
@ -277,7 +272,7 @@ void DocxConverter::convert_document()
|
||||
|
||||
for (size_t i = sections[sect].start_para; i < sections[sect].end_para; ++i)
|
||||
{
|
||||
convert(document->m_arrItems[i]);
|
||||
convert(docx_document->m_pDocument->m_arrItems[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1419,7 +1414,7 @@ void DocxConverter::apply_HF_from(OOX::Logic::CSectionProperty *props, OOX::Logi
|
||||
}
|
||||
}
|
||||
}
|
||||
void DocxConverter::convert(OOX::Logic::CSectionProperty *oox_section_pr, bool bSection)
|
||||
void DocxConverter::convert(OOX::Logic::CSectionProperty *oox_section_pr, bool bSection, const std::wstring & master_name)
|
||||
{
|
||||
if (oox_section_pr == NULL) return;
|
||||
current_section_properties = NULL;
|
||||
@ -1444,18 +1439,24 @@ void DocxConverter::convert(OOX::Logic::CSectionProperty *oox_section_pr, bool b
|
||||
}
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
if (!last_section_properties && (!bSection || continuous == false || oox_section_pr->m_oTitlePg.IsInit()))
|
||||
{
|
||||
last_section_properties = oox_section_pr;
|
||||
}
|
||||
else if (!bSection || continuous == false)
|
||||
|
||||
bool bDefault = (master_name == L"Standard");
|
||||
|
||||
if (!bDefault)
|
||||
{
|
||||
apply_HF_from(last_section_properties, oox_section_pr);
|
||||
if (!last_section_properties && (!bSection || continuous == false || oox_section_pr->m_oTitlePg.IsInit()))
|
||||
{
|
||||
last_section_properties = oox_section_pr;
|
||||
}
|
||||
else if (!bSection || continuous == false)
|
||||
{
|
||||
apply_HF_from(last_section_properties, oox_section_pr);
|
||||
}
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
if (!bSection || continuous == false)
|
||||
{
|
||||
odt_context->page_layout_context()->add_master_page(bSection ? L"" : L"Standard");
|
||||
odt_context->page_layout_context()->add_master_page(master_name);
|
||||
}
|
||||
|
||||
bool present_header = false;
|
||||
@ -1572,7 +1573,7 @@ void DocxConverter::convert(OOX::Logic::CSectionProperty *oox_section_pr, bool b
|
||||
|
||||
//nullable<SimpleTypes::CDecimalNumber<> > m_oCode;
|
||||
}
|
||||
convert(docx_document->GetDocument()->m_oBackground.GetPointer(), 1);//подложка - вот в таком она месте :(, причём одна на все разделы, не как в оо
|
||||
convert(docx_document->m_pDocument->m_oBackground.GetPointer(), 1);//подложка - вот в таком она месте :(, причём одна на все разделы, не как в оо
|
||||
//nullable<ComplexTypes::Word::CTextDirection > m_oTextDirection;
|
||||
//nullable<ComplexTypes::Word::COnOff2<SimpleTypes::onoffTrue> > m_oRtlGutter;
|
||||
//nullable<ComplexTypes::Word::CVerticalJc > m_oVAlign;
|
||||
@ -1592,7 +1593,7 @@ void DocxConverter::convert(OOX::Logic::CSectionProperty *oox_section_pr, bool b
|
||||
|
||||
if (continuous == false || oox_section_pr->m_oTitlePg.IsInit())
|
||||
{
|
||||
OOX::Logic::CSectionProperty* s = last_section_properties;
|
||||
OOX::Logic::CSectionProperty* s = last_section_properties ? last_section_properties : oox_section_pr;
|
||||
|
||||
bool present_title_page = s->m_oTitlePg.IsInit() ? true : false;
|
||||
bool present_odd_even_pages = odt_context->page_layout_context()->even_and_left_headers_;
|
||||
@ -1621,7 +1622,7 @@ void DocxConverter::convert(OOX::Logic::CSectionProperty *oox_section_pr, bool b
|
||||
if (s->m_arrHeaderReference[i]->m_oId.IsInit())
|
||||
{
|
||||
convert_hdr_ftr(s->m_arrHeaderReference[i]->m_oId->GetValue());
|
||||
convert(docx_document->GetDocument()->m_oBackground.GetPointer(), 2);
|
||||
convert(docx_document->m_pDocument->m_oBackground.GetPointer(), 2);
|
||||
}
|
||||
|
||||
odt_context->end_header_footer();
|
||||
@ -1649,7 +1650,7 @@ void DocxConverter::convert(OOX::Logic::CSectionProperty *oox_section_pr, bool b
|
||||
if (s->m_arrFooterReference[i]->m_oId.IsInit())
|
||||
{
|
||||
convert_hdr_ftr(s->m_arrFooterReference[i]->m_oId->GetValue());
|
||||
convert(docx_document->GetDocument()->m_oBackground.GetPointer(), 3);
|
||||
convert(docx_document->m_pDocument->m_oBackground.GetPointer(), 3);
|
||||
}
|
||||
|
||||
odt_context->end_header_footer();
|
||||
@ -1659,7 +1660,8 @@ void DocxConverter::convert(OOX::Logic::CSectionProperty *oox_section_pr, bool b
|
||||
if (!add_odd_even_pages_footer && present_odd_even_pages) odt_context->add_empty_footer(1);
|
||||
if (!add_default_footer && (present_odd_even_pages || present_title_page)) odt_context->add_empty_footer(0);
|
||||
|
||||
odt_context->is_paragraph_in_current_section_ = true;
|
||||
if (!bDefault)
|
||||
odt_context->is_paragraph_in_current_section_ = true;
|
||||
|
||||
//odt_context->set_master_page_name(odt_context->page_layout_context()->last_master() ?
|
||||
// odt_context->page_layout_context()->last_master()->get_name() : L"");
|
||||
@ -1701,24 +1703,27 @@ void DocxConverter::convert(OOX::Logic::CSectionProperty *oox_section_pr, bool b
|
||||
odt_context->add_section_columns(num_columns,
|
||||
oox_section_pr->m_oCols->m_arrColumns.size() > 0 ? -1 : default_space_pt , separator );
|
||||
|
||||
std::vector<std::pair<double,double>> width_space;
|
||||
|
||||
for (size_t i = 0; i< oox_section_pr->m_oCols->m_arrColumns.size(); i++)
|
||||
if (num_columns > 1) //
|
||||
{
|
||||
if (oox_section_pr->m_oCols->m_arrColumns[i] == NULL) continue;
|
||||
std::vector<std::pair<double,double>> width_space;
|
||||
|
||||
double space = default_space_pt;
|
||||
if (oox_section_pr->m_oCols->m_arrColumns[i]->m_oSpace.IsInit())
|
||||
space = oox_section_pr->m_oCols->m_arrColumns[i]->m_oSpace->ToPoints();
|
||||
|
||||
double w = -1;
|
||||
if (oox_section_pr->m_oCols->m_arrColumns[i]->m_oW.IsInit())
|
||||
w = oox_section_pr->m_oCols->m_arrColumns[i]->m_oW->ToPoints();
|
||||
for (size_t i = 0; i < oox_section_pr->m_oCols->m_arrColumns.size(); i++)
|
||||
{
|
||||
if (oox_section_pr->m_oCols->m_arrColumns[i] == NULL) continue;
|
||||
|
||||
double space = default_space_pt;
|
||||
if (oox_section_pr->m_oCols->m_arrColumns[i]->m_oSpace.IsInit())
|
||||
space = oox_section_pr->m_oCols->m_arrColumns[i]->m_oSpace->ToPoints();
|
||||
|
||||
width_space.push_back(std::pair<double,double>(w, space));
|
||||
}
|
||||
double w = -1;
|
||||
if (oox_section_pr->m_oCols->m_arrColumns[i]->m_oW.IsInit())
|
||||
w = oox_section_pr->m_oCols->m_arrColumns[i]->m_oW->ToPoints();
|
||||
|
||||
width_space.push_back(std::pair<double,double>(w, space));
|
||||
}
|
||||
|
||||
odt_context->add_section_column(width_space);
|
||||
odt_context->add_section_column(width_space);
|
||||
}
|
||||
}
|
||||
}
|
||||
void DocxConverter::convert(OOX::Logic::CBackground *oox_background, int type)
|
||||
@ -2335,8 +2340,7 @@ void DocxConverter::convert(SimpleTypes::CTheme<>* oox_font_theme, _CP_OPT(std::
|
||||
{
|
||||
if (oox_font_theme == NULL) return;
|
||||
|
||||
PPTX::Theme * docx_theme= docx_document->GetTheme();
|
||||
if (docx_theme == NULL) return;
|
||||
if (docx_document->m_pTheme == NULL) return;
|
||||
|
||||
std::wstring font;
|
||||
|
||||
@ -2344,23 +2348,23 @@ void DocxConverter::convert(SimpleTypes::CTheme<>* oox_font_theme, _CP_OPT(std::
|
||||
{
|
||||
case SimpleTypes::themeMajorAscii:
|
||||
case SimpleTypes::themeMajorHAnsi :
|
||||
font = docx_theme->themeElements.fontScheme.majorFont.latin.typeface;
|
||||
font = docx_document->m_pTheme->themeElements.fontScheme.majorFont.latin.typeface;
|
||||
break;
|
||||
case SimpleTypes::themeMajorBidi:
|
||||
font = docx_theme->themeElements.fontScheme.majorFont.cs.typeface;
|
||||
font = docx_document->m_pTheme->themeElements.fontScheme.majorFont.cs.typeface;
|
||||
break;
|
||||
case SimpleTypes::themeMajorEastAsia:
|
||||
font = docx_theme->themeElements.fontScheme.majorFont.ea.typeface;
|
||||
font = docx_document->m_pTheme->themeElements.fontScheme.majorFont.ea.typeface;
|
||||
break;
|
||||
case SimpleTypes::themeMinorAscii:
|
||||
case SimpleTypes::themeMinorHAnsi:
|
||||
font = docx_theme->themeElements.fontScheme.minorFont.latin.typeface;
|
||||
font = docx_document->m_pTheme->themeElements.fontScheme.minorFont.latin.typeface;
|
||||
break;
|
||||
case SimpleTypes::themeMinorBidi:
|
||||
font = docx_theme->themeElements.fontScheme.minorFont.cs.typeface;
|
||||
font = docx_document->m_pTheme->themeElements.fontScheme.minorFont.cs.typeface;
|
||||
break;
|
||||
case SimpleTypes::themeMinorEastAsia:
|
||||
font = docx_theme->themeElements.fontScheme.minorFont.ea.typeface;
|
||||
font = docx_document->m_pTheme->themeElements.fontScheme.minorFont.ea.typeface;
|
||||
break;
|
||||
}
|
||||
if (!font.empty()) odf_font_name = font;
|
||||
@ -2867,11 +2871,9 @@ void DocxConverter::convert(SimpleTypes::CHexColor<> *color,
|
||||
}
|
||||
if(theme_color && result == false)
|
||||
{
|
||||
PPTX::Theme * docx_theme= docx_document->GetTheme();
|
||||
|
||||
std::map<std::wstring, PPTX::Logic::UniColor>::iterator pFind = docx_theme->themeElements.clrScheme.Scheme.find(theme_color->ToString());
|
||||
std::map<std::wstring, PPTX::Logic::UniColor>::iterator pFind = docx_document->m_pTheme->themeElements.clrScheme.Scheme.find(theme_color->ToString());
|
||||
|
||||
if (pFind != docx_theme->themeElements.clrScheme.Scheme.end())
|
||||
if (pFind != docx_document->m_pTheme->themeElements.clrScheme.Scheme.end())
|
||||
{
|
||||
PPTX::Logic::UniColor & color = pFind->second;
|
||||
|
||||
@ -2890,38 +2892,36 @@ void DocxConverter::convert(ComplexTypes::Word::CColor *color, _CP_OPT(odf_types
|
||||
PPTX::Logic::ClrMap* DocxConverter::oox_clrMap()
|
||||
{
|
||||
//return current_clrMap; todoooo
|
||||
OOX::CSettings * docx_settings = docx_document->GetSettings();
|
||||
if (!docx_settings) return NULL;
|
||||
if (!docx_document->m_pSettings) return NULL;
|
||||
|
||||
return docx_settings->m_oClrSchemeMapping.GetPointer();
|
||||
return docx_document->m_pSettings->m_oClrSchemeMapping.GetPointer();
|
||||
}
|
||||
void DocxConverter::convert_settings()
|
||||
{
|
||||
if (!odt_context) return;
|
||||
|
||||
OOX::CSettings * docx_settings = docx_document->GetSettings();
|
||||
if (!docx_settings) return;
|
||||
if (!docx_document->m_pSettings) return;
|
||||
|
||||
if (docx_settings->m_oZoom.IsInit())
|
||||
if (docx_document->m_pSettings->m_oZoom.IsInit())
|
||||
{
|
||||
}
|
||||
if (docx_settings->m_oMirrorMargins.IsInit())
|
||||
if (docx_document->m_pSettings->m_oMirrorMargins.IsInit())
|
||||
{
|
||||
odt_context->page_layout_context()->set_pages_mirrored(true);
|
||||
}
|
||||
|
||||
odt_context->page_layout_context()->even_and_left_headers_ = docx_settings->m_oEvenAndOddHeaders.IsInit();
|
||||
odt_context->page_layout_context()->even_and_left_headers_ = docx_document->m_pSettings->m_oEvenAndOddHeaders.IsInit();
|
||||
|
||||
if (docx_settings->m_oPrintTwoOnOne.IsInit())
|
||||
if (docx_document->m_pSettings->m_oPrintTwoOnOne.IsInit())
|
||||
{
|
||||
if (docx_settings->m_oGutterAtTop.IsInit()){} //portrait
|
||||
if (docx_document->m_pSettings->m_oGutterAtTop.IsInit()){} //portrait
|
||||
else {}//landscape
|
||||
}
|
||||
|
||||
if (docx_settings->m_oDefaultTabStop.IsInit())
|
||||
if (docx_document->m_pSettings->m_oDefaultTabStop.IsInit())
|
||||
{
|
||||
_CP_OPT(odf_types::length) length;
|
||||
convert(docx_settings->m_oDefaultTabStop->m_oVal.GetPointer(), length);
|
||||
convert(docx_document->m_pSettings->m_oDefaultTabStop->m_oVal.GetPointer(), length);
|
||||
|
||||
odf_writer::odf_style_state_ptr state;
|
||||
if (odt_context->styles_context()->find_odf_default_style_state(odf_types::style_family::Paragraph, state) && state)
|
||||
@ -2941,7 +2941,7 @@ void DocxConverter::convert_lists_styles()
|
||||
{
|
||||
if (!odt_context) return;
|
||||
|
||||
OOX::CNumbering * lists_styles = docx_document->GetNumbering();
|
||||
OOX::CNumbering * lists_styles = docx_document->m_pNumbering;
|
||||
|
||||
if (!lists_styles)return;
|
||||
|
||||
@ -2979,24 +2979,25 @@ void DocxConverter::convert_lists_styles()
|
||||
void DocxConverter::convert_styles()
|
||||
{
|
||||
if (!odt_context) return;
|
||||
|
||||
OOX::CStyles * docx_styles = docx_document->GetStyles();
|
||||
|
||||
if (!docx_styles)return;
|
||||
if (!docx_document->m_pStyles)return;
|
||||
|
||||
//nullable<OOX::CLatentStyles > m_oLatentStyles;
|
||||
|
||||
convert(docx_styles->m_oDocDefaults.GetPointer());
|
||||
convert(docx_document->m_pStyles->m_oDocDefaults.GetPointer());
|
||||
|
||||
for (size_t i=0; i< docx_styles->m_arrStyle.size(); i++)
|
||||
for (size_t i=0; i< docx_document->m_pStyles->m_arrStyle.size(); i++)
|
||||
{
|
||||
if (docx_styles->m_arrStyle[i] == NULL) continue;
|
||||
if (docx_document->m_pStyles->m_arrStyle[i] == NULL) continue;
|
||||
|
||||
current_font_size.erase(current_font_size.begin() + 1, current_font_size.end());
|
||||
if (!current_font_size.empty())
|
||||
{
|
||||
current_font_size.erase(current_font_size.begin() + 1, current_font_size.end());
|
||||
}
|
||||
|
||||
convert(docx_styles->m_arrStyle[i]);
|
||||
convert(docx_document->m_pStyles->m_arrStyle[i]);
|
||||
|
||||
if (i == 0 && docx_styles->m_arrStyle[i]->m_oDefault.IsInit() && docx_styles->m_arrStyle[i]->m_oDefault->ToBool())
|
||||
if (i == 0 && docx_document->m_pStyles->m_arrStyle[i]->m_oDefault.IsInit() && docx_document->m_pStyles->m_arrStyle[i]->m_oDefault->ToBool())
|
||||
{
|
||||
//NADIE_COMO_TU.docx тут дефолтовый стиль не прописан явно, берем тот что Normal
|
||||
odf_writer::odf_style_state_ptr def_style_state;
|
||||
@ -3282,7 +3283,7 @@ void DocxConverter::convert(OOX::Numbering::CLvl* oox_num_lvl)
|
||||
if (oox_num_lvl->m_oLvlPicBulletId.IsInit() && oox_num_lvl->m_oLvlPicBulletId->m_oVal.IsInit())
|
||||
{
|
||||
int id = oox_num_lvl->m_oLvlPicBulletId->m_oVal->GetValue();
|
||||
OOX::CNumbering * lists_styles = docx_document->GetNumbering();
|
||||
OOX::CNumbering * lists_styles = docx_document->m_pNumbering;
|
||||
|
||||
for (size_t i = 0; (lists_styles) && (i < lists_styles->m_arrNumPicBullet.size()); i++)
|
||||
{
|
||||
@ -3579,12 +3580,11 @@ void DocxConverter::convert(OOX::Logic::CEndnoteReference* oox_ref)
|
||||
}
|
||||
void DocxConverter::convert_comment(int oox_comm_id)
|
||||
{
|
||||
OOX::CComments * docx_comments = docx_document->GetComments();
|
||||
if (!docx_comments)return;
|
||||
if (!docx_document->m_pComments)return;
|
||||
|
||||
for (size_t comm = 0 ; comm < docx_comments->m_arrComments.size(); comm++)
|
||||
for (size_t comm = 0 ; comm < docx_document->m_pComments->m_arrComments.size(); comm++)
|
||||
{
|
||||
OOX::CComment* oox_comment = docx_comments->m_arrComments[comm];
|
||||
OOX::CComment* oox_comment = docx_document->m_pComments->m_arrComments[comm];
|
||||
|
||||
if (oox_comment == NULL) continue;
|
||||
if (oox_comment->m_oId.IsInit() == false) continue;
|
||||
@ -3608,14 +3608,13 @@ void DocxConverter::convert_comment(int oox_comm_id)
|
||||
}
|
||||
void DocxConverter::convert_footnote(int oox_ref_id)
|
||||
{
|
||||
OOX::CFootnotes * footnotes = docx_document->GetFootnotes();
|
||||
if (!footnotes)return;
|
||||
if (!docx_document->m_pFootnotes)return;
|
||||
|
||||
odt_context->start_note(oox_ref_id, 1);
|
||||
|
||||
for (size_t n = 0 ; n < footnotes->m_arrFootnote.size(); n++)
|
||||
for (size_t n = 0 ; n < docx_document->m_pFootnotes->m_arrFootnote.size(); n++)
|
||||
{
|
||||
OOX::CFtnEdn* oox_note = footnotes->m_arrFootnote[n];
|
||||
OOX::CFtnEdn* oox_note = docx_document->m_pFootnotes->m_arrFootnote[n];
|
||||
|
||||
if (oox_note == NULL) continue;
|
||||
if (oox_note->m_oId.IsInit() == false) continue;
|
||||
@ -3636,14 +3635,13 @@ void DocxConverter::convert_footnote(int oox_ref_id)
|
||||
}
|
||||
void DocxConverter::convert_endnote(int oox_ref_id)
|
||||
{
|
||||
OOX::CEndnotes * endnotes = docx_document->GetEndnotes();
|
||||
if (!endnotes)return;
|
||||
if (!docx_document->m_pEndnotes)return;
|
||||
|
||||
odt_context->start_note(oox_ref_id, 2);
|
||||
|
||||
for (size_t n = 0 ; n < endnotes->m_arrEndnote.size(); n++)
|
||||
for (size_t n = 0 ; n < docx_document->m_pEndnotes->m_arrEndnote.size(); n++)
|
||||
{
|
||||
OOX::CFtnEdn* oox_note = endnotes->m_arrEndnote[n];
|
||||
OOX::CFtnEdn* oox_note = docx_document->m_pEndnotes->m_arrEndnote[n];
|
||||
|
||||
if (oox_note == NULL) continue;
|
||||
if (oox_note->m_oId.IsInit() == false) continue;
|
||||
|
||||
@ -184,7 +184,7 @@ namespace Oox2Odf
|
||||
|
||||
void convert(OOX::Logic::CBackground *oox_background, int type);
|
||||
void convert(OOX::Logic::CSdt *oox_sdt);
|
||||
void convert(OOX::Logic::CSectionProperty *oox_section_pr, bool bSection);
|
||||
void convert(OOX::Logic::CSectionProperty *oox_section_pr, bool bSection, const std::wstring & master_name = L"");
|
||||
void convert(OOX::Logic::CParagraph *oox_paragraph);
|
||||
void convert(OOX::Logic::CRun *oox_run);
|
||||
void convert(OOX::Logic::CParagraphProperty *oox_para_prop, odf_writer::style_paragraph_properties *paragraph_properties);
|
||||
|
||||
@ -32,9 +32,10 @@
|
||||
#include "XlsxConverter.h"
|
||||
#include "../../../Common/DocxFormat/Source/XlsxFormat/Xlsx.h"
|
||||
#include "../../../Common/DocxFormat/Source/XlsxFormat/Workbook/Workbook.h"
|
||||
#include "../../../Common/DocxFormat/Source/XlsxFormat/Worksheets/Worksheet.h"
|
||||
#include "../../../Common/DocxFormat/Source/XlsxFormat/Comments/Comments.h"
|
||||
#include "../../../Common/DocxFormat/Source/XlsxFormat/SharedStrings/SharedStrings.h"
|
||||
#include "../../../Common/DocxFormat/Source/XlsxFormat/Styles/Styles.h"
|
||||
#include "../../../Common/DocxFormat/Source/XlsxFormat/Worksheets/Worksheet.h"
|
||||
#include "../../../Common/DocxFormat/Source/XlsxFormat/CalcChain/CalcChain.h"
|
||||
#include "../../../Common/DocxFormat/Source/XlsxFormat/ExternalLinks/ExternalLinks.h"
|
||||
#include "../../../Common/DocxFormat/Source/XlsxFormat/ExternalLinks/ExternalLinkPath.h"
|
||||
@ -267,6 +268,30 @@ void XlsxConverter::convert(OOX::Spreadsheet::CWorksheet *oox_sheet)
|
||||
pos++;
|
||||
}
|
||||
//todooo для оптимизации - перенести мержи в начало
|
||||
|
||||
//выносные части таблицы
|
||||
if (oox_sheet->m_oTableParts.IsInit())
|
||||
{
|
||||
for (size_t i=0 ; i < oox_sheet->m_oTableParts->m_arrItems.size(); i++)
|
||||
{
|
||||
OOX::Spreadsheet::CTablePart *oox_table_part = oox_sheet->m_oTableParts->m_arrItems[i];
|
||||
if (!oox_table_part)continue;
|
||||
if (!oox_table_part->m_oRId.IsInit())continue;
|
||||
|
||||
smart_ptr<OOX::File> oFile = oox_sheet->Find(oox_table_part->m_oRId->GetValue());
|
||||
if (oFile.IsInit() && OOX::Spreadsheet::FileTypes::Table == oFile->type())
|
||||
{
|
||||
OOX::Spreadsheet::CTableFile* pTableFile = (OOX::Spreadsheet::CTableFile*)oFile.operator->();
|
||||
|
||||
if ((pTableFile) && (pTableFile->m_oTable.IsInit()))
|
||||
{
|
||||
oox_current_child_document = dynamic_cast<OOX::IFileContainer*>(pTableFile);
|
||||
convert(pTableFile->m_oTable.GetPointer());
|
||||
oox_current_child_document = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//колонки
|
||||
ods_context->start_columns();
|
||||
@ -327,29 +352,7 @@ void XlsxConverter::convert(OOX::Spreadsheet::CWorksheet *oox_sheet)
|
||||
}
|
||||
ods_context->end_conditional_formats();
|
||||
}
|
||||
//выносные части таблицы
|
||||
if (oox_sheet->m_oTableParts.IsInit())
|
||||
{
|
||||
for (size_t i=0 ; i < oox_sheet->m_oTableParts->m_arrItems.size(); i++)
|
||||
{
|
||||
OOX::Spreadsheet::CTablePart *oox_table_part = oox_sheet->m_oTableParts->m_arrItems[i];
|
||||
if (!oox_table_part)continue;
|
||||
if (!oox_table_part->m_oRId.IsInit())continue;
|
||||
|
||||
smart_ptr<OOX::File> oFile = oox_sheet->Find(oox_table_part->m_oRId->GetValue());
|
||||
if (oFile.IsInit() && OOX::Spreadsheet::FileTypes::Table == oFile->type())
|
||||
{
|
||||
OOX::Spreadsheet::CTableFile* pTableFile = (OOX::Spreadsheet::CTableFile*)oFile.operator->();
|
||||
|
||||
if ((pTableFile) && (pTableFile->m_oTable.IsInit()))
|
||||
{
|
||||
oox_current_child_document = dynamic_cast<OOX::IFileContainer*>(pTableFile);
|
||||
convert(pTableFile->m_oTable.GetPointer());
|
||||
oox_current_child_document = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
convert(oox_sheet->m_oSheetViews.GetPointer());
|
||||
convert(oox_sheet->m_oHeaderFooter.GetPointer());
|
||||
@ -417,11 +420,27 @@ void XlsxConverter::convert(OOX::Spreadsheet::CTable *oox_table_part)
|
||||
if (oox_table_part->m_oAutoFilter.IsInit())
|
||||
ods_context->set_table_part_autofilter(true);
|
||||
|
||||
convert(oox_table_part->m_oTableColumns.GetPointer());
|
||||
OoxConverter::convert(oox_table_part->m_oExtLst.GetPointer());
|
||||
|
||||
ods_context->end_table_part();
|
||||
}
|
||||
|
||||
void XlsxConverter::convert(OOX::Spreadsheet::CTableColumns *oox_table_part_columns)
|
||||
{
|
||||
if (!oox_table_part_columns) return;
|
||||
|
||||
for (size_t i = 0; i < oox_table_part_columns->m_arrItems.size(); i++)
|
||||
{
|
||||
std::wstring name;
|
||||
if (oox_table_part_columns->m_arrItems[i]->m_oName.IsInit())
|
||||
name = oox_table_part_columns->m_arrItems[i]->m_oName.get2();
|
||||
|
||||
ods_context->add_table_part_column(name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void XlsxConverter::convert(OOX::Spreadsheet::CCommentItem * oox_comment)
|
||||
{
|
||||
if (!oox_comment) return;
|
||||
|
||||
@ -48,6 +48,7 @@ namespace OOX
|
||||
|
||||
class CWorksheet;
|
||||
class CTable;
|
||||
class CTableColumns;
|
||||
class CCol;
|
||||
class CRow;
|
||||
class CCell;
|
||||
@ -157,6 +158,7 @@ namespace Oox2Odf
|
||||
void convert(OOX::Spreadsheet::CWorksheet *oox_sheet);
|
||||
void convert(OOX::Spreadsheet::CDefinedName *oox_defined);
|
||||
void convert(OOX::Spreadsheet::CTable *oox_table_part);
|
||||
void convert(OOX::Spreadsheet::CTableColumns *oox_table_part_columns);
|
||||
void convert(OOX::Spreadsheet::CPictureWorksheet *oox_background);
|
||||
void convert(OOX::Spreadsheet::CHeaderFooter *oox_header_footer);
|
||||
|
||||
|
||||
@ -53,7 +53,7 @@
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
DisableSpecificWarnings="4996"
|
||||
DisableSpecificWarnings="4005;4311;4312"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
|
||||
@ -52,6 +52,7 @@
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
DisableSpecificWarnings="4005;4311;4312"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
|
||||
@ -23,8 +23,6 @@ DEFINES += UNICODE \
|
||||
_UNICODE \
|
||||
_USE_LIBXML2_READER_ \
|
||||
LIBXML_READER_ENABLED \
|
||||
USE_LITE_READER \
|
||||
_USE_XMLLITE_READER_ \
|
||||
_PRESENTATION_WRITER_ \
|
||||
_SVG_CONVERT_TO_IMAGE_ \
|
||||
DONT_WRITE_EMBEDDED_FONTS
|
||||
|
||||
@ -37,6 +37,7 @@
|
||||
#include "../../../ASCOfficePPTXFile/Editor/DefaultNotesTheme.h"
|
||||
|
||||
#include "../../../Common/DocxFormat/Source/SystemUtility/SystemUtility.h"
|
||||
#include "../../../ASCOfficeXlsFile2/source/Common/simple_xml_writer.h"
|
||||
#include "../../../DesktopEditor/common/Directory.h"
|
||||
|
||||
#include "../Reader/PPTDocumentInfo.h"
|
||||
@ -60,8 +61,6 @@ namespace NSPresentationEditor
|
||||
static std::wstring g_string_core = _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\
|
||||
<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:dcmitype=\"http://purl.org/dc/dcmitype/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\
|
||||
<dc:title>Slide 1</dc:title>\
|
||||
<dc:creator>OnlyOffice</dc:creator>\
|
||||
<cp:lastModifiedBy>OnlyOffice</cp:lastModifiedBy>\
|
||||
<cp:revision>1</cp:revision>\
|
||||
</cp:coreProperties>");
|
||||
}
|
||||
@ -188,12 +187,12 @@ void NSPresentationEditor::CPPTXWriter::WriteContentTypes()
|
||||
{
|
||||
std::wstring strContentTypes = L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\
|
||||
<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\
|
||||
<Default Extension=\"bmp\" ContentType=\"image/bmp\" />\
|
||||
<Default Extension=\"png\" ContentType=\"image/png\" />\
|
||||
<Default Extension=\"jpeg\" ContentType=\"image/jpeg\" />\
|
||||
<Default Extension=\"wmf\" ContentType=\"image/x-wmf\" />\
|
||||
<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\" />\
|
||||
<Default Extension=\"xml\" ContentType=\"application/xml\" />\
|
||||
<Default Extension=\"bmp\" ContentType=\"image/bmp\"/>\
|
||||
<Default Extension=\"png\" ContentType=\"image/png\"/>\
|
||||
<Default Extension=\"jpeg\" ContentType=\"image/jpeg\"/>\
|
||||
<Default Extension=\"wmf\" ContentType=\"image/x-wmf\"/>\
|
||||
<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>\
|
||||
<Default Extension=\"xml\" ContentType=\"application/xml\"/>\
|
||||
<Default Extension=\"gif\" ContentType=\"image/gif\"/>\
|
||||
<Default Extension=\"emf\" ContentType=\"image/x-emf\"/>\
|
||||
<Default Extension=\"wav\" ContentType=\"audio/wav\"/>\
|
||||
@ -208,7 +207,7 @@ void NSPresentationEditor::CPPTXWriter::WriteContentTypes()
|
||||
<Default Extension=\"xls\" ContentType=\"application/vnd.ms-excel\"/>\
|
||||
<Default Extension=\"xlsx\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"/>\
|
||||
<Default Extension=\"bin\" ContentType=\"application/vnd.openxmlformats-officedocument.oleObject\" />\
|
||||
<Default Extension=\"jpg\" ContentType=\"application/octet-stream\"/>";
|
||||
<Default Extension=\"jpg\" ContentType=\"image/jpeg\"/>";
|
||||
|
||||
if (m_pDocument->m_bMacros)
|
||||
{
|
||||
@ -278,60 +277,127 @@ void NSPresentationEditor::CPPTXWriter::WriteContentTypes()
|
||||
|
||||
void NSPresentationEditor::CPPTXWriter::WriteApp(CFile& oFile)
|
||||
{
|
||||
std::wstring str1 = _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\
|
||||
<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\">\
|
||||
<TotalTime>0</TotalTime>\
|
||||
<Words>0</Words>\
|
||||
<Application>OnlyOffice</Application>\
|
||||
<PresentationFormat>On-screen Show (4:3)</PresentationFormat>\
|
||||
<Paragraphs>0</Paragraphs>");
|
||||
std::wstringstream strm;
|
||||
|
||||
oFile.WriteStringUTF8(str1);
|
||||
|
||||
oFile.WriteStringUTF8(L"<Slides>" + std::to_wstring(m_pDocument->m_arSlides.size()) + L"</Slides>");
|
||||
oFile.WriteStringUTF8(L"<Notes>" + std::to_wstring(m_pDocument->m_arNotes.size()) + L"</Notes>");
|
||||
|
||||
oFile.WriteStringUTF8(L"<HiddenSlides>0</HiddenSlides>\
|
||||
<MMClips>2</MMClips>\
|
||||
<ScaleCrop>false</ScaleCrop>\
|
||||
<HeadingPairs>\
|
||||
<vt:vector size=\"4\" baseType=\"variant\">");
|
||||
|
||||
int nCountThemes = (int)m_pDocument->m_arThemes.size();
|
||||
int nCountSlides = (int)m_pDocument->m_arSlides.size();
|
||||
|
||||
std::wstring strThemes = L"<vt:variant><vt:lpstr>Theme</vt:lpstr></vt:variant><vt:variant><vt:i4>" +std::to_wstring(nCountThemes) +
|
||||
L"</vt:i4></vt:variant>";
|
||||
|
||||
std::wstring strSlides = L"<vt:variant><vt:lpstr>Slide Titles</vt:lpstr></vt:variant><vt:variant><vt:i4>" +
|
||||
std::to_wstring(nCountSlides) + L"</vt:i4></vt:variant></vt:vector></HeadingPairs>";
|
||||
|
||||
std::wstring strTitles = L"<TitlesOfParts><vt:vector size=\"" + std::to_wstring(nCountSlides + nCountThemes) + L"\" baseType=\"lpstr\">";
|
||||
|
||||
oFile.WriteStringUTF8(strThemes + strSlides + strTitles);
|
||||
|
||||
std::wstring strMemory = _T("");
|
||||
for (int i = 1; i <= nCountThemes; ++i)
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
strMemory += L"<vt:lpstr>Theme " + std::to_wstring(i) + L"</vt:lpstr>";
|
||||
CP_XML_NODE(L"Properties")
|
||||
{
|
||||
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties");
|
||||
CP_XML_ATTR(L"xmlns:vt", L"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypess");
|
||||
}
|
||||
CP_XML_NODE(L"Application")
|
||||
{
|
||||
CP_XML_STREAM() << 0;
|
||||
}
|
||||
#if defined(INTVER)
|
||||
CP_XML_NODE(L"AppVersion")
|
||||
{
|
||||
std::string s = VALUE2STR(INTVER);
|
||||
CP_XML_STREAM() << std::wstring(s.begin(), s.end());
|
||||
}
|
||||
#endif
|
||||
CP_XML_NODE(L"TotalTime")
|
||||
{
|
||||
CP_XML_STREAM() << 0;
|
||||
}
|
||||
CP_XML_NODE(L"Words")
|
||||
{
|
||||
CP_XML_STREAM() << 0;
|
||||
}
|
||||
CP_XML_NODE(L"PresentationFormat")
|
||||
{
|
||||
CP_XML_STREAM() << L"On-screen Show (4:3)";
|
||||
}
|
||||
CP_XML_NODE(L"Paragraphs")
|
||||
{
|
||||
CP_XML_STREAM() << 0;
|
||||
}
|
||||
CP_XML_NODE(L"Slides")
|
||||
{
|
||||
CP_XML_STREAM() << m_pDocument->m_arSlides.size();
|
||||
}
|
||||
CP_XML_NODE(L"Notes")
|
||||
{
|
||||
CP_XML_STREAM() << m_pDocument->m_arNotes.size();
|
||||
}
|
||||
CP_XML_NODE(L"HiddenSlides")
|
||||
{
|
||||
CP_XML_STREAM() << 0;
|
||||
}
|
||||
CP_XML_NODE(L"MMClips")
|
||||
{
|
||||
CP_XML_STREAM() << 2;
|
||||
}
|
||||
CP_XML_NODE(L"ScaleCrop")
|
||||
{
|
||||
CP_XML_STREAM() << L"false";
|
||||
}
|
||||
CP_XML_NODE(L"HeadingPairs")
|
||||
{
|
||||
CP_XML_NODE(L"vt:vector")
|
||||
{
|
||||
CP_XML_ATTR(L"size", 4);
|
||||
CP_XML_ATTR(L"baseType", L"variant");
|
||||
|
||||
CP_XML_NODE(L"vt:variant")
|
||||
{
|
||||
CP_XML_ATTR(L"vt:lpstr", L"Theme");
|
||||
}
|
||||
CP_XML_NODE(L"vt:variant")
|
||||
{
|
||||
CP_XML_ATTR(L"vt:i4", m_pDocument->m_arThemes.size());
|
||||
}
|
||||
CP_XML_NODE(L"vt:variant")
|
||||
{
|
||||
CP_XML_ATTR(L"vt:lpstr", L"Slide Titles");
|
||||
}
|
||||
CP_XML_NODE(L"vt:variant")
|
||||
{
|
||||
CP_XML_ATTR(L"vt:i4", m_pDocument->m_arSlides.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
CP_XML_NODE(L"TitlesOfParts")
|
||||
{
|
||||
CP_XML_NODE(L"vt:vector")
|
||||
{
|
||||
CP_XML_ATTR(L"size", m_pDocument->m_arSlides.size() + m_pDocument->m_arThemes.size());
|
||||
CP_XML_ATTR(L"baseType", L"lpstr");
|
||||
|
||||
for (size_t i = 1; i <= m_pDocument->m_arThemes.size(); ++i)
|
||||
{
|
||||
CP_XML_NODE(L"vt:lpstr")
|
||||
{
|
||||
CP_XML_STREAM() << L"Theme " << i;
|
||||
}
|
||||
}
|
||||
for (size_t i = 1; i <= m_pDocument->m_arSlides.size(); ++i)
|
||||
{
|
||||
CP_XML_NODE(L"vt:lpstr")
|
||||
{
|
||||
CP_XML_STREAM() << L"Slide " << i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CP_XML_NODE(L"Company");
|
||||
CP_XML_NODE(L"LinksUpToDate")
|
||||
{
|
||||
CP_XML_STREAM() << L"false";
|
||||
}
|
||||
CP_XML_NODE(L"SharedDoc")
|
||||
{
|
||||
CP_XML_STREAM() << L"false";
|
||||
}
|
||||
CP_XML_NODE(L"HyperlinksChanged")
|
||||
{
|
||||
CP_XML_STREAM() << L"false";
|
||||
}
|
||||
}
|
||||
for (int i = 1; i <= nCountSlides; ++i)
|
||||
{
|
||||
strMemory += L"<vt:lpstr>Slide " + std::to_wstring(i) + L"</vt:lpstr>";
|
||||
}
|
||||
|
||||
std::wstring str5 = _T("</vt:vector>\
|
||||
</TitlesOfParts>\
|
||||
<Company></Company>\
|
||||
<LinksUpToDate>false</LinksUpToDate>\
|
||||
<SharedDoc>false</SharedDoc>\
|
||||
<HyperlinksChanged>false</HyperlinksChanged>\
|
||||
<AppVersion>4.4000</AppVersion>\
|
||||
</Properties>");
|
||||
|
||||
strMemory += str5;
|
||||
|
||||
oFile.WriteStringUTF8(strMemory);
|
||||
oFile.WriteStringUTF8(L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
|
||||
oFile.WriteStringUTF8(strm.str());
|
||||
}
|
||||
|
||||
void NSPresentationEditor::CPPTXWriter::WritePresInfo()
|
||||
|
||||
@ -247,7 +247,7 @@ void CStylesWriter::ConvertStyleLevel(NSPresentationEditor::CTextStyleLevel& oLe
|
||||
else if ((pCF->FontProperties.is_init()) && (!pCF->FontProperties->strFontName.empty()))
|
||||
{
|
||||
oWriter.WriteString(L"<a:latin typeface=\"" + pCF->FontProperties->strFontName + L"\"/>");
|
||||
}
|
||||
}
|
||||
if (pCF->FontPropertiesEA.is_init())
|
||||
{
|
||||
oWriter.WriteString(L"<a:ea typeface=\"" + pCF->FontPropertiesEA->strFontName + L"\"/>");
|
||||
@ -1172,13 +1172,11 @@ void NSPresentationEditor::CShapeWriter::WriteTextInfo()
|
||||
{
|
||||
if (0 == pCF->Typeface.get())
|
||||
{
|
||||
std::wstring strProp = _T("<a:latin typeface=\"+mj-lt\"/>");
|
||||
m_oWriter.WriteString(strProp);
|
||||
m_oWriter.WriteString(L"<a:latin typeface=\"+mj-lt\"/>");
|
||||
}
|
||||
else
|
||||
{
|
||||
std::wstring strProp = _T("<a:latin typeface=\"+mn-lt\"/>");
|
||||
m_oWriter.WriteString(strProp);
|
||||
m_oWriter.WriteString(L"<a:latin typeface=\"+mn-lt\"/>");
|
||||
}
|
||||
}
|
||||
else if (pCF->FontProperties.is_init())
|
||||
|
||||
@ -1002,11 +1002,12 @@ void CPPTUserInfo::LoadSlide(DWORD dwSlideID, CSlide* pSlide)
|
||||
CElementPtr pElement = oArrayShapes[nShape]->GetElement(&m_oExMedia, pSlide->m_lOriginalWidth, pSlide->m_lOriginalHeight,
|
||||
pTheme, pLayout, pThemeWrapper, pSlideWrapper, pSlide);
|
||||
|
||||
CShapeElement* pShape = dynamic_cast<CShapeElement*>(pElement.get());
|
||||
|
||||
if (NULL != pElement)
|
||||
{
|
||||
if (pElement->m_bIsBackground && !pElement->m_bHaveAnchor && !bMasterBackGround)
|
||||
{
|
||||
CShapeElement* pShape = dynamic_cast<CShapeElement*>(pElement.get());
|
||||
if (NULL != pShape)
|
||||
{
|
||||
pShape->SetupProperties(pSlide, pTheme, pLayout);
|
||||
@ -1019,6 +1020,9 @@ void CPPTUserInfo::LoadSlide(DWORD dwSlideID, CSlide* pSlide)
|
||||
}else
|
||||
AddAnimation ( dwSlideID, pSlide->m_lOriginalWidth, pSlide->m_lOriginalHeight, pElement );
|
||||
|
||||
if (NULL != pShape)
|
||||
pShape->SetupProperties(pSlide, pTheme, pLayout);
|
||||
|
||||
if (pElement->m_bHaveAnchor)
|
||||
{
|
||||
pSlide->m_arElements.push_back(pElement);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user