mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-02-15 04:15:53 +08:00
Compare commits
139 Commits
core-linux
...
core-linux
| Author | SHA1 | Date | |
|---|---|---|---|
| 187bf8823a | |||
| cd7c85967c | |||
| 045b00ad5a | |||
| 9b5784e344 | |||
| 2b6650dde1 | |||
| ff8ecb2d2f | |||
| 5893b93e3a | |||
| 92313e106d | |||
| c462f522d6 | |||
| 5feb4b7b82 | |||
| 678ec98721 | |||
| c17fa8462d | |||
| 04eda04870 | |||
| cd9cc22185 | |||
| f01eb91316 | |||
| b9216e9bdc | |||
| 0295ef2d54 | |||
| 797b745b35 | |||
| 253c24cf03 | |||
| 02e8649a61 | |||
| 447dc81426 | |||
| 0f3c883d24 | |||
| 0b16b9a7f9 | |||
| 37c276b736 | |||
| 7014faa9a1 | |||
| 93287c84c8 | |||
| dafcbacfaf | |||
| 41ea42459a | |||
| bc68323506 | |||
| 1c73ff0c3f | |||
| 5a8c9069be | |||
| 4ba2e1fa6d | |||
| 95af281145 | |||
| 00fb2ba7bb | |||
| 0f65e36517 | |||
| aa1af73fda | |||
| 1610978821 | |||
| 20faf24556 | |||
| ae90e4ae96 | |||
| 6fae9115ea | |||
| c14a21b2da | |||
| b952692225 | |||
| 23249e69f9 | |||
| 09f6c3f4e8 | |||
| 111ceff368 | |||
| 867b0634f3 | |||
| f9c27275a7 | |||
| dd12ee0b9e | |||
| de83971832 | |||
| 0d158e46b5 | |||
| dde6b8bdc7 | |||
| b66bb0d63f | |||
| d666da2697 | |||
| 8e35f9b063 | |||
| 25268b706d | |||
| 97ff1efba8 | |||
| 1879ce8dbb | |||
| 50ff5fc0b2 | |||
| 537e774f79 | |||
| 6d3761c20b | |||
| ee41b4ccb2 | |||
| 7b0f902c0f | |||
| e6039f7f6f | |||
| 1c2b86519e | |||
| 755119c825 | |||
| 3a73480437 | |||
| 323d1b44cd | |||
| a99a195c68 | |||
| 0d979b8033 | |||
| dd3b671e57 | |||
| 74bd059607 | |||
| 83fa44edcd | |||
| 80fe4c0164 | |||
| 04f7527f9e | |||
| d92aa1f793 | |||
| af4e135fe2 | |||
| a5ef8c01b3 | |||
| 1b7f35b317 | |||
| 4079dea224 | |||
| 2ead42a513 | |||
| 427046cb8f | |||
| f4c112d523 | |||
| b082ffe20c | |||
| c589a6c947 | |||
| e60cc05b6e | |||
| 15b08aeebf | |||
| 672129c242 | |||
| 92689a7a57 | |||
| 31ebd7b14c | |||
| 1695668a6f | |||
| 77dfd5c12a | |||
| e600fe93b7 | |||
| 889a1f827a | |||
| 8cd55fb9c4 | |||
| 01b9309f09 | |||
| d3a4f00f76 | |||
| f65196d95b | |||
| 3ee5d685c2 | |||
| c0cd75dbd5 | |||
| a69453af4b | |||
| 3adcfecfb9 | |||
| a7d2191649 | |||
| db50e87fe0 | |||
| 36bdc7376a | |||
| 1321211336 | |||
| 8c834c5041 | |||
| c75aacaed8 | |||
| a4445cacaa | |||
| d6ad9e84e2 | |||
| d9687387f9 | |||
| eaa01c7995 | |||
| 597f360336 | |||
| d502206726 | |||
| d0d90c641c | |||
| 14fa14de3f | |||
| cced8f4912 | |||
| 2e40b96ed9 | |||
| 50ee7d7cc1 | |||
| f9b54bffd4 | |||
| a52a8e982e | |||
| 128529ba80 | |||
| a571c88798 | |||
| 34bb84a792 | |||
| 92d0d0d7ea | |||
| 449e3fc131 | |||
| ce9fdb33b5 | |||
| 2591f0a202 | |||
| 6bc04fc06f | |||
| 047850dbd6 | |||
| 6afa54ebef | |||
| 27a0e77ef1 | |||
| 76b682063e | |||
| effdab1ff4 | |||
| 48aa99af83 | |||
| 261e48227d | |||
| b9b843f25d | |||
| d7e2bedc6b | |||
| 58cd45f4ee | |||
| 33f7ee49df |
7
.gitignore
vendored
7
.gitignore
vendored
@ -13,6 +13,11 @@ Common/3dParty/cef/win_32
|
||||
Common/3dParty/cef/linux_64
|
||||
Common/3dParty/cef/linux_32
|
||||
Common/3dParty/cef/mac_64
|
||||
Common/3dParty/curl/win_64
|
||||
Common/3dParty/curl/win_32
|
||||
Common/3dParty/curl/linux_64
|
||||
Common/3dParty/curl/linux_32
|
||||
Common/3dParty/curl/mac_64
|
||||
Common/3dParty/v8/v8
|
||||
Common/3dParty/v8/depot_tools
|
||||
Common/3dParty/v8/win_64
|
||||
@ -40,6 +45,8 @@ ASCOfficeXlsFile2/win32/_ASCOfficeXlsFile2_i.c
|
||||
ASCOfficeXlsFile2/win32/_ASCOfficeXlsFile2_p.c
|
||||
ASCOfficeXlsFile2/win32/dlldata.c
|
||||
OfficeUtils/win32/OfficeUtilsLib/OfficeUtilsLib/ReadMe.txt
|
||||
X2tConverter/**/Makefile.*
|
||||
*.7z
|
||||
*.obj
|
||||
*.pdb
|
||||
*.tlb
|
||||
|
||||
@ -58,6 +58,9 @@
|
||||
|
||||
#include <boost/format.hpp>
|
||||
|
||||
#define GETBITS(from, numL, numH) ((from & (((1 << (numH - numL + 1)) - 1) << numL)) >> numL)
|
||||
#define GETBIT(from, num) ((from & (1 << num)) != 0)
|
||||
|
||||
namespace DocFileFormat
|
||||
{
|
||||
typedef unsigned char Bool8;
|
||||
|
||||
@ -72,10 +72,14 @@ namespace DocFileFormat
|
||||
{
|
||||
AnnotationReferenceDescriptor* atrdPre10 = static_cast<AnnotationReferenceDescriptor*>(m_document->AnnotationsReferencePlex->Elements[index]);
|
||||
|
||||
unsigned short index_author = atrdPre10->GetAuthorIndex();
|
||||
m_pXmlWriter->WriteNodeBegin( L"w:comment", TRUE );
|
||||
m_pXmlWriter->WriteAttribute( L"w:id", FormatUtils::IntToWideString( index + 1 ));
|
||||
m_pXmlWriter->WriteAttribute( L"w:author",
|
||||
FormatUtils::XmlEncode(m_document->AnnotationOwners->at( atrdPre10->GetAuthorIndex() ) ));
|
||||
if (index_author < m_document->AnnotationOwners->size()) //conv_253l2H1CehgKwsxCtNk__docx.doc
|
||||
{
|
||||
m_pXmlWriter->WriteAttribute( L"w:author",
|
||||
FormatUtils::XmlEncode(m_document->AnnotationOwners->at( index_author ) ));
|
||||
}
|
||||
m_pXmlWriter->WriteAttribute( L"w:initials", atrdPre10->GetUserInitials());
|
||||
|
||||
//!!!TODO!!!
|
||||
|
||||
@ -53,7 +53,7 @@ namespace DocFileFormat
|
||||
/*========================================================================================================*/
|
||||
|
||||
FormattedDiskPageCHPX::FormattedDiskPageCHPX( POLE::Stream* wordStream, int offset, int nWordVersion ):
|
||||
FormattedDiskPage(), rgb(NULL), grpchpxSize(NULL), grpchpx(NULL)
|
||||
FormattedDiskPage(), rgb(NULL), grpchpxSize(0), grpchpx(NULL)
|
||||
{
|
||||
Type = Character;
|
||||
WordStream = wordStream;
|
||||
|
||||
@ -93,7 +93,7 @@ HRESULT convert_single(std::wstring srcFileName)
|
||||
if (hRes == S_OK)
|
||||
{
|
||||
COfficeUtils oCOfficeUtils(NULL);
|
||||
hRes = oCOfficeUtils.CompressFileOrDirectory(dstTempPath.c_str(), dstPath, -1);
|
||||
hRes = oCOfficeUtils.CompressFileOrDirectory(dstTempPath.c_str(), dstPath, true);
|
||||
}
|
||||
|
||||
NSDirectory::DeleteDirectory(dstTempPath);
|
||||
|
||||
@ -39,7 +39,7 @@ namespace Writers
|
||||
{
|
||||
class DocumentWriter : public ContentWriter
|
||||
{
|
||||
XmlUtils::CStringWriter m_oWriter;
|
||||
NSStringUtils::CStringBuilder m_oWriter;
|
||||
HeaderFooterWriter& m_oHeaderFooterWriter;
|
||||
public:
|
||||
std::wstring m_sDir;
|
||||
|
||||
@ -40,9 +40,9 @@ namespace Writers
|
||||
class ContentWriter
|
||||
{
|
||||
public:
|
||||
XmlUtils::CStringWriter m_oBackground;
|
||||
XmlUtils::CStringWriter m_oContent;
|
||||
XmlUtils::CStringWriter m_oSecPr;
|
||||
NSStringUtils::CStringBuilder m_oBackground;
|
||||
NSStringUtils::CStringBuilder m_oContent;
|
||||
NSStringUtils::CStringBuilder m_oSecPr;
|
||||
};
|
||||
class HdrFtrItem
|
||||
{
|
||||
|
||||
@ -38,7 +38,7 @@ namespace Writers
|
||||
{
|
||||
class MediaWriter
|
||||
{
|
||||
XmlUtils::CStringWriter m_oWriter;
|
||||
NSStringUtils::CStringBuilder m_oWriter;
|
||||
std::wstring m_sDir;
|
||||
std::wstring m_sMediaDir;
|
||||
public:
|
||||
|
||||
@ -41,11 +41,11 @@ namespace Writers
|
||||
|
||||
class NumberingWriter
|
||||
{
|
||||
XmlUtils::CStringWriter m_oWriter;
|
||||
NSStringUtils::CStringBuilder m_oWriter;
|
||||
std::wstring m_sDir;
|
||||
public:
|
||||
XmlUtils::CStringWriter m_oANum;
|
||||
XmlUtils::CStringWriter m_oNumList;
|
||||
NSStringUtils::CStringBuilder m_oANum;
|
||||
NSStringUtils::CStringBuilder m_oNumList;
|
||||
|
||||
NumberingWriter( std::wstring sDir) : m_sDir(sDir)
|
||||
{
|
||||
|
||||
@ -516,7 +516,7 @@ public:
|
||||
bRStyle || bSpacing || bDStrikeout || bCaps || bSmallCaps || bPosition || bFontHint || bBoldCs || bItalicCs || bFontSizeCs || bCs || bRtl || bLang || bLangBidi || bLangEA || bThemeColor || bVanish ||
|
||||
!Outline.empty() || !Fill.empty() || !Del.empty() || !Ins.empty() || !MoveFrom.empty() || !MoveTo.empty() || !rPrChange.empty();
|
||||
}
|
||||
void Write(XmlUtils::CStringWriter* pCStringWriter)
|
||||
void Write(NSStringUtils::CStringBuilder* pCStringWriter)
|
||||
{
|
||||
pCStringWriter->WriteString(L"<w:rPr>");
|
||||
if(bRStyle)
|
||||
@ -780,7 +780,9 @@ public:
|
||||
std::wstring Name;
|
||||
std::wstring Id;
|
||||
BYTE byteType;
|
||||
bool bDefault;
|
||||
bool Default;
|
||||
bool Custom;
|
||||
std::wstring Aliases;
|
||||
std::wstring BasedOn;
|
||||
std::wstring NextId;
|
||||
std::wstring Link;
|
||||
@ -789,6 +791,11 @@ public:
|
||||
bool hidden;
|
||||
bool semiHidden;
|
||||
bool unhideWhenUsed;
|
||||
bool autoRedefine;
|
||||
bool locked;
|
||||
bool personal;
|
||||
bool personalCompose;
|
||||
bool personalReply;
|
||||
std::wstring TextPr;
|
||||
std::wstring ParaPr;
|
||||
std::wstring TablePr;
|
||||
@ -796,24 +803,38 @@ public:
|
||||
std::wstring CellPr;
|
||||
std::vector<std::wstring> TblStylePr;
|
||||
|
||||
bool bDefault;
|
||||
bool bCustom;
|
||||
bool bqFormat;
|
||||
bool buiPriority;
|
||||
bool bhidden;
|
||||
bool bsemiHidden;
|
||||
bool bunhideWhenUsed;
|
||||
bool bautoRedefine;
|
||||
bool blocked;
|
||||
bool bpersonal;
|
||||
bool bpersonalCompose;
|
||||
bool bpersonalReply;
|
||||
|
||||
public:
|
||||
docStyle()
|
||||
{
|
||||
byteType = styletype_Paragraph;
|
||||
bDefault = false;
|
||||
bCustom = false;
|
||||
|
||||
bqFormat = false;
|
||||
buiPriority = false;
|
||||
bhidden = false;
|
||||
bsemiHidden = false;
|
||||
bunhideWhenUsed = false;
|
||||
bautoRedefine = false;
|
||||
blocked = false;
|
||||
bpersonal = false;
|
||||
bpersonalCompose = false;
|
||||
bpersonalReply = false;
|
||||
}
|
||||
void Write(XmlUtils::CStringWriter* pCStringWriter)
|
||||
void Write(NSStringUtils::CStringBuilder* pCStringWriter)
|
||||
{
|
||||
std::wstring sType;
|
||||
switch(byteType)
|
||||
@ -827,10 +848,35 @@ public:
|
||||
{
|
||||
std::wstring sStyle = L"<w:style w:type=\"" + sType + L"\" w:styleId=\"" + Id + L"\"";
|
||||
if(bDefault)
|
||||
sStyle += L" w:default=\"1\"";
|
||||
{
|
||||
if(Default)
|
||||
sStyle += L" w:default=\"1\"";
|
||||
else
|
||||
sStyle += L" w:default=\"0\"";
|
||||
}
|
||||
if(bCustom)
|
||||
{
|
||||
if(Custom)
|
||||
sStyle += L" w:customStyle=\"1\"";
|
||||
else
|
||||
sStyle += L" w:customStyle=\"0\"";
|
||||
}
|
||||
|
||||
sStyle += L">";
|
||||
pCStringWriter->WriteString(sStyle);
|
||||
if(!Aliases.empty())
|
||||
{
|
||||
pCStringWriter->WriteString(L"<w:aliases w:val=\"");
|
||||
pCStringWriter->WriteEncodeXmlString(Aliases);
|
||||
pCStringWriter->WriteString(L"\"/>");
|
||||
}
|
||||
if(bautoRedefine)
|
||||
{
|
||||
if(autoRedefine)
|
||||
pCStringWriter->WriteString(L"<w:autoRedefine/>");
|
||||
else
|
||||
pCStringWriter->WriteString(L"<w:autoRedefine val=\"false\"/>");
|
||||
}
|
||||
if(!Name.empty())
|
||||
{
|
||||
pCStringWriter->WriteString(L"<w:name w:val=\"" + Name + L"\"/>");
|
||||
@ -843,12 +889,40 @@ public:
|
||||
{
|
||||
pCStringWriter->WriteString(L"<w:next w:val=\"" + NextId + L"\"/>");
|
||||
}
|
||||
if(bpersonal)
|
||||
{
|
||||
if(personal)
|
||||
pCStringWriter->WriteString(L"<w:personal/>");
|
||||
else
|
||||
pCStringWriter->WriteString(L"<w:personal val=\"false\"/>");
|
||||
}
|
||||
if(bpersonalCompose)
|
||||
{
|
||||
if(personalCompose)
|
||||
pCStringWriter->WriteString(L"<w:personalCompose/>");
|
||||
else
|
||||
pCStringWriter->WriteString(L"<w:personalCompose val=\"false\"/>");
|
||||
}
|
||||
if(bpersonalReply)
|
||||
{
|
||||
if(personalReply)
|
||||
pCStringWriter->WriteString(L"<w:personalReply/>");
|
||||
else
|
||||
pCStringWriter->WriteString(L"<w:personalReply val=\"false\"/>");
|
||||
}
|
||||
if(!Link.empty())
|
||||
{
|
||||
pCStringWriter->WriteString(L"<w:link w:val=\"");
|
||||
pCStringWriter->WriteEncodeXmlString(Link);
|
||||
pCStringWriter->WriteString(L"\"/>");
|
||||
}
|
||||
if(blocked)
|
||||
{
|
||||
if(locked)
|
||||
pCStringWriter->WriteString(L"<w:locked/>");
|
||||
else
|
||||
pCStringWriter->WriteString(L"<w:locked val=\"false\"/>");
|
||||
}
|
||||
if(bqFormat)
|
||||
{
|
||||
if(qFormat)
|
||||
@ -916,7 +990,7 @@ public:
|
||||
class tblStylePr
|
||||
{
|
||||
public:
|
||||
XmlUtils::CStringWriter Writer;
|
||||
NSStringUtils::CStringBuilder Writer;
|
||||
BYTE Type;
|
||||
bool bType;
|
||||
public:
|
||||
@ -976,7 +1050,7 @@ public:
|
||||
bHeight = false;
|
||||
bPaddings = false;
|
||||
}
|
||||
void Write(XmlUtils::CStringWriter* pCStringWriter)
|
||||
void Write(NSStringUtils::CStringBuilder* pCStringWriter)
|
||||
{
|
||||
if(bType)
|
||||
{
|
||||
@ -1037,7 +1111,7 @@ public:
|
||||
// tblPr()
|
||||
// {
|
||||
// }
|
||||
// void Write(CStringWriter* pCStringWriter)
|
||||
// void Write(NSStringUtils::CStringBuilder* pCStringWriter)
|
||||
// {
|
||||
// }
|
||||
//};
|
||||
@ -1057,7 +1131,7 @@ public:
|
||||
bW = false;
|
||||
bWDocx = false;
|
||||
}
|
||||
void Write(XmlUtils::CStringWriter& pCStringWriter, const std::wstring& sName)
|
||||
void Write(NSStringUtils::CStringBuilder& pCStringWriter, const std::wstring& sName)
|
||||
{
|
||||
pCStringWriter.WriteString(Write(sName));
|
||||
}
|
||||
@ -1111,7 +1185,7 @@ public:
|
||||
bValue = false;
|
||||
bThemeColor = false;
|
||||
}
|
||||
void Write(std::wstring sName, XmlUtils::CStringWriter* pCStringWriter, bool bCell)
|
||||
void Write(std::wstring sName, NSStringUtils::CStringBuilder* pCStringWriter, bool bCell)
|
||||
{
|
||||
if(bValue)
|
||||
{
|
||||
@ -1202,7 +1276,7 @@ public:
|
||||
{
|
||||
return !(bLeft || bTop || bRight || bBottom || bInsideV || bInsideH || bBetween);
|
||||
}
|
||||
void Write(XmlUtils::CStringWriter* pCStringWriter, bool bCell)
|
||||
void Write(NSStringUtils::CStringBuilder* pCStringWriter, bool bCell)
|
||||
{
|
||||
if(bLeft)
|
||||
oLeft.Write(L"w:left", pCStringWriter, bCell);
|
||||
@ -1237,16 +1311,24 @@ public:
|
||||
class docLvl
|
||||
{
|
||||
public:
|
||||
long ILvl;
|
||||
long Format;
|
||||
BYTE Jc;
|
||||
std::vector<docLvlText*> Text;
|
||||
long Restart;
|
||||
long Start;
|
||||
BYTE Suff;
|
||||
XmlUtils::CStringWriter ParaPr;
|
||||
XmlUtils::CStringWriter TextPr;
|
||||
NSStringUtils::CStringBuilder ParaPr;
|
||||
NSStringUtils::CStringBuilder TextPr;
|
||||
std::wstring PStyle;
|
||||
bool Tentative;
|
||||
unsigned long Tplc;
|
||||
bool IsLgl;
|
||||
bool Legacy;
|
||||
long LegacyIndent;
|
||||
unsigned long LegacySpace;
|
||||
|
||||
bool bILvl;
|
||||
bool bFormat;
|
||||
bool bJc;
|
||||
bool bText;
|
||||
@ -1256,8 +1338,17 @@ public:
|
||||
bool bParaPr;
|
||||
bool bTextPr;
|
||||
bool bPStyle;
|
||||
bool bTentative;
|
||||
bool bTplc;
|
||||
bool bIsLgl;
|
||||
bool bLvlLegacy;
|
||||
bool bLegacy;
|
||||
bool bLegacyIndent;
|
||||
bool bLegacySpace;
|
||||
|
||||
docLvl()
|
||||
{
|
||||
bILvl = false;
|
||||
bFormat = false;
|
||||
bJc = false;
|
||||
bText = false;
|
||||
@ -1267,6 +1358,13 @@ public:
|
||||
bParaPr = false;
|
||||
bTextPr = false;
|
||||
bPStyle = false;
|
||||
bTentative = false;
|
||||
bTplc = false;
|
||||
bIsLgl = false;
|
||||
bLvlLegacy = false;
|
||||
bLegacy = false;
|
||||
bLegacyIndent = false;
|
||||
bLegacySpace = false;
|
||||
}
|
||||
~docLvl()
|
||||
{
|
||||
@ -1275,9 +1373,27 @@ public:
|
||||
delete Text[i];
|
||||
}
|
||||
}
|
||||
void Write(XmlUtils::CStringWriter& oWriter, int index)
|
||||
void Write(NSStringUtils::CStringBuilder& oWriter)
|
||||
{
|
||||
oWriter.WriteString(L"<w:lvl w:ilvl=\"" + std::to_wstring(index) + L"\">");
|
||||
oWriter.WriteString(L"<w:lvl");
|
||||
if(bILvl)
|
||||
{
|
||||
oWriter.WriteString(L" w:ilvl=\"" + std::to_wstring(ILvl) + L"\"");
|
||||
}
|
||||
if(bTentative)
|
||||
{
|
||||
if(Tentative)
|
||||
oWriter.WriteString(L" w:tentative=\"1\"");
|
||||
else
|
||||
oWriter.WriteString(L" w:tentative=\"0\"");
|
||||
}
|
||||
if(bTplc)
|
||||
{
|
||||
oWriter.WriteString(L" w:tplc=\"");
|
||||
oWriter.WriteString(XmlUtils::IntToString(Tplc, L"%08X"));
|
||||
oWriter.WriteString(L"\"");
|
||||
}
|
||||
oWriter.WriteString(L">");
|
||||
if(bStart)
|
||||
{
|
||||
oWriter.WriteString(L"<w:start w:val=\"" + std::to_wstring(Start) + L"\"/>");
|
||||
@ -1310,6 +1426,13 @@ public:
|
||||
std::wstring sStyleName = XmlUtils::EncodeXmlString(PStyle);
|
||||
oWriter.WriteString(L"<w:pStyle w:val=\"" + sStyleName + L"\"/>");
|
||||
}
|
||||
if(bIsLgl)
|
||||
{
|
||||
if(IsLgl)
|
||||
oWriter.WriteString(L"<w:isLgl/>");
|
||||
else
|
||||
oWriter.WriteString(L"<w:isLgl w:val=\"false\"/>");
|
||||
}
|
||||
if(bSuff)
|
||||
{
|
||||
std::wstring sSuff;
|
||||
@ -1348,6 +1471,30 @@ public:
|
||||
|
||||
oWriter.WriteString(sTextXml);
|
||||
}
|
||||
if(bLvlLegacy)
|
||||
{
|
||||
oWriter.WriteString(L"<w:legacy");
|
||||
if(bLegacy)
|
||||
{
|
||||
if(Legacy)
|
||||
oWriter.WriteString(L" w:legacy=\"1\"");
|
||||
else
|
||||
oWriter.WriteString(L" w:legacy=\"0\"");
|
||||
}
|
||||
if(bLegacyIndent)
|
||||
{
|
||||
oWriter.WriteString(L" w:legacyIndent=\"");
|
||||
oWriter.WriteString(std::to_wstring(LegacyIndent));
|
||||
oWriter.WriteString(L"\"");
|
||||
}
|
||||
if(bLegacySpace)
|
||||
{
|
||||
oWriter.WriteString(L" w:legacySpace=\"");
|
||||
oWriter.WriteString(std::to_wstring(LegacySpace));
|
||||
oWriter.WriteString(L"\"");
|
||||
}
|
||||
oWriter.WriteString(L"/>");
|
||||
}
|
||||
if(bJc)
|
||||
{
|
||||
std::wstring sJc;
|
||||
@ -1374,6 +1521,48 @@ public:
|
||||
oWriter.WriteString(L"</w:lvl>");
|
||||
}
|
||||
};
|
||||
class docLvlOverride
|
||||
{
|
||||
public:
|
||||
long ILvl;
|
||||
long StartOverride;
|
||||
docLvl* Lvl;
|
||||
|
||||
bool bILvl;
|
||||
bool bStartOverride;
|
||||
docLvlOverride()
|
||||
{
|
||||
bILvl = false;
|
||||
bStartOverride = false;
|
||||
Lvl = NULL;
|
||||
}
|
||||
~docLvlOverride()
|
||||
{
|
||||
RELEASEOBJECT(Lvl);
|
||||
}
|
||||
void Write(NSStringUtils::CStringBuilder& oWriter)
|
||||
{
|
||||
oWriter.WriteString(L"<w:lvlOverride");
|
||||
if (bILvl)
|
||||
{
|
||||
oWriter.WriteString(L" w:ilvl=\"");
|
||||
oWriter.WriteString(std::to_wstring(ILvl));
|
||||
oWriter.WriteString(L"\"");
|
||||
}
|
||||
oWriter.WriteString(L">");
|
||||
if (bStartOverride)
|
||||
{
|
||||
oWriter.WriteString(L"<w:startOverride w:val=\"");
|
||||
oWriter.WriteString(std::to_wstring(StartOverride));
|
||||
oWriter.WriteString(L"\"/>");
|
||||
}
|
||||
if(NULL != Lvl)
|
||||
{
|
||||
Lvl->Write(oWriter);
|
||||
}
|
||||
oWriter.WriteString(L"</w:lvlOverride>");
|
||||
}
|
||||
};
|
||||
class docANum
|
||||
{
|
||||
public:
|
||||
@ -1394,7 +1583,7 @@ public:
|
||||
delete Lvls[i];
|
||||
}
|
||||
}
|
||||
void Write(XmlUtils::CStringWriter& oWriterANum)
|
||||
void Write(NSStringUtils::CStringBuilder& oWriterANum)
|
||||
{
|
||||
if(bId)
|
||||
{
|
||||
@ -1411,7 +1600,7 @@ public:
|
||||
}
|
||||
for(int i = 0, length = (int)Lvls.size(); i < length; ++i)
|
||||
{
|
||||
Lvls[i]->Write(oWriterANum, i);
|
||||
Lvls[i]->Write(oWriterANum);
|
||||
}
|
||||
oWriterANum.WriteString(L"</w:abstractNum>");
|
||||
}
|
||||
@ -1422,6 +1611,7 @@ class docNum
|
||||
public:
|
||||
long AId;
|
||||
long Id;
|
||||
std::vector<docLvlOverride*> LvlOverrides;
|
||||
|
||||
bool bAId;
|
||||
bool bId;
|
||||
@ -1430,12 +1620,21 @@ public:
|
||||
bAId = false;
|
||||
bId = false;
|
||||
}
|
||||
void Write(XmlUtils::CStringWriter& oWriterNumList)
|
||||
~docNum()
|
||||
{
|
||||
for(size_t i = 0; i < LvlOverrides.size(); ++i){
|
||||
RELEASEOBJECT(LvlOverrides[i]);
|
||||
}
|
||||
}
|
||||
void Write(NSStringUtils::CStringBuilder& oWriterNumList)
|
||||
{
|
||||
if(bAId && bId)
|
||||
{
|
||||
oWriterNumList.WriteString(L"<w:num w:numId=\"" + std::to_wstring(Id) + L"\"><w:abstractNumId w:val=\"" +
|
||||
std::to_wstring(AId) + L"\"/></w:num>");
|
||||
oWriterNumList.WriteString(L"<w:num w:numId=\"" + std::to_wstring(Id) + L"\"><w:abstractNumId w:val=\"" + std::to_wstring(AId) + L"\"/>");
|
||||
for(size_t i = 0; i < LvlOverrides.size(); ++i){
|
||||
LvlOverrides[i]->Write(oWriterNumList);
|
||||
}
|
||||
oWriterNumList.WriteString(L"</w:num>");
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -1451,7 +1650,7 @@ public:
|
||||
sName = name;
|
||||
bGridAfter = false;
|
||||
}
|
||||
void Write(XmlUtils::CStringWriter& writer)
|
||||
void Write(NSStringUtils::CStringBuilder& writer)
|
||||
{
|
||||
if(bGridAfter && nGridAfter > 0)
|
||||
{
|
||||
@ -1468,7 +1667,7 @@ public:
|
||||
std::wstring href;
|
||||
std::wstring anchor;
|
||||
std::wstring tooltip;
|
||||
XmlUtils::CStringWriter writer;
|
||||
NSStringUtils::CStringBuilder writer;
|
||||
static WriteHyperlink* Parse(std::wstring fld)
|
||||
{
|
||||
WriteHyperlink* res = NULL;
|
||||
@ -1547,7 +1746,7 @@ public:
|
||||
}
|
||||
return res;
|
||||
}
|
||||
void Write(XmlUtils::CStringWriter& wr)
|
||||
void Write(NSStringUtils::CStringBuilder& wr)
|
||||
{
|
||||
if(false == rId.empty())
|
||||
{
|
||||
@ -1593,7 +1792,6 @@ public:
|
||||
};
|
||||
class CComment{
|
||||
private:
|
||||
typedef std::wstring (*funcArg)(CComment* pComment);
|
||||
IdCounter& m_oParaIdCounter;
|
||||
IdCounter& m_oFormatIdCounter;
|
||||
public:
|
||||
@ -1654,13 +1852,13 @@ public:
|
||||
}
|
||||
return sRes;
|
||||
}
|
||||
std::wstring writeTemplates(funcArg fReadFunction)
|
||||
std::wstring writeTemplates(bool isExt)
|
||||
{
|
||||
std::wstring sRes;
|
||||
sRes += (fReadFunction(this));
|
||||
sRes += isExt ? writeContentExt(this) : writeContent(this);
|
||||
|
||||
for(size_t i = 0; i < replies.size(); ++i)
|
||||
sRes += (fReadFunction(replies[i]));
|
||||
sRes += isExt ? writeContentExt(replies[i]) : writeContent(replies[i]);
|
||||
return sRes;
|
||||
}
|
||||
static std::wstring writeRef(CComment* pComment, const std::wstring& sBefore, const std::wstring& sRef, const std::wstring& sAfter)
|
||||
@ -1744,25 +1942,22 @@ public:
|
||||
sRes += L"\"";
|
||||
}
|
||||
sRes += L">";
|
||||
if(false == pComment->Text.empty())
|
||||
std::wstring sText = pComment->Text;
|
||||
|
||||
XmlUtils::replace_all(sText, L"\r", L"");
|
||||
|
||||
bool bFirst = true;
|
||||
int nPrevIndex = 0;
|
||||
for (int i = 0; i < (int)sText.length(); i++)
|
||||
{
|
||||
std::wstring sText = pComment->Text;
|
||||
|
||||
XmlUtils::replace_all(sText, L"\r", L"");
|
||||
|
||||
bool bFirst = true;
|
||||
int nPrevIndex = 0;
|
||||
for (int i = 0; i < (int)sText.length(); i++)
|
||||
wchar_t cToken = sText[i];
|
||||
if('\n' == cToken)
|
||||
{
|
||||
wchar_t cToken = sText[i];
|
||||
if('\n' == cToken)
|
||||
{
|
||||
bFirst = writeContentWritePart(pComment, sText, nPrevIndex, i, bFirst, sRes);
|
||||
nPrevIndex = i + 1;
|
||||
}
|
||||
bFirst = writeContentWritePart(pComment, sText, nPrevIndex, i, bFirst, sRes);
|
||||
nPrevIndex = i + 1;
|
||||
}
|
||||
writeContentWritePart(pComment, sText, nPrevIndex, (int)sText.length(), bFirst, sRes);
|
||||
}
|
||||
writeContentWritePart(pComment, sText, nPrevIndex, (int)sText.length(), bFirst, sRes);
|
||||
sRes += L"</w:comment>";
|
||||
return sRes;
|
||||
}
|
||||
@ -1852,7 +2047,7 @@ public:
|
||||
std::wstring sRes;
|
||||
for (boost::unordered_map<int, CComment*>::const_iterator it = m_mapComments.begin(); it != m_mapComments.end(); ++it)
|
||||
{
|
||||
sRes += (it->second->writeTemplates(CComment::writeContent));
|
||||
sRes += it->second->writeTemplates(false);
|
||||
}
|
||||
return sRes;
|
||||
}
|
||||
@ -1861,7 +2056,7 @@ public:
|
||||
std::wstring sRes;
|
||||
for (boost::unordered_map<int, CComment*>::const_iterator it = m_mapComments.begin(); it != m_mapComments.end(); ++it)
|
||||
{
|
||||
sRes += (it->second->writeTemplates(CComment::writeContentExt));
|
||||
sRes += it->second->writeTemplates(true);
|
||||
}
|
||||
return sRes;
|
||||
}
|
||||
@ -2457,7 +2652,7 @@ public: CFramePr()
|
||||
{
|
||||
return !(bDropCap || bH || bHAnchor || bHRule || bHSpace || bLines || bVAnchor || bVSpace || bW || bWrap || bX || bXAlign || bY || bYAlign);
|
||||
}
|
||||
void Write(XmlUtils::CStringWriter& oStringWriter)
|
||||
void Write(NSStringUtils::CStringBuilder& oStringWriter)
|
||||
{
|
||||
oStringWriter.WriteString(L"<w:framePr");
|
||||
if(bDropCap)
|
||||
@ -2595,7 +2790,7 @@ public:
|
||||
std::wstring sDocLocation;
|
||||
std::wstring sTgtFrame;
|
||||
|
||||
XmlUtils::CStringWriter writer;
|
||||
NSStringUtils::CStringBuilder writer;
|
||||
|
||||
bool bHistory;
|
||||
public:
|
||||
@ -2603,7 +2798,7 @@ public:
|
||||
{
|
||||
bHistory = false;
|
||||
}
|
||||
void Write(XmlUtils::CStringWriter& wr)
|
||||
void Write(NSStringUtils::CStringBuilder& wr)
|
||||
{
|
||||
if(false == rId.empty())
|
||||
{
|
||||
@ -2634,12 +2829,12 @@ public:
|
||||
class CFldSimple{
|
||||
public:
|
||||
std::wstring sInstr;
|
||||
XmlUtils::CStringWriter writer;
|
||||
NSStringUtils::CStringBuilder writer;
|
||||
public:
|
||||
CFldSimple()
|
||||
{
|
||||
}
|
||||
void Write(XmlUtils::CStringWriter& wr)
|
||||
void Write(NSStringUtils::CStringBuilder& wr)
|
||||
{
|
||||
if(false == sInstr.empty())
|
||||
{
|
||||
@ -2664,14 +2859,14 @@ public:
|
||||
long* vMergeOrigin;
|
||||
|
||||
rPr* RPr;
|
||||
XmlUtils::CStringWriter* PPr;
|
||||
NSStringUtils::CStringBuilder* PPr;
|
||||
SectPr* sectPr;
|
||||
CWiterTblPr* tblPr;
|
||||
XmlUtils::CStringWriter* tblGridChange;
|
||||
XmlUtils::CStringWriter* trPr;
|
||||
XmlUtils::CStringWriter* tcPr;
|
||||
XmlUtils::CStringWriter* content;
|
||||
XmlUtils::CStringWriter* contentRun;
|
||||
NSStringUtils::CStringBuilder* tblGridChange;
|
||||
NSStringUtils::CStringBuilder* trPr;
|
||||
NSStringUtils::CStringBuilder* tcPr;
|
||||
NSStringUtils::CStringBuilder* content;
|
||||
NSStringUtils::CStringBuilder* contentRun;
|
||||
TrackRevision()
|
||||
{
|
||||
Id = NULL;
|
||||
@ -2708,11 +2903,11 @@ public:
|
||||
}
|
||||
std::wstring ToString(std::wstring sName)
|
||||
{
|
||||
XmlUtils::CStringWriter writer;
|
||||
NSStringUtils::CStringBuilder writer;
|
||||
Write(&writer, sName);
|
||||
return writer.GetData();
|
||||
}
|
||||
void Write(XmlUtils::CStringWriter* pCStringWriter, std::wstring sName)
|
||||
void Write(NSStringUtils::CStringBuilder* pCStringWriter, std::wstring sName)
|
||||
{
|
||||
if(IsNoEmpty())
|
||||
{
|
||||
|
||||
@ -47,7 +47,9 @@ Binary_HdrFtrTableReader::Binary_HdrFtrTableReader(NSBinPptxRW::CBinaryFileReade
|
||||
}
|
||||
int Binary_HdrFtrTableReader::Read()
|
||||
{
|
||||
return ReadTable(&Binary_HdrFtrTableReader::ReadHdrFtrContent, this);
|
||||
int res = c_oSerConstants::ReadOk;
|
||||
READ_TABLE_DEF(res, this->ReadHdrFtrContent, NULL);
|
||||
return res;
|
||||
}
|
||||
int Binary_HdrFtrTableReader::ReadHdrFtrContent(BYTE type, long length, void* poResult)
|
||||
{
|
||||
@ -55,7 +57,7 @@ int Binary_HdrFtrTableReader::ReadHdrFtrContent(BYTE type, long length, void* po
|
||||
if ( c_oSerHdrFtrTypes::Header == type || c_oSerHdrFtrTypes::Footer == type )
|
||||
{
|
||||
nCurType = type;
|
||||
res = Read1(length, &Binary_HdrFtrTableReader::ReadHdrFtrFEO, this, poResult);
|
||||
READ1_DEF(length, res, this->ReadHdrFtrFEO, poResult);
|
||||
}
|
||||
else
|
||||
res = c_oSerConstants::ReadUnknown;
|
||||
@ -67,7 +69,7 @@ int Binary_HdrFtrTableReader::ReadHdrFtrFEO(BYTE type, long length, void* poResu
|
||||
if ( c_oSerHdrFtrTypes::HdrFtr_First == type || c_oSerHdrFtrTypes::HdrFtr_Even == type || c_oSerHdrFtrTypes::HdrFtr_Odd == type )
|
||||
{
|
||||
nCurHeaderType = type;
|
||||
res = Read1(length, &Binary_HdrFtrTableReader::ReadHdrFtrItem, this, poResult);
|
||||
READ1_DEF(length, res, this->ReadHdrFtrItem, poResult);
|
||||
}
|
||||
else
|
||||
res = c_oSerConstants::ReadUnknown;
|
||||
@ -99,7 +101,7 @@ int Binary_HdrFtrTableReader::ReadHdrFtrItem(BYTE type, long length, void* poRes
|
||||
}
|
||||
m_oFileWriter.m_pDrawingConverter->SetDstContentRels();
|
||||
Binary_DocumentTableReader oBinary_DocumentTableReader(m_oBufferedStream, m_oFileWriter, poHdrFtrItem->Header, m_pComments);
|
||||
res = Read1(length, &Binary_HdrFtrTableReader::ReadHdrFtrItemContent, this, &oBinary_DocumentTableReader);
|
||||
READ1_DEF(length, res, this->ReadHdrFtrItemContent, &oBinary_DocumentTableReader);
|
||||
|
||||
OOX::CPath fileRelsPath = m_oFileWriter.m_oDocumentWriter.m_sDir + FILE_SEPARATOR_STR + L"word" +
|
||||
FILE_SEPARATOR_STR + L"_rels"+
|
||||
@ -118,4 +120,4 @@ int Binary_HdrFtrTableReader::ReadHdrFtrItemContent(BYTE type, long length, void
|
||||
return pBinary_DocumentTableReader->ReadDocumentContent(type, length, NULL);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -37,13 +37,13 @@
|
||||
namespace Writers
|
||||
{
|
||||
static std::wstring g_string_set_Start = _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?><w:settings xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:v=\"urn:schemas-microsoft-com:vml\">");
|
||||
static std::wstring g_string_set_Default = _T("<w:zoom w:percent=\"100\"/><w:characterSpacingControl w:val=\"doNotCompress\"/><w:compat><w:compatSetting w:name=\"compatibilityMode\" w:uri=\"http://schemas.microsoft.com/office/word\" w:val=\"14\"/><w:compatSetting w:name=\"overrideTableStyleFontSizeAndJustification\" w:uri=\"http://schemas.microsoft.com/office/word\" w:val=\"1\"/><w:compatSetting w:name=\"enableOpenTypeFeatures\" w:uri=\"http://schemas.microsoft.com/office/word\" w:val=\"1\"/><w:compatSetting w:name=\"doNotFlipMirrorIndents\" w:uri=\"http://schemas.microsoft.com/office/word\" w:val=\"1\"/></w:compat><w:themeFontLang w:val=\"en-US\" w:eastAsia=\"zh-CN\"/><w:shapeDefaults><o:shapedefaults v:ext=\"edit\" spidmax=\"1026\"/><o:shapelayout v:ext=\"edit\"><o:idmap v:ext=\"edit\" data=\"1\"/></o:shapelayout></w:shapeDefaults><w:decimalSymbol w:val=\".\"/><w:listSeparator w:val=\",\"/>");
|
||||
static std::wstring g_string_set_Default = _T("<w:zoom w:percent=\"100\"/><w:characterSpacingControl w:val=\"doNotCompress\"/><w:compat><w:compatSetting w:name=\"compatibilityMode\" w:uri=\"http://schemas.microsoft.com/office/word\" w:val=\"15\"/><w:compatSetting w:name=\"overrideTableStyleFontSizeAndJustification\" w:uri=\"http://schemas.microsoft.com/office/word\" w:val=\"1\"/><w:compatSetting w:name=\"enableOpenTypeFeatures\" w:uri=\"http://schemas.microsoft.com/office/word\" w:val=\"1\"/><w:compatSetting w:name=\"doNotFlipMirrorIndents\" w:uri=\"http://schemas.microsoft.com/office/word\" w:val=\"1\"/></w:compat><w:themeFontLang w:val=\"en-US\" w:eastAsia=\"zh-CN\"/><w:shapeDefaults><o:shapedefaults v:ext=\"edit\" spidmax=\"1026\"/><o:shapelayout v:ext=\"edit\"><o:idmap v:ext=\"edit\" data=\"1\"/></o:shapelayout></w:shapeDefaults><w:decimalSymbol w:val=\".\"/><w:listSeparator w:val=\",\"/>");
|
||||
static std::wstring g_string_set_End = _T("</w:settings>");
|
||||
|
||||
class SettingWriter
|
||||
{
|
||||
std::wstring m_sDir;
|
||||
XmlUtils::CStringWriter m_oSettingWriter;
|
||||
NSStringUtils::CStringBuilder m_oSettingWriter;
|
||||
HeaderFooterWriter& m_oHeaderFooterWriter;
|
||||
public:
|
||||
SettingWriter(std::wstring sDir, HeaderFooterWriter& oHeaderFooterWriter):m_sDir(sDir),m_oHeaderFooterWriter(oHeaderFooterWriter)
|
||||
|
||||
@ -46,12 +46,12 @@ namespace Writers
|
||||
|
||||
class StylesWriter
|
||||
{
|
||||
XmlUtils::CStringWriter m_oWriter;
|
||||
NSStringUtils::CStringBuilder m_oWriter;
|
||||
std::wstring m_sDir;
|
||||
public:
|
||||
XmlUtils::CStringWriter m_Styles;
|
||||
XmlUtils::CStringWriter m_rPrDefault;
|
||||
XmlUtils::CStringWriter m_pPrDefault;
|
||||
NSStringUtils::CStringBuilder m_Styles;
|
||||
NSStringUtils::CStringBuilder m_rPrDefault;
|
||||
NSStringUtils::CStringBuilder m_pPrDefault;
|
||||
int m_nVersion;
|
||||
StylesWriter(std::wstring sDir, int nVersion):m_sDir(sDir),m_nVersion(nVersion)
|
||||
{
|
||||
|
||||
@ -43,7 +43,7 @@ namespace Writers
|
||||
|
||||
class FontTableWriter
|
||||
{
|
||||
XmlUtils::CStringWriter m_oWriter;
|
||||
NSStringUtils::CStringBuilder m_oWriter;
|
||||
std::wstring m_sDir;
|
||||
NSFonts::IApplicationFonts* m_pApplicationFonts;
|
||||
NSFonts::IFontManager* m_pFontManager;
|
||||
|
||||
@ -201,7 +201,17 @@ extern int g_nCurFormatVersion;
|
||||
StyleLink = 23,
|
||||
lvl_NumFmt = 24,
|
||||
NumFmtVal = 25,
|
||||
NumFmtFormat = 26
|
||||
NumFmtFormat = 26,
|
||||
Num_LvlOverride = 27,
|
||||
StartOverride = 28,
|
||||
ILvl = 29,
|
||||
Tentative = 30,
|
||||
Tplc = 31,
|
||||
IsLgl = 32,
|
||||
LvlLegacy = 33,
|
||||
Legacy = 34,
|
||||
LegacyIndent = 35,
|
||||
LegacySpace = 36
|
||||
};}
|
||||
namespace c_oSerOtherTableTypes{enum c_oSerOtherTableTypes
|
||||
{
|
||||
@ -262,7 +272,14 @@ extern int g_nCurFormatVersion;
|
||||
Style_RowPr = 15,
|
||||
Style_CellPr = 16,
|
||||
Style_TblStylePr = 17,
|
||||
Style_Link = 18
|
||||
Style_Link = 18,
|
||||
Style_CustomStyle = 19,
|
||||
Style_Aliases = 20,
|
||||
Style_AutoRedefine = 21,
|
||||
Style_Locked = 22,
|
||||
Style_Personal = 23,
|
||||
Style_PersonalCompose = 24,
|
||||
Style_PersonalReply = 25
|
||||
};}
|
||||
namespace c_oSerProp_tblStylePrType{enum c_oSerProp_tblStylePrType
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -599,7 +599,7 @@ namespace BinXlsxRW{
|
||||
//как в CsvReader - подозрительный код
|
||||
WCHAR *pEndPtr;
|
||||
wcstod(val.c_str(), &pEndPtr);
|
||||
if (NULL != *pEndPtr)
|
||||
if (0 != *pEndPtr)
|
||||
{
|
||||
// Не число
|
||||
aSharedStrings.push_back(val);
|
||||
|
||||
@ -341,7 +341,7 @@ bool BinDocxRW::CDocxSerializer::getXmlContent(NSBinPptxRW::CBinaryFileReader& o
|
||||
long nLength = oBufferedStream.GetLong();
|
||||
Writers::ContentWriter oTempContentWriter;
|
||||
BinDocxRW::Binary_DocumentTableReader oBinary_DocumentTableReader(oBufferedStream, *m_pCurFileWriter, oTempContentWriter, m_pCurFileWriter->m_pComments);
|
||||
int res = oBinary_DocumentTableReader.Read1(nLength, &BinDocxRW::Binary_DocumentTableReader::ReadDocumentContent, &oBinary_DocumentTableReader, NULL);
|
||||
oBinary_DocumentTableReader.ReadDocumentContentOut(nLength);
|
||||
|
||||
sOutputXml = oTempContentWriter.m_oContent.GetData();
|
||||
return true;
|
||||
@ -433,13 +433,13 @@ bool BinDocxRW::CDocxSerializer::getXmlContentElem(OOX::EElementType eType, NSBi
|
||||
if(OOX::et_m_oMathPara == eType)
|
||||
{
|
||||
oTempContentWriter.m_oContent.WriteString(std::wstring(_T("<m:oMathPara>")));
|
||||
oBinary_DocumentTableReader.Read1(nLength, &BinDocxRW::Binary_DocumentTableReader::ReadMathOMathPara, &oBinary_DocumentTableReader, NULL);
|
||||
oBinary_DocumentTableReader.ReadMathOMathParaOut(nLength);
|
||||
oTempContentWriter.m_oContent.WriteString(std::wstring(_T("</m:oMathPara>")));
|
||||
}
|
||||
else if(OOX::et_m_oMath == eType)
|
||||
{
|
||||
oTempContentWriter.m_oContent.WriteString(std::wstring(_T("<m:oMath>")));
|
||||
oBinary_DocumentTableReader.Read1(nLength, &BinDocxRW::Binary_DocumentTableReader::ReadMathArg, &oBinary_DocumentTableReader, NULL);
|
||||
oBinary_DocumentTableReader.ReadMathArgOut(nLength);
|
||||
oTempContentWriter.m_oContent.WriteString(std::wstring(_T("</m:oMath>")));
|
||||
}
|
||||
|
||||
|
||||
@ -19,9 +19,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OdfFormulasConvert", "..\wi
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OdfFileReaderTest", "OdfFileTest.vcproj", "{C2882DDD-07E6-4314-AD4B-48F43F38D722}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C} = {C27E9A9F-3A17-4482-9C5F-BF15C01E747C}
|
||||
{50E20601-4A8D-4AFB-8870-63828D328429} = {50E20601-4A8D-4AFB-8870-63828D328429}
|
||||
{609ED938-3CA8-4BED-B363-25096D4C4812} = {609ED938-3CA8-4BED-B363-25096D4C4812}
|
||||
{94954A67-A853-43B1-A727-6EF2774C5A6A} = {94954A67-A853-43B1-A727-6EF2774C5A6A}
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C} = {C27E9A9F-3A17-4482-9C5F-BF15C01E747C}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OfficeFileCrypt", "..\..\OfficeCryptReader\win32\ECMACryptReader.vcproj", "{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}"
|
||||
|
||||
@ -115,7 +115,7 @@ HRESULT convert_single(std::wstring srcFileName)
|
||||
|
||||
if (nResult == 0)
|
||||
{
|
||||
if (S_OK != oCOfficeUtils.CompressFileOrDirectory(dstTempPath.c_str(), dstPath.c_str(), true))
|
||||
if (S_OK != oCOfficeUtils.CompressFileOrDirectory(dstTempPath, dstPath, true))
|
||||
nResult = -2;
|
||||
}
|
||||
|
||||
|
||||
@ -73,9 +73,11 @@ SOURCES += \
|
||||
../src/odf/office_event_listeners.cpp \
|
||||
../src/odf/office_presentation.cpp \
|
||||
../src/odf/office_scripts.cpp \
|
||||
../src/odf/office_forms.cpp \
|
||||
../src/odf/office_settings.cpp \
|
||||
../src/odf/office_spreadsheet.cpp \
|
||||
../src/odf/office_text.cpp \
|
||||
../src/odf/office_meta.cpp \
|
||||
../src/odf/paragraph_elements.cpp \
|
||||
../src/odf/ruby.cpp \
|
||||
../src/odf/search_table_cell.cpp \
|
||||
@ -184,6 +186,7 @@ SOURCES += \
|
||||
../src/odf/datatypes/styleverticalrel.cpp \
|
||||
../src/odf/datatypes/stylewrap.cpp \
|
||||
../src/odf/datatypes/stylewrapcontourmode.cpp \
|
||||
../src/odf/datatypes/stylenumformat.cpp \
|
||||
../src/odf/datatypes/tablealign.cpp \
|
||||
../src/odf/datatypes/tablecentering.cpp \
|
||||
../src/odf/datatypes/tablemode.cpp \
|
||||
@ -211,6 +214,8 @@ SOURCES += \
|
||||
../src/odf/datatypes/tablefunction.cpp \
|
||||
../src/odf/datatypes/tableorder.cpp \
|
||||
../src/odf/datatypes/dategroup.cpp \
|
||||
../src/odf/datatypes/bibliography \
|
||||
../src/odfcommandtype.cpp \
|
||||
../src/docx/xlsx_conditionalFormatting.cpp \
|
||||
../src/docx/xlsx_dxfs.cpp \
|
||||
../src/docx/docx_content_type.cpp \
|
||||
@ -335,9 +340,11 @@ HEADERS += \
|
||||
../src/odf/office_event_listeners.h \
|
||||
../src/odf/office_presentation.h \
|
||||
../src/odf/office_scripts.h \
|
||||
../src/odf/office_forms.h \
|
||||
../src/odf/office_settings.h \
|
||||
../src/odf/office_spreadsheet.h \
|
||||
../src/odf/office_text.h \
|
||||
../src/odf/office_meta.h \
|
||||
../src/odf/paragraph_elements.h \
|
||||
../src/odf/ruby.h \
|
||||
../src/odf/search_table_cell.h \
|
||||
@ -372,6 +379,7 @@ HEADERS += \
|
||||
../src/odf/datatypes/mathvariant.h \
|
||||
../src/odf/calcext_elements.h \
|
||||
../src/odf/table_database_ranges.h \
|
||||
../src/odfcommandtype.h \
|
||||
../src/odf/datatypes/anchortype.h \
|
||||
../src/odf/datatypes/backgroundcolor.h \
|
||||
../src/odf/datatypes/bool.h \
|
||||
@ -445,6 +453,7 @@ HEADERS += \
|
||||
../src/odf/datatypes/styleverticalpos.h \
|
||||
../src/odf/datatypes/styleverticalrel.h \
|
||||
../src/odf/datatypes/stylewrap.h \
|
||||
../src/odf/datatypes/stylenumformat.h \
|
||||
../src/odf/datatypes/stylewrapcontourmode.h \
|
||||
../src/odf/datatypes/tablealign.h \
|
||||
../src/odf/datatypes/tablecentering.h \
|
||||
|
||||
@ -63,9 +63,11 @@
|
||||
#include "../src/odf/office_event_listeners.cpp"
|
||||
#include "../src/odf/office_presentation.cpp"
|
||||
#include "../src/odf/office_scripts.cpp"
|
||||
#include "../src/odf/office_forms.cpp"
|
||||
#include "../src/odf/office_settings.cpp"
|
||||
#include "../src/odf/office_spreadsheet.cpp"
|
||||
#include "../src/odf/office_text.cpp"
|
||||
#include "../src/odf/office_meta.cpp"
|
||||
#include "../src/odf/paragraph_elements.cpp"
|
||||
#include "../src/odf/ruby.cpp"
|
||||
#include "../src/odf/search_table_cell.cpp"
|
||||
|
||||
@ -127,3 +127,6 @@
|
||||
#include "../src/odf/datatypes/tablefunction.cpp"
|
||||
#include "../src/odf/datatypes/tableorder.cpp"
|
||||
#include "../src/odf/datatypes/dategroup.cpp"
|
||||
#include "../src/odf/datatypes/commandtype.cpp"
|
||||
#include "../src/odf/datatypes/stylenumformat.cpp"
|
||||
#include "../src/odf/datatypes/bibliography.cpp"
|
||||
|
||||
@ -42,6 +42,8 @@
|
||||
#include "docx_conversion_context.h"
|
||||
|
||||
#include "../odf/odfcontext.h"
|
||||
#include "../odf/text_content.h"
|
||||
#include "../odf/calcs_styles.h"
|
||||
#include "../odf/style_paragraph_properties.h"
|
||||
#include "../odf/style_text_properties.h"
|
||||
#include "../odf/style_table_properties.h"
|
||||
@ -100,7 +102,7 @@ void text_tracked_context::start_change (std::wstring id)
|
||||
}
|
||||
void text_tracked_context::end_change ()
|
||||
{
|
||||
mapChanges_.insert( std::pair<std::wstring, _state>(current_state_.id, current_state_));
|
||||
mapChanges_.insert( std::make_pair(current_state_.id, current_state_));
|
||||
|
||||
current_state_.clear();
|
||||
}
|
||||
@ -130,7 +132,54 @@ text_tracked_context::_state & text_tracked_context::get_tracked_change(std::wst
|
||||
return current_state_; //empty
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------------------
|
||||
void text_forms_context::start_element (int type)
|
||||
{
|
||||
current_state_.clear();
|
||||
|
||||
current_state_.type = type;
|
||||
}
|
||||
void text_forms_context::set_id (const std::wstring& id)
|
||||
{
|
||||
current_state_.id = id;
|
||||
}
|
||||
void text_forms_context::set_name (const std::wstring& name)
|
||||
{
|
||||
current_state_.name = name;
|
||||
}
|
||||
void text_forms_context::set_label (const std::wstring& label)
|
||||
{
|
||||
current_state_.label = label;
|
||||
}
|
||||
void text_forms_context::set_uuid (const std::wstring& uuid)
|
||||
{
|
||||
current_state_.uuid = uuid;
|
||||
}
|
||||
void text_forms_context::set_value (const std::wstring &value)
|
||||
{
|
||||
current_state_.value = value;
|
||||
}
|
||||
void text_forms_context::set_element(odf_reader::form_element *elm)
|
||||
{
|
||||
current_state_.element = elm;
|
||||
}
|
||||
void text_forms_context::end_element ()
|
||||
{
|
||||
mapElements_.insert( std::make_pair(current_state_.id, current_state_));
|
||||
|
||||
current_state_.clear();
|
||||
}
|
||||
text_forms_context::_state& text_forms_context::get_state_element (std::wstring id)
|
||||
{
|
||||
std::map<std::wstring, _state>::iterator it = mapElements_.find(id);
|
||||
|
||||
if (it != mapElements_.end())
|
||||
{
|
||||
return it->second;
|
||||
}
|
||||
else
|
||||
return current_state_; //empty
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------------------
|
||||
docx_conversion_context::docx_conversion_context(odf_reader::odf_document * OdfDocument) :
|
||||
next_dump_page_properties_ (false),
|
||||
page_break_ (false),
|
||||
@ -141,6 +190,7 @@ docx_conversion_context::docx_conversion_context(odf_reader::odf_document * OdfD
|
||||
in_paragraph_ (false),
|
||||
in_header_ (false),
|
||||
in_drawing_content_ (false),
|
||||
in_table_content_ (false),
|
||||
text_tracked_context_ (*this),
|
||||
table_context_ (*this),
|
||||
output_document_ (NULL),
|
||||
@ -254,20 +304,21 @@ void docx_conversion_context::finish_paragraph()
|
||||
|
||||
void docx_conversion_context::finish_run()
|
||||
{
|
||||
if (in_run_)
|
||||
{
|
||||
output_stream() << L"</w:r>";
|
||||
in_run_ = false;
|
||||
if (get_comments_context().state()==2)
|
||||
{
|
||||
output_stream()<< L"<w:commentRangeEnd w:id=\"" << get_comments_context().current_id() << L"\" />";
|
||||
|
||||
add_element_to_run();
|
||||
output_stream()<< L"<w:commentReference w:id=\"" << get_comments_context().current_id() << L"\" />";
|
||||
get_comments_context().state(0);
|
||||
finish_run();
|
||||
}
|
||||
}
|
||||
if (false == in_run_) return;
|
||||
|
||||
output_stream() << L"</w:r>";
|
||||
in_run_ = false;
|
||||
|
||||
if (get_comments_context().state()==2)
|
||||
{
|
||||
output_stream()<< L"<w:commentRangeEnd w:id=\"" << get_comments_context().current_id() << L"\"/>";
|
||||
|
||||
add_element_to_run();
|
||||
output_stream()<< L"<w:commentReference w:id=\"" << get_comments_context().current_id() << L"\"/>";
|
||||
get_comments_context().state(0);
|
||||
finish_run();
|
||||
}
|
||||
|
||||
}
|
||||
void docx_conversion_context::start_math_formula()
|
||||
{
|
||||
@ -283,6 +334,215 @@ void docx_conversion_context::end_math_formula()
|
||||
output_stream() << L"<m:oMath>" << math_content << L"</m:oMath>";
|
||||
}
|
||||
}
|
||||
void docx_conversion_context::start_sdt(int type)
|
||||
{
|
||||
in_table_content_ = true;
|
||||
|
||||
table_content_context_.type_table_content = type;
|
||||
|
||||
if (table_content_context_.type_table_content < 4)
|
||||
{
|
||||
output_stream() << L"<w:sdt><w:sdtPr>";
|
||||
if (table_content_context_.type_table_content == 3)
|
||||
{
|
||||
output_stream() << L"<w:bibliography/>";
|
||||
}
|
||||
else
|
||||
{
|
||||
output_stream() << L"<w:docPartObj><w:docPartGallery w:val=\"";
|
||||
|
||||
if (table_content_context_.type_table_content == 1) output_stream() << L"Table of Contents";
|
||||
if (table_content_context_.type_table_content == 2) output_stream() << L"List od Illustrations";
|
||||
|
||||
output_stream() << L"\"/><w:docPartUnique/></w:docPartObj>";
|
||||
|
||||
}
|
||||
output_stream() << L"</w:sdtPr><w:sdtContent>";
|
||||
}
|
||||
}
|
||||
|
||||
void docx_conversion_context::start_index_content()
|
||||
{
|
||||
if (!in_table_content_) return;
|
||||
|
||||
start_paragraph(false);
|
||||
|
||||
std::wstring sInstrText;
|
||||
|
||||
switch(table_content_context_.type_table_content)
|
||||
{
|
||||
case 1: sInstrText += L" TOC \\f \\h \\u"; break;
|
||||
case 2:
|
||||
case 4:
|
||||
case 6:
|
||||
case 7: sInstrText += L" TOC \\h \\z"; break;
|
||||
case 5: sInstrText += L" INDEX \\z"; break;
|
||||
case 3: sInstrText += L" BIBLIOGRAPHY"; break;
|
||||
}
|
||||
|
||||
if (table_content_context_.min_outline_level > 0)
|
||||
{
|
||||
if (table_content_context_.max_outline_level > 9)
|
||||
table_content_context_.max_outline_level = 9;
|
||||
|
||||
sInstrText += L" \\o \"" + std::to_wstring(table_content_context_.min_outline_level) + L"-" +
|
||||
std::to_wstring(table_content_context_.max_outline_level) + L"\" ";
|
||||
}
|
||||
/*\\l 1-3*/
|
||||
if (!table_content_context_.caption_sequence_name.empty())
|
||||
{
|
||||
sInstrText += L" \\c \"" + table_content_context_.caption_sequence_name + L"\"";
|
||||
}
|
||||
|
||||
output_stream() << L"<w:r>";
|
||||
output_stream() << L"<w:fldChar w:fldCharType=\"begin\"/>";
|
||||
output_stream() << L"</w:r>";
|
||||
output_stream() << L"<w:r>";
|
||||
output_stream() << L"<w:instrText xml:space=\"preserve\">" << sInstrText << L" </w:instrText>";
|
||||
output_stream() << L"</w:r>";
|
||||
output_stream() << L"<w:r>";
|
||||
//output_stream() << L"<w:rPr>
|
||||
//output_stream() << L"<w:rFonts w:ascii="Minion Pro" w:eastAsia="DejaVuSans" w:hAnsi="Minion Pro"/>
|
||||
//output_stream() << L"<w:bCs w:val="0"/>
|
||||
//output_stream() << L"<w:sz w:val="21"/>
|
||||
//output_stream() << L"<w:szCs w:val="24"/>
|
||||
//output_stream() << L"</w:rPr>
|
||||
output_stream() << L"<w:fldChar w:fldCharType=\"separate\"/>";
|
||||
output_stream() << L"</w:r>";
|
||||
|
||||
finish_paragraph();
|
||||
}
|
||||
void docx_conversion_context::end_index_content()
|
||||
{
|
||||
if (!in_table_content_) return;
|
||||
|
||||
start_paragraph(false);
|
||||
output_stream() << L"<w:r>";
|
||||
//output_stream() << L"<w:rPr>";
|
||||
//output_stream() << L"<w:rFonts w:ascii="Minion Pro" w:hAnsi="Minion Pro"/>";
|
||||
//output_stream() << L"<w:sz w:val="20"/>
|
||||
//output_stream() << L"</w:rPr>";
|
||||
output_stream() << L"<w:fldChar w:fldCharType=\"end\"/>";
|
||||
output_stream() << L"</w:r>";
|
||||
|
||||
finish_paragraph();
|
||||
}
|
||||
void docx_conversion_context::end_sdt()
|
||||
{
|
||||
if (!in_table_content_) return;
|
||||
|
||||
if (table_content_context_.type_table_content < 4)
|
||||
{
|
||||
output_stream() << L"</w:sdtContent></w:sdt>";
|
||||
}
|
||||
in_table_content_ = false;
|
||||
table_content_context_.clear_all();
|
||||
}
|
||||
void docx_conversion_context::start_index_element()
|
||||
{
|
||||
table_content_context_.clear_current_content_template_index();
|
||||
}
|
||||
void docx_conversion_context::end_index_element()
|
||||
{
|
||||
table_content_context_.clear_current_content_template_index();
|
||||
}
|
||||
void docx_conversion_context::add_bibliography_item (const std::wstring & item)
|
||||
{
|
||||
arBibliography.push_back(item);
|
||||
}
|
||||
void docx_conversion_context::start_bookmark (const std::wstring &name)
|
||||
{
|
||||
std::map<std::wstring, int>::iterator pFind = mapBookmarks.find(name);
|
||||
|
||||
int id = -1;
|
||||
if (pFind == mapBookmarks.end())
|
||||
{
|
||||
id = mapBookmarks.size() + 1;
|
||||
mapBookmarks.insert(std::make_pair(name, id));
|
||||
}
|
||||
else
|
||||
{
|
||||
id = pFind->second;
|
||||
}
|
||||
|
||||
finish_run();
|
||||
output_stream() << L"<w:bookmarkStart w:id=\"" << std::to_wstring(id) << L"\" w:name=\"" << name << L"\"/>";
|
||||
}
|
||||
|
||||
void docx_conversion_context::end_bookmark (const std::wstring &name)
|
||||
{
|
||||
std::map<std::wstring, int>::iterator pFind = mapBookmarks.find(name);
|
||||
|
||||
int id = -1;
|
||||
if (pFind == mapBookmarks.end())
|
||||
{
|
||||
return; //???
|
||||
}
|
||||
else
|
||||
{
|
||||
id = pFind->second;
|
||||
}
|
||||
finish_run();
|
||||
output_stream() << L"<w:bookmarkEnd w:id=\"" << std::to_wstring(id) << L"\"/>";
|
||||
}
|
||||
|
||||
void docx_conversion_context::start_alphabetical_index (const std::wstring &id)
|
||||
{
|
||||
std::map<std::wstring, std::vector<odf_reader::office_element_ptr>>::iterator pFind = mapAlphabeticals.find(id);
|
||||
|
||||
if (pFind != mapAlphabeticals.end()) return;
|
||||
|
||||
std::vector<odf_reader::office_element_ptr> texts;
|
||||
mapAlphabeticals.insert(std::make_pair(id, texts));
|
||||
|
||||
current_alphabetic_index_ = id;
|
||||
}
|
||||
void docx_conversion_context::add_alphabetical_index_text (odf_reader::office_element_ptr & elem)
|
||||
{
|
||||
std::map<std::wstring, std::vector<odf_reader::office_element_ptr>>::iterator pFind = mapAlphabeticals.find(current_alphabetic_index_);
|
||||
if (pFind == mapAlphabeticals.end())
|
||||
{
|
||||
return;
|
||||
}
|
||||
pFind->second.push_back(elem);
|
||||
}
|
||||
void docx_conversion_context::end_alphabetical_index (const std::wstring &id)
|
||||
{
|
||||
std::map<std::wstring, std::vector<odf_reader::office_element_ptr>>::iterator pFind = mapAlphabeticals.find(id);
|
||||
|
||||
if (pFind == mapAlphabeticals.end())
|
||||
{
|
||||
return;
|
||||
}
|
||||
finish_run();
|
||||
|
||||
output_stream() << L"<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>";
|
||||
output_stream() << L"<w:r><w:instrText>XE \"";
|
||||
|
||||
odf_reader::ElementType type;
|
||||
for (size_t i = 0; i < pFind->second.size(); i++)
|
||||
{
|
||||
type = pFind->second[i]->get_type();
|
||||
pFind->second[i]->text_to_stream(output_stream());
|
||||
}
|
||||
|
||||
output_stream() << L"\"</w:instrText></w:r>";
|
||||
|
||||
output_stream() << L"<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>";
|
||||
|
||||
for (size_t i = 0; i < pFind->second.size(); i++)
|
||||
{
|
||||
pFind->second[i]->docx_convert(*this);
|
||||
}
|
||||
|
||||
mapAlphabeticals.erase(pFind);
|
||||
|
||||
if (mapAlphabeticals.empty())
|
||||
current_alphabetic_index_.clear();
|
||||
else
|
||||
current_alphabetic_index_ = mapAlphabeticals.begin()->first; // todooo vector+map+level
|
||||
}
|
||||
|
||||
|
||||
void docx_conversion_context::start_chart(std::wstring name)
|
||||
{
|
||||
@ -333,17 +593,11 @@ hyperlinks::_ref docx_conversion_context::last_hyperlink()
|
||||
return hyperlinks_.last();
|
||||
}
|
||||
|
||||
|
||||
void docx_conversion_context::dump_hyperlinks(rels & Rels, hyperlinks::_type_place type)
|
||||
{
|
||||
hyperlinks_.dump_rels(Rels, type);
|
||||
}
|
||||
|
||||
void docx_conversion_context::dump_mediaitems(rels & Rels)
|
||||
{
|
||||
mediaitems_.dump_rels(Rels);
|
||||
}
|
||||
|
||||
void docx_conversion_context::dump_headers_footers(rels & Rels) const
|
||||
{
|
||||
headers_footers_.dump_rels(Rels);
|
||||
@ -353,12 +607,6 @@ void docx_conversion_context::dump_notes(rels & Rels) const
|
||||
{
|
||||
notes_context_.dump_rels(Rels);
|
||||
}
|
||||
|
||||
std::wstring docx_conversion_context::add_mediaitem(const std::wstring & uri, RelsType type, bool & isInternal, std::wstring & ref)
|
||||
{
|
||||
return mediaitems_.add_or_find(uri, type, isInternal, ref);
|
||||
}
|
||||
|
||||
void docx_conversion_context::start_document()
|
||||
{
|
||||
streams_man_ = streams_man::create(document_xml_);
|
||||
@ -381,7 +629,11 @@ void docx_conversion_context::start_document()
|
||||
output_stream() << L"xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" ";
|
||||
output_stream() << L"xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessingShape\" ";
|
||||
output_stream() << L"xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" ";
|
||||
output_stream() << L"mc:Ignorable=\"w14 wp14\">";
|
||||
output_stream() << L"xmlns:cx=\"http://schemas.microsoft.com/office/drawing/2014/chartex\" ";
|
||||
output_stream() << L"xmlns:cx1=\"http://schemas.microsoft.com/office/drawing/2015/9/8/chartex\" ";
|
||||
output_stream() << L"xmlns:w15=\"http://schemas.microsoft.com/office/word/2012/wordml\" ";
|
||||
output_stream() << L"xmlns:w16se=\"http://schemas.microsoft.com/office/word/2015/wordml/symex\" ";
|
||||
output_stream() << L"mc:Ignorable=\"w14 w15 w16se wne wp14\">";
|
||||
|
||||
|
||||
//apply page-default prop
|
||||
@ -394,7 +646,7 @@ void docx_conversion_context::end_document()
|
||||
output_stream() << L"</w:document>";
|
||||
|
||||
output_document_->get_word_files().set_document ( package::simple_element::create(L"document.xml", document_xml_.str()) );
|
||||
output_document_->get_word_files().set_settings ( package::simple_element::create(L"settings.xml",dump_settings_document()));
|
||||
output_document_->get_word_files().set_settings ( package::simple_element::create(L"settings.xml", dump_settings_document()));
|
||||
output_document_->get_word_files().set_media ( mediaitems_, applicationFonts_);
|
||||
output_document_->get_word_files().set_comments ( comments_context_);
|
||||
output_document_->get_word_files().set_headers_footers( headers_footers_);
|
||||
@ -403,6 +655,7 @@ void docx_conversion_context::end_document()
|
||||
content_file_.set_media( mediaitems_);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
dump_bibliography();
|
||||
dump_hyperlinks (notes_context_.footnotesRels(), hyperlinks::footnote_place);
|
||||
dump_hyperlinks (notes_context_.endnotesRels(), hyperlinks::endnote_place);
|
||||
|
||||
@ -419,13 +672,66 @@ void docx_conversion_context::end_document()
|
||||
|
||||
}
|
||||
////////////////////////////////
|
||||
//content->add_rel(relationship(dId, kType, dName));
|
||||
|
||||
output_document_->get_word_files().update_rels(*this);
|
||||
/////////////////////////////////////
|
||||
|
||||
}
|
||||
void docx_conversion_context::dump_bibliography()
|
||||
{
|
||||
if (arBibliography.empty()) return;
|
||||
|
||||
std::wstringstream output(L"");
|
||||
CP_XML_WRITER(output)
|
||||
{
|
||||
CP_XML_NODE(L"b:Sources")
|
||||
{
|
||||
CP_XML_ATTR(L"Version", 6);
|
||||
CP_XML_ATTR(L"StyleName", L"APA");
|
||||
CP_XML_ATTR(L"SelectedStyle", L"\\APASixthEditionOfficeOnline.xsl");
|
||||
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/officeDocument/2006/bibliography");
|
||||
CP_XML_ATTR(L"xmlns:b", L"http://schemas.openxmlformats.org/officeDocument/2006/bibliography");
|
||||
|
||||
for (size_t i = 0; i < arBibliography.size(); i++)
|
||||
{
|
||||
CP_XML_NODE(L"b:Source")
|
||||
{
|
||||
CP_XML_STREAM() << arBibliography[i];
|
||||
CP_XML_NODE(L"b:RefOrder")
|
||||
{
|
||||
CP_XML_STREAM() << std::to_wstring(i + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
std::wstringstream output_props(L"");
|
||||
CP_XML_WRITER(output_props)
|
||||
{
|
||||
CP_XML_NODE(L"ds:datastoreItem")
|
||||
{
|
||||
CP_XML_ATTR(L"xmlns:ds", L"http://schemas.openxmlformats.org/officeDocument/2006/customXml");
|
||||
CP_XML_ATTR(L"ds:itemID", L"{28C8D49A-D84A-4837-A0AC-8E2C3AE46B82}");
|
||||
|
||||
CP_XML_NODE(L"ds:schemaRefs")
|
||||
{
|
||||
CP_XML_NODE(L"ds:schemaRef")
|
||||
{
|
||||
CP_XML_ATTR(L"ds:uri", L"http://schemas.openxmlformats.org/officeDocument/2006/bibliography");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
package::customXml_content_ptr content = package::customXml_content::create(output.str(), output_props.str());
|
||||
int id = output_document_->add_customXml(content);
|
||||
|
||||
const std::wstring sRId = std::wstring(L"cstId") + std::to_wstring(id);
|
||||
const std::wstring sRel = L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml";
|
||||
const std::wstring sFileRef = std::wstring(L"../customXml/item") + std::to_wstring(id) + L".xml";
|
||||
|
||||
output_document_->get_word_files().add_rels(relationship(sRId, sRel, sFileRef));
|
||||
|
||||
}
|
||||
|
||||
std::wstring docx_conversion_context::dump_settings_document()
|
||||
{
|
||||
@ -449,21 +755,25 @@ std::wstring docx_conversion_context::dump_settings_document()
|
||||
_CP_OPT(std::wstring) strVal;
|
||||
_CP_OPT(int) intVal;
|
||||
|
||||
if (odf_reader::GetProperty(settings_properties_,L"evenAndOddHeaders",boolVal))
|
||||
if (odf_reader::GetProperty(settings_properties_,L"evenAndOddHeaders", boolVal))
|
||||
{
|
||||
CP_XML_NODE(L"w:evenAndOddHeaders");
|
||||
}
|
||||
if (odf_reader::GetProperty(settings_properties_,L"displayBackgroundShape",boolVal))
|
||||
if (odf_reader::GetProperty(settings_properties_,L"displayBackgroundShape", boolVal))
|
||||
{
|
||||
CP_XML_NODE(L"w:displayBackgroundShape");
|
||||
}
|
||||
if (odf_reader::GetProperty(settings_properties_,L"zoom",intVal))
|
||||
if (odf_reader::GetProperty(settings_properties_,L"zoom", intVal))
|
||||
{
|
||||
CP_XML_NODE(L"w:zoom")
|
||||
{
|
||||
CP_XML_ATTR(L"w:percent",intVal.get());
|
||||
}
|
||||
}
|
||||
if (odf_reader::GetProperty(settings_properties_,L"mirrorMargins", boolVal))
|
||||
{
|
||||
CP_XML_NODE(L"w:mirrorMargins");
|
||||
}
|
||||
}
|
||||
}
|
||||
return output.str();
|
||||
@ -843,7 +1153,7 @@ bool docx_conversion_context::process_page_properties(std::wostream & strm)
|
||||
|
||||
if (page_layout_instance_)
|
||||
{
|
||||
page_layout_instance_->docx_serialize(strm, *this);
|
||||
page_layout_instance_->docx_serialize(strm, *this);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -868,13 +1178,13 @@ bool docx_conversion_context::process_page_properties(std::wostream & strm)
|
||||
|
||||
void docx_conversion_context::end_process_style_content(bool in_styles)
|
||||
{
|
||||
docx_serialize_paragraph_style(output_stream(), automatic_parent_style_, in_styles);
|
||||
serialize_paragraph_style(output_stream(), automatic_parent_style_, in_styles);
|
||||
|
||||
if (automatic_parent_style_.empty())
|
||||
styles_context_.docx_serialize_text_style( output_stream(), L"", text_tracked_context_.dumpRPr_);
|
||||
}
|
||||
|
||||
void docx_conversion_context::docx_serialize_paragraph_style(std::wostream & strm, const std::wstring & ParentId, bool in_styles)
|
||||
void docx_conversion_context::serialize_paragraph_style(std::wostream & strm, const std::wstring & ParentId, bool in_styles)
|
||||
//in_styles = true -> styles.xml
|
||||
//почему то конструкция <pPr><rPr/></pPr><rPr/> "не работает" в части в rPr в ms2010 )
|
||||
{
|
||||
@ -919,7 +1229,7 @@ void docx_conversion_context::docx_serialize_paragraph_style(std::wostream & str
|
||||
}
|
||||
}
|
||||
CP_XML_STREAM() << paragraph_style.str();
|
||||
docx_serialize_list_properties(CP_XML_STREAM());
|
||||
serialize_list_properties(CP_XML_STREAM());
|
||||
|
||||
|
||||
if ((run_style.tellp() > 0 && in_styles == false) || !get_text_tracked_context().dumpRPrInsDel_.empty())
|
||||
@ -952,7 +1262,8 @@ void docx_conversion_context::start_automatic_style(const std::wstring & ParentI
|
||||
void docx_conversion_context::end_automatic_style()
|
||||
{
|
||||
in_automatic_style_ = false;
|
||||
automatic_parent_style_ = L"";
|
||||
automatic_parent_style_.clear();
|
||||
tabs_context_.clear();
|
||||
}
|
||||
|
||||
bool docx_conversion_context::in_automatic_style()
|
||||
@ -1125,8 +1436,215 @@ std::wstring docx_conversion_context::find_list_rename(const std::wstring & List
|
||||
void docx_conversion_context::end_list_item()
|
||||
{
|
||||
}
|
||||
int docx_conversion_context::process_text_attr(odf_reader::text::paragraph_attrs *Attr)
|
||||
{
|
||||
if ( Attr->text_style_name_.empty() ) return 0;
|
||||
|
||||
void docx_conversion_context::docx_serialize_list_properties(std::wostream & strm)
|
||||
odf_reader::style_instance * styleInst =
|
||||
root()->odf_context().styleContainer().style_by_name(Attr->text_style_name_, odf_types::style_family::Paragraph, process_headers_footers_);
|
||||
|
||||
if (!styleInst) return 0;
|
||||
|
||||
if (false == styleInst->is_automatic()) return 0;
|
||||
|
||||
odf_reader::style_content *styleContent = styleInst->content();
|
||||
|
||||
if (!styleContent) return 0;
|
||||
|
||||
push_text_properties(styleContent->get_style_text_properties());
|
||||
return 1;
|
||||
}
|
||||
int docx_conversion_context::process_paragraph_attr(odf_reader::text::paragraph_attrs *Attr)
|
||||
{
|
||||
if (!Attr) return 0;
|
||||
|
||||
bool in_drawing = false;
|
||||
|
||||
if (get_drawing_context().get_current_shape() || get_drawing_context().get_current_frame())
|
||||
{
|
||||
in_drawing = true;
|
||||
}
|
||||
|
||||
if (false == Attr->text_style_name_.empty())
|
||||
{
|
||||
if (in_table_content_ && Attr->text_style_name_.empty())
|
||||
{
|
||||
table_content_context_.set_current_level(Attr->text_style_name_);
|
||||
}
|
||||
if (odf_reader::style_instance * styleInst =
|
||||
root()->odf_context().styleContainer().style_by_name(Attr->text_style_name_, odf_types::style_family::Paragraph, process_headers_footers_)
|
||||
)
|
||||
{
|
||||
process_page_break_after(styleInst);
|
||||
if (styleInst->is_automatic())
|
||||
{
|
||||
if (odf_reader::style_content * styleContent = styleInst->content())
|
||||
{
|
||||
std::wstring id;
|
||||
//office_element_ptr parent_tab_stops_;
|
||||
if (const odf_reader::style_instance * parentStyleContent = styleInst->parent())
|
||||
{
|
||||
std::wstring parent_name = parentStyleContent->name();
|
||||
id = styles_map_.get( parent_name, parentStyleContent->type() );
|
||||
|
||||
if (in_table_content_ && table_content_context_.empty_current_table_content_level_index())
|
||||
{
|
||||
table_content_context_.set_current_level(parent_name);
|
||||
}
|
||||
}
|
||||
|
||||
start_automatic_style(id);
|
||||
|
||||
odf_reader::calc_tab_stops(styleInst, get_tabs_context());
|
||||
|
||||
//вытаскивает rtl c цепочки стилей !! - просто прописать в наследуемом НЕЛЬЗЯ !!
|
||||
odf_reader::paragraph_format_properties properties = odf_reader::calc_paragraph_properties_content(styleInst);
|
||||
if (properties.style_writing_mode_)
|
||||
{
|
||||
odf_types::writing_mode::type type = properties.style_writing_mode_->get_type();
|
||||
switch(type)
|
||||
{
|
||||
case odf_types::writing_mode::RlTb:
|
||||
case odf_types::writing_mode::TbRl:
|
||||
case odf_types::writing_mode::Rl:
|
||||
set_rtl(true);
|
||||
break;
|
||||
default:
|
||||
set_rtl(false);
|
||||
}
|
||||
}
|
||||
set_margin_left(properties.fo_margin_left_? 20.0 * properties.fo_margin_left_->get_length().get_value_unit(odf_types::length::pt) : 0);
|
||||
|
||||
styleContent->docx_convert(*this);
|
||||
|
||||
end_automatic_style();
|
||||
|
||||
push_text_properties(styleContent->get_style_text_properties());
|
||||
|
||||
if (!get_section_context().dump_.empty()
|
||||
&& !get_table_context().in_table()
|
||||
&& (get_process_note() == oox::docx_conversion_context::noNote)
|
||||
&& !in_drawing)
|
||||
{
|
||||
output_stream() << L"<w:pPr>";
|
||||
if (is_paragraph_header() )
|
||||
{
|
||||
output_stream() << get_section_context().dump_;
|
||||
get_section_context().dump_.clear();
|
||||
|
||||
output_stream() << L"</w:pPr>";
|
||||
finish_paragraph();
|
||||
start_paragraph();
|
||||
}
|
||||
else
|
||||
{
|
||||
output_stream() << get_section_context().dump_;
|
||||
get_section_context().dump_.clear();
|
||||
output_stream() << L"</w:pPr>";
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const std::wstring id = styles_map_.get( styleInst->name(), styleInst->type() );
|
||||
output_stream() << L"<w:pPr>";
|
||||
//todooo причесать
|
||||
if (!get_section_context().dump_.empty()
|
||||
&& !get_table_context().in_table()
|
||||
&& (get_process_note() == oox::docx_conversion_context::noNote)
|
||||
&& !in_drawing)
|
||||
{
|
||||
if (is_paragraph_header() )
|
||||
{
|
||||
output_stream() << get_section_context().dump_;
|
||||
get_section_context().dump_.clear();
|
||||
|
||||
output_stream() << L"</w:pPr>";
|
||||
finish_paragraph();
|
||||
start_paragraph();
|
||||
output_stream() << L"<w:pPr>";
|
||||
}
|
||||
else
|
||||
{
|
||||
output_stream() << get_section_context().dump_;
|
||||
get_section_context().dump_.clear();
|
||||
}
|
||||
}
|
||||
|
||||
output_stream() << L"<w:pStyle w:val=\"" << id << L"\" />";
|
||||
|
||||
if (!get_text_tracked_context().dumpPPr_.empty())
|
||||
{
|
||||
output_stream() << get_text_tracked_context().dumpPPr_;
|
||||
get_text_tracked_context().dumpPPr_.clear();
|
||||
}
|
||||
|
||||
serialize_list_properties(output_stream());
|
||||
|
||||
if ((Attr->outline_level_) && (*Attr->outline_level_ > 0))
|
||||
{
|
||||
output_stream() << L"<w:outlineLvl w:val=\"" << *Attr->outline_level_ - 1 << L"\" />";
|
||||
}
|
||||
|
||||
if (!get_text_tracked_context().dumpRPrInsDel_.empty())
|
||||
{
|
||||
output_stream() << L"<w:rPr>";
|
||||
output_stream() << get_text_tracked_context().dumpRPrInsDel_;
|
||||
get_text_tracked_context().dumpRPrInsDel_.clear();
|
||||
output_stream() << L"</w:rPr>";
|
||||
}
|
||||
output_stream() << L"</w:pPr>";
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!get_section_context().dump_.empty()
|
||||
&& !get_table_context().in_table()
|
||||
&& (get_process_note() == oox::docx_conversion_context::noNote)
|
||||
&& !in_drawing)
|
||||
{
|
||||
output_stream() << L"<w:pPr>";
|
||||
output_stream() << get_section_context().dump_;
|
||||
get_section_context().dump_.clear();
|
||||
//todooo выяснить реальны ли заголовки без стилей и свойств
|
||||
output_stream() << L"</w:pPr>";
|
||||
return 3;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void docx_conversion_context::process_page_break_after(const odf_reader::style_instance * styleInst)
|
||||
{
|
||||
if (styleInst)
|
||||
{
|
||||
const odf_reader::style_instance * inst = styleInst;
|
||||
while (inst)
|
||||
{
|
||||
if (inst->content() && inst->content()->get_style_paragraph_properties())
|
||||
{
|
||||
_CP_OPT(odf_types::fo_break) fo_break_val = inst->content()->get_style_paragraph_properties()->content_.fo_break_after_;
|
||||
if (fo_break_val)
|
||||
{
|
||||
if (fo_break_val->get_type() == odf_types::fo_break::Page)
|
||||
{
|
||||
set_page_break_after(true);
|
||||
break;
|
||||
}
|
||||
else if (fo_break_val->get_type() == odf_types::fo_break::Auto)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
inst = inst->parent();
|
||||
}
|
||||
}
|
||||
}
|
||||
void docx_conversion_context::serialize_list_properties(std::wostream & strm)
|
||||
{
|
||||
if (!list_style_stack_.empty())
|
||||
{
|
||||
@ -1203,7 +1721,7 @@ namespace
|
||||
//слить если есть mediaitems, добавить релсы и обнулить их для основного документа.
|
||||
rels internal_rels;
|
||||
|
||||
Context.dump_mediaitems(internal_rels);
|
||||
Context.get_mediaitems().dump_rels(internal_rels);
|
||||
Context.dump_hyperlinks(internal_rels, hyperlinks::document_place);
|
||||
|
||||
Context.get_headers_footers().add(styleName, dbgStr, type, internal_rels);
|
||||
@ -1312,7 +1830,7 @@ void docx_conversion_context::add_note_reference ()
|
||||
|
||||
typedef std::map<std::wstring, text_tracked_context::_state>::iterator map_changes_iterator;
|
||||
|
||||
void docx_conversion_context::start_text_changes (std::wstring id)
|
||||
void docx_conversion_context::start_text_changes (const std::wstring &id)
|
||||
{
|
||||
text_tracked_context::_state &state_add = text_tracked_context_.get_tracked_change(id);
|
||||
if (state_add.id != id) return;
|
||||
@ -1479,7 +1997,7 @@ void docx_conversion_context::end_changes()
|
||||
text_tracked_context_.dumpPPr_.clear();
|
||||
text_tracked_context_.dumpRPr_.clear();
|
||||
}
|
||||
void docx_conversion_context::end_text_changes (std::wstring id)
|
||||
void docx_conversion_context::end_text_changes (const std::wstring &id)
|
||||
{
|
||||
if (map_current_changes_.empty()) return;
|
||||
|
||||
@ -1504,6 +2022,7 @@ void docx_conversion_context::add_user_field(const std::wstring & name, const st
|
||||
{
|
||||
map_user_fields.insert(std::make_pair(name, value));
|
||||
}
|
||||
|
||||
std::wstring docx_conversion_context::get_user_field(const std::wstring & name)
|
||||
{
|
||||
std::map<std::wstring, std::wstring>::iterator pFind = map_user_fields.find(name);
|
||||
|
||||
@ -33,20 +33,20 @@
|
||||
|
||||
#include "../odf/datatypes/stylefamily.h"
|
||||
#include "../odf/datatypes/length.h"
|
||||
#include "../odf/datatypes/noteclass.h"
|
||||
|
||||
#include <boost/unordered_map.hpp>
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include <list>
|
||||
|
||||
#include "hyperlinks.h"
|
||||
#include "mediaitems.h"
|
||||
#include "headers_footers.h"
|
||||
#include "docx_table_context.h"
|
||||
#include "../odf/datatypes/noteclass.h"
|
||||
|
||||
#include "oox_conversion_context.h"
|
||||
#include "oox_chart_context.h"
|
||||
|
||||
#include "headers_footers.h"
|
||||
#include "hyperlinks.h"
|
||||
#include "mediaitems.h"
|
||||
|
||||
#include "../../../DesktopEditor/graphics/pro/Fonts.h"
|
||||
|
||||
namespace cpdoccore {
|
||||
@ -62,12 +62,15 @@ namespace cpdoccore {
|
||||
class style_text_properties;
|
||||
class draw_frame;
|
||||
class draw_shape;
|
||||
class draw_control;
|
||||
class office_element;
|
||||
class style_columns;
|
||||
class form_element;
|
||||
|
||||
namespace text
|
||||
{
|
||||
class note_citation;
|
||||
class paragraph_attrs;
|
||||
}
|
||||
}
|
||||
|
||||
@ -117,8 +120,6 @@ private:
|
||||
std::wstring name(const std::wstring & Name, odf_types::style_family::type Type);
|
||||
|
||||
size_t count_;
|
||||
//boost::unordered_map<std::wstring, std::wstring> map_;
|
||||
|
||||
std::multimap<std::wstring, std::wstring> map_;
|
||||
};
|
||||
|
||||
@ -164,7 +165,16 @@ public:
|
||||
current_object_name_ = L"";
|
||||
current_shape_ = drawShape;
|
||||
}
|
||||
void start_group()
|
||||
void start_control(odf_reader::draw_control * drawControl)
|
||||
{
|
||||
current_level_++;
|
||||
objects_count_++;
|
||||
|
||||
current_shape_id_ = objects_count_;
|
||||
current_object_name_ = L"";
|
||||
current_control_ = drawControl;
|
||||
}
|
||||
void start_group()
|
||||
{
|
||||
current_level_++;
|
||||
objects_count_++;
|
||||
@ -212,6 +222,7 @@ public:
|
||||
{
|
||||
current_level_--;
|
||||
frames_.pop_back();
|
||||
caption_.clear();
|
||||
}
|
||||
|
||||
std::wstring & get_text_stream_frame()
|
||||
@ -228,7 +239,6 @@ public:
|
||||
else
|
||||
throw;
|
||||
}
|
||||
|
||||
std::wstring & get_text_stream_shape()
|
||||
{
|
||||
return shape_text_content_;
|
||||
@ -239,15 +249,24 @@ public:
|
||||
}
|
||||
void clear_stream_frame()
|
||||
{
|
||||
if (frames_.size()>0)
|
||||
frames_.back().text_content=L"";
|
||||
if (!frames_.empty())
|
||||
frames_.back().text_content.clear();
|
||||
}
|
||||
void stop_shape()
|
||||
{
|
||||
current_level_--;
|
||||
current_shape_ = NULL;
|
||||
shape_text_content_=L"";
|
||||
current_shape_id_ =0;
|
||||
shape_text_content_.clear();
|
||||
current_shape_id_ = 0;
|
||||
caption_.clear();
|
||||
}
|
||||
void stop_control()
|
||||
{
|
||||
current_level_--;
|
||||
current_control_ = NULL;
|
||||
shape_text_content_.clear();
|
||||
current_shape_id_ = 0;
|
||||
caption_.clear();
|
||||
}
|
||||
void stop_group()
|
||||
{
|
||||
@ -257,10 +276,10 @@ public:
|
||||
|
||||
int get_current_frame_id() const
|
||||
{
|
||||
if (frames_.size()>0) return frames_.back().id;
|
||||
if (!frames_.empty()) return frames_.back().id;
|
||||
else return 0;
|
||||
}
|
||||
bool in_group() { return groups_.size() > 0; }
|
||||
bool in_group() { return !groups_.empty(); }
|
||||
int get_current_level() const { return current_level_; }
|
||||
int get_current_shape_id() const { return current_shape_id_; }
|
||||
|
||||
@ -268,10 +287,15 @@ public:
|
||||
|
||||
odf_reader::draw_frame * get_current_frame() const
|
||||
{
|
||||
if (frames_.size()>0) return frames_.back().ptr;
|
||||
if (!frames_.empty()) return frames_.back().ptr;
|
||||
else return NULL;
|
||||
}
|
||||
odf_reader::draw_shape * get_current_shape() const { return current_shape_; }
|
||||
|
||||
void set_next_object_caption(const std::wstring & value)
|
||||
{
|
||||
caption_ = value;
|
||||
}
|
||||
|
||||
private:
|
||||
std::wstring shape_text_content_;
|
||||
@ -284,10 +308,13 @@ private:
|
||||
std::vector<_group> groups_;
|
||||
std::vector<_frame> frames_;
|
||||
|
||||
odf_reader::draw_shape * current_shape_;
|
||||
odf_reader::draw_shape *current_shape_;
|
||||
size_t current_shape_id_;
|
||||
|
||||
odf_reader::draw_control*current_control_;
|
||||
|
||||
std::wstring zero_string_;
|
||||
std::wstring caption_;
|
||||
|
||||
};
|
||||
|
||||
@ -544,6 +571,194 @@ private:
|
||||
|
||||
std::map<std::wstring, _state> mapChanges_;
|
||||
};
|
||||
|
||||
class text_forms_context
|
||||
{
|
||||
public:
|
||||
struct _state
|
||||
{
|
||||
std::wstring id;
|
||||
std::wstring name;
|
||||
int type = 0; //enum?
|
||||
std::wstring label;
|
||||
std::wstring uuid;
|
||||
std::wstring value;
|
||||
odf_reader::form_element* element = NULL;
|
||||
|
||||
void clear()
|
||||
{
|
||||
type = 0;
|
||||
id.clear();
|
||||
name.clear();
|
||||
label.clear();
|
||||
value.clear();
|
||||
uuid.clear();
|
||||
element = NULL;
|
||||
}
|
||||
};
|
||||
text_forms_context(){}
|
||||
|
||||
void start_element (int type);
|
||||
void set_id (const std::wstring& id);
|
||||
void set_name (const std::wstring& name);
|
||||
void set_label (const std::wstring& label);
|
||||
void set_uuid (const std::wstring& uuid);
|
||||
void set_value (const std::wstring& value);
|
||||
void set_element(odf_reader::form_element *elm);
|
||||
void end_element ();
|
||||
|
||||
_state& get_state_element (std::wstring id);
|
||||
|
||||
private:
|
||||
_state current_state_;
|
||||
std::map<std::wstring, _state> mapElements_;
|
||||
};
|
||||
class table_content_context
|
||||
{
|
||||
public:
|
||||
table_content_context()
|
||||
{
|
||||
clear_all();
|
||||
}
|
||||
enum template_type
|
||||
{
|
||||
TableContent = 1,
|
||||
Illustrations = 2,
|
||||
Bibliography = 3,
|
||||
Tables = 4
|
||||
};
|
||||
enum level_type
|
||||
{
|
||||
Span = 1,
|
||||
Text = 2,
|
||||
LinkStart = 3,
|
||||
LinkEnd = 4,
|
||||
TabStop = 5,
|
||||
PageNumber = 6,
|
||||
Chapter = 7
|
||||
};
|
||||
|
||||
struct _state
|
||||
{
|
||||
std::wstring name;
|
||||
int outline_level = -1;
|
||||
std::vector<int> content;
|
||||
|
||||
void clear()
|
||||
{
|
||||
name.clear();
|
||||
content.clear();
|
||||
outline_level = -1;
|
||||
}
|
||||
};
|
||||
void start_template(int type)
|
||||
{
|
||||
current_template.clear();
|
||||
type_table_content = type;
|
||||
}
|
||||
void end_template()
|
||||
{
|
||||
}
|
||||
|
||||
void start_level(const std::wstring& style_name)
|
||||
{
|
||||
current_state.name = style_name;
|
||||
}
|
||||
void add_level_content(int type)
|
||||
{
|
||||
current_state.content.push_back(type);
|
||||
}
|
||||
void set_outline_level(int level)
|
||||
{
|
||||
if (min_outline_level == -1 || min_outline_level > level)
|
||||
min_outline_level = level;
|
||||
|
||||
if (max_outline_level == -1 || max_outline_level < level)
|
||||
max_outline_level = level;
|
||||
|
||||
current_state.outline_level = level;
|
||||
}
|
||||
void end_level()
|
||||
{
|
||||
current_template.insert(std::make_pair(current_state.name, current_state));
|
||||
current_state.clear();
|
||||
}
|
||||
void set_current_level(const std::wstring &name)
|
||||
{
|
||||
std::map<std::wstring, _state>::iterator pFind = current_template.find(name);
|
||||
if (pFind == current_template.end())
|
||||
{
|
||||
current_content_template_.clear();
|
||||
}
|
||||
current_content_template_ = pFind->second.content;
|
||||
current_content_template_index_ = 0;
|
||||
}
|
||||
|
||||
void next_level_index()
|
||||
{
|
||||
current_content_template_index_++;
|
||||
}
|
||||
int get_type_current_content_template_index()
|
||||
{
|
||||
if (current_content_template_index_ < (int)current_content_template_.size() && current_content_template_index_ >= 0)
|
||||
return current_content_template_[current_content_template_index_];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void clear_current_content_template_index()
|
||||
{
|
||||
current_content_template_index_ = 0;
|
||||
current_content_template_.clear();
|
||||
}
|
||||
|
||||
bool empty_current_table_content_level_index()
|
||||
{
|
||||
return current_content_template_.empty();
|
||||
}
|
||||
void clear_all()
|
||||
{
|
||||
type_table_content = 0;
|
||||
current_content_template_index_ = 0;
|
||||
current_content_template_.clear();
|
||||
current_template.clear();
|
||||
current_state.clear();
|
||||
caption_sequence_name.clear();
|
||||
min_outline_level = -1;
|
||||
max_outline_level = -1;
|
||||
}
|
||||
void add_sequence(const std::wstring & name, int outline_level)
|
||||
{
|
||||
//sequences.insert(std::make_pair(name, outline_level));
|
||||
sequences.push_back(name);
|
||||
}
|
||||
|
||||
std::wstring get_sequence (const std::wstring & ref)
|
||||
{
|
||||
for (size_t i = 0; i < sequences.size(); i++)
|
||||
{
|
||||
if (std::wstring:: npos != ref.find(sequences[i]))
|
||||
{
|
||||
return sequences[i];
|
||||
}
|
||||
}
|
||||
return L"";
|
||||
}
|
||||
|
||||
std::wstring caption_sequence_name;
|
||||
int type_table_content;
|
||||
int min_outline_level;
|
||||
int max_outline_level;
|
||||
|
||||
private:
|
||||
std::vector<int> current_content_template_;
|
||||
int current_content_template_index_;
|
||||
|
||||
std::map<std::wstring, _state> current_template;
|
||||
_state current_state;
|
||||
//std::map<std::wstring, int> sequences;
|
||||
std::vector<std::wstring> sequences;
|
||||
};
|
||||
//---------------------------------------------------------------------------------------------------------
|
||||
class docx_conversion_context : boost::noncopyable
|
||||
{
|
||||
@ -564,10 +779,11 @@ public:
|
||||
return temp_stream_;
|
||||
}
|
||||
|
||||
void add_bibliography_item (const std::wstring & item);
|
||||
void add_user_field (const std::wstring & name, const std::wstring & value);
|
||||
std::wstring get_user_field (const std::wstring & name);
|
||||
|
||||
void add_element_to_run (std::wstring parenStyleId = _T(""));
|
||||
void add_element_to_run (std::wstring parenStyleId = _T(""));
|
||||
void finish_run ();
|
||||
void add_new_run (std::wstring parentStyleId = _T(""));
|
||||
bool get_run_state () { return in_run_; }
|
||||
@ -576,11 +792,14 @@ public:
|
||||
void start_paragraph (bool is_header = false);
|
||||
void finish_paragraph ();
|
||||
|
||||
bool is_alphabetical_index () { return false == mapAlphabeticals.empty();}
|
||||
bool is_table_content () { return in_table_content_; }
|
||||
bool is_paragraph_header () { return in_header_; }
|
||||
bool get_paragraph_state () { return in_paragraph_; }
|
||||
void set_paragraph_state (bool val) { in_paragraph_ = val; }
|
||||
bool get_paragraph_keep () { return is_paragraph_keep_;}
|
||||
void set_paragraph_keep (bool val) { is_paragraph_keep_ = val; }
|
||||
|
||||
bool get_delete_text_state () { return is_delete_text_; }
|
||||
void set_delete_text_state (bool Val) { is_delete_text_ = Val; }
|
||||
|
||||
@ -591,12 +810,10 @@ public:
|
||||
hyperlinks::_ref last_hyperlink ();
|
||||
void dump_hyperlinks (rels & Rels, hyperlinks::_type_place type);
|
||||
|
||||
std::wstring add_mediaitem(const std::wstring & uri, RelsType type, bool & isInternal, std::wstring & ref);
|
||||
|
||||
void dump_mediaitems (rels & Rels);
|
||||
void dump_headers_footers (rels & Rels) const;
|
||||
void dump_notes (rels & Rels) const;
|
||||
|
||||
void dump_bibliography();
|
||||
std::wstring dump_settings_document();
|
||||
|
||||
bool next_dump_page_properties_;
|
||||
@ -616,7 +833,16 @@ public:
|
||||
void start_office_text ();
|
||||
void end_office_text ();
|
||||
|
||||
void process_styles ();
|
||||
void start_sdt (int type);
|
||||
void end_sdt ();
|
||||
|
||||
void start_index_content();
|
||||
void end_index_content();
|
||||
|
||||
void start_index_element();
|
||||
void end_index_element();
|
||||
|
||||
void process_styles ();
|
||||
void process_fonts ();
|
||||
|
||||
void process_list_styles ();
|
||||
@ -624,6 +850,10 @@ public:
|
||||
void process_comments ();
|
||||
bool process_page_properties(std::wostream & strm);
|
||||
void process_section (std::wostream & strm, odf_reader::style_columns * columns = NULL);
|
||||
|
||||
int process_paragraph_attr (odf_reader::text::paragraph_attrs *attr);
|
||||
int process_text_attr (odf_reader::text::paragraph_attrs *Attr);
|
||||
void process_page_break_after(const odf_reader::style_instance *styleInst);
|
||||
|
||||
std::vector<odf_reader::_property> & get_settings_properties ();
|
||||
void set_settings_property (const odf_reader::_property & prop);
|
||||
@ -670,13 +900,14 @@ public:
|
||||
void start_list_item (bool restart = false);
|
||||
void end_list_item ();
|
||||
|
||||
void docx_serialize_list_properties(std::wostream & strm);
|
||||
void docx_serialize_paragraph_style(std::wostream & strm, const std::wstring & ParentId, bool in_styles = false);
|
||||
void serialize_list_properties(std::wostream & strm);
|
||||
void serialize_paragraph_style(std::wostream & strm, const std::wstring & ParentId, bool in_styles = false);
|
||||
|
||||
std::wstring find_list_rename(const std::wstring & ListStyleName) const;
|
||||
|
||||
styles_map * get_style_map() { return &styles_map_; }
|
||||
|
||||
mediaitems & get_mediaitems() {return mediaitems_;}
|
||||
styles_context & get_styles_context() { return styles_context_; }
|
||||
drawing_context & get_drawing_context() { return drawing_context_; }
|
||||
comments_context & get_comments_context() { return comments_context_; }
|
||||
@ -684,6 +915,10 @@ public:
|
||||
section_context & get_section_context() { return section_context_; }
|
||||
notes_context & get_notes_context() { return notes_context_; }
|
||||
text_tracked_context& get_text_tracked_context(){ return text_tracked_context_; }
|
||||
text_forms_context & get_forms_context() { return text_forms_context_; }
|
||||
tabs_context & get_tabs_context() { return tabs_context_;}
|
||||
|
||||
table_content_context & get_table_content_context() { return table_content_context_;}
|
||||
|
||||
void docx_convert_delayed ();
|
||||
void add_delayed_element (odf_reader::office_element * Elm);
|
||||
@ -714,9 +949,16 @@ public:
|
||||
void start_math_formula ();
|
||||
void end_math_formula ();
|
||||
|
||||
void start_text_changes (std::wstring id);
|
||||
void end_text_changes (std::wstring id);
|
||||
void start_text_changes (const std::wstring &id);
|
||||
void end_text_changes (const std::wstring &id);
|
||||
|
||||
void start_bookmark (const std::wstring &name);
|
||||
void end_bookmark (const std::wstring &name);
|
||||
|
||||
void start_alphabetical_index (const std::wstring &id);
|
||||
void end_alphabetical_index (const std::wstring &id);
|
||||
void add_alphabetical_index_text (odf_reader::office_element_ptr & elem);
|
||||
|
||||
void set_process_headers_footers(bool Val) { process_headers_footers_ = Val; }
|
||||
headers_footers & get_headers_footers() { return headers_footers_; }
|
||||
header_footer_context & get_header_footer_context() { return header_footer_context_; }
|
||||
@ -742,6 +984,7 @@ private:
|
||||
std::wstringstream footer_xml_;
|
||||
std::wstringstream header_xml_;
|
||||
std::wstringstream settings_xml_;
|
||||
std::wstringstream meta_xml_;
|
||||
|
||||
styles_context styles_context_;
|
||||
math_context math_context_;
|
||||
@ -753,6 +996,9 @@ private:
|
||||
header_footer_context header_footer_context_;
|
||||
notes_context notes_context_;
|
||||
text_tracked_context text_tracked_context_;
|
||||
text_forms_context text_forms_context_;
|
||||
tabs_context tabs_context_;
|
||||
table_content_context table_content_context_;
|
||||
|
||||
boost::shared_ptr<streams_man> streams_man_;
|
||||
|
||||
@ -779,6 +1025,7 @@ private:
|
||||
|
||||
bool in_automatic_style_;
|
||||
bool in_drawing_content_;
|
||||
bool in_table_content_;
|
||||
bool in_paragraph_;
|
||||
bool in_run_;
|
||||
bool in_header_;
|
||||
@ -786,17 +1033,23 @@ private:
|
||||
bool is_rtl_; // right-to-left
|
||||
bool is_paragraph_keep_;
|
||||
|
||||
std::wstring current_alphabetic_index_;
|
||||
int current_margin_left_;
|
||||
int new_list_style_number_; // счетчик для нумерации имен созданных в процессе конвертации стилей
|
||||
NoteType process_note_;
|
||||
|
||||
std::vector<odf_reader::office_element*> delayed_elements_;
|
||||
std::vector<odf_reader::office_element*> delayed_elements_;
|
||||
|
||||
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_;// цепочки переименований нумераций
|
||||
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_;// цепочки переименований нумераций
|
||||
|
||||
std::map<std::wstring, std::wstring> map_user_fields;
|
||||
std::map<std::wstring, std::wstring> map_user_fields;
|
||||
std::map<std::wstring, int> mapBookmarks;
|
||||
std::map<std::wstring, std::vector<odf_reader::office_element_ptr>> mapAlphabeticals;
|
||||
|
||||
std::vector<std::wstring> arBibliography;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@ -209,8 +209,8 @@ void docx_serialize_image_child(std::wostream & strm, _docx_drawing & val)
|
||||
CP_XML_NODE(L"pic:cNvPr")
|
||||
{
|
||||
//CP_XML_ATTR(L"desc text",L"");
|
||||
CP_XML_ATTR(L"id",val.id);
|
||||
CP_XML_ATTR(L"name",val.name);
|
||||
CP_XML_ATTR(L"id", val.id + 1);
|
||||
CP_XML_ATTR(L"name", val.name);
|
||||
}
|
||||
CP_XML_NODE(L"pic:cNvPicPr")
|
||||
{
|
||||
@ -316,7 +316,7 @@ void docx_serialize_common(std::wostream & strm, _docx_drawing & val)
|
||||
CP_XML_NODE(L"wp:docPr")
|
||||
{
|
||||
CP_XML_ATTR(L"name", val.name);
|
||||
CP_XML_ATTR(L"id", val.id + 1);
|
||||
CP_XML_ATTR(L"id", 0xf000 + val.id + 1);
|
||||
|
||||
oox_serialize_action(CP_XML_STREAM(), val.action);
|
||||
}
|
||||
@ -398,8 +398,8 @@ void docx_serialize_wps(std::wostream & strm, _docx_drawing & val)
|
||||
CP_XML_ATTR(L"cy", val.cy);
|
||||
}
|
||||
|
||||
serialize_null_extent(CP_XML_STREAM());
|
||||
}
|
||||
serialize_null_extent(CP_XML_STREAM());
|
||||
}
|
||||
else//anchor
|
||||
{
|
||||
@ -607,6 +607,42 @@ void docx_serialize_object(std::wostream & strm, _docx_drawing & val)
|
||||
}
|
||||
}
|
||||
|
||||
void docx_serialize_control(std::wostream & strm, _docx_drawing & val)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"w:pict")
|
||||
{
|
||||
CP_XML_NODE(L"v:shape")
|
||||
{
|
||||
CP_XML_ATTR(L"id", L"control_" + val.objectId);
|
||||
|
||||
std::wstring style_str; // = L"width:730.6pt; height:261.8pt";
|
||||
|
||||
style_str += L"width:" + boost::lexical_cast<std::wstring>(val.cx / 12700.) + L"pt;";
|
||||
style_str += L"height:" + boost::lexical_cast<std::wstring>(val.cy / 12700.) + L"pt;";
|
||||
|
||||
CP_XML_ATTR(L"style", style_str);
|
||||
|
||||
if (val.fill.bitmap)
|
||||
{
|
||||
CP_XML_NODE(L"v:imagedata")
|
||||
{
|
||||
CP_XML_ATTR(L"o:title", val.name);
|
||||
CP_XML_ATTR(L"r:id", val.fill.bitmap->rId);
|
||||
}
|
||||
}
|
||||
}
|
||||
CP_XML_NODE(L"w:control")
|
||||
{
|
||||
CP_XML_ATTR(L"w:name", val.name);
|
||||
CP_XML_ATTR(L"w:shapeid", L"control_" + val.objectId);
|
||||
CP_XML_ATTR(L"r:id", val.objectId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _docx_drawing::serialize(std::wostream & strm/*, bool insideOtherDrawing*/)
|
||||
{
|
||||
if (type == typeUnknown) return;
|
||||
@ -619,6 +655,10 @@ void _docx_drawing::serialize(std::wostream & strm/*, bool insideOtherDrawing*/)
|
||||
{
|
||||
docx_serialize_object(strm, *this);
|
||||
}
|
||||
else if (type == typeControl)
|
||||
{
|
||||
docx_serialize_control(strm, *this);
|
||||
}
|
||||
else
|
||||
{
|
||||
//if (insideOtherDrawing)
|
||||
|
||||
@ -124,7 +124,7 @@ void word_files::write(const std::wstring & RootPath)
|
||||
charts_files_.set_main_document(get_main_document());
|
||||
charts_files_.write(path);
|
||||
}
|
||||
|
||||
|
||||
if (notes_)
|
||||
{
|
||||
notes_->write( path );
|
||||
@ -134,8 +134,9 @@ void word_files::write(const std::wstring & RootPath)
|
||||
|
||||
void word_files::update_rels(docx_conversion_context & Context)
|
||||
{
|
||||
Context.get_mediaitems().dump_rels(rels_files_.get_rel_file()->get_rels());
|
||||
|
||||
Context.dump_hyperlinks (rels_files_.get_rel_file()->get_rels(), hyperlinks::document_place);
|
||||
Context.dump_mediaitems (rels_files_.get_rel_file()->get_rels());
|
||||
Context.dump_headers_footers(rels_files_.get_rel_file()->get_rels());
|
||||
Context.dump_notes (rels_files_.get_rel_file()->get_rels());
|
||||
}
|
||||
@ -206,7 +207,50 @@ void word_files::set_comments(comments_context & commentsContext)
|
||||
elm->set_main_document( get_main_document() );
|
||||
comments_ = element_ptr( elm );
|
||||
}
|
||||
///////////////////
|
||||
void word_files::add_rels(relationship const & r)
|
||||
{
|
||||
rels_files_.add(r);
|
||||
|
||||
}
|
||||
//----------------------------------------------------------
|
||||
int customXml_files::add_customXml(customXml_content_ptr customXml)
|
||||
{
|
||||
customXmls_.push_back(customXml);
|
||||
return customXmls_.size();
|
||||
}
|
||||
|
||||
void customXml_files::write(const std::wstring & RootPath)
|
||||
{
|
||||
std::wstring path = RootPath + FILE_SEPARATOR_STR + L"customXml";
|
||||
NSDirectory::CreateDirectory(path.c_str());
|
||||
|
||||
std::wstring path_rels = path + FILE_SEPARATOR_STR + L"_rels";
|
||||
NSDirectory::CreateDirectory(path_rels.c_str());
|
||||
|
||||
for (size_t i = 0 ; i < customXmls_.size(); i++)
|
||||
{
|
||||
if (!customXmls_[i]) continue;
|
||||
|
||||
const std::wstring fileNameItem = std::wstring(L"item") + std::to_wstring(i+1) + L".xml";
|
||||
const std::wstring fileNameProps = std::wstring(L"itemProps") + std::to_wstring(i+1) + L".xml";
|
||||
|
||||
content_type_content * contentTypes = get_main_document()->get_content_types_file().content();
|
||||
contentTypes->add_override(std::wstring(L"/customXml/") + fileNameProps,
|
||||
L"application/vnd.openxmlformats-officedocument.customXmlProperties+xml");
|
||||
|
||||
package::simple_element(fileNameItem, customXmls_[i]->item()).write(path);
|
||||
package::simple_element(fileNameProps, customXmls_[i]->props()).write(path);
|
||||
|
||||
rels_file_ptr rels_file = rels_file::create(fileNameItem + L".rels");
|
||||
|
||||
rels_file->get_rels().add(relationship(L"rId1",
|
||||
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps",
|
||||
fileNameProps));
|
||||
|
||||
rels_file->write(path_rels);
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------
|
||||
void docx_charts_files::add_chart(chart_content_ptr chart)
|
||||
{
|
||||
charts_.push_back(chart);
|
||||
@ -219,7 +263,7 @@ void docx_charts_files::write(const std::wstring & RootPath)
|
||||
|
||||
size_t count = 0;
|
||||
|
||||
for (int i = 0 ; i < charts_.size(); i++)
|
||||
for (size_t i = 0 ; i < charts_.size(); i++)
|
||||
{
|
||||
if (!charts_[i]) continue;
|
||||
|
||||
@ -433,8 +477,10 @@ void comments_elements::write(const std::wstring & RootPath)
|
||||
docx_document::docx_document()
|
||||
{
|
||||
this->set_main_document(this);
|
||||
word_files_.set_main_document(this);
|
||||
|
||||
word_files_.set_main_document(this);
|
||||
customXml_files_.set_main_document(this);
|
||||
|
||||
rels_file_ptr relFile = rels_file_ptr( new rels_file(L".rels") );
|
||||
relFile->get_rels().relationships().push_back(
|
||||
relationship(L"rId1", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties", L"docProps/app.xml" )
|
||||
@ -449,16 +495,18 @@ docx_document::docx_document()
|
||||
rels_files_.add_rel_file( relFile );
|
||||
|
||||
}
|
||||
|
||||
int docx_document::add_customXml(customXml_content_ptr customXml)
|
||||
{
|
||||
return customXml_files_.add_customXml(customXml);
|
||||
}
|
||||
void docx_document::write(const std::wstring & RootPath)
|
||||
{
|
||||
|
||||
if (word_files_.has_numbering())
|
||||
{
|
||||
content_type_file_.content()->get_override().push_back( override_content_type(L"/word/numbering.xml",
|
||||
L"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml") );
|
||||
}
|
||||
|
||||
customXml_files_.write (RootPath);
|
||||
word_files_.write (RootPath);
|
||||
rels_files_.write (RootPath);
|
||||
docProps_files_.write (RootPath);
|
||||
|
||||
@ -103,8 +103,17 @@ private:
|
||||
|
||||
};
|
||||
|
||||
// xl_charts_files
|
||||
class docx_charts_files : public element
|
||||
class customXml_files : public element
|
||||
{
|
||||
public:
|
||||
customXml_files(){}
|
||||
|
||||
int add_customXml(customXml_content_ptr customXml);
|
||||
virtual void write(const std::wstring & RootPath);
|
||||
|
||||
std::vector<customXml_content_ptr> customXmls_;
|
||||
};
|
||||
class docx_charts_files : public element
|
||||
{
|
||||
public:
|
||||
docx_charts_files(){}
|
||||
@ -137,6 +146,8 @@ public:
|
||||
|
||||
void add_charts(chart_content_ptr chart);
|
||||
|
||||
void add_rels(relationship const & r);
|
||||
|
||||
private:
|
||||
docx_charts_files charts_files_;
|
||||
rels_files rels_files_;
|
||||
@ -165,11 +176,13 @@ public:
|
||||
word_files & get_word_files() { return word_files_; }
|
||||
virtual content_types_file & get_content_types_file() { return content_type_file_; }
|
||||
|
||||
virtual void write(const std::wstring & RootPath);
|
||||
void write(const std::wstring & RootPath);
|
||||
int add_customXml(customXml_content_ptr customXml);
|
||||
|
||||
private:
|
||||
docx_content_types_file content_type_file_;
|
||||
word_files word_files_;
|
||||
customXml_files customXml_files_;
|
||||
rels_files rels_files_;
|
||||
docProps_files docProps_files_;
|
||||
};
|
||||
|
||||
@ -39,10 +39,9 @@
|
||||
namespace cpdoccore {
|
||||
namespace oox {
|
||||
|
||||
/**/
|
||||
|
||||
docx_table_state::docx_table_state(docx_conversion_context & Context,
|
||||
const std::wstring & StyleName) : context_(Context),
|
||||
docx_table_state::docx_table_state(docx_conversion_context & Context, const std::wstring & StyleName) :
|
||||
context_(Context),
|
||||
table_style_(StyleName),
|
||||
current_table_column_(-1),
|
||||
columns_spanned_num_(0),
|
||||
@ -93,6 +92,19 @@ std::wstring docx_table_state::current_row_style() const
|
||||
return L"";
|
||||
}
|
||||
|
||||
double docx_table_state::get_current_cell_width()
|
||||
{
|
||||
if (current_table_column_ < columns_width_.size())
|
||||
return columns_width_[current_table_column_];
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
void docx_table_state::add_column_width(double width)
|
||||
{
|
||||
columns_width_.push_back(width);
|
||||
}
|
||||
|
||||
void docx_table_state::start_cell()
|
||||
{
|
||||
current_table_column_++;
|
||||
@ -102,7 +114,6 @@ void docx_table_state::start_cell()
|
||||
|
||||
void docx_table_state::end_cell()
|
||||
{}
|
||||
|
||||
bool docx_table_state::start_covered_cell(docx_conversion_context & Context)
|
||||
{
|
||||
std::wostream & _Wostream = context_.output_stream();
|
||||
|
||||
@ -70,6 +70,8 @@ public:
|
||||
void set_rows_spanned(unsigned int Column, unsigned int Val, unsigned int ColumnsSpanned, const std::wstring & Style);
|
||||
unsigned int current_rows_spanned(unsigned int Column) const;
|
||||
|
||||
double get_current_cell_width();
|
||||
void add_column_width(double width);
|
||||
private:
|
||||
docx_conversion_context & context_;
|
||||
std::wstring table_style_;
|
||||
@ -81,7 +83,8 @@ private:
|
||||
std::vector<table_row_spanned> rows_spanned_;
|
||||
bool close_table_covered_cell_;
|
||||
std::vector<unsigned int> columns_;
|
||||
std::vector<std::wstring> columnsDefaultCellStyleName_;
|
||||
std::vector<double> columns_width_;
|
||||
std::vector<std::wstring> columnsDefaultCellStyleName_;
|
||||
|
||||
};
|
||||
|
||||
@ -135,6 +138,14 @@ public:
|
||||
{
|
||||
return table_states_.back().start_cell();
|
||||
}
|
||||
double get_current_cell_width()
|
||||
{
|
||||
return table_states_.back().get_current_cell_width();
|
||||
}
|
||||
void add_column_width(double width)
|
||||
{
|
||||
table_states_.back().add_column_width(width);
|
||||
}
|
||||
|
||||
void end_cell()
|
||||
{
|
||||
|
||||
@ -70,7 +70,14 @@ void oox_chart_context::reset_fill(oox::_oox_fill &f)
|
||||
rels_.push_back(_rel(isInternal, f.bitmap->rId, ref, typeImage));
|
||||
}
|
||||
}
|
||||
|
||||
void oox_chart_context::set_externalData(const std::wstring & href)
|
||||
{
|
||||
bool isInternal = true;
|
||||
std::wstring href_out;
|
||||
|
||||
externalDataId_ = mediaitems_.add_or_find(href, typeMsObject, isInternal, href_out);
|
||||
rels_.push_back(_rel(isInternal, externalDataId_, href_out, typeMsObject));
|
||||
}
|
||||
std::wostream & oox_chart_context::chartData()
|
||||
{
|
||||
return impl_->chartData_;
|
||||
@ -78,7 +85,7 @@ std::wostream & oox_chart_context::chartData()
|
||||
|
||||
void oox_chart_context::dump_rels(rels & Rels)
|
||||
{
|
||||
for (int i = 0; i < rels_.size(); i++)
|
||||
for (size_t i = 0; i < rels_.size(); i++)
|
||||
{
|
||||
_rel & r = rels_[i];
|
||||
|
||||
@ -88,8 +95,7 @@ void oox_chart_context::dump_rels(rels & Rels)
|
||||
r.rid,
|
||||
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
||||
r.is_internal ? std::wstring(L"../") + r.ref : r.ref,
|
||||
(r.is_internal ? L"" : L"External")
|
||||
)
|
||||
(r.is_internal ? L"" : L"External"))
|
||||
);
|
||||
}
|
||||
else if (r.type == typeHyperlink)
|
||||
@ -101,6 +107,15 @@ void oox_chart_context::dump_rels(rels & Rels)
|
||||
L"External")
|
||||
);
|
||||
}
|
||||
else if (r.type == typeMsObject)
|
||||
{
|
||||
Rels.add(relationship(
|
||||
r.rid,
|
||||
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/package",
|
||||
r.is_internal ? std::wstring(L"../") + r.ref : r.ref,
|
||||
(r.is_internal ? L"" : L"External"))
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -199,10 +214,21 @@ void oox_chart_context::serialize(std::wostream & strm)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (externalDataId_.empty() == false)
|
||||
{
|
||||
CP_XML_NODE(L"c:externalData")
|
||||
{
|
||||
CP_XML_ATTR(L"r:id", externalDataId_);
|
||||
CP_XML_NODE(L"c:autoUpdate")
|
||||
{
|
||||
CP_XML_ATTR(L"val", false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
oox_chart_context::~oox_chart_context()
|
||||
{
|
||||
}
|
||||
|
||||
@ -82,6 +82,7 @@ public:
|
||||
plot_area_.charts_[i]->is3D_ = val;
|
||||
}
|
||||
}
|
||||
void set_externalData(const std::wstring & href);
|
||||
void add_chart(int type)
|
||||
{
|
||||
plot_area_.add_chart(type);
|
||||
@ -135,6 +136,7 @@ private:
|
||||
cpdoccore::oox::oox_chart_legend legend_;
|
||||
|
||||
std::wstring pivot_source_;
|
||||
std::wstring externalDataId_;
|
||||
|
||||
std::vector<odf_reader::_property> graphic_properties_;
|
||||
_oox_fill fill_;
|
||||
|
||||
@ -70,17 +70,12 @@ void oox_chart_series::setFormula(int ind, std::wstring &value, std::wstring & f
|
||||
|
||||
if (ind == 0)
|
||||
{
|
||||
if (std::wstring::npos != value.find(L"local-table")) return;
|
||||
|
||||
values_[ind].strRef_.formula = converter.convert_chart_distance(value);
|
||||
values_[ind].strRef_.present = true;
|
||||
values_[ind].present = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (std::wstring::npos != value.find(L"local-table") && !bLocalTable_ ) return;
|
||||
//в xlsx низя .... нужно сделать тогда отдельную table.xml
|
||||
|
||||
values_[ind].numRef_.formula = converter.convert_chart_distance(value);
|
||||
values_[ind].numRef_.present = true;
|
||||
values_[ind].numRef_.formatCode = formatCode;
|
||||
|
||||
@ -39,9 +39,58 @@
|
||||
|
||||
#include "../odf/odfcontext.h"
|
||||
#include "../odf/style_text_properties.h"
|
||||
#include "../odf/style_paragraph_properties.h"
|
||||
|
||||
namespace cpdoccore {
|
||||
|
||||
void tabs_context::reset()
|
||||
{
|
||||
for (size_t i = 0; i < tabs.size(); i++)
|
||||
{
|
||||
odf_reader::style_tab_stop *tab_stop = dynamic_cast<odf_reader::style_tab_stop*>(tabs[i].get());
|
||||
if (tab_stop)
|
||||
{
|
||||
clear_tabs.insert(std::make_pair(tab_stop->style_position_.get_value(), tabs[i]));
|
||||
}
|
||||
}
|
||||
tabs.clear();
|
||||
}
|
||||
void tabs_context::add(const odf_reader::office_element_ptr & element)
|
||||
{
|
||||
odf_reader::style_tab_stop *tab_stop = dynamic_cast<odf_reader::style_tab_stop*>(element.get());
|
||||
if (tab_stop)
|
||||
{
|
||||
std::map<double, odf_reader::office_element_ptr>::iterator pFind = clear_tabs.find(tab_stop->style_position_.get_value());
|
||||
|
||||
if (pFind != clear_tabs.end())
|
||||
{
|
||||
clear_tabs.erase(pFind);
|
||||
}
|
||||
tabs.push_back(element);
|
||||
}
|
||||
}
|
||||
void tabs_context::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
if (clear_tabs.empty() && tabs.empty()) return;
|
||||
|
||||
std::wstringstream & _pPr = Context.get_styles_context().paragraph_nodes();
|
||||
|
||||
_pPr << L"<w:tabs>";
|
||||
|
||||
for (std::map<double, odf_reader::office_element_ptr>::iterator it = clear_tabs.begin(); it != clear_tabs.end(); ++it)
|
||||
{
|
||||
odf_reader::style_tab_stop * tab_stop = dynamic_cast<odf_reader::style_tab_stop*>(it->second.get());
|
||||
tab_stop->docx_convert(Context, true);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < tabs.size(); i++)
|
||||
{
|
||||
odf_reader::style_tab_stop * tab_stop = dynamic_cast<odf_reader::style_tab_stop*>(tabs[i].get());
|
||||
tab_stop->docx_convert(Context, false);
|
||||
}
|
||||
_pPr << L"</w:tabs>";
|
||||
}
|
||||
|
||||
void styles_context::start_process_style(const odf_reader::style_instance * Instance)
|
||||
{
|
||||
current_processed_style_ = Instance;
|
||||
|
||||
@ -33,6 +33,8 @@
|
||||
|
||||
#include <sstream>
|
||||
#include <iosfwd>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
#include <boost/noncopyable.hpp>
|
||||
#include <boost/shared_ptr.hpp>
|
||||
@ -40,14 +42,41 @@
|
||||
|
||||
namespace cpdoccore {
|
||||
|
||||
namespace oox{
|
||||
|
||||
class docx_conversion_context;
|
||||
class pptx_conversion_context;
|
||||
};
|
||||
|
||||
namespace odf_reader
|
||||
{
|
||||
class style_instance;
|
||||
class style_text_properties;
|
||||
class fonts_container;
|
||||
typedef boost::shared_ptr<style_text_properties> style_text_properties_ptr;
|
||||
|
||||
class office_element;
|
||||
typedef boost::shared_ptr<office_element> office_element_ptr;
|
||||
};
|
||||
|
||||
class tabs_context : boost::noncopyable
|
||||
{
|
||||
public:
|
||||
|
||||
std::vector<odf_reader::office_element_ptr> tabs;
|
||||
std::map<double, odf_reader::office_element_ptr> clear_tabs;
|
||||
|
||||
void clear()
|
||||
{
|
||||
tabs.clear();
|
||||
clear_tabs.clear();
|
||||
}
|
||||
|
||||
void reset();
|
||||
|
||||
void add(const odf_reader::office_element_ptr & element);
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
};
|
||||
class styles_context : boost::noncopyable
|
||||
{
|
||||
public:
|
||||
|
||||
@ -254,30 +254,31 @@ void rels_files::add(std::wstring const & Id,
|
||||
{
|
||||
return add(relationship(Id, Type, Target, TargetMode));
|
||||
}
|
||||
///////////////////////////////////////////
|
||||
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
chart_content::chart_content() : rels_(rels_file::create(L""))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
_CP_PTR(chart_content) chart_content::create()
|
||||
{
|
||||
return boost::make_shared<chart_content>();
|
||||
}
|
||||
|
||||
void chart_content::add_rel(relationship const & r)
|
||||
{
|
||||
rels_->get_rels().add(r);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
_CP_PTR(customXml_content) customXml_content::create(const std::wstring &item, const std::wstring &props)
|
||||
{
|
||||
return boost::make_shared<customXml_content>(item, props);
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
element_ptr simple_element::create(const std::wstring & FileName, const std::wstring & Content)
|
||||
{
|
||||
return boost::make_shared<simple_element>(FileName, Content);
|
||||
}
|
||||
|
||||
////////////
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
|
||||
void core_file::write(const std::wstring & RootPath)
|
||||
{
|
||||
|
||||
@ -61,7 +61,7 @@ typedef std::vector<element_ptr> element_ptr_array;
|
||||
class document;
|
||||
|
||||
|
||||
// element
|
||||
//------------------------------------------------------------------------
|
||||
class element
|
||||
{
|
||||
public:
|
||||
@ -108,10 +108,10 @@ private:
|
||||
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
class rels_file;
|
||||
typedef boost::shared_ptr<rels_file> rels_file_ptr;
|
||||
|
||||
// rels_file
|
||||
class rels_file : public element
|
||||
{
|
||||
public:
|
||||
@ -132,7 +132,7 @@ private:
|
||||
rels rels_;
|
||||
};
|
||||
|
||||
// rels_files
|
||||
//------------------------------------------------------------------------
|
||||
class rels_files : public element
|
||||
{
|
||||
public:
|
||||
@ -150,13 +150,29 @@ private:
|
||||
rels_file_ptr rels_file_;
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
class customXml_content;
|
||||
typedef _CP_PTR(customXml_content) customXml_content_ptr;
|
||||
|
||||
////////////////////////////////////////
|
||||
///\class chart_files
|
||||
class customXml_content : boost::noncopyable
|
||||
{
|
||||
public:
|
||||
customXml_content(const std::wstring &item, const std::wstring &props) : content_item(item), content_props(props) {}
|
||||
static _CP_PTR(customXml_content) create(const std::wstring &item, const std::wstring &props);
|
||||
|
||||
std::wstring item() { return content_item; }
|
||||
std::wstring props() { return content_props; }
|
||||
|
||||
friend class customXml_files;
|
||||
private:
|
||||
std::wstring content_item;
|
||||
std::wstring content_props;
|
||||
};
|
||||
///------------------------------------------------------------------------
|
||||
class chart_content;
|
||||
typedef _CP_PTR(chart_content) chart_content_ptr;
|
||||
|
||||
class chart_content : noncopyable
|
||||
class chart_content : boost::noncopyable
|
||||
{
|
||||
public:
|
||||
chart_content();
|
||||
@ -169,7 +185,7 @@ private:
|
||||
std::wstringstream content_;
|
||||
rels_file_ptr rels_;
|
||||
};
|
||||
/////////////////////////////////
|
||||
//------------------------------------------------------------------------
|
||||
class document : public element
|
||||
{
|
||||
public:
|
||||
|
||||
@ -55,7 +55,8 @@ enum RelsType
|
||||
typeOleObject,
|
||||
typeSlide,
|
||||
typeVideo,
|
||||
typeAudio
|
||||
typeAudio,
|
||||
typeControl
|
||||
};
|
||||
|
||||
struct _rel
|
||||
|
||||
@ -184,7 +184,7 @@ void oox_bar_chart::oox_serialize(std::wostream & _Wostream)
|
||||
}
|
||||
CP_XML_NODE(L"c:varyColors")
|
||||
{
|
||||
CP_XML_ATTR(L"val", 1);
|
||||
CP_XML_ATTR(L"val", varyColors_ ? L"1" : L"0");
|
||||
}
|
||||
oox_serialize_common(CP_XML_STREAM());
|
||||
|
||||
@ -226,7 +226,7 @@ void oox_line_chart::oox_serialize(std::wostream & _Wostream)
|
||||
{
|
||||
CP_XML_NODE(L"c:varyColors")
|
||||
{
|
||||
CP_XML_ATTR(L"val", 1);
|
||||
CP_XML_ATTR(L"val", varyColors_ ? L"1" : L"0");
|
||||
}
|
||||
oox_serialize_common(CP_XML_STREAM());
|
||||
|
||||
@ -259,7 +259,7 @@ void oox_area_chart::oox_serialize(std::wostream & _Wostream)
|
||||
{
|
||||
CP_XML_NODE(L"c:varyColors")
|
||||
{
|
||||
CP_XML_ATTR(L"val", 1);
|
||||
CP_XML_ATTR(L"val", varyColors_ ? L"1" : L"0");
|
||||
}
|
||||
oox_serialize_common(CP_XML_STREAM());
|
||||
|
||||
@ -289,7 +289,7 @@ void oox_bubble_chart::oox_serialize(std::wostream & _Wostream)
|
||||
{
|
||||
CP_XML_NODE(L"c:varyColors")
|
||||
{
|
||||
CP_XML_ATTR(L"val", 1);
|
||||
CP_XML_ATTR(L"val", varyColors_ ? L"1" : L"0");
|
||||
}
|
||||
oox_serialize_common(CP_XML_STREAM());
|
||||
//CP_XML_NODE(L"c:bubbleScale")
|
||||
@ -326,7 +326,7 @@ void oox_doughnut_chart::oox_serialize(std::wostream & _Wostream)
|
||||
{
|
||||
CP_XML_NODE(L"c:varyColors")
|
||||
{
|
||||
CP_XML_ATTR(L"val", 1);
|
||||
CP_XML_ATTR(L"val", varyColors_ ? L"1" : L"0");
|
||||
}
|
||||
oox_serialize_common(CP_XML_STREAM());
|
||||
|
||||
@ -366,7 +366,7 @@ void oox_pie_chart::oox_serialize(std::wostream & _Wostream)
|
||||
{
|
||||
CP_XML_NODE(L"c:varyColors")
|
||||
{
|
||||
CP_XML_ATTR(L"val", 1);
|
||||
CP_XML_ATTR(L"val", varyColors_ ? L"1" : L"0");
|
||||
}
|
||||
oox_serialize_common(CP_XML_STREAM());
|
||||
}
|
||||
@ -398,7 +398,7 @@ void oox_radar_chart::oox_serialize(std::wostream & _Wostream)
|
||||
}
|
||||
CP_XML_NODE(L"c:varyColors")
|
||||
{
|
||||
CP_XML_ATTR(L"val", 1);
|
||||
CP_XML_ATTR(L"val", varyColors_ ? L"1" : L"0");
|
||||
}
|
||||
oox_serialize_common(CP_XML_STREAM());
|
||||
|
||||
@ -436,7 +436,7 @@ void oox_scatter_chart::oox_serialize(std::wostream & _Wostream)
|
||||
}
|
||||
CP_XML_NODE(L"c:varyColors")
|
||||
{
|
||||
CP_XML_ATTR(L"val", 1);
|
||||
CP_XML_ATTR(L"val", varyColors_ ? L"1" : L"0");
|
||||
}
|
||||
oox_serialize_common(CP_XML_STREAM());
|
||||
|
||||
|
||||
@ -67,6 +67,7 @@ public:
|
||||
is3D_ = false;
|
||||
type_ = 0;
|
||||
dispBlanksAs_ = L"zero";
|
||||
varyColors_ = true;
|
||||
}
|
||||
~oox_chart(){}
|
||||
|
||||
@ -99,6 +100,7 @@ public:
|
||||
|
||||
int type_;
|
||||
bool is3D_;
|
||||
bool varyColors_;
|
||||
std::wstring dispBlanksAs_;
|
||||
std::vector<int> axisId_; // axId (Axis ID) §21.2.2.9
|
||||
std::wstring grouping_; // clustered | percentStacked | stacked | standard
|
||||
|
||||
@ -54,7 +54,7 @@ void xlsx_serialize_text(std::wostream & strm, _xlsx_drawing & val)
|
||||
odf_reader::GetProperty ( val.additional ,L"text-content", strTextContent);
|
||||
|
||||
if (!strTextContent)return;
|
||||
if (strTextContent.get().length()<1)return;
|
||||
if (strTextContent->empty())return;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
@ -65,7 +65,7 @@ void xlsx_serialize_text(std::wostream & strm, _xlsx_drawing & val)
|
||||
CP_XML_NODE(L"a:lstStyle");
|
||||
if (strTextContent)
|
||||
{
|
||||
CP_XML_STREAM() << strTextContent.get();
|
||||
CP_XML_STREAM() << *strTextContent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -38,6 +38,7 @@
|
||||
#include "office_spreadsheet.h"
|
||||
#include "office_presentation.h"
|
||||
#include "office_scripts.h"
|
||||
#include "office_forms.h"
|
||||
#include "office_settings.h"
|
||||
#include "paragraph_elements.h"
|
||||
#include "office_binary_data.h"
|
||||
|
||||
@ -31,8 +31,6 @@
|
||||
*/
|
||||
|
||||
#include "calcs_styles.h"
|
||||
#include <boost/foreach.hpp>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
namespace cpdoccore {
|
||||
@ -44,10 +42,10 @@ namespace odf_reader {
|
||||
text_format_properties_content calc_text_properties_content(const std::vector<const style_text_properties*> & textProps)
|
||||
{
|
||||
text_format_properties_content result;
|
||||
BOOST_FOREACH(const style_text_properties* v, textProps)
|
||||
for (size_t i = 0; i < textProps.size(); i++)
|
||||
{
|
||||
if (v)
|
||||
result.apply_from(v->content());
|
||||
if (textProps[i])
|
||||
result.apply_from(textProps[i]->content());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -60,20 +58,21 @@ text_format_properties_content calc_text_properties_content(const style_instance
|
||||
{
|
||||
if (const style_content * content = styleInstance->content())
|
||||
if (const style_text_properties * textProp = content->get_style_text_properties())
|
||||
textProps.push_back(textProp);
|
||||
{
|
||||
textProps.insert(textProps.begin(), textProp);
|
||||
}
|
||||
|
||||
styleInstance = styleInstance->parent();
|
||||
}
|
||||
reverse(textProps.begin(), textProps.end());
|
||||
return calc_text_properties_content(textProps);
|
||||
}
|
||||
|
||||
text_format_properties_content calc_text_properties_content(const std::vector<const style_instance *> & styleInstances)
|
||||
{
|
||||
text_format_properties_content result;
|
||||
BOOST_FOREACH(const style_instance * inst, styleInstances)
|
||||
for (size_t i = 0; i < styleInstances.size(); i++)
|
||||
{
|
||||
result.apply_from(calc_text_properties_content(inst));
|
||||
result.apply_from(calc_text_properties_content(styleInstances[i]));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -82,10 +81,10 @@ text_format_properties_content calc_text_properties_content(const std::vector<co
|
||||
graphic_format_properties calc_graphic_properties_content(const std::vector<const graphic_format_properties*> & graphicProps)
|
||||
{
|
||||
graphic_format_properties result;
|
||||
BOOST_FOREACH(const graphic_format_properties* v, graphicProps)
|
||||
for (size_t i = 0; i < graphicProps.size(); i++)
|
||||
{
|
||||
if (v)
|
||||
result.apply_from(v);
|
||||
if (graphicProps[i])
|
||||
result.apply_from(graphicProps[i]);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -97,20 +96,22 @@ graphic_format_properties calc_graphic_properties_content(const style_instance *
|
||||
{
|
||||
if (const style_content * content = styleInstance->content())
|
||||
if (const graphic_format_properties * graphicProp = content->get_graphic_properties())
|
||||
graphicProps.push_back(graphicProp);
|
||||
{
|
||||
graphicProps.insert(graphicProps.begin(), graphicProp);
|
||||
}
|
||||
|
||||
styleInstance = styleInstance->parent();
|
||||
}
|
||||
reverse(graphicProps.begin(), graphicProps.end());
|
||||
return calc_graphic_properties_content(graphicProps);
|
||||
}
|
||||
|
||||
graphic_format_properties calc_graphic_properties_content(const std::vector<const style_instance *> & styleInstances)
|
||||
{
|
||||
graphic_format_properties result;
|
||||
BOOST_FOREACH(const style_instance * inst, styleInstances)
|
||||
{
|
||||
graphic_format_properties f = calc_graphic_properties_content(inst);
|
||||
|
||||
for (size_t i = 0; i < styleInstances.size(); i++)
|
||||
{
|
||||
graphic_format_properties f = calc_graphic_properties_content(styleInstances[i]);
|
||||
result.apply_from(&f);
|
||||
}
|
||||
return result;
|
||||
@ -121,10 +122,11 @@ graphic_format_properties calc_graphic_properties_content(const std::vector<cons
|
||||
paragraph_format_properties calc_paragraph_properties_content(const std::vector<const style_paragraph_properties*> & parProps)
|
||||
{
|
||||
paragraph_format_properties result;
|
||||
BOOST_FOREACH(const style_paragraph_properties* v, parProps)
|
||||
|
||||
for (size_t i = 0; i < parProps.size(); i++)
|
||||
{
|
||||
if (v)
|
||||
result.apply_from(v->content());
|
||||
if (parProps[i])
|
||||
result.apply_from(parProps[i]->content_);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -136,32 +138,60 @@ paragraph_format_properties calc_paragraph_properties_content(const style_instan
|
||||
{
|
||||
if (const style_content * content = styleInstance->content())
|
||||
if (const style_paragraph_properties * parProp = content->get_style_paragraph_properties())
|
||||
parProps.push_back(parProp);
|
||||
{
|
||||
parProps.insert(parProps.begin(), parProp);
|
||||
}
|
||||
styleInstance = styleInstance->parent();
|
||||
}
|
||||
reverse(parProps.begin(), parProps.end());
|
||||
return calc_paragraph_properties_content(parProps);
|
||||
}
|
||||
|
||||
paragraph_format_properties calc_paragraph_properties_content(const std::vector<const style_instance *> & styleInstances)
|
||||
{
|
||||
paragraph_format_properties result;
|
||||
BOOST_FOREACH(const style_instance * inst, styleInstances)
|
||||
for (size_t i = 0; i < styleInstances.size(); i++)
|
||||
{
|
||||
result.apply_from(calc_paragraph_properties_content(inst));
|
||||
result.apply_from(calc_paragraph_properties_content(styleInstances[i]));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void calc_tab_stops(const style_instance * styleInstance, tabs_context & context)
|
||||
{
|
||||
std::vector<const style_paragraph_properties*> parProps;
|
||||
while (styleInstance)
|
||||
{
|
||||
if (const style_content * content = styleInstance->content())
|
||||
if (const style_paragraph_properties * parProp = content->get_style_paragraph_properties())
|
||||
{
|
||||
parProps.insert(parProps.begin(), parProp);
|
||||
}
|
||||
styleInstance = styleInstance->parent();
|
||||
}
|
||||
for (size_t i = 0; i < parProps.size(); i++)
|
||||
{
|
||||
if (parProps[i]->content_.style_tab_stops_)
|
||||
{
|
||||
style_tab_stops *tab_stops = dynamic_cast<style_tab_stops*>(parProps[i]->content_.style_tab_stops_.get());
|
||||
context.reset();
|
||||
for (size_t j = 0; j < tab_stops->content_.size(); j++)
|
||||
{
|
||||
context.add(tab_stops->content_[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//////
|
||||
|
||||
style_table_cell_properties_attlist calc_table_cell_properties(const std::vector<const style_table_cell_properties*> & props)
|
||||
{
|
||||
style_table_cell_properties_attlist result;
|
||||
BOOST_FOREACH(const style_table_cell_properties* v, props)
|
||||
for (size_t i = 0; i < props.size(); i++)
|
||||
{
|
||||
if (v)
|
||||
result.apply_from(v->attlist_);
|
||||
if (props[i])
|
||||
result.apply_from(props[i]->attlist_);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -173,19 +203,20 @@ style_table_cell_properties_attlist calc_table_cell_properties(const style_insta
|
||||
{
|
||||
if (const style_content * content = styleInstance->content())
|
||||
if (const style_table_cell_properties * prop = content->get_style_table_cell_properties())
|
||||
props.push_back(prop);
|
||||
{
|
||||
props.insert(props.begin(), prop);
|
||||
}
|
||||
styleInstance = styleInstance->parent();
|
||||
}
|
||||
reverse(props.begin(), props.end());
|
||||
return calc_table_cell_properties(props);
|
||||
}
|
||||
|
||||
style_table_cell_properties_attlist calc_table_cell_properties(const std::vector<const style_instance *> & styleInstances)
|
||||
{
|
||||
style_table_cell_properties_attlist result;
|
||||
BOOST_FOREACH(const style_instance * inst, styleInstances)
|
||||
for (size_t i = 0; i < styleInstances.size(); i++)
|
||||
{
|
||||
result.apply_from(calc_table_cell_properties(inst));
|
||||
result.apply_from(calc_table_cell_properties(styleInstances[i]));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -41,6 +41,7 @@
|
||||
#include <vector>
|
||||
|
||||
namespace cpdoccore {
|
||||
class tabs_context;
|
||||
namespace odf_reader {
|
||||
|
||||
graphic_format_properties calc_graphic_properties_content(const style_instance * styleInstance);
|
||||
@ -55,5 +56,6 @@ paragraph_format_properties calc_paragraph_properties_content(const std::vector<
|
||||
style_table_cell_properties_attlist calc_table_cell_properties(const style_instance * styleInstance);
|
||||
style_table_cell_properties_attlist calc_table_cell_properties(const std::vector<const style_instance *> & styleInstances);
|
||||
|
||||
void calc_tab_stops(const style_instance * styleInstance, tabs_context & context);
|
||||
}
|
||||
}
|
||||
|
||||
@ -212,7 +212,14 @@ void object_odf_context::docx_convert(oox::docx_conversion_context & Context)
|
||||
|
||||
oox_convert(chart_context);
|
||||
|
||||
chart_context.set_cache_only(true);
|
||||
if (embeddedData.empty())
|
||||
{
|
||||
chart_context.set_cache_only(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
chart_context.set_externalData(embeddedData);
|
||||
}
|
||||
|
||||
Context.end_chart();
|
||||
}
|
||||
@ -259,7 +266,14 @@ void object_odf_context::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
|
||||
oox_convert(chart_context);
|
||||
|
||||
chart_context.set_cache_only(true);
|
||||
if (embeddedData.empty())
|
||||
{
|
||||
chart_context.set_cache_only(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
chart_context.set_externalData(embeddedData);
|
||||
}
|
||||
Context.end_chart();
|
||||
}
|
||||
else if (object_type_ == 2 && office_text_)
|
||||
@ -382,6 +396,11 @@ void object_odf_context::oox_convert(oox::oox_chart_context & chart_context)
|
||||
|
||||
if (!current) continue;
|
||||
|
||||
if (1 == series_.size())
|
||||
{
|
||||
current->varyColors_ = false;
|
||||
}
|
||||
|
||||
current->set_properties(plot_area_.properties_);
|
||||
current->set_additional_properties(chart_graphic_properties_);
|
||||
|
||||
@ -420,7 +439,8 @@ void object_odf_context::oox_convert(oox::oox_chart_context & chart_context)
|
||||
formatCode = *strVal;
|
||||
}
|
||||
|
||||
if (domain_cell_range_adress_.empty() == false)
|
||||
if (domain_cell_range_adress_.empty() == false ||
|
||||
last_set_type == chart_scatter)
|
||||
{
|
||||
if (last_set_type == chart_bubble)
|
||||
{ //bubble(x)
|
||||
@ -434,13 +454,19 @@ void object_odf_context::oox_convert(oox::oox_chart_context & chart_context)
|
||||
}
|
||||
else
|
||||
{ //x
|
||||
if (!bPivotChart_)
|
||||
current->set_formula_series(2, domain_cell_range_adress_, formatCode, boolVal.get_value_or(true));
|
||||
current->set_values_series (2, domain_cash);
|
||||
if (false == domain_cash.empty())
|
||||
{
|
||||
if (!bPivotChart_)
|
||||
current->set_formula_series(2, domain_cell_range_adress_, formatCode, boolVal.get_value_or(true));
|
||||
current->set_values_series (2, domain_cash);
|
||||
}
|
||||
//y
|
||||
if (!bPivotChart_)
|
||||
current->set_formula_series(3, series_[i].cell_range_address_, formatCode, boolVal.get_value_or(true));
|
||||
current->set_values_series (3, cell_cash);
|
||||
if (false == cell_cash.empty())
|
||||
{
|
||||
if (!bPivotChart_)
|
||||
current->set_formula_series(3, series_[i].cell_range_address_, formatCode, boolVal.get_value_or(true));
|
||||
current->set_values_series (3, cell_cash);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -476,7 +502,7 @@ void object_odf_context::oox_convert(oox::oox_chart_context & chart_context)
|
||||
is3D = true;
|
||||
}
|
||||
|
||||
for (int i = 0; i < axises_.size(); i++)
|
||||
for (size_t i = 0; i < axises_.size(); i++)
|
||||
{
|
||||
axis & a = axises_[i];
|
||||
|
||||
@ -667,7 +693,7 @@ void process_build_object::visit(office_body& val)
|
||||
}
|
||||
void process_build_object::visit(office_chart& val)
|
||||
{
|
||||
ACCEPT_ALL_CONTENT_CONST(val.content_);
|
||||
ACCEPT_ALL_CONTENT(val.content_);
|
||||
}
|
||||
void process_build_object::visit(office_text& val)
|
||||
{
|
||||
@ -684,7 +710,7 @@ void process_build_object::visit(office_spreadsheet& val)
|
||||
object_odf_context_.object_type_ = 4;
|
||||
object_odf_context_.office_spreadsheet_ = &val; //конвертация будет уровнем выше
|
||||
}
|
||||
void process_build_object::visit(const chart_chart& val)
|
||||
void process_build_object::visit(chart_chart& val)
|
||||
{
|
||||
object_odf_context_.object_type_ = 1;
|
||||
|
||||
@ -704,11 +730,11 @@ void process_build_object::visit(const chart_chart& val)
|
||||
if (val.attlist_.loext_data_pilot_source_)
|
||||
object_odf_context_.set_pivot_source(*val.attlist_.loext_data_pilot_source_);
|
||||
|
||||
ACCEPT_ALL_CONTENT_CONST(val.content_);
|
||||
ACCEPT_ALL_CONTENT(val.content_);
|
||||
|
||||
}
|
||||
|
||||
void process_build_object::visit(const chart_title& val)
|
||||
void process_build_object::visit(chart_title& val)
|
||||
{
|
||||
title t;
|
||||
|
||||
@ -735,7 +761,7 @@ void process_build_object::visit(const chart_title& val)
|
||||
|
||||
}
|
||||
|
||||
void process_build_object::visit(const chart_subtitle & val)
|
||||
void process_build_object::visit(chart_subtitle & val)
|
||||
{
|
||||
title t;
|
||||
std::wstringstream v;
|
||||
@ -751,7 +777,7 @@ void process_build_object::visit(const chart_subtitle & val)
|
||||
object_odf_context_.sub_title_ = t;
|
||||
}
|
||||
|
||||
void process_build_object::visit(const chart_footer& val)
|
||||
void process_build_object::visit(chart_footer& val)
|
||||
{
|
||||
object_odf_context_.footer_.bEnabled = true;
|
||||
|
||||
@ -760,7 +786,7 @@ void process_build_object::visit(const chart_footer& val)
|
||||
ApplyTextProperties (val.common_attlist_.chart_style_name_.get_value_or(L""), object_odf_context_.footer_.text_properties_);
|
||||
}
|
||||
|
||||
void process_build_object::visit(const chart_legend& val)
|
||||
void process_build_object::visit(chart_legend& val)
|
||||
{
|
||||
object_odf_context_.legend_.bEnabled = true;
|
||||
object_odf_context_.legend_.position = L"r";
|
||||
@ -791,9 +817,9 @@ void process_build_object::visit(const chart_legend& val)
|
||||
ApplyTextProperties (val.attlist_.common_attlist_.chart_style_name_.get_value_or(L""), object_odf_context_.legend_.text_properties_);
|
||||
}
|
||||
|
||||
void process_build_object::visit(const chart_plot_area& val)
|
||||
void process_build_object::visit(chart_plot_area& val)
|
||||
{
|
||||
ACCEPT_ALL_CONTENT_CONST(val.content_);
|
||||
ACCEPT_ALL_CONTENT(val.content_);
|
||||
|
||||
object_odf_context_.plot_area_.cell_range_address_ = val.attlist_.table_cell_range_address_.get_value_or(L"");
|
||||
|
||||
@ -803,13 +829,13 @@ void process_build_object::visit(const chart_plot_area& val)
|
||||
}
|
||||
|
||||
|
||||
void process_build_object::visit(const chart_axis& val)
|
||||
void process_build_object::visit(chart_axis& val)
|
||||
{
|
||||
object_odf_context_.start_axis(val.attlist_.chart_dimension_.get_value_or(L""),
|
||||
val.attlist_.chart_name_.get_value_or(L""),
|
||||
val.attlist_.common_attlist_.chart_style_name_.get_value_or(L""));
|
||||
|
||||
ACCEPT_ALL_CONTENT_CONST(val.content_);
|
||||
ACCEPT_ALL_CONTENT(val.content_);
|
||||
|
||||
std::wstring style_name = val.attlist_.common_attlist_.chart_style_name_.get_value_or(L"");
|
||||
|
||||
@ -820,7 +846,7 @@ void process_build_object::visit(const chart_axis& val)
|
||||
object_odf_context_.end_axis();
|
||||
}
|
||||
|
||||
void process_build_object::visit(const chart_series& val)
|
||||
void process_build_object::visit(chart_series& val)
|
||||
{
|
||||
const chart_series_attlist & att = val.attlist_;
|
||||
|
||||
@ -834,7 +860,7 @@ void process_build_object::visit(const chart_series& val)
|
||||
att.common_attlist_.chart_style_name_.get_value_or(L"")
|
||||
);
|
||||
|
||||
ACCEPT_ALL_CONTENT_CONST(val.content_);
|
||||
ACCEPT_ALL_CONTENT(val.content_);
|
||||
|
||||
ApplyChartProperties (att.common_attlist_.chart_style_name_.get_value_or(L""), object_odf_context_.series_.back().properties_);
|
||||
ApplyGraphicProperties (att.common_attlist_.chart_style_name_.get_value_or(L""), object_odf_context_.series_.back().graphic_properties_,object_odf_context_.series_.back().fill_);
|
||||
@ -842,14 +868,14 @@ void process_build_object::visit(const chart_series& val)
|
||||
|
||||
}
|
||||
|
||||
void process_build_object::visit(const chart_domain& val)
|
||||
void process_build_object::visit(chart_domain& val)
|
||||
{
|
||||
if (object_odf_context_.domain_cell_range_adress_.empty())
|
||||
object_odf_context_.domain_cell_range_adress_ = val.table_cell_range_address_.get_value_or(L"");
|
||||
else
|
||||
object_odf_context_.domain_cell_range_adress2_ = val.table_cell_range_address_.get_value_or(L"");
|
||||
}
|
||||
void process_build_object::visit(const chart_grid& val)
|
||||
void process_build_object::visit(chart_grid& val)
|
||||
{
|
||||
object_odf_context_.add_grid(val.attlist_.chart_class_.get_value_or(L""),
|
||||
val.attlist_.common_attlist_.chart_style_name_.get_value_or(L"") );
|
||||
@ -859,7 +885,7 @@ void process_build_object::visit(const chart_grid& val)
|
||||
ApplyGraphicProperties (val.attlist_.common_attlist_.chart_style_name_.get_value_or(L""), (object_odf_context_.axises_.back()).grids_.back().graphic_properties_, fill);
|
||||
|
||||
}
|
||||
void process_build_object::visit(const chart_wall& val)
|
||||
void process_build_object::visit(chart_wall& val)
|
||||
{
|
||||
object_odf_context_.wall_.bEnabled = true;
|
||||
|
||||
@ -868,7 +894,7 @@ void process_build_object::visit(const chart_wall& val)
|
||||
ApplyTextProperties (val.attlist_.common_attlist_.chart_style_name_.get_value_or(L""), object_odf_context_.wall_.text_properties_);
|
||||
}
|
||||
|
||||
void process_build_object::visit(const chart_floor& val)
|
||||
void process_build_object::visit(chart_floor& val)
|
||||
{
|
||||
object_odf_context_.floor_.bEnabled = true;
|
||||
|
||||
@ -877,7 +903,7 @@ void process_build_object::visit(const chart_floor& val)
|
||||
ApplyTextProperties (val.common_attlist_.chart_style_name_.get_value_or(L""), object_odf_context_.floor_.text_properties_);
|
||||
}
|
||||
|
||||
void process_build_object::visit(const chart_data_point & val)
|
||||
void process_build_object::visit(chart_data_point & val)
|
||||
{
|
||||
object_odf_context_.add_point( val.attlist_.chart_repeated_.get_value_or(1));
|
||||
|
||||
@ -892,16 +918,16 @@ void process_build_object::visit(const chart_data_point & val)
|
||||
}
|
||||
|
||||
}
|
||||
void process_build_object::visit(const chart_mean_value & val)
|
||||
void process_build_object::visit(chart_mean_value & val)
|
||||
{
|
||||
ApplyChartProperties (val.common_attlist_.chart_style_name_.get_value_or(L""), object_odf_context_.series_.back().mean_value_.properties_);
|
||||
ApplyGraphicProperties (val.common_attlist_.chart_style_name_.get_value_or(L""), object_odf_context_.series_.back().mean_value_.graphic_properties_, object_odf_context_.series_.back().mean_value_.fill_);
|
||||
}
|
||||
void process_build_object::visit(const chart_error_indicator & val)
|
||||
void process_build_object::visit(chart_error_indicator & val)
|
||||
{
|
||||
ApplyGraphicProperties (val.common_attlist_.chart_style_name_.get_value_or(L""), object_odf_context_.series_.back().error_indicator_.graphic_properties_,object_odf_context_.series_.back().error_indicator_.fill_ );
|
||||
}
|
||||
void process_build_object::visit(const chart_regression_curve & val)
|
||||
void process_build_object::visit(chart_regression_curve & val)
|
||||
{
|
||||
oox::_oox_fill fill;
|
||||
ApplyGraphicProperties (val.common_attlist_.chart_style_name_.get_value_or(L""), object_odf_context_.series_.back().regression_curve_.line_properties_, fill);
|
||||
@ -913,7 +939,7 @@ void process_build_object::visit(const chart_regression_curve & val)
|
||||
val.chart_equation_->accept(*this);
|
||||
}
|
||||
}
|
||||
void process_build_object::visit(const chart_equation & val)
|
||||
void process_build_object::visit(chart_equation & val)
|
||||
{
|
||||
if (object_odf_context_.series_.back().regression_curve_.bEquation == false)return;
|
||||
|
||||
@ -925,7 +951,7 @@ void process_build_object::visit(const chart_equation & val)
|
||||
ApplyTextProperties (val.common_attlist_.chart_style_name_.get_value_or(L""), object_odf_context_.series_.back().regression_curve_.equation_properties_.text_properties_);
|
||||
|
||||
}
|
||||
void process_build_object::visit(const chart_categories& val)
|
||||
void process_build_object::visit(chart_categories& val)
|
||||
{
|
||||
if (object_odf_context_.in_axis_)
|
||||
{
|
||||
@ -936,49 +962,48 @@ void process_build_object::visit(const chart_categories& val)
|
||||
if (val.table_cell_range_address_)
|
||||
object_odf_context_.add_categories(*val.table_cell_range_address_);
|
||||
}
|
||||
void process_build_object::visit(const table_table& val)
|
||||
void process_build_object::visit(table_table& val)
|
||||
{
|
||||
ACCEPT_ALL_CONTENT_CONST(val.table_columns_and_groups_.content_);
|
||||
ACCEPT_ALL_CONTENT_CONST(val.table_rows_and_groups_.content_);
|
||||
object_odf_context_.table_table_ = &val;
|
||||
|
||||
ACCEPT_ALL_CONTENT(val.table_columns_and_groups_.content_);
|
||||
ACCEPT_ALL_CONTENT(val.table_rows_and_groups_.content_);
|
||||
}
|
||||
void process_build_object::visit(const table_table_rows& val)
|
||||
{
|
||||
ACCEPT_ALL_CONTENT_CONST(val.table_table_row_);
|
||||
}
|
||||
void process_build_object::visit(table_table_rows& val)
|
||||
{
|
||||
ACCEPT_ALL_CONTENT_CONST(val.table_table_row_);
|
||||
ACCEPT_ALL_CONTENT(val.table_table_row_);
|
||||
}
|
||||
void process_build_object::visit(const table_table_row & val)
|
||||
|
||||
void process_build_object::visit(table_table_row & val)
|
||||
{
|
||||
unsigned int repeated = val.attlist_.table_number_rows_repeated_;
|
||||
ACCEPT_ALL_CONTENT_CONST(val.content_);
|
||||
ACCEPT_ALL_CONTENT(val.content_);
|
||||
visit_rows(repeated);
|
||||
}
|
||||
void process_build_object::visit(const table_table_column& val)
|
||||
void process_build_object::visit(table_table_column& val)
|
||||
{
|
||||
const unsigned int columnsRepeated = val.table_table_column_attlist_.table_number_columns_repeated_;
|
||||
|
||||
visit_column(columnsRepeated);
|
||||
}
|
||||
void process_build_object::visit(const table_table_row_group& val)
|
||||
void process_build_object::visit(table_table_row_group& val)
|
||||
{
|
||||
ACCEPT_ALL_CONTENT_CONST(val.table_rows_and_groups_.content_);
|
||||
ACCEPT_ALL_CONTENT(val.table_rows_and_groups_.content_);
|
||||
}
|
||||
void process_build_object::visit(const table_table_column_group& val)
|
||||
void process_build_object::visit(table_table_column_group& val)
|
||||
{
|
||||
ACCEPT_ALL_CONTENT_CONST(val.table_columns_and_groups_.content_);
|
||||
ACCEPT_ALL_CONTENT(val.table_columns_and_groups_.content_);
|
||||
}
|
||||
void process_build_object::visit(table_table_columns& val)
|
||||
{
|
||||
ACCEPT_ALL_CONTENT_CONST(val.table_table_column_);
|
||||
ACCEPT_ALL_CONTENT(val.table_table_column_);
|
||||
}
|
||||
void process_build_object::visit(const table_columns_no_group& val)
|
||||
void process_build_object::visit(table_columns_no_group& val)
|
||||
{
|
||||
if (val.table_columns_1_.table_table_columns_)
|
||||
val.table_columns_1_.table_table_columns_->accept(*this);
|
||||
|
||||
ACCEPT_ALL_CONTENT_CONST(val.table_columns_1_.table_table_column_);
|
||||
ACCEPT_ALL_CONTENT(val.table_columns_1_.table_table_column_);
|
||||
|
||||
if (val.table_table_header_columns_)
|
||||
val.table_table_header_columns_->accept(*this);
|
||||
@ -986,14 +1011,14 @@ void process_build_object::visit(const table_columns_no_group& val)
|
||||
if (val.table_columns_2_.table_table_columns_)
|
||||
val.table_columns_2_.table_table_columns_->accept(*this);
|
||||
|
||||
ACCEPT_ALL_CONTENT_CONST(val.table_columns_2_.table_table_column_);
|
||||
ACCEPT_ALL_CONTENT(val.table_columns_2_.table_table_column_);
|
||||
}
|
||||
void process_build_object::visit(const table_rows_no_group& val)
|
||||
void process_build_object::visit(table_rows_no_group& val)
|
||||
{
|
||||
if (val.table_rows_1_.table_table_rows_)
|
||||
val.table_rows_1_.table_table_rows_->accept(*this);
|
||||
else
|
||||
ACCEPT_ALL_CONTENT_CONST(val.table_rows_1_.table_table_row_);
|
||||
ACCEPT_ALL_CONTENT(val.table_rows_1_.table_table_row_);
|
||||
|
||||
if (val.table_table_header_rows_)
|
||||
val.table_table_header_rows_->accept(*this);
|
||||
@ -1001,9 +1026,9 @@ void process_build_object::visit(const table_rows_no_group& val)
|
||||
if (val.table_rows_2_.table_table_rows_)
|
||||
val.table_rows_2_.table_table_rows_->accept(*this);
|
||||
else
|
||||
ACCEPT_ALL_CONTENT_CONST(val.table_rows_2_.table_table_row_);
|
||||
ACCEPT_ALL_CONTENT(val.table_rows_2_.table_table_row_);
|
||||
}
|
||||
void process_build_object::visit(const table_table_cell& val)
|
||||
void process_build_object::visit(table_table_cell& val)
|
||||
{
|
||||
const table_table_cell_attlist & attlist = val.attlist_;
|
||||
|
||||
@ -1046,7 +1071,7 @@ void process_build_object::visit(const table_table_cell& val)
|
||||
object_odf_context_.cash_pivot.insert(std::make_pair(cell_desc, cell_));
|
||||
}
|
||||
}
|
||||
void process_build_object::visit(const table_covered_table_cell& val)
|
||||
void process_build_object::visit(table_covered_table_cell& val)
|
||||
{
|
||||
unsigned int repeated = val.attlist_.table_number_columns_repeated_;
|
||||
|
||||
@ -1055,15 +1080,11 @@ void process_build_object::visit(const table_covered_table_cell& val)
|
||||
}
|
||||
void process_build_object::visit(table_table_header_columns& val)
|
||||
{
|
||||
ACCEPT_ALL_CONTENT_CONST(val.table_table_column_);
|
||||
}
|
||||
void process_build_object::visit(const table_table_header_rows& val)
|
||||
{
|
||||
ACCEPT_ALL_CONTENT_CONST(val.table_table_row_);
|
||||
ACCEPT_ALL_CONTENT(val.table_table_column_);
|
||||
}
|
||||
void process_build_object::visit(table_table_header_rows& val)
|
||||
{
|
||||
ACCEPT_ALL_CONTENT_CONST(val.table_table_row_);
|
||||
ACCEPT_ALL_CONTENT(val.table_table_row_);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -120,6 +120,7 @@ public:
|
||||
office_text_ (NULL),
|
||||
office_math_ (NULL),
|
||||
office_spreadsheet_ (NULL),
|
||||
table_table_ (NULL),
|
||||
baseRef_ (ref),
|
||||
baseFontHeight_ (12)
|
||||
{
|
||||
@ -164,6 +165,7 @@ public:
|
||||
office_text *office_text_;
|
||||
office_math *office_math_;
|
||||
office_spreadsheet *office_spreadsheet_;
|
||||
table_table *table_table_;
|
||||
|
||||
int baseFontHeight_;
|
||||
std::wstring baseRef_;
|
||||
@ -203,6 +205,7 @@ public:
|
||||
std::vector<_cell> cash_values;
|
||||
std::map<std::wstring, _cell>cash_pivot;
|
||||
|
||||
std::wstring embeddedData;
|
||||
//---------------------------------------
|
||||
std::wstring target_table_;
|
||||
std::wstring table_name_;
|
||||
@ -234,48 +237,45 @@ class process_build_object
|
||||
public visitor<office_math>,
|
||||
public visitor<office_spreadsheet>,
|
||||
|
||||
public const_visitor<chart_chart>,
|
||||
public visitor<chart_chart>,
|
||||
|
||||
public const_visitor<chart_title>,
|
||||
public const_visitor<chart_subtitle>,
|
||||
public const_visitor<chart_footer>,
|
||||
public const_visitor<chart_legend>,
|
||||
public visitor<chart_title>,
|
||||
public visitor<chart_subtitle>,
|
||||
public visitor<chart_footer>,
|
||||
public visitor<chart_legend>,
|
||||
|
||||
public const_visitor<chart_plot_area>,
|
||||
public visitor<chart_plot_area>,
|
||||
|
||||
public const_visitor<chart_axis>,
|
||||
public const_visitor<chart_categories>,
|
||||
public const_visitor<chart_grid>,
|
||||
public visitor<chart_axis>,
|
||||
public visitor<chart_categories>,
|
||||
public visitor<chart_grid>,
|
||||
|
||||
public const_visitor<chart_series>,
|
||||
public const_visitor<chart_domain>,
|
||||
public const_visitor<chart_data_point>,
|
||||
public const_visitor<chart_mean_value>,
|
||||
public const_visitor<chart_regression_curve>,
|
||||
public const_visitor<chart_equation>,
|
||||
public const_visitor<chart_error_indicator>,
|
||||
public const_visitor<chart_wall>,
|
||||
public const_visitor<chart_floor>,
|
||||
public visitor<chart_series>,
|
||||
public visitor<chart_domain>,
|
||||
public visitor<chart_data_point>,
|
||||
public visitor<chart_mean_value>,
|
||||
public visitor<chart_regression_curve>,
|
||||
public visitor<chart_equation>,
|
||||
public visitor<chart_error_indicator>,
|
||||
public visitor<chart_wall>,
|
||||
public visitor<chart_floor>,
|
||||
|
||||
public const_visitor<table_table>,
|
||||
public visitor<table_table>,
|
||||
|
||||
public const_visitor<table_table_row_group>,
|
||||
public const_visitor<table_rows_no_group>,
|
||||
public const_visitor<table_table_header_rows>,
|
||||
public const_visitor<table_table_rows>,
|
||||
public const_visitor<table_table_row>,
|
||||
|
||||
public visitor<table_table_rows>,
|
||||
public visitor<table_table_row_group>,
|
||||
public visitor<table_rows_no_group>,
|
||||
public visitor<table_table_header_rows>,
|
||||
public visitor<table_table_rows>,
|
||||
public visitor<table_table_row>,
|
||||
|
||||
public const_visitor<table_table_cell>,
|
||||
public const_visitor<table_covered_table_cell>,
|
||||
public visitor<table_table_cell>,
|
||||
public visitor<table_covered_table_cell>,
|
||||
|
||||
public const_visitor<table_table_column_group>,
|
||||
public visitor<table_table_column_group>,
|
||||
public visitor<table_table_header_columns>,
|
||||
public visitor<table_table_columns>,
|
||||
public const_visitor<table_table_column>,
|
||||
public const_visitor<table_columns_no_group>
|
||||
public visitor<table_table_column>,
|
||||
public visitor<table_columns_no_group>
|
||||
{
|
||||
public:
|
||||
|
||||
@ -303,44 +303,39 @@ public:
|
||||
virtual void visit(office_math & val);
|
||||
virtual void visit(office_spreadsheet & val);
|
||||
|
||||
virtual void visit(const chart_chart & val);
|
||||
virtual void visit(const chart_title & val);
|
||||
virtual void visit(const chart_subtitle & val);
|
||||
virtual void visit(const chart_footer & val);
|
||||
virtual void visit(const chart_legend & val);
|
||||
virtual void visit(const chart_plot_area& val);
|
||||
virtual void visit(const chart_axis & val);
|
||||
virtual void visit(const chart_series & val);
|
||||
virtual void visit(const chart_domain & val);
|
||||
virtual void visit(const chart_data_point & val);
|
||||
virtual void visit(const chart_mean_value & val);
|
||||
virtual void visit(const chart_error_indicator & val);
|
||||
virtual void visit(const chart_regression_curve & val);
|
||||
virtual void visit(const chart_equation & val);
|
||||
virtual void visit(const chart_categories & val);
|
||||
virtual void visit(const chart_grid & val);
|
||||
virtual void visit(const chart_wall & val);
|
||||
virtual void visit(const chart_floor & val);
|
||||
virtual void visit(const table_table & val);
|
||||
virtual void visit(chart_chart & val);
|
||||
virtual void visit(chart_title & val);
|
||||
virtual void visit(chart_subtitle & val);
|
||||
virtual void visit(chart_footer & val);
|
||||
virtual void visit(chart_legend & val);
|
||||
virtual void visit(chart_plot_area& val);
|
||||
virtual void visit(chart_axis & val);
|
||||
virtual void visit(chart_series & val);
|
||||
virtual void visit(chart_domain & val);
|
||||
virtual void visit(chart_data_point & val);
|
||||
virtual void visit(chart_mean_value & val);
|
||||
virtual void visit(chart_error_indicator & val);
|
||||
virtual void visit(chart_regression_curve & val);
|
||||
virtual void visit(chart_equation & val);
|
||||
virtual void visit(chart_categories & val);
|
||||
virtual void visit(chart_grid & val);
|
||||
virtual void visit(chart_wall & val);
|
||||
virtual void visit(chart_floor & val);
|
||||
virtual void visit(table_table & val);
|
||||
|
||||
virtual void visit(const table_table_rows & val);
|
||||
virtual void visit(const table_rows_no_group & val);
|
||||
virtual void visit(const table_table_row_group & val);
|
||||
virtual void visit(const table_table_header_rows& val);
|
||||
virtual void visit(table_table_header_rows & val);
|
||||
virtual void visit(table_table_rows & val);
|
||||
virtual void visit(table_table_row & val);
|
||||
virtual void visit(table_rows_no_group & val);
|
||||
virtual void visit(table_table_row_group & val);
|
||||
virtual void visit(table_table_header_rows & val);
|
||||
|
||||
virtual void visit(table_table_rows & val);
|
||||
virtual void visit(const table_table_row & val);
|
||||
|
||||
virtual void visit(const table_columns_no_group & val);
|
||||
virtual void visit(table_columns_no_group & val);
|
||||
virtual void visit(table_table_header_columns & val);
|
||||
virtual void visit(table_table_columns & val);
|
||||
virtual void visit(const table_table_column_group& val);
|
||||
virtual void visit(const table_table_column & val);
|
||||
|
||||
|
||||
virtual void visit(const table_table_cell& val);
|
||||
virtual void visit(const table_covered_table_cell& val);
|
||||
virtual void visit(table_table_columns & val);
|
||||
virtual void visit(table_table_column_group & val);
|
||||
virtual void visit(table_table_column & val);
|
||||
virtual void visit(table_table_cell & val);
|
||||
virtual void visit(table_covered_table_cell & val);
|
||||
|
||||
private:
|
||||
bool stop_;
|
||||
|
||||
146
ASCOfficeOdfFile/src/odf/datatypes/bibliography.cpp
Normal file
146
ASCOfficeOdfFile/src/odf/datatypes/bibliography.cpp
Normal file
@ -0,0 +1,146 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2018
|
||||
*
|
||||
* 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 <boost/algorithm/string.hpp>
|
||||
|
||||
#include "bibliography.h"
|
||||
|
||||
#include <ostream>
|
||||
|
||||
namespace cpdoccore { namespace odf_types {
|
||||
|
||||
std::wostream & operator << (std::wostream & _Wostream, const bibliography & _Val)
|
||||
{
|
||||
switch(_Val.get_type())
|
||||
{
|
||||
case bibliography::article:
|
||||
_Wostream << L"article";
|
||||
break;
|
||||
case bibliography::book:
|
||||
_Wostream << L"book";
|
||||
break;
|
||||
case bibliography::booklet:
|
||||
_Wostream << L"booklet";
|
||||
break;
|
||||
case bibliography::conference:
|
||||
_Wostream << L"conference";
|
||||
break;
|
||||
case bibliography::email:
|
||||
_Wostream << L"email";
|
||||
break;
|
||||
case bibliography::inbook:
|
||||
_Wostream << L"inbook";
|
||||
break;
|
||||
case bibliography::incollection:
|
||||
_Wostream << L"incollection";
|
||||
break;
|
||||
case bibliography::inproceedings:
|
||||
_Wostream << L"inproceedings";
|
||||
break;
|
||||
case bibliography::journal:
|
||||
_Wostream << L"journal";
|
||||
break;
|
||||
case bibliography::manual:
|
||||
_Wostream << L"manual";
|
||||
break;
|
||||
case bibliography::mastersthesis:
|
||||
_Wostream << L"mastersthesis";
|
||||
break;
|
||||
case bibliography::misc:
|
||||
_Wostream << L"misc";
|
||||
break;
|
||||
case bibliography::phdthesis:
|
||||
_Wostream << L"phdthesis";
|
||||
break;
|
||||
case bibliography::proceedings:
|
||||
_Wostream << L"proceedings";
|
||||
break;
|
||||
case bibliography::techreport:
|
||||
_Wostream << L"techreport";
|
||||
break;
|
||||
case bibliography::unpublished:
|
||||
_Wostream << L"unpublished";
|
||||
break;
|
||||
case bibliography::www:
|
||||
_Wostream << L"www";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return _Wostream;
|
||||
}
|
||||
|
||||
bibliography bibliography::parse(const std::wstring & Str)
|
||||
{
|
||||
std::wstring tmp = Str;
|
||||
boost::algorithm::to_lower(tmp);
|
||||
|
||||
if (tmp == L"article")
|
||||
return bibliography( article );
|
||||
if (tmp == L"book")
|
||||
return bibliography( book );
|
||||
if (tmp == L"booklet")
|
||||
return bibliography( booklet );
|
||||
if (tmp == L"conference")
|
||||
return bibliography( conference );
|
||||
if (tmp == L"email")
|
||||
return bibliography( email );
|
||||
if (tmp == L"inbook")
|
||||
return bibliography( inbook );
|
||||
if (tmp == L"incollection")
|
||||
return bibliography( incollection );
|
||||
if (tmp == L"inproceedings")
|
||||
return bibliography( inproceedings );
|
||||
if (tmp == L"journal")
|
||||
return bibliography( journal );
|
||||
if (tmp == L"manual")
|
||||
return bibliography( manual );
|
||||
if (tmp == L"mastersthesis")
|
||||
return bibliography( mastersthesis );
|
||||
if (tmp == L"misc")
|
||||
return bibliography( misc );
|
||||
if (tmp == L"phdthesis")
|
||||
return bibliography( phdthesis );
|
||||
if (tmp == L"proceedings")
|
||||
return bibliography( proceedings );
|
||||
if (tmp == L"techreport")
|
||||
return bibliography( techreport );
|
||||
if (tmp == L"unpublished")
|
||||
return bibliography( unpublished );
|
||||
if (tmp == L"www")
|
||||
return bibliography( www );
|
||||
else
|
||||
{
|
||||
return bibliography( book );
|
||||
}
|
||||
}
|
||||
|
||||
} }
|
||||
@ -1,51 +1,87 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2018
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
// stdafx.h : include file for standard system include files,
|
||||
// or project specific include files that are used frequently, but
|
||||
// are changed infrequently
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "targetver.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#pragma comment(lib, "../x64/Debug/PdfReader.lib")
|
||||
#pragma comment(lib, "../../SDK/lib/win_64/DEBUG/graphics.lib")
|
||||
#pragma comment(lib, "../../PdfWriter/x64/Debug/PdfWriter.lib")
|
||||
#else
|
||||
#pragma comment(lib, "../x64/Release/PdfReader.lib")
|
||||
#pragma comment(lib, "../../SDK/lib/win_64/graphics.lib")
|
||||
#pragma comment(lib, "../../PdfWriter/x64/Release/PdfWriter.lib")
|
||||
#endif
|
||||
|
||||
// TODO: reference additional headers your program requires here
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2018
|
||||
*
|
||||
* 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 <iosfwd>
|
||||
#include <string>
|
||||
#include "odfattributes.h"
|
||||
|
||||
namespace cpdoccore { namespace odf_types {
|
||||
|
||||
class bibliography
|
||||
{
|
||||
public:
|
||||
enum type
|
||||
{
|
||||
article,
|
||||
book,
|
||||
booklet,
|
||||
conference,
|
||||
email,
|
||||
inbook,
|
||||
incollection,
|
||||
inproceedings,
|
||||
journal,
|
||||
manual,
|
||||
mastersthesis,
|
||||
misc,
|
||||
phdthesis,
|
||||
proceedings,
|
||||
techreport,
|
||||
unpublished,
|
||||
www
|
||||
};
|
||||
|
||||
bibliography() : type_(book) {}
|
||||
|
||||
bibliography(type _Type) : type_(_Type)
|
||||
{}
|
||||
|
||||
type get_type() const
|
||||
{
|
||||
return type_;
|
||||
};
|
||||
|
||||
static bibliography parse(const std::wstring & Str);
|
||||
|
||||
private:
|
||||
type type_;
|
||||
|
||||
};
|
||||
|
||||
std::wostream & operator << (std::wostream & _Wostream, const bibliography & _Val);
|
||||
|
||||
}
|
||||
|
||||
APPLY_PARSE_XML_ATTRIBUTES(odf_types::bibliography);
|
||||
|
||||
}
|
||||
76
ASCOfficeOdfFile/src/odf/datatypes/commandtype.cpp
Normal file
76
ASCOfficeOdfFile/src/odf/datatypes/commandtype.cpp
Normal file
@ -0,0 +1,76 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2018
|
||||
*
|
||||
* 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 <boost/algorithm/string.hpp>
|
||||
|
||||
#include "commandtype.h"
|
||||
|
||||
#include <ostream>
|
||||
|
||||
namespace cpdoccore { namespace odf_types {
|
||||
|
||||
std::wostream & operator << (std::wostream & _Wostream, const command_type & _Val)
|
||||
{
|
||||
switch(_Val.get_type())
|
||||
{
|
||||
case command_type::command:
|
||||
_Wostream << L"command";
|
||||
break;
|
||||
case command_type::query:
|
||||
_Wostream << L"query";
|
||||
break;
|
||||
case command_type::table:
|
||||
_Wostream << L"table";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return _Wostream;
|
||||
}
|
||||
|
||||
command_type command_type::parse(const std::wstring & Str)
|
||||
{
|
||||
std::wstring tmp = Str;
|
||||
boost::algorithm::to_lower(tmp);
|
||||
|
||||
if (tmp == L"command")
|
||||
return command_type( command );
|
||||
else if (tmp == L"query")
|
||||
return command_type( query );
|
||||
else if (tmp == L"table")
|
||||
return command_type( table );
|
||||
else
|
||||
{
|
||||
return command_type( command );
|
||||
}
|
||||
}
|
||||
|
||||
} }
|
||||
@ -1,39 +1,74 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2018
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
// stdafx.cpp : source file that includes just the standard includes
|
||||
// PdfReaderTest.pch will be the pre-compiled header
|
||||
// stdafx.obj will contain the pre-compiled type information
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
// TODO: reference any additional headers you need in STDAFX.H
|
||||
// and not in this file
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2018
|
||||
*
|
||||
* 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 <iosfwd>
|
||||
#include <string>
|
||||
#include "odfattributes.h"
|
||||
|
||||
|
||||
namespace cpdoccore { namespace odf_types {
|
||||
|
||||
class command_type
|
||||
{
|
||||
public:
|
||||
enum type
|
||||
{
|
||||
command,
|
||||
query,
|
||||
table
|
||||
};
|
||||
|
||||
command_type() {}
|
||||
|
||||
command_type(type _Type) : type_(_Type)
|
||||
{}
|
||||
|
||||
type get_type() const
|
||||
{
|
||||
return type_;
|
||||
};
|
||||
|
||||
static command_type parse(const std::wstring & Str);
|
||||
|
||||
private:
|
||||
type type_;
|
||||
|
||||
};
|
||||
|
||||
std::wostream & operator << (std::wostream & _Wostream, const command_type & _Val);
|
||||
|
||||
}
|
||||
|
||||
APPLY_PARSE_XML_ATTRIBUTES(odf_types::command_type);
|
||||
|
||||
}
|
||||
@ -49,6 +49,7 @@
|
||||
#include "styleverticalpos.h"
|
||||
#include "stylehorizontalpos.h"
|
||||
#include "stylehorizontalrel.h"
|
||||
#include "stylenumformat.h"
|
||||
#include "percentorscale.h"
|
||||
#include "anchortype.h"
|
||||
#include "linewidth.h"
|
||||
@ -331,8 +332,8 @@ public:
|
||||
void apply_from(const common_num_format_attlist & Other);
|
||||
void serialize(CP_ATTR_NODE);
|
||||
|
||||
_CP_OPT(std::wstring) style_num_format_;
|
||||
_CP_OPT(Bool) style_num_letter_sync_;
|
||||
_CP_OPT(odf_types::style_numformat) style_num_format_;
|
||||
_CP_OPT(Bool) style_num_letter_sync_;
|
||||
|
||||
};
|
||||
|
||||
|
||||
140
ASCOfficeOdfFile/src/odf/datatypes/stylenumformat.cpp
Normal file
140
ASCOfficeOdfFile/src/odf/datatypes/stylenumformat.cpp
Normal file
@ -0,0 +1,140 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2018
|
||||
*
|
||||
* 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 "stylenumformat.h"
|
||||
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <ostream>
|
||||
|
||||
namespace cpdoccore { namespace odf_types {
|
||||
|
||||
std::wostream & operator << (std::wostream & _Wostream, const style_numformat & _Val)
|
||||
{
|
||||
switch(_Val.get_type())
|
||||
{
|
||||
case style_numformat::arabic:
|
||||
_Wostream << L"1";
|
||||
break;
|
||||
case style_numformat::romanUc:
|
||||
_Wostream << L"I";
|
||||
break;
|
||||
case style_numformat::romanLc:
|
||||
_Wostream << L"i";
|
||||
break;
|
||||
case style_numformat::alphaUc:
|
||||
_Wostream << L"A";
|
||||
break;
|
||||
case style_numformat::alphaLc:
|
||||
_Wostream << L"a";
|
||||
break;
|
||||
case style_numformat::aiueo:
|
||||
_Wostream << L"ア, イ, ウ, ...";
|
||||
break;
|
||||
case style_numformat::chineseCounting:
|
||||
_Wostream << L"イ, ロ, ハ, ...";
|
||||
break;
|
||||
case style_numformat::chineseLegal:
|
||||
_Wostream << L"一, 二, 三, ...";
|
||||
break;
|
||||
case style_numformat::ideographLegal:
|
||||
_Wostream << L"壹, 貳, 參, ...";
|
||||
break;
|
||||
case style_numformat::ideographTraditional:
|
||||
_Wostream << L"甲, 乙, 丙, ...";
|
||||
break;
|
||||
case style_numformat::ideographZodiac:
|
||||
_Wostream << L"子, 丑, 寅, ...";
|
||||
break;
|
||||
case style_numformat::ideographZodiacTraditional:
|
||||
_Wostream << L"甲子, 乙丑, 丙寅, ...";
|
||||
break;
|
||||
case style_numformat::iroha:
|
||||
_Wostream << L"イ, ロ, ハ, ...";
|
||||
break;
|
||||
case style_numformat::koreanDigital:
|
||||
_Wostream << L"일, 이, 삼, ...";
|
||||
break;
|
||||
case style_numformat::russianLo:
|
||||
_Wostream << L"А, Б, .., Аа, Аб, ... (ru)";
|
||||
break;
|
||||
case style_numformat::russianUp:
|
||||
_Wostream << L"А, Б, .., Аа, Аб, ... (ru)";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return _Wostream;
|
||||
}
|
||||
|
||||
style_numformat style_numformat::parse(const std::wstring & Str)
|
||||
{
|
||||
std::wstring tmp = Str;
|
||||
boost::algorithm::to_lower(tmp);
|
||||
|
||||
if (tmp == L"1")
|
||||
return style_numformat( arabic );
|
||||
else if (tmp == L"I")
|
||||
return style_numformat( romanUc );
|
||||
else if (tmp == L"i")
|
||||
return style_numformat( romanLc );
|
||||
else if (tmp == L"A")
|
||||
return style_numformat( alphaUc );
|
||||
else if (tmp == L"a")
|
||||
return style_numformat( alphaLc );
|
||||
else if (tmp == L"А, Б, .., Аа, Аб, ... (ru)")
|
||||
return style_numformat( russianUp );
|
||||
else if (tmp == L"일, 이, 삼, ...")
|
||||
return style_numformat( koreanDigital );
|
||||
else if (tmp == L"イ, ロ, ハ, ...")
|
||||
return style_numformat( iroha );
|
||||
else if (tmp == L"甲, 乙, 丙, ...")
|
||||
return style_numformat( ideographTraditional );
|
||||
else if (tmp == L"甲子, 乙丑, 丙寅, ...")
|
||||
return style_numformat( ideographZodiacTraditional );
|
||||
else if (tmp == L"子, 丑, 寅, ...")
|
||||
return style_numformat( ideographZodiac );
|
||||
else if (tmp == L"壹, 貳, 參, ...")
|
||||
return style_numformat( ideographLegal );
|
||||
else if (tmp == L"一, 二, 三, ...")
|
||||
return style_numformat( chineseLegal );
|
||||
else if (tmp == L"イ, ロ, ハ, ...")
|
||||
return style_numformat( chineseCounting );
|
||||
else if (tmp == L"ア, イ, ウ, ...")
|
||||
return style_numformat( aiueo );
|
||||
|
||||
else
|
||||
{
|
||||
return style_numformat( arabic );
|
||||
}
|
||||
}
|
||||
|
||||
} }
|
||||
94
ASCOfficeOdfFile/src/odf/datatypes/stylenumformat.h
Normal file
94
ASCOfficeOdfFile/src/odf/datatypes/stylenumformat.h
Normal file
@ -0,0 +1,94 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2018
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
#ifndef _CPDOCCORE_ODF_STYLENUMFORMAT_H_
|
||||
#define _CPDOCCORE_ODF_STYLENUMFORMAT_H_
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include <iosfwd>
|
||||
#include <string>
|
||||
#include "odfattributes.h"
|
||||
|
||||
|
||||
namespace cpdoccore { namespace odf_types {
|
||||
|
||||
class style_numformat
|
||||
{
|
||||
public:
|
||||
enum type
|
||||
{
|
||||
arabic,
|
||||
romanUc,
|
||||
romanLc,
|
||||
alphaUc,
|
||||
alphaLc,
|
||||
aiueo,
|
||||
chineseCounting,
|
||||
chineseLegal,
|
||||
ideographLegal,
|
||||
ideographTraditional,
|
||||
ideographZodiac,
|
||||
ideographZodiacTraditional,
|
||||
iroha,
|
||||
koreanDigital,
|
||||
russianLo,
|
||||
russianUp
|
||||
};
|
||||
|
||||
style_numformat() {}
|
||||
|
||||
style_numformat(type _Type) : type_(_Type)
|
||||
{}
|
||||
|
||||
type get_type() const
|
||||
{
|
||||
return type_;
|
||||
};
|
||||
|
||||
static style_numformat parse(const std::wstring & Str);
|
||||
|
||||
private:
|
||||
type type_;
|
||||
|
||||
};
|
||||
|
||||
std::wostream & operator << (std::wostream & _Wostream, const style_numformat & _Val);
|
||||
|
||||
}
|
||||
|
||||
APPLY_PARSE_XML_ATTRIBUTES(odf_types::style_numformat);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -58,6 +58,8 @@ namespace _image_file_
|
||||
{
|
||||
bool GetResolution(const wchar_t* fileName, int & Width, int &Height, NSFonts::IApplicationFonts* appFonts)
|
||||
{
|
||||
if (!appFonts) return false;
|
||||
|
||||
CBgraFrame image;
|
||||
MetaFile::IMetaFile* meta_file = MetaFile::Create(appFonts);
|
||||
|
||||
@ -412,11 +414,11 @@ void Compute_GraphicFill(const common_draw_fill_attlist & props, const office_el
|
||||
{
|
||||
if (style_background_image * image = dynamic_cast<style_background_image *>(style_image.get()))
|
||||
{
|
||||
if ((image) && (image->common_xlink_attlist_))
|
||||
if ((image) && (image->xlink_attlist_))
|
||||
{
|
||||
fill.type = 2;
|
||||
fill.bitmap = oox::oox_bitmap_fill::create();
|
||||
fill.bitmap->xlink_href_ = image->common_xlink_attlist_->href_.get_value_or(L"");
|
||||
fill.bitmap->xlink_href_ = image->xlink_attlist_->href_.get_value_or(L"");
|
||||
if (image->style_repeat_)
|
||||
{
|
||||
switch(image->style_repeat_->get_type())
|
||||
@ -550,7 +552,7 @@ void draw_a::add_child_element( xml::sax * Reader, const std::wstring & Ns, cons
|
||||
}
|
||||
void draw_a::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
common_xlink_attlist_.add_attributes(Attributes);
|
||||
xlink_attlist_.add_attributes(Attributes);
|
||||
|
||||
CP_APPLY_ATTR(L"office:name" , office_name_ , std::wstring(L""));
|
||||
CP_APPLY_ATTR(L"office:target-frame-name" , office_target_frame_name_);
|
||||
@ -562,7 +564,7 @@ void draw_a::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
void draw_a::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
{
|
||||
Context.get_drawing_context().start_action(L"");
|
||||
Context.get_drawing_context().set_link(common_xlink_attlist_.href_.get_value_or(L""));
|
||||
Context.get_drawing_context().set_link(xlink_attlist_.href_.get_value_or(L""));
|
||||
Context.get_drawing_context().end_action();
|
||||
|
||||
for (size_t i = 0; i < content_.size(); i++)
|
||||
@ -573,7 +575,7 @@ void draw_a::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
void draw_a::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
{
|
||||
Context.get_slide_context().start_action(L"");
|
||||
Context.get_slide_context().set_link(common_xlink_attlist_.href_.get_value_or(L""));
|
||||
Context.get_slide_context().set_link(xlink_attlist_.href_.get_value_or(L""));
|
||||
Context.get_slide_context().end_action();
|
||||
|
||||
for (size_t i = 0; i < content_.size(); i++)
|
||||
@ -583,7 +585,7 @@ void draw_a::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
}
|
||||
void draw_a::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
std::wstring rId = Context.add_hyperlink(common_xlink_attlist_.href_.get_value_or(L""), true);//гиперлинк с объекта, а не с текста ..
|
||||
std::wstring rId = Context.add_hyperlink(xlink_attlist_.href_.get_value_or(L""), true);//гиперлинк с объекта, а не с текста ..
|
||||
|
||||
for (size_t i = 0; i < content_.size(); i++)
|
||||
{
|
||||
|
||||
@ -99,7 +99,7 @@ public:
|
||||
friend class odf_document;
|
||||
|
||||
private:
|
||||
odf_types::common_xlink_attlist common_xlink_attlist_;
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
|
||||
std::wstring office_name_;
|
||||
_CP_OPT(odf_types::target_frame_name) office_target_frame_name_;
|
||||
|
||||
@ -90,7 +90,7 @@ const wchar_t * draw_image::name = L"image";
|
||||
void draw_image::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
draw_image_attlist_.add_attributes(Attributes);
|
||||
common_xlink_attlist_.add_attributes(Attributes);
|
||||
xlink_attlist_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
void draw_image::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
@ -122,7 +122,7 @@ std::wostream & draw_chart::text_to_stream(std::wostream & _Wostream) const
|
||||
void draw_chart::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
draw_chart_attlist_.add_attributes(Attributes);
|
||||
common_xlink_attlist_.add_attributes(Attributes);
|
||||
xlink_attlist_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
void draw_chart::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
@ -266,7 +266,7 @@ const wchar_t * draw_object::name = L"object";
|
||||
void draw_object::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
draw_object_attlist_.add_attributes(Attributes);
|
||||
common_xlink_attlist_.add_attributes(Attributes);
|
||||
xlink_attlist_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
void draw_object::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
@ -278,7 +278,7 @@ void draw_object::add_child_element( xml::sax * Reader, const std::wstring & Ns,
|
||||
}
|
||||
}
|
||||
|
||||
// draw:object
|
||||
// draw:object-ole
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
const wchar_t * draw_object_ole::ns = L"draw";
|
||||
const wchar_t * draw_object_ole::name = L"object-ole";
|
||||
@ -287,7 +287,7 @@ void draw_object_ole::add_attributes( const xml::attributes_wc_ptr & Attributes
|
||||
{
|
||||
CP_APPLY_ATTR(L"draw:class-id", draw_class_id_);
|
||||
|
||||
common_xlink_attlist_.add_attributes(Attributes);
|
||||
xlink_attlist_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
void draw_object_ole::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
@ -362,7 +362,7 @@ std::wstring draw_object::office_convert(odf_document_ptr odfDocument, int type)
|
||||
{
|
||||
outputDocx.write(objectOutPath);
|
||||
|
||||
href_result = common_xlink_attlist_.href_.get_value_or(L"Object");
|
||||
href_result = xlink_attlist_.href_.get_value_or(L"Object");
|
||||
int pos = href_result.find(L"./");
|
||||
if (pos >= 0) href_result = href_result.substr(2);
|
||||
|
||||
@ -381,7 +381,7 @@ std::wstring draw_object::office_convert(odf_document_ptr odfDocument, int type)
|
||||
{
|
||||
outputXlsx.write(objectOutPath);
|
||||
|
||||
href_result = common_xlink_attlist_.href_.get_value_or(L"Object");
|
||||
href_result = xlink_attlist_.href_.get_value_or(L"Object");
|
||||
int pos = href_result.find(L"./");
|
||||
if (pos >= 0) href_result = href_result.substr(2);
|
||||
|
||||
@ -393,7 +393,7 @@ std::wstring draw_object::office_convert(odf_document_ptr odfDocument, int type)
|
||||
std::wstring temp_file = folderPath + FILE_SEPARATOR_STR + href_result;
|
||||
|
||||
COfficeUtils oCOfficeUtils(NULL);
|
||||
oCOfficeUtils.CompressFileOrDirectory(objectOutPath.c_str(), temp_file.c_str(), true);
|
||||
oCOfficeUtils.CompressFileOrDirectory(objectOutPath, temp_file, true);
|
||||
}
|
||||
NSDirectory::DeleteDirectory(objectOutPath);
|
||||
|
||||
@ -423,14 +423,36 @@ void draw_plugin::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"draw:mime-type", draw_mime_type_);
|
||||
|
||||
common_xlink_attlist_.add_attributes(Attributes);
|
||||
xlink_attlist_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
void draw_plugin::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
}
|
||||
// draw:control
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
const wchar_t * draw_control::ns = L"draw";
|
||||
const wchar_t * draw_control::name = L"control";
|
||||
|
||||
void draw_control::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"xml:id", xml_id_);
|
||||
CP_APPLY_ATTR(L"draw:caption-id", caption_id_);
|
||||
CP_APPLY_ATTR(L"draw:control", control_id_);
|
||||
|
||||
draw_attlists_.shape_with_text_and_styles_.add_attributes(Attributes);
|
||||
draw_attlists_.position_.add_attributes(Attributes);
|
||||
draw_attlists_.rel_size_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
void draw_control::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
if CP_CHECK_NAME(L"draw", L"glue-point")
|
||||
{
|
||||
CP_CREATE_ELEMENT(draw_glue_point_);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -81,7 +81,7 @@ private:
|
||||
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
|
||||
|
||||
draw_image_attlist draw_image_attlist_;
|
||||
odf_types::common_xlink_attlist common_xlink_attlist_;
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
|
||||
office_element_ptr office_binary_data_;
|
||||
|
||||
@ -121,7 +121,7 @@ private:
|
||||
|
||||
private:
|
||||
draw_chart_attlist draw_chart_attlist_;
|
||||
odf_types::common_xlink_attlist common_xlink_attlist_;
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
office_element_ptr_array content_;
|
||||
|
||||
//office_element_ptr title_;
|
||||
@ -294,7 +294,7 @@ public:
|
||||
virtual void pptx_convert (oox::pptx_conversion_context & Context);
|
||||
|
||||
draw_object_attlist draw_object_attlist_;
|
||||
odf_types::common_xlink_attlist common_xlink_attlist_;
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
|
||||
odf_document_ptr odf_document_;
|
||||
|
||||
@ -320,7 +320,7 @@ public:
|
||||
virtual void xlsx_convert(oox::xlsx_conversion_context & Context);
|
||||
virtual void pptx_convert(oox::pptx_conversion_context & Context);
|
||||
|
||||
odf_types::common_xlink_attlist common_xlink_attlist_;
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
_CP_OPT(std::wstring) draw_class_id_;
|
||||
|
||||
private:
|
||||
@ -331,7 +331,7 @@ private:
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(draw_object_ole);
|
||||
|
||||
//----------------------------------------------------------------------------------------------
|
||||
class draw_param : public office_element_impl<draw_param>
|
||||
{
|
||||
public:
|
||||
@ -354,7 +354,7 @@ private:
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(draw_param);
|
||||
|
||||
//----------------------------------------------------------------------------------------------
|
||||
class draw_plugin : public office_element_impl<draw_plugin>
|
||||
{
|
||||
public:
|
||||
@ -368,7 +368,7 @@ public:
|
||||
virtual void xlsx_convert(oox::xlsx_conversion_context & Context){}
|
||||
virtual void pptx_convert(oox::pptx_conversion_context & Context);
|
||||
|
||||
odf_types::common_xlink_attlist common_xlink_attlist_;
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
_CP_OPT(std::wstring) draw_mime_type_;
|
||||
|
||||
office_element_ptr_array content_;
|
||||
@ -377,9 +377,34 @@ 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(draw_plugin);
|
||||
//----------------------------------------------------------------------------------------------
|
||||
class draw_control : public office_element_impl<draw_control>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeDrawControl;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual void docx_convert(oox::docx_conversion_context & Context);
|
||||
virtual void xlsx_convert(oox::xlsx_conversion_context & Context){}
|
||||
virtual void pptx_convert(oox::pptx_conversion_context & Context){}
|
||||
|
||||
odf_types::union_common_draw_attlists draw_attlists_;
|
||||
_CP_OPT(std::wstring) xml_id_;
|
||||
_CP_OPT(std::wstring) caption_id_;
|
||||
_CP_OPT(std::wstring) control_id_;
|
||||
|
||||
office_element_ptr draw_glue_point_;
|
||||
//<svg:desc>
|
||||
//<svg:title>
|
||||
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(draw_control);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -30,6 +30,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "office_forms.h"
|
||||
#include "draw_frame.h"
|
||||
|
||||
#include <ostream>
|
||||
@ -39,6 +40,7 @@
|
||||
#include <boost/regex.hpp>
|
||||
|
||||
#include <cpdoccore/odf/odf_document.h>
|
||||
#include <cpdoccore/xml/utils.h>
|
||||
|
||||
#include "serialize_elements.h"
|
||||
|
||||
@ -46,7 +48,10 @@
|
||||
#include "odf_document_impl.h"
|
||||
|
||||
#include "draw_common.h"
|
||||
|
||||
#include "../docx/docx_drawing.h"
|
||||
#include "../docx/xlsx_package.h"
|
||||
|
||||
#include "chart_build_oox.h"
|
||||
|
||||
#include "calcs_styles.h"
|
||||
@ -55,6 +60,7 @@
|
||||
#include "datatypes/borderstyle.h"
|
||||
|
||||
#include "../../../Common/DocxFormat/Source/XML/Utils.h"
|
||||
#include "../../../OfficeUtils/src/OfficeUtils.h"
|
||||
|
||||
namespace cpdoccore {
|
||||
|
||||
@ -880,7 +886,7 @@ void common_draw_docx_convert(oox::docx_conversion_context & Context, union_comm
|
||||
if ((drawing->fill.bitmap) && (drawing->fill.bitmap->rId.empty()))
|
||||
{
|
||||
std::wstring href = drawing->fill.bitmap->xlink_href_;
|
||||
drawing->fill.bitmap->rId = Context.add_mediaitem(href, oox::typeImage, drawing->fill.bitmap->isInternal, href);
|
||||
drawing->fill.bitmap->rId = Context.get_mediaitems().add_or_find(href, oox::typeImage, drawing->fill.bitmap->isInternal, href);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
@ -1093,10 +1099,10 @@ void draw_shape::docx_convert(oox::docx_conversion_context & Context)
|
||||
|
||||
void draw_image::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
if (!common_xlink_attlist_.href_)
|
||||
if (!xlink_attlist_.href_)
|
||||
return;
|
||||
|
||||
std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
|
||||
std::wstring href = xlink_attlist_.href_.get_value_or(L"");
|
||||
int pos_replaicement = href.find(L"ObjectReplacements");
|
||||
|
||||
const draw_frame * frame = Context.get_drawing_context().get_current_frame();//owner
|
||||
@ -1155,7 +1161,7 @@ void draw_image::docx_convert(oox::docx_conversion_context & Context)
|
||||
drawing->fill.bitmap = oox::oox_bitmap_fill::create();
|
||||
drawing->fill.type = 2;
|
||||
drawing->fill.bitmap->isInternal = false;
|
||||
drawing->fill.bitmap->rId = Context.add_mediaitem(href, oox::typeImage, drawing->fill.bitmap->isInternal, href);
|
||||
drawing->fill.bitmap->rId = Context.get_mediaitems().add_or_find(href, oox::typeImage, drawing->fill.bitmap->isInternal, href);
|
||||
drawing->fill.bitmap->bStretch = true;
|
||||
|
||||
const std::wstring styleName = frame->common_draw_attlists_.shape_with_text_and_styles_.
|
||||
@ -1241,10 +1247,13 @@ void draw_text_box::docx_convert(oox::docx_conversion_context & Context)
|
||||
size_t min_y = get_value_emu(draw_text_box_attlist_.fo_min_height_->get_length());
|
||||
if (drawing->cy < min_y)
|
||||
{
|
||||
auto_fit_text = true;
|
||||
drawing->cy = min_y;
|
||||
}
|
||||
if (drawing->cy < 36000) auto_fit_shape = true;
|
||||
//if (drawing->cy < 36000)
|
||||
//{
|
||||
// auto_fit_shape = true;
|
||||
//}
|
||||
auto_fit_shape = true;
|
||||
}
|
||||
|
||||
|
||||
@ -1256,7 +1265,11 @@ void draw_text_box::docx_convert(oox::docx_conversion_context & Context)
|
||||
auto_fit_text = true;
|
||||
drawing->cx = min_x;
|
||||
}
|
||||
if (drawing->cx < 36000) auto_fit_shape = true;
|
||||
if (drawing->cx < 36000)
|
||||
{
|
||||
auto_fit_text = false;
|
||||
auto_fit_shape = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1457,13 +1470,13 @@ void draw_object::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
try
|
||||
{
|
||||
std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
|
||||
std::wstring href = xlink_attlist_.href_.get_value_or(L"");
|
||||
std::wstring tempPath = Context.root()->get_temp_folder();
|
||||
std::wstring odfPath = Context.root()->get_folder();
|
||||
|
||||
if (!odf_document_ && !href.empty())
|
||||
{
|
||||
std::wstring tempPath = Context.root()->get_temp_folder();
|
||||
std::wstring folderPath = Context.root()->get_folder();
|
||||
std::wstring objectPath = folderPath + FILE_SEPARATOR_STR + href;
|
||||
std::wstring objectPath = odfPath + FILE_SEPARATOR_STR + href;
|
||||
|
||||
// normalize path ???? todooo
|
||||
XmlUtils::replace_all( objectPath, FILE_SEPARATOR_STR + std::wstring(L"./"), FILE_SEPARATOR_STR);
|
||||
@ -1481,6 +1494,30 @@ void draw_object::docx_convert(oox::docx_conversion_context & Context)
|
||||
process_build_object process_build_object_(objectBuild, odf_document_->odf_context());
|
||||
contentSubDoc->accept(process_build_object_);
|
||||
|
||||
if (objectBuild.table_table_)
|
||||
{
|
||||
oox::xlsx_conversion_context xlsx_context(odf_document_.get());
|
||||
cpdoccore::oox::package::xlsx_document outputXlsx;
|
||||
|
||||
xlsx_context.set_output_document (&outputXlsx);
|
||||
|
||||
xlsx_context.start_document();
|
||||
objectBuild.table_table_->xlsx_convert(xlsx_context);
|
||||
xlsx_context.end_document();
|
||||
|
||||
std::wstring href_folder = tempPath + FILE_SEPARATOR_STR + L"temp_xlsx";
|
||||
NSDirectory::CreateDirectory(href_folder);
|
||||
outputXlsx.write(href_folder);
|
||||
|
||||
std::wstring href = L"Microsoft_Excel_Worksheet_" + std::to_wstring(Context.get_mediaitems().count_object + 1) + L".xlsx";
|
||||
|
||||
COfficeUtils oCOfficeUtils(NULL);
|
||||
if (S_OK == oCOfficeUtils.CompressFileOrDirectory(href_folder, odfPath + FILE_SEPARATOR_STR + href, true))
|
||||
{
|
||||
objectBuild.embeddedData = href;
|
||||
}
|
||||
}
|
||||
|
||||
objectBuild.docx_convert(Context);
|
||||
|
||||
frame = Context.get_drawing_context().get_current_frame(); //owner
|
||||
@ -1498,7 +1535,7 @@ void draw_object::docx_convert(oox::docx_conversion_context & Context)
|
||||
drawing->type = oox::typeChart;
|
||||
|
||||
bool isMediaInternal = true;
|
||||
drawing->objectId = Context.add_mediaitem(href, drawing->type, isMediaInternal, href);
|
||||
drawing->objectId = Context.get_mediaitems().add_or_find(href, drawing->type, isMediaInternal, href);
|
||||
}
|
||||
else if (objectBuild.object_type_ == 2 ) //embedded text
|
||||
{
|
||||
@ -1556,7 +1593,7 @@ void draw_object::docx_convert(oox::docx_conversion_context & Context)
|
||||
bool isMediaInternal = true;
|
||||
|
||||
href += FILE_SEPARATOR_STR + href_new;
|
||||
drawing->objectId = Context.add_mediaitem(href, drawing->type, isMediaInternal, href);
|
||||
drawing->objectId = Context.get_mediaitems().add_or_find(href, drawing->type, isMediaInternal, href);
|
||||
drawing->objectProgId = L"Excel.Sheet.12";
|
||||
}
|
||||
}
|
||||
@ -1579,7 +1616,7 @@ void draw_object_ole::docx_convert(oox::docx_conversion_context & Context)
|
||||
use_image_replace = true;
|
||||
|
||||
//------------------------------------------------
|
||||
std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
|
||||
std::wstring href = xlink_attlist_.href_.get_value_or(L"");
|
||||
std::wstring folderPath = Context.root()->get_folder();
|
||||
std::wstring objectPath = folderPath + FILE_SEPARATOR_STR + href;
|
||||
|
||||
@ -1594,10 +1631,141 @@ void draw_object_ole::docx_convert(oox::docx_conversion_context & Context)
|
||||
drawing->type = oox::typeOleObject;
|
||||
|
||||
bool isMediaInternal = true;
|
||||
drawing->objectId = Context.add_mediaitem(href, drawing->type, isMediaInternal, href);
|
||||
drawing->objectId = Context.get_mediaitems().add_or_find(href, drawing->type, isMediaInternal, href);
|
||||
|
||||
drawing->objectProgId = detectObject(objectPath);
|
||||
}
|
||||
void draw_control::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
if (!control_id_) return;
|
||||
|
||||
oox::text_forms_context::_state & state = Context.get_forms_context().get_state_element(*control_id_);
|
||||
if (state.id.empty()) return;
|
||||
|
||||
Context.get_drawing_context().start_shape(NULL);
|
||||
Context.get_drawing_context().add_name_object(state.name.empty() ? L"Control" : state.name);
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
oox::_docx_drawing drawing = oox::_docx_drawing();
|
||||
|
||||
drawing.type = oox::typeShape;
|
||||
drawing.id = Context.get_drawing_context().get_current_shape_id();
|
||||
drawing.name = Context.get_drawing_context().get_current_object_name();
|
||||
drawing.inGroup = Context.get_drawing_context().in_group();
|
||||
drawing.sub_type = 1;
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------
|
||||
oox::StreamsManPtr prev = Context.get_stream_man();
|
||||
|
||||
std::wstringstream temp_stream(Context.get_drawing_context().get_text_stream_shape());
|
||||
Context.set_stream_man( boost::shared_ptr<oox::streams_man>( new oox::streams_man(temp_stream) ));
|
||||
|
||||
bool pState = Context.get_paragraph_state ();
|
||||
bool runState = Context.get_run_state ();
|
||||
bool keepState = Context.get_paragraph_keep ();
|
||||
|
||||
Context.set_run_state (false);
|
||||
Context.set_paragraph_state (false);
|
||||
|
||||
bool drState = Context.get_drawing_state_content();
|
||||
|
||||
Context.set_drawing_state_content(true);
|
||||
|
||||
Context.start_paragraph(false);
|
||||
|
||||
if (draw_attlists_.shape_with_text_and_styles_.common_shape_draw_attlist_.draw_text_style_name_)
|
||||
{
|
||||
text::paragraph_attrs attrs_;
|
||||
attrs_.text_style_name_ = *draw_attlists_.shape_with_text_and_styles_.common_shape_draw_attlist_.draw_text_style_name_;
|
||||
|
||||
int textStyle = Context.process_paragraph_attr(&attrs_);
|
||||
}
|
||||
|
||||
if (state.element)
|
||||
{
|
||||
state.element->docx_convert_sdt(Context, this);
|
||||
//state.element->docx_convert_field(Context, this);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::wstring text;
|
||||
if (!state.label.empty()) text = state.label;
|
||||
else if (!state.value.empty()) text = state.value;
|
||||
|
||||
Context.add_new_run(L"");
|
||||
Context.output_stream() << L"<w:t xml:space=\"preserve\">";
|
||||
Context.output_stream() << xml::utils::replace_text_to_xml( text );
|
||||
Context.output_stream() << L"</w:t>";
|
||||
Context.finish_run();
|
||||
}
|
||||
Context.finish_paragraph();
|
||||
|
||||
Context.get_drawing_context().get_text_stream_shape() = temp_stream.str();
|
||||
Context.set_stream_man(prev);
|
||||
|
||||
Context.set_run_state (runState);
|
||||
Context.set_paragraph_state (pState);
|
||||
Context.set_drawing_state_content (drState);
|
||||
Context.set_paragraph_keep (keepState);
|
||||
|
||||
const std::wstring & content = Context.get_drawing_context().get_text_stream_shape();
|
||||
|
||||
drawing.additional.push_back(_property(L"text-content",content));
|
||||
Context.get_drawing_context().clear_stream_shape();
|
||||
|
||||
drawing.additional.push_back(_property(L"text-padding-left", 0.));
|
||||
drawing.additional.push_back(_property(L"text-padding-top", 0.));
|
||||
drawing.additional.push_back(_property(L"text-padding-right", 0.));
|
||||
drawing.additional.push_back(_property(L"text-padding-bottom", 0.));
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------
|
||||
|
||||
/////////
|
||||
common_draw_docx_convert(Context, draw_attlists_, &drawing);
|
||||
/////////
|
||||
|
||||
std::wostream & strm = Context.output_stream();
|
||||
|
||||
pState = Context.get_paragraph_state();
|
||||
runState = Context.get_run_state();
|
||||
keepState = Context.get_paragraph_keep();
|
||||
|
||||
//Context.set_run_state (false);
|
||||
Context.set_paragraph_state (false);
|
||||
|
||||
bool new_run = false;
|
||||
|
||||
if ((pState == false && Context.get_drawing_context().get_current_level() == 1) || (Context.get_drawing_context().in_group()))
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!Context.get_drawing_context().in_group() && !runState)
|
||||
{
|
||||
if (!pState)
|
||||
{
|
||||
Context.start_paragraph();
|
||||
}
|
||||
Context.add_new_run(L"");
|
||||
|
||||
new_run = true;
|
||||
}
|
||||
}
|
||||
|
||||
drawing.serialize(strm/*, Context.get_drawing_state_content()*/);
|
||||
|
||||
if (new_run)
|
||||
{
|
||||
Context.finish_run();
|
||||
if (!pState)
|
||||
{
|
||||
Context.finish_paragraph();
|
||||
}
|
||||
}
|
||||
|
||||
Context.set_paragraph_state(pState);
|
||||
|
||||
Context.get_drawing_context().stop_shape();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -39,11 +39,10 @@
|
||||
#include <boost/regex.h>
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/odf/odf_document.h>
|
||||
|
||||
#include "serialize_elements.h"
|
||||
#include <cpdoccore/odf/odf_document.h>
|
||||
|
||||
#include "style_graphic_properties.h"
|
||||
|
||||
@ -53,9 +52,11 @@
|
||||
#include "odf_document_impl.h"
|
||||
|
||||
#include "calcs_styles.h"
|
||||
#include "../docx/pptx_drawing.h"
|
||||
#include "chart_build_oox.h"
|
||||
|
||||
#include "../docx/pptx_drawing.h"
|
||||
#include "../docx/xlsx_package.h"
|
||||
|
||||
#include "datatypes/length.h"
|
||||
#include "datatypes/borderstyle.h"
|
||||
|
||||
@ -208,7 +209,7 @@ void draw_frame::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
|
||||
void draw_image::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
{
|
||||
const std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
|
||||
const std::wstring href = xlink_attlist_.href_.get_value_or(L"");
|
||||
|
||||
Context.get_slide_context().set_image(href);
|
||||
////////////////////////////////////в принципе достаточно общая часть ...
|
||||
@ -227,7 +228,7 @@ void draw_image::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
}
|
||||
void draw_chart::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
{
|
||||
const std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
|
||||
const std::wstring href = xlink_attlist_.href_.get_value_or(L"");
|
||||
Context.get_slide_context().set_chart(href);
|
||||
|
||||
for (size_t i = 0; i < content_.size(); i++)
|
||||
@ -257,13 +258,13 @@ void draw_object::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
{
|
||||
try
|
||||
{
|
||||
std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
|
||||
std::wstring tempPath = Context.root()->get_temp_folder();
|
||||
std::wstring odfPath = Context.root()->get_folder();
|
||||
std::wstring href = xlink_attlist_.href_.get_value_or(L"");
|
||||
|
||||
if (!odf_document_ && !href.empty())
|
||||
{
|
||||
std::wstring tempPath = Context.root()->get_temp_folder();
|
||||
std::wstring folderPath = Context.root()->get_folder();
|
||||
std::wstring objectPath = folderPath + FILE_SEPARATOR_STR + href;
|
||||
std::wstring objectPath = odfPath + FILE_SEPARATOR_STR + href;
|
||||
|
||||
// normalize path ???? todooo
|
||||
XmlUtils::replace_all( objectPath, FILE_SEPARATOR_STR + std::wstring(L"./"), FILE_SEPARATOR_STR);
|
||||
@ -282,11 +283,34 @@ void draw_object::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
|
||||
process_build_object process_build_object_(objectBuild, odf_document_->odf_context() );
|
||||
contentSubDoc->accept(process_build_object_);
|
||||
|
||||
if (objectBuild.table_table_)
|
||||
{
|
||||
oox::xlsx_conversion_context xlsx_context(odf_document_.get());
|
||||
cpdoccore::oox::package::xlsx_document outputXlsx;
|
||||
|
||||
xlsx_context.set_output_document (&outputXlsx);
|
||||
|
||||
xlsx_context.start_document();
|
||||
objectBuild.table_table_->xlsx_convert(xlsx_context);
|
||||
xlsx_context.end_document();
|
||||
|
||||
std::wstring href_folder = tempPath + FILE_SEPARATOR_STR + L"temp_xlsx";
|
||||
NSDirectory::CreateDirectory(href_folder);
|
||||
outputXlsx.write(href_folder);
|
||||
|
||||
std::wstring href = L"Microsoft_Excel_Worksheet_" + std::to_wstring(Context.get_mediaitems().count_object + 1) + L".xlsx";
|
||||
|
||||
COfficeUtils oCOfficeUtils(NULL);
|
||||
if (S_OK == oCOfficeUtils.CompressFileOrDirectory(href_folder, odfPath + FILE_SEPARATOR_STR + href, true))
|
||||
{
|
||||
objectBuild.embeddedData = href;
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
if (objectBuild.object_type_ == 1)//диаграмма
|
||||
{
|
||||
const std::wstring href_draw = common_xlink_attlist_.href_.get_value_or(L"Chart");
|
||||
const std::wstring href_draw = xlink_attlist_.href_.get_value_or(L"Chart");
|
||||
objectBuild.pptx_convert(Context);
|
||||
|
||||
Context.get_slide_context().set_chart(href_draw); // в рисовательной части только место объекта, рамочки ... и релсы
|
||||
@ -355,7 +379,7 @@ void draw_object_ole::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
{
|
||||
Context.get_slide_context().set_use_image_replacement();
|
||||
|
||||
std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
|
||||
std::wstring href = xlink_attlist_.href_.get_value_or(L"");
|
||||
std::wstring folderPath = Context.root()->get_folder();
|
||||
std::wstring objectPath = folderPath + FILE_SEPARATOR_STR + href;
|
||||
|
||||
@ -374,7 +398,7 @@ void draw_plugin::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
{
|
||||
Context.get_slide_context().set_use_image_replacement();
|
||||
|
||||
std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
|
||||
std::wstring href = xlink_attlist_.href_.get_value_or(L"");
|
||||
std::wstring folderPath = Context.root()->get_folder();
|
||||
std::wstring objectPath = folderPath + FILE_SEPARATOR_STR + href;
|
||||
|
||||
|
||||
@ -203,7 +203,7 @@ void draw_frame::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
|
||||
void draw_image::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
{
|
||||
std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
|
||||
std::wstring href = xlink_attlist_.href_.get_value_or(L"");
|
||||
|
||||
if (href.empty() && office_binary_data_)
|
||||
{
|
||||
@ -234,7 +234,7 @@ void draw_image::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
|
||||
void draw_chart::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
{
|
||||
const std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
|
||||
const std::wstring href = xlink_attlist_.href_.get_value_or(L"");
|
||||
Context.get_drawing_context().set_chart(href);
|
||||
|
||||
for (size_t i = 0 ; i < content_.size(); i++)
|
||||
@ -264,7 +264,7 @@ void draw_object::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
{
|
||||
try
|
||||
{
|
||||
std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
|
||||
std::wstring href = xlink_attlist_.href_.get_value_or(L"");
|
||||
|
||||
if (!odf_document_ && !href.empty())
|
||||
{
|
||||
@ -291,7 +291,7 @@ void draw_object::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
if (objectBuild.object_type_ == 1) //диаграмма
|
||||
{
|
||||
const std::wstring href_draw = common_xlink_attlist_.href_.get_value_or(L"chart");
|
||||
const std::wstring href_draw = xlink_attlist_.href_.get_value_or(L"chart");
|
||||
objectBuild.xlsx_convert(Context);
|
||||
|
||||
Context.get_drawing_context().set_chart(href_draw); // в рисовательной части только место объекта, рамочки ... и релсы
|
||||
@ -352,7 +352,7 @@ void draw_object_ole::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
{
|
||||
Context.get_drawing_context().set_use_image_replacement();
|
||||
|
||||
std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
|
||||
std::wstring href = xlink_attlist_.href_.get_value_or(L"");
|
||||
std::wstring folderPath = Context.root()->get_folder();
|
||||
std::wstring objectPath = folderPath + FILE_SEPARATOR_STR + href;
|
||||
|
||||
|
||||
@ -65,6 +65,9 @@ public:
|
||||
|
||||
draw_shape() : bad_shape_(false), word_art_(false), idx_in_owner(-1) {}
|
||||
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
friend class odf_document;
|
||||
//----------------------------------------------------------------------------------------------
|
||||
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);
|
||||
|
||||
@ -79,14 +82,11 @@ public:
|
||||
odf_types::union_common_draw_attlists common_draw_attlists_;
|
||||
|
||||
draw_shape_attlist draw_shape_attlist_;
|
||||
odf_types::common_xlink_attlist common_xlink_attlist_;
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
_CP_OPT(std::wstring) draw_id_; //используется для анимашек
|
||||
|
||||
office_element_ptr_array content_;
|
||||
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
friend class odf_document;
|
||||
//----------------------------------------------------------------------------------------------
|
||||
bool bad_shape_;
|
||||
bool word_art_;
|
||||
int sub_type_;
|
||||
|
||||
@ -134,7 +134,7 @@ void svg_font_face_name::add_text(const std::wstring & Text)
|
||||
|
||||
void common_svg_font_face_xlink_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
common_xlink_attlist_.add_attributes(Attributes);
|
||||
xlink_attlist_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
// svg:definition-src
|
||||
|
||||
@ -56,7 +56,7 @@ class common_svg_font_face_xlink_attlist
|
||||
public:
|
||||
void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
|
||||
odf_types::common_xlink_attlist common_xlink_attlist_;
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
};
|
||||
// svg:font-face-uri
|
||||
class svg_font_face_uri : public office_element_impl<svg_font_face_uri>
|
||||
|
||||
@ -77,6 +77,10 @@ void content_xml_t::add_child_element( xml::sax * Reader, const std::wstring & N
|
||||
create_element_and_read(Reader, Ns, Name, content_, &context_, true);
|
||||
}
|
||||
else if CP_CHECK_NAME(L"office", L"document-settings")
|
||||
{
|
||||
create_element_and_read(Reader, Ns, Name, content_, &context_, true);
|
||||
}
|
||||
else if CP_CHECK_NAME(L"office", L"document-meta")
|
||||
{
|
||||
create_element_and_read(Reader, Ns, Name, content_, &context_, true);
|
||||
}
|
||||
@ -88,6 +92,7 @@ void content_xml_t::add_child_element( xml::sax * Reader, const std::wstring & N
|
||||
{
|
||||
create_element_and_read(Reader, Ns, Name, content_, &context_, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void content_xml_t::add_text(const std::wstring & Text)
|
||||
|
||||
@ -54,7 +54,9 @@
|
||||
#include "office_annotation.h"
|
||||
#include "office_settings.h"
|
||||
#include "office_scripts.h"
|
||||
#include "office_forms.h"
|
||||
#include "office_event_listeners.h"
|
||||
#include "office_meta.h"
|
||||
|
||||
#include "styles.h"
|
||||
#include "style_regions.h"
|
||||
@ -141,6 +143,9 @@ odf_document::Impl::Impl(xml::sax * Reader, const std::wstring & tempPath):
|
||||
_CP_LOG << L"[info] parse manifest" << std::endl;
|
||||
parse_manifests(content_xml_->get_content());
|
||||
|
||||
_CP_LOG << L"[info] parse meta" << std::endl;
|
||||
parse_meta(content_xml_->get_content());
|
||||
|
||||
_CP_LOG << L"[info] parse settings" << std::endl;
|
||||
parse_settings(content_xml_->get_content());
|
||||
|
||||
@ -206,6 +211,8 @@ odf_document::Impl::Impl(const std::wstring & srcPath, const std::wstring & temp
|
||||
_CP_LOG << L"[info] read styles.xml" << std::endl;
|
||||
styles_xml_ = read_file_content(styles_xml);
|
||||
|
||||
_CP_LOG << L"[info] read meta.xml" << std::endl;
|
||||
meta_xml_ = read_file_content(meta_xml);
|
||||
//----------------------------------------------------------------------------------------
|
||||
_CP_LOG << L"[info] parse fonts" << std::endl;
|
||||
parse_fonts(content_xml_ ? content_xml_->get_content() : NULL);
|
||||
@ -216,6 +223,8 @@ odf_document::Impl::Impl(const std::wstring & srcPath, const std::wstring & temp
|
||||
_CP_LOG << L"[info] parse settings" << std::endl;
|
||||
parse_settings(settings_xml_ ? settings_xml_->get_content() : NULL);
|
||||
|
||||
_CP_LOG << L"[info] parse meta" << std::endl;
|
||||
parse_meta(meta_xml_ ? meta_xml_->get_content() : NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -306,7 +315,6 @@ bool odf_document::Impl::decrypt_file (const std::wstring &password, const std::
|
||||
manifest_key_derivation* key_derivation = dynamic_cast<manifest_key_derivation*>(encryption_data->key_derivation_.get());
|
||||
manifest_start_key_generation* start_key_generation = dynamic_cast<manifest_start_key_generation*>(encryption_data->start_key_generation_.get());
|
||||
|
||||
CRYPT::ODFDecryptor decryptor;
|
||||
CRYPT::_odfCryptData cryptData;
|
||||
|
||||
if (key_derivation)
|
||||
@ -395,25 +403,24 @@ bool odf_document::Impl::decrypt_file (const std::wstring &password, const std::
|
||||
unsigned char* data_out = NULL;
|
||||
|
||||
file_inp.ReadFile(data, lengthRead, dwSizeRead);
|
||||
|
||||
file_inp.CloseFile();
|
||||
//------------------------------------------------------------------------------------------
|
||||
CRYPT::ODFDecryptor decryptor;
|
||||
decryptor.SetCryptData(cryptData);
|
||||
|
||||
bool result = decryptor.Decrypt(password, data, dwSizeRead, data_out, file_size);
|
||||
delete []data;
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
|
||||
if (result && data_out)
|
||||
{
|
||||
NSFile::CFileBinary file_out;
|
||||
file_out.CreateFileW(dstPath);
|
||||
file_out.WriteFile(data_out, file_size);
|
||||
file_out.CloseFile();
|
||||
|
||||
delete []data_out;
|
||||
return result;
|
||||
|
||||
delete []data_out;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
const std::wstring & odf_document::Impl::get_temp_folder() const
|
||||
@ -637,7 +644,26 @@ void odf_document::Impl::parse_settings(office_element *element)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void odf_document::Impl::parse_meta(office_element *element)
|
||||
{
|
||||
office_document_base * document = dynamic_cast<office_document_base *>( element );
|
||||
if (!document) return;
|
||||
|
||||
office_meta * meta = dynamic_cast<office_meta*>(document->office_meta_.get());
|
||||
if (!meta) return;
|
||||
|
||||
for (size_t i = 0; i < meta->meta_user_defined_.size(); i++)
|
||||
{
|
||||
meta_user_defined * user_defined = dynamic_cast<meta_user_defined*>(meta->meta_user_defined_[i].get());
|
||||
if (!user_defined) continue;
|
||||
|
||||
if (user_defined->meta_name_.empty()) continue;
|
||||
|
||||
context_->Settings().add_user_defined(user_defined->meta_name_, user_defined->content_);
|
||||
}
|
||||
}
|
||||
|
||||
void odf_document::Impl::parse_styles(office_element *element)
|
||||
@ -692,12 +718,13 @@ void odf_document::Impl::parse_styles(office_element *element)
|
||||
( L"common:" + styleInst->style_name_,
|
||||
styleInst->style_display_name_.get_value_or(L""),
|
||||
styleInst->style_family_.get_type(),
|
||||
&(styleInst->style_content_),
|
||||
&(styleInst->content_),
|
||||
true,
|
||||
false,
|
||||
styleInst->style_parent_style_name_.get_value_or(L""),
|
||||
styleInst->style_next_style_name_.get_value_or(L""),
|
||||
styleInst->style_data_style_name_.get_value_or(L"")
|
||||
styleInst->style_data_style_name_.get_value_or(L""),
|
||||
styleInst->style_class_.get_value_or(L"")
|
||||
);
|
||||
}
|
||||
// list styles
|
||||
@ -771,12 +798,13 @@ void odf_document::Impl::parse_styles(office_element *element)
|
||||
context_->styleContainer().add_style(L"",
|
||||
L"",
|
||||
styleInst->style_family_.get_type(),
|
||||
&(styleInst->style_content_),
|
||||
&(styleInst->content_),
|
||||
false,
|
||||
true,
|
||||
L"",
|
||||
L"",
|
||||
L"");
|
||||
L"",
|
||||
L"");
|
||||
}
|
||||
for (size_t i = 0; i < docStyles->style_presentation_page_layout_.size(); i++)
|
||||
{
|
||||
@ -808,12 +836,13 @@ void odf_document::Impl::parse_styles(office_element *element)
|
||||
context_->styleContainer().add_style(styleInst->style_name_,
|
||||
styleInst->style_display_name_.get_value_or(L""),
|
||||
styleInst->style_family_.get_type(),
|
||||
&(styleInst->style_content_),
|
||||
&(styleInst->content_),
|
||||
false,
|
||||
false,
|
||||
styleInst->style_parent_style_name_.get_value_or(L""),
|
||||
styleInst->style_next_style_name_.get_value_or(L""),
|
||||
styleInst->style_data_style_name_.get_value_or(L"")
|
||||
styleInst->style_data_style_name_.get_value_or(L""),
|
||||
styleInst->style_class_.get_value_or(L"")
|
||||
);
|
||||
}
|
||||
|
||||
@ -958,12 +987,13 @@ void odf_document::Impl::parse_styles(office_element *element)
|
||||
context_->styleContainer().add_style(styleInst->style_name_,
|
||||
styleInst->style_display_name_.get_value_or(L""),
|
||||
styleInst->style_family_.get_type(),
|
||||
&(styleInst->style_content_),
|
||||
&(styleInst->content_),
|
||||
true,
|
||||
false,
|
||||
styleInst->style_parent_style_name_.get_value_or(L""),
|
||||
styleInst->style_next_style_name_.get_value_or(L""),
|
||||
styleInst->style_data_style_name_.get_value_or(L"")
|
||||
styleInst->style_data_style_name_.get_value_or(L""),
|
||||
styleInst->style_class_.get_value_or(L"")
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -96,6 +96,7 @@ private:
|
||||
void parse_fonts (office_element *elemen);
|
||||
void parse_manifests(office_element *element);
|
||||
void parse_settings (office_element *element);
|
||||
void parse_meta (office_element *element);
|
||||
|
||||
bool decrypt_folder (const std::wstring &password, const std::wstring & srcPath, const std::wstring & dstPath);
|
||||
bool decrypt_file (const std::wstring &password, const std::wstring & srcPath, const std::wstring & dstPath, office_element_ptr data, int size );
|
||||
|
||||
@ -47,7 +47,8 @@ style_instance::style_instance(
|
||||
bool IsDefault,
|
||||
const std::wstring & ParentStyleName,
|
||||
const std::wstring & NextStyleName,
|
||||
const std::wstring & DataStyleName
|
||||
const std::wstring & DataStyleName,
|
||||
const std::wstring & StyleClass
|
||||
) :
|
||||
container_ (Container),
|
||||
name_ (Name),
|
||||
@ -56,6 +57,7 @@ style_instance::style_instance(
|
||||
is_automatic_ (IsAutomatic),
|
||||
is_default_ (IsDefault),
|
||||
next_name_ (NextStyleName),
|
||||
style_class_ (StyleClass),
|
||||
next_ (Container->style_by_name(NextStyleName, style_type_, false)),
|
||||
data_style_name_(DataStyleName)
|
||||
{
|
||||
@ -83,7 +85,8 @@ void styles_container::add_style( const std::wstring & Name,
|
||||
bool IsDefault,
|
||||
const std::wstring & ParentStyleName_,
|
||||
const std::wstring & NextStyleName,
|
||||
const std::wstring & DataStyleName)
|
||||
const std::wstring & DataStyleName,
|
||||
const std::wstring & StyleClass)
|
||||
{
|
||||
std::wstring ParentStyleName = ParentStyleName_;
|
||||
|
||||
@ -91,9 +94,8 @@ void styles_container::add_style( const std::wstring & Name,
|
||||
{
|
||||
ParentStyleName = L"";//иначе в коде возможно зацикливание.
|
||||
}
|
||||
style_instance_ptr newStyle = style_instance_ptr(
|
||||
new style_instance(this, Name, Type, Content, IsAutomatic, IsDefault, ParentStyleName, NextStyleName, DataStyleName)
|
||||
);
|
||||
style_instance_ptr newStyle = style_instance_ptr( new style_instance(this, Name, Type, Content, IsAutomatic, IsDefault,
|
||||
ParentStyleName, NextStyleName, DataStyleName, StyleClass));
|
||||
|
||||
instances_.push_back(newStyle);
|
||||
int pos = static_cast<int>(instances_.size() - 1);
|
||||
@ -180,6 +182,10 @@ const std::wstring & style_instance::data_style_name() const
|
||||
{
|
||||
return data_style_name_;
|
||||
}
|
||||
const std::wstring & style_instance::style_class() const
|
||||
{
|
||||
return style_class_;
|
||||
}
|
||||
|
||||
style_instance * styles_container::style_by_name(const std::wstring & Name, style_family::type Type, bool object_in_styles) const
|
||||
{
|
||||
@ -327,7 +333,7 @@ page_layout_instance::page_layout_instance(const style_page_layout * StylePageLa
|
||||
|
||||
const std::wstring & page_layout_instance::name() const
|
||||
{
|
||||
return style_page_layout_->attlist_.get_style_name();
|
||||
return style_page_layout_->style_name_;
|
||||
}
|
||||
|
||||
style_page_layout_properties * page_layout_instance::properties() const
|
||||
@ -365,6 +371,11 @@ void page_layout_instance::docx_serialize(std::wostream & strm, oox::docx_conver
|
||||
_CP_OPT(length) bottom = attr.fo_min_height_ ? attr.fo_min_height_ : attr.svg_height_;
|
||||
Context.get_header_footer_context().set_footer(bottom);
|
||||
}
|
||||
|
||||
if ( style_page_layout_->style_page_usage_.get_type() == page_usage::Mirrored )
|
||||
{
|
||||
Context.set_settings_property(odf_reader::_property(L"mirrorMargins",true));
|
||||
}
|
||||
|
||||
style_page_layout_properties * props = properties();
|
||||
if (props)
|
||||
|
||||
@ -64,7 +64,8 @@ public:
|
||||
bool IsDefault,
|
||||
const std::wstring & ParentStyleName,
|
||||
const std::wstring & NextStyleName,
|
||||
const std::wstring & DataStyleName
|
||||
const std::wstring & DataStyleName,
|
||||
const std::wstring & StyleClass
|
||||
);
|
||||
|
||||
|
||||
@ -77,6 +78,7 @@ public:
|
||||
const std::wstring & next_name() const;
|
||||
const styles_container * container() const { return container_; }
|
||||
const std::wstring & data_style_name() const;
|
||||
const std::wstring & style_class() const;
|
||||
|
||||
bool is_automatic() const;
|
||||
bool is_default() const;
|
||||
@ -90,6 +92,7 @@ private:
|
||||
bool is_automatic_;
|
||||
bool is_default_;
|
||||
|
||||
std::wstring style_class_;
|
||||
std::wstring parent_name_;
|
||||
std::wstring next_name_;
|
||||
mutable style_instance * parent_;
|
||||
@ -145,7 +148,8 @@ public:
|
||||
bool IsDefault,
|
||||
const std::wstring & ParentStyleName,
|
||||
const std::wstring & NextStyleName,
|
||||
const std::wstring & DataStyleName);
|
||||
const std::wstring & DataStyleName,
|
||||
const std::wstring & StyleClass);
|
||||
|
||||
void add_master_page_name(const std::wstring & StyleName, const std::wstring & MasterPageName);
|
||||
|
||||
|
||||
@ -67,7 +67,6 @@ std::wstring office_binary_data::write_to(const std::wstring & path)
|
||||
{
|
||||
std::wstring result;
|
||||
|
||||
NSFile::CBase64Converter base64;
|
||||
int nLength = 0;
|
||||
unsigned char *pData = NULL;
|
||||
|
||||
|
||||
@ -126,7 +126,7 @@ void office_body::docx_convert(oox::docx_conversion_context & Context)
|
||||
if ((fill.bitmap) && (fill.bitmap->rId.empty()))
|
||||
{
|
||||
std::wstring href = fill.bitmap->xlink_href_;
|
||||
fill.bitmap->rId = Context.add_mediaitem(href, oox::typeImage, fill.bitmap->isInternal, href);
|
||||
fill.bitmap->rId = Context.get_mediaitems().add_or_find(href, oox::typeImage, fill.bitmap->isInternal, href);
|
||||
}
|
||||
int id = Context.get_drawing_context().get_current_shape_id();
|
||||
if (layout_properties->docx_background_serialize(Context.output_stream(), Context, fill, id))
|
||||
|
||||
@ -74,7 +74,9 @@ void office_document_base::add_child_element( xml::sax * Reader, const std::wstr
|
||||
CP_CREATE_ELEMENT(office_scripts_);
|
||||
else if CP_CHECK_NAME(L"office", L"settings")
|
||||
CP_CREATE_ELEMENT(office_settings_);
|
||||
else if CP_CHECK_NAME(L"manifest", L"file-entry")
|
||||
else if CP_CHECK_NAME(L"office", L"meta")
|
||||
CP_CREATE_ELEMENT(office_meta_);
|
||||
else if CP_CHECK_NAME(L"manifest", L"file-entry")
|
||||
CP_CREATE_ELEMENT(manifests_);
|
||||
else
|
||||
CP_NOT_APPLICABLE_ELM();
|
||||
|
||||
@ -46,9 +46,15 @@ enum ElementType
|
||||
typeTextBookmark,
|
||||
typeTextBookmarkStart,
|
||||
typeTextBookmarkEnd,
|
||||
typeTextBookmarkRef,
|
||||
typeTextReferenceMark,
|
||||
typeTextReferenceMarkStart,
|
||||
typeTextReferenceMarkEnd,
|
||||
typeTextReferenceRef,
|
||||
|
||||
typeTextFieldFieldmarkStart,
|
||||
typeTextFieldFieldmarkEnd,
|
||||
|
||||
typeTextSpan,
|
||||
typeTextA,
|
||||
typeTextNote,
|
||||
@ -93,12 +99,19 @@ enum ElementType
|
||||
typeTextSequenceDecls,
|
||||
typeTextSequenceDecl,
|
||||
typeTextSequence,
|
||||
typeTextSequenceRef,
|
||||
|
||||
typeTextHiddenParagraph,
|
||||
typeTextHiddenText,
|
||||
|
||||
typePresentationFooter,
|
||||
typePresentationDateTime,
|
||||
|
||||
typeDcCreator,
|
||||
typeDcDate,
|
||||
typeDcDescription,
|
||||
typeDcSubject,
|
||||
typeDcTitle,
|
||||
|
||||
typeDrawA,
|
||||
|
||||
@ -117,27 +130,62 @@ enum ElementType
|
||||
typeTextNumberedParagraph,
|
||||
typeTextExpression,
|
||||
|
||||
typeTextCommonEntryTemplate,
|
||||
|
||||
typeTextTableOfContent,
|
||||
typeTextTableOfContentSource,
|
||||
typeTextTableOfContentEntryTemplate,
|
||||
|
||||
typeTextIndexEntryText,
|
||||
typeTextIndexEntryTabStop,
|
||||
typeTextIndexEntrySpan,
|
||||
typeTextIndexEntryPageNumber,
|
||||
typeTextIndexEntryLinkStart,
|
||||
typeTextIndexEntryLinkEnd,
|
||||
typeTextIndexEntryChapter,
|
||||
typeTextIndexEntryBibliography,
|
||||
|
||||
typeTextIllustrationIndex,
|
||||
typeTextIllustrationIndexSource,
|
||||
|
||||
typeTextIllustrationIndexEntryTemplate,
|
||||
|
||||
typeTextTableIndex,
|
||||
typeTextTableIndexSource,
|
||||
|
||||
typeTextTableIndexEntryTemplate,
|
||||
|
||||
typeTextObjectIndex,
|
||||
typeTextObjectIndexSource,
|
||||
|
||||
typeTextObjectIndexEntryTemplate,
|
||||
|
||||
typeTextUserIndex,
|
||||
typeTextUserIndexSource,
|
||||
typeTextUserIndexEntryTemplate,
|
||||
|
||||
typeTextAlphabeticalIndex,
|
||||
typeTextAlphabeticalIndexSource,
|
||||
|
||||
typeTextAlphabeticalIndexEntryTemplate,
|
||||
|
||||
typeTextBibliography,
|
||||
typeTextBibliographySource,
|
||||
typeTextBibliographyEntryTemplate,
|
||||
|
||||
typeTextBibliographyMark,
|
||||
typeTextBibliographySource,
|
||||
|
||||
typeTextAlphabeticalIndexAutoMarkFile,
|
||||
typeTextAlphabeticalIndexMarkStart,
|
||||
typeTextAlphabeticalIndexMarkEnd,
|
||||
typeTextAlphabeticalIndexMark,
|
||||
|
||||
typeTextTocMarkStart,
|
||||
typeTextTocMarkEnd,
|
||||
typeTextTocMark,
|
||||
|
||||
typeTextUserIndexMarkStart,
|
||||
typeTextUserIndexMarkEnd,
|
||||
typeTextUserIndexMark,
|
||||
|
||||
typeTextIndexSourceStyles,
|
||||
typeTextIndexSourceStyle,
|
||||
|
||||
typeTextVariableInput,
|
||||
typeTextVariableGet,
|
||||
@ -151,6 +199,8 @@ enum ElementType
|
||||
typeTextUserFieldSet,
|
||||
typeTextUserFieldInput,
|
||||
|
||||
typeTextUserDefined,
|
||||
|
||||
typeTextTrackedChanges,
|
||||
typeTextChangedRegion,
|
||||
typeTextChangeStart,
|
||||
@ -229,6 +279,8 @@ enum ElementType
|
||||
typeTableOddColumnsTemplate,
|
||||
typeTableOddRowsTemplate,
|
||||
|
||||
typeTextIndexTitleTemplate,
|
||||
|
||||
typeTextNotesConfiguration,
|
||||
|
||||
typeStyleFontFace,
|
||||
@ -369,6 +421,15 @@ enum ElementType
|
||||
typeOfficeSettingsConfigItemMapNamed,
|
||||
typeOfficeSettingsConfigItemMapEntry,
|
||||
|
||||
typeOfficeMeta,
|
||||
typeOfficeMetaUserDefined,
|
||||
typeOfficeMetaDocumentStatistic,
|
||||
typeOfficeMetaGenerator,
|
||||
typeOfficeMetaCreationDate,
|
||||
typeOfficeMetaKeyword,
|
||||
typeOfficeMetaEditingCycles,
|
||||
typeOfficeMetaEditingDuration,
|
||||
|
||||
typeDrawG,
|
||||
typeDrawFrame,
|
||||
typeDrawImage,
|
||||
@ -408,6 +469,36 @@ enum ElementType
|
||||
typeDr3dRotate,
|
||||
typeDr3dSphere,
|
||||
|
||||
typeOfficeForms,
|
||||
typeFormForm,
|
||||
typeFormProperties,
|
||||
typeFormProperty,
|
||||
typeFormListProperty,
|
||||
typeFormListValue,
|
||||
typeFormElement,
|
||||
typeFormButton,
|
||||
typeFormCheckbox,
|
||||
typeFormText,
|
||||
typeFormCombobox,
|
||||
typeFormListbox,
|
||||
typeFormConnectionResource,
|
||||
typeFormDate,
|
||||
typeFormFile,
|
||||
typeFormFixedText,
|
||||
typeFormFormattedText,
|
||||
typeFormFrame,
|
||||
typeFormGenericControl,
|
||||
typeFormGrid,
|
||||
typeFormHidden,
|
||||
typeFormImage,
|
||||
typeFormImageFrame,
|
||||
typeFormNumber,
|
||||
typeFormPassword,
|
||||
typeFormRadio,
|
||||
typeFormTextarea,
|
||||
typeFormTime,
|
||||
typeFormValueRange,
|
||||
|
||||
typeDrawPage,
|
||||
typePresentationFooterDecl,
|
||||
typePresentationDateTimeDecl,
|
||||
|
||||
@ -73,7 +73,7 @@ void office_event_listeners::pptx_convert(oox::pptx_conversion_context & Context
|
||||
|
||||
void presentation_event_listener_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
common_xlink_attlist_.add_attributes(Attributes);
|
||||
xlink_attlist_.add_attributes(Attributes);
|
||||
|
||||
CP_APPLY_ATTR(L"script:event-name", script_event_name_);
|
||||
CP_APPLY_ATTR(L"presentation:action", presentation_action_);
|
||||
@ -101,8 +101,8 @@ void presentation_event_listener::pptx_convert(oox::pptx_conversion_context & Co
|
||||
{
|
||||
Context.get_slide_context().start_action(attlist_.presentation_action_.get_value_or(L""));
|
||||
|
||||
if (attlist_.common_xlink_attlist_.href_)
|
||||
Context.get_slide_context().set_link(*attlist_.common_xlink_attlist_.href_);
|
||||
if (attlist_.xlink_attlist_.href_)
|
||||
Context.get_slide_context().set_link(*attlist_.xlink_attlist_.href_);
|
||||
|
||||
if (presentation_sound_)
|
||||
{
|
||||
|
||||
@ -72,7 +72,7 @@ class presentation_event_listener_attlist
|
||||
public:
|
||||
void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
|
||||
odf_types::common_xlink_attlist common_xlink_attlist_;
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
|
||||
_CP_OPT(std::wstring) script_event_name_;
|
||||
_CP_OPT(std::wstring) presentation_action_;
|
||||
|
||||
431
ASCOfficeOdfFile/src/odf/office_forms.cpp
Normal file
431
ASCOfficeOdfFile/src/odf/office_forms.cpp
Normal file
@ -0,0 +1,431 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2018
|
||||
*
|
||||
* 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 "office_forms.h"
|
||||
#include "draw_frame.h"
|
||||
#include "text_content.h"
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
#include <cpdoccore/xml/utils.h>
|
||||
|
||||
#include "serialize_elements.h"
|
||||
|
||||
namespace cpdoccore {
|
||||
namespace odf_reader {
|
||||
|
||||
// office:forms
|
||||
//----------------------------------------------------------------------------------
|
||||
const wchar_t * office_forms::ns = L"office";
|
||||
const wchar_t * office_forms::name = L"forms";
|
||||
|
||||
void office_forms::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"form:apply-design-mode", apply_design_mode_);
|
||||
CP_APPLY_ATTR(L"form:automatic-focus", automatic_focus_);
|
||||
}
|
||||
|
||||
void office_forms::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
}
|
||||
void office_forms::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
for (size_t i = 0; i < content_.size(); i++)
|
||||
{
|
||||
content_[i]->docx_convert(Context);
|
||||
}
|
||||
}
|
||||
// form:form
|
||||
//----------------------------------------------------------------------------------
|
||||
const wchar_t * form_form::ns = L"form";
|
||||
const wchar_t * form_form::name = L"form";
|
||||
|
||||
void form_form::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"form:allow-deletes", allow_deletes_);
|
||||
CP_APPLY_ATTR(L"form:allow-inserts", allow_inserts_);
|
||||
CP_APPLY_ATTR(L"form:allow-updates", allow_updates_);
|
||||
CP_APPLY_ATTR(L"form:apply-filter", apply_filter_);
|
||||
CP_APPLY_ATTR(L"form:command", command_);
|
||||
CP_APPLY_ATTR(L"form:command_type", command_type_);
|
||||
CP_APPLY_ATTR(L"form:control-implementation", control_implementation_);
|
||||
CP_APPLY_ATTR(L"form:datasource", datasource_);
|
||||
CP_APPLY_ATTR(L"form:detail-fields", detail_fields_);
|
||||
CP_APPLY_ATTR(L"form:enctype", enctype_);
|
||||
CP_APPLY_ATTR(L"form:escape-processing",escape_processing_);
|
||||
CP_APPLY_ATTR(L"form:filter", filter_);
|
||||
CP_APPLY_ATTR(L"form:ignore-result", ignore_result_);
|
||||
CP_APPLY_ATTR(L"form:master-fields", master_fields_);
|
||||
CP_APPLY_ATTR(L"form:method", method_);
|
||||
CP_APPLY_ATTR(L"form:name", name_);
|
||||
CP_APPLY_ATTR(L"form:navigation-mode", navigation_mode_);
|
||||
CP_APPLY_ATTR(L"form:order", order_);
|
||||
CP_APPLY_ATTR(L"form:tabcycle", tabcycle_);
|
||||
|
||||
CP_APPLY_ATTR(L"office:target-frame", office_target_frame_);
|
||||
|
||||
xlink_attlist_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
void form_form::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
if CP_CHECK_NAME(L"form", L"properties")
|
||||
{
|
||||
CP_CREATE_ELEMENT(properties_);
|
||||
}
|
||||
else if CP_CHECK_NAME(L"office", L"event-listeners")
|
||||
{
|
||||
CP_CREATE_ELEMENT(office_event_listeners_);
|
||||
}
|
||||
else
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
}
|
||||
void form_form::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
for (size_t i = 0; i < content_.size(); i++)
|
||||
{
|
||||
content_[i]->docx_convert(Context);
|
||||
}
|
||||
}
|
||||
// form:properties
|
||||
//----------------------------------------------------------------------------------
|
||||
const wchar_t * form_properties::ns = L"form";
|
||||
const wchar_t * form_properties::name = L"properties";
|
||||
|
||||
void form_properties::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
}
|
||||
void form_properties::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
//for (size_t i = 0; i < content_.size(); i++)
|
||||
// {
|
||||
// content_[i]->docx_convert(Context);
|
||||
// }
|
||||
}
|
||||
// form:property
|
||||
//----------------------------------------------------------------------------------
|
||||
const wchar_t * form_property::ns = L"form";
|
||||
const wchar_t * form_property::name = L"property";
|
||||
|
||||
void form_property::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"form:property-name", property_name_);
|
||||
value_and_type_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
// form:list-property
|
||||
//----------------------------------------------------------------------------------
|
||||
const wchar_t * form_list_property::ns = L"form";
|
||||
const wchar_t * form_list_property::name = L"list-property";
|
||||
|
||||
void form_list_property::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"form:property-name", property_name_);
|
||||
CP_APPLY_ATTR(L"form:value-type", value_type_);
|
||||
}
|
||||
void form_list_property::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
}
|
||||
void form_list_property::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
for (size_t i = 0; i < content_.size(); i++)
|
||||
{
|
||||
content_[i]->docx_convert(Context);
|
||||
}
|
||||
}
|
||||
// form:list-value
|
||||
//----------------------------------------------------------------------------------
|
||||
const wchar_t * form_list_value::ns = L"form";
|
||||
const wchar_t * form_list_value::name = L"list-value";
|
||||
|
||||
void form_list_value::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
value_and_type_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
const wchar_t * form_element::ns = L"form";
|
||||
const wchar_t * form_element::name = L"element";
|
||||
|
||||
void form_element::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"form:control_implementation", control_implementation_);
|
||||
CP_APPLY_ATTR(L"form:data-field", data_field_);
|
||||
CP_APPLY_ATTR(L"form:linked-cell", linked_cell_);
|
||||
CP_APPLY_ATTR(L"form:disabled", disabled_);
|
||||
CP_APPLY_ATTR(L"form:id", id_);
|
||||
CP_APPLY_ATTR(L"form:label", label_);
|
||||
CP_APPLY_ATTR(L"form:name", name_);
|
||||
CP_APPLY_ATTR(L"form:printable", printable_);
|
||||
CP_APPLY_ATTR(L"form:tab-index", tab_index_);
|
||||
CP_APPLY_ATTR(L"form:tab-stop", tab_stop_);
|
||||
CP_APPLY_ATTR(L"form:title", title_);
|
||||
CP_APPLY_ATTR(L"form:value", value_);
|
||||
CP_APPLY_ATTR(L"form:current-value",current_value_);
|
||||
CP_APPLY_ATTR(L"xml:id", xml_id_);
|
||||
CP_APPLY_ATTR(L"xforms:bind", xforms_bind_);
|
||||
}
|
||||
void form_element::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
if CP_CHECK_NAME(L"form", L"properties")
|
||||
{
|
||||
CP_CREATE_ELEMENT(properties_);
|
||||
}
|
||||
else if CP_CHECK_NAME(L"office", L"event-listeners")
|
||||
{
|
||||
CP_CREATE_ELEMENT(office_event_listeners_);
|
||||
}
|
||||
}
|
||||
void form_element::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
std::wstring id = id_ ? *id_ : (xml_id_ ? *xml_id_ : L"");
|
||||
Context.get_forms_context().set_id(id);
|
||||
|
||||
if (name_) Context.get_forms_context().set_name(*name_);
|
||||
if (label_) Context.get_forms_context().set_label(*label_);
|
||||
|
||||
if (current_value_) Context.get_forms_context().set_value(*current_value_);
|
||||
else if (value_) Context.get_forms_context().set_value(*value_);
|
||||
|
||||
if (control_implementation_) Context.get_forms_context().set_uuid(*control_implementation_);
|
||||
|
||||
Context.get_forms_context().end_element();
|
||||
|
||||
}
|
||||
// form:button
|
||||
//----------------------------------------------------------------------------------
|
||||
const wchar_t * form_button::ns = L"form";
|
||||
const wchar_t * form_button::name = L"button";
|
||||
|
||||
void form_button::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
form_element::add_attributes(Attributes);
|
||||
}
|
||||
void form_button::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
Context.get_forms_context().start_element(1);
|
||||
|
||||
form_element::docx_convert(Context);
|
||||
}
|
||||
|
||||
// form:text
|
||||
//----------------------------------------------------------------------------------
|
||||
const wchar_t * form_text::ns = L"form";
|
||||
const wchar_t * form_text::name = L"text";
|
||||
|
||||
void form_text::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
form_element::add_attributes(Attributes);
|
||||
}
|
||||
void form_text::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
Context.get_forms_context().start_element(2);
|
||||
Context.get_forms_context().set_element(dynamic_cast<form_element*>(this));
|
||||
|
||||
form_element::docx_convert(Context);
|
||||
}
|
||||
void form_text::docx_convert_sdt(oox::docx_conversion_context & Context, draw_control *draw)
|
||||
{
|
||||
if (!draw) return;
|
||||
|
||||
Context.output_stream() << L"<w:sdt>";
|
||||
Context.output_stream() << L"<w:sdtPr>";
|
||||
{
|
||||
if (name_)
|
||||
{
|
||||
Context.output_stream() << L"<w:alias w:val=\"" + xml::utils::replace_text_to_xml(*name_) + L"\"/>";
|
||||
}
|
||||
Context.output_stream() << L"<w:id w:val=\"" + std::to_wstring(Context.get_drawing_context().get_current_shape_id()) + L"\"/>";
|
||||
//<w:lock w:val="sdtLocked"/>
|
||||
//<w:placeholder>
|
||||
// <w:docPart w:val="DefaultPlaceholder_-1854013440"/>
|
||||
//</w:placeholder>
|
||||
}
|
||||
Context.output_stream() << L"</w:sdtPr>";
|
||||
Context.output_stream() << L"<w:sdtContent>";
|
||||
{
|
||||
Context.add_new_run(L"");
|
||||
if (current_value_)
|
||||
{
|
||||
Context.output_stream() << L"<w:t xml:space=\"preserve\">";
|
||||
Context.output_stream() << xml::utils::replace_text_to_xml(*current_value_ );
|
||||
Context.output_stream() << L"</w:t>";
|
||||
}
|
||||
Context.finish_run();
|
||||
}
|
||||
Context.output_stream() << L"</w:sdtContent>";
|
||||
Context.output_stream() << L"</w:sdt>";
|
||||
}
|
||||
void form_text::docx_convert_field(oox::docx_conversion_context & Context, draw_control *draw)
|
||||
{
|
||||
if (!draw) return;
|
||||
|
||||
XmlUtils::replace_all( *name_, L" ", L"_");
|
||||
|
||||
Context.add_new_run(L"");
|
||||
Context.output_stream() << L"<w:fldChar w:fldCharType=\"begin\"><w:ffData><w:name w:val=\"" << *name_ << L"\"/><w:enabled/>";
|
||||
Context.output_stream() << L"</w:ffData></w:fldChar>";
|
||||
Context.finish_run();
|
||||
|
||||
Context.add_new_run(L"");
|
||||
Context.output_stream() << L"<w:instrText>FORMTEXT</w:instrText>";
|
||||
Context.finish_run();
|
||||
|
||||
Context.output_stream() << L"<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>";
|
||||
|
||||
Context.add_new_run(L"");
|
||||
Context.output_stream() << L"<w:t>" << *current_value_ << L"</w:t>";
|
||||
Context.finish_run();
|
||||
Context.output_stream() << L"<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>";
|
||||
}
|
||||
// form:checkbox
|
||||
//----------------------------------------------------------------------------------
|
||||
const wchar_t * form_checkbox::ns = L"form";
|
||||
const wchar_t * form_checkbox::name = L"checkbox";
|
||||
|
||||
void form_checkbox::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
_CP_OPT(std::wstring) strVal;
|
||||
CP_APPLY_ATTR(L"form:current-state", strVal);
|
||||
|
||||
if ((strVal) && (*strVal == L"checked"))
|
||||
current_state_ = true;
|
||||
else current_state_ = false;
|
||||
|
||||
form_element::add_attributes(Attributes);
|
||||
}
|
||||
void form_checkbox::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
Context.get_forms_context().start_element(3);
|
||||
Context.get_forms_context().set_element(dynamic_cast<form_element*>(this));
|
||||
|
||||
form_element::docx_convert(Context);
|
||||
}
|
||||
void form_checkbox::docx_convert_sdt(oox::docx_conversion_context & Context, draw_control *draw)
|
||||
{
|
||||
if (!draw) return;
|
||||
|
||||
Context.output_stream() << L"<w:sdt>";
|
||||
Context.output_stream() << L"<w:sdtPr>";
|
||||
{
|
||||
if (name_)
|
||||
{
|
||||
Context.output_stream() << L"<w:alias w:val=\"" + xml::utils::replace_text_to_xml(*name_) + L"\"/>";
|
||||
}
|
||||
Context.output_stream() << L"<w:id w:val=\"" + std::to_wstring(Context.get_drawing_context().get_current_shape_id()) + L"\"/>";
|
||||
Context.output_stream() << L"<w14:checkbox>";
|
||||
|
||||
Context.output_stream() << L"<w14:checked w14:val=\"" + std::to_wstring(current_state_ ? 1 : 0) + L"\"/>";
|
||||
//Context.output_stream() << L"<w14:checkedState w14:val=\"2612\" w14:font=\"MS Gothic\"/>";
|
||||
//Context.output_stream() << L"<w14:uncheckedState w14:val=\"2610\" w14:font=\"MS Gothic\"/>";
|
||||
Context.output_stream() << L"</w14:checkbox>";
|
||||
}
|
||||
Context.output_stream() << L"</w:sdtPr>";
|
||||
Context.output_stream() << L"<w:sdtContent>";
|
||||
{
|
||||
Context.add_new_run(L"");
|
||||
if (current_state_)
|
||||
Context.output_stream() << L"<w:t>☒</w:t>";
|
||||
else
|
||||
Context.output_stream() << L"<w:t>☐</w:t>";
|
||||
Context.finish_run();
|
||||
}
|
||||
Context.output_stream() << L"</w:sdtContent>";
|
||||
Context.output_stream() << L"</w:sdt>";
|
||||
|
||||
if (label_)
|
||||
{
|
||||
Context.add_new_run(L"");
|
||||
Context.output_stream() << L"<w:t xml:space=\"preserve\">";
|
||||
Context.output_stream() << xml::utils::replace_text_to_xml(*label_ );
|
||||
Context.output_stream() << L"</w:t>";
|
||||
Context.finish_run();
|
||||
}
|
||||
}
|
||||
|
||||
void form_checkbox::docx_convert_field(oox::docx_conversion_context & Context, draw_control *draw)
|
||||
{
|
||||
if (!draw) return;
|
||||
|
||||
XmlUtils::replace_all( *name_, L" ", L"_");
|
||||
|
||||
Context.output_stream() << L"<w:r><w:fldChar w:fldCharType=\"begin\"><w:ffData><w:name w:val=\"" << *name_ << L"\"/><w:enabled/>";
|
||||
Context.output_stream() << L"<w:label w:val=\"" << xml::utils::replace_text_to_xml(*label_ ) << L"\"/>";
|
||||
Context.output_stream() << L"<w:checkBox><w:default w:val=\"" << std::to_wstring(current_state_) << L"\"/></w:checkBox></w:ffData>";
|
||||
Context.output_stream() << L"</w:fldChar></w:r>";
|
||||
Context.output_stream() << L"<w:r><w:instrText>FORMCHECKBOX</w:instrText></w:r>";
|
||||
//Context.output_stream() << L"<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>";
|
||||
//Context.output_stream() << L"<w:r><w:t>" << xml::utils::replace_text_to_xml(*label_ ) << L"</w:t></w:r>";
|
||||
Context.output_stream() << L"<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>";
|
||||
|
||||
Context.add_new_run(L"");
|
||||
Context.output_stream() << L"<w:t xml:space=\"preserve\">";
|
||||
Context.output_stream() << xml::utils::replace_text_to_xml(*label_ );
|
||||
Context.output_stream() << L"</w:t>";
|
||||
Context.finish_run();
|
||||
}
|
||||
|
||||
// form:combobox
|
||||
//----------------------------------------------------------------------------------
|
||||
const wchar_t * form_combobox::ns = L"form";
|
||||
const wchar_t * form_combobox::name = L"combobox";
|
||||
|
||||
void form_combobox::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
form_element::add_attributes(Attributes);
|
||||
}
|
||||
void form_combobox::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
Context.get_forms_context().start_element(4);
|
||||
|
||||
form_element::docx_convert(Context);
|
||||
}
|
||||
// form:listbox
|
||||
//----------------------------------------------------------------------------------
|
||||
const wchar_t * form_listbox::ns = L"form";
|
||||
const wchar_t * form_listbox::name = L"listbox";
|
||||
|
||||
void form_listbox::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
form_element::add_attributes(Attributes);
|
||||
}
|
||||
void form_listbox::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
Context.get_forms_context().start_element(5);
|
||||
|
||||
form_element::docx_convert(Context);
|
||||
}
|
||||
}
|
||||
}
|
||||
402
ASCOfficeOdfFile/src/odf/office_forms.h
Normal file
402
ASCOfficeOdfFile/src/odf/office_forms.h
Normal file
@ -0,0 +1,402 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2018
|
||||
*
|
||||
* 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 <iosfwd>
|
||||
#include <cpdoccore/CPOptional.h>
|
||||
#include <cpdoccore/xml/xmlelement.h>
|
||||
#include <cpdoccore/xml/nodetype.h>
|
||||
|
||||
#include "office_elements.h"
|
||||
#include "office_elements_create.h"
|
||||
|
||||
#include "datatypes/common_attlists.h"
|
||||
#include "datatypes/commandtype.h"
|
||||
|
||||
namespace cpdoccore {
|
||||
namespace odf_reader {
|
||||
|
||||
class draw_control;
|
||||
|
||||
// office:forms
|
||||
class office_forms : public office_element_impl<office_forms>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeOfficeForms;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
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 docx_convert(oox::docx_conversion_context & Context) ;
|
||||
|
||||
public:
|
||||
office_element_ptr_array content_;
|
||||
_CP_OPT(odf_types::Bool) apply_design_mode_;
|
||||
_CP_OPT(odf_types::Bool) automatic_focus_;
|
||||
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(office_forms);
|
||||
|
||||
// form:form
|
||||
class form_form : public office_element_impl<form_form>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeFormForm;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
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 docx_convert(oox::docx_conversion_context & Context) ;
|
||||
|
||||
public:
|
||||
office_element_ptr_array content_;
|
||||
office_element_ptr office_event_listeners_;
|
||||
office_element_ptr properties_;
|
||||
|
||||
_CP_OPT(odf_types::Bool) allow_deletes_;
|
||||
_CP_OPT(odf_types::Bool) allow_inserts_;
|
||||
_CP_OPT(odf_types::Bool) allow_updates_;
|
||||
|
||||
_CP_OPT(odf_types::Bool) apply_filter_;
|
||||
_CP_OPT(std::wstring) command_;
|
||||
_CP_OPT(odf_types::command_type) command_type_;
|
||||
_CP_OPT(std::wstring) control_implementation_;
|
||||
_CP_OPT(std::wstring) datasource_;
|
||||
_CP_OPT(std::wstring) detail_fields_;
|
||||
_CP_OPT(std::wstring) enctype_;
|
||||
_CP_OPT(odf_types::Bool) escape_processing_;
|
||||
_CP_OPT(std::wstring) filter_;
|
||||
_CP_OPT(odf_types::Bool) ignore_result_;
|
||||
_CP_OPT(std::wstring) master_fields_;
|
||||
_CP_OPT(std::wstring) method_;
|
||||
_CP_OPT(std::wstring) name_;
|
||||
_CP_OPT(std::wstring) navigation_mode_;
|
||||
_CP_OPT(std::wstring) order_;
|
||||
_CP_OPT(std::wstring) tabcycle_;
|
||||
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
_CP_OPT(std::wstring) office_target_frame_;
|
||||
|
||||
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(form_form);
|
||||
|
||||
// form:properties
|
||||
class form_properties : public office_element_impl<form_properties>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeFormProperties;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
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 docx_convert(oox::docx_conversion_context & Context) ;
|
||||
|
||||
public:
|
||||
office_element_ptr_array content_; //form property && form list-property
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(form_properties);
|
||||
|
||||
// form:property
|
||||
class form_property : public office_element_impl<form_property>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeFormProperty;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
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){}
|
||||
|
||||
public:
|
||||
_CP_OPT(std::wstring) property_name_;
|
||||
odf_types::common_value_and_type_attlist value_and_type_;
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(form_property);
|
||||
|
||||
// form:list-property
|
||||
class form_list_property : public office_element_impl<form_list_property>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeFormListProperty;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
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 docx_convert(oox::docx_conversion_context & Context) ;
|
||||
|
||||
public:
|
||||
_CP_OPT(std::wstring) property_name_;
|
||||
_CP_OPT(odf_types::office_value_type) value_type_;
|
||||
|
||||
office_element_ptr_array content_; // form:list-value
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(form_list_property);
|
||||
|
||||
// form:list-value
|
||||
class form_list_value : public office_element_impl<form_list_value>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeFormListValue;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
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){}
|
||||
|
||||
public:
|
||||
odf_types::common_value_and_type_attlist value_and_type_;
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(form_list_value);
|
||||
//-----------------------------------------------------------------------------------------------------
|
||||
|
||||
class form_element : public office_element_impl<form_element>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeFormElement;
|
||||
|
||||
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 docx_convert(oox::docx_conversion_context & Context) ;
|
||||
virtual void xlsx_convert(oox::xlsx_conversion_context & Context) {}
|
||||
virtual void pptx_convert(oox::pptx_conversion_context & Context) {}
|
||||
|
||||
virtual void docx_convert_sdt (oox::docx_conversion_context & Context, draw_control* draw) {}
|
||||
virtual void docx_convert_field (oox::docx_conversion_context & Context, draw_control* draw) {}
|
||||
form_element() {}
|
||||
|
||||
//CPDOCCORE_DEFINE_VISITABLE();
|
||||
friend class odf_document;
|
||||
//----------------------------------------------------------------------------------------------
|
||||
office_element_ptr office_event_listeners_;
|
||||
office_element_ptr properties_;
|
||||
|
||||
_CP_OPT(std::wstring) control_implementation_;
|
||||
_CP_OPT(std::wstring) data_field_;
|
||||
_CP_OPT(std::wstring) linked_cell_;//cell ref
|
||||
_CP_OPT(odf_types::Bool) disabled_;
|
||||
_CP_OPT(std::wstring) id_;
|
||||
_CP_OPT(std::wstring) label_;
|
||||
_CP_OPT(std::wstring) name_;
|
||||
_CP_OPT(odf_types::Bool) printable_;
|
||||
_CP_OPT(unsigned int) tab_index_;
|
||||
_CP_OPT(odf_types::Bool) tab_stop_;
|
||||
_CP_OPT(std::wstring) title_;
|
||||
_CP_OPT(std::wstring) value_;
|
||||
_CP_OPT(std::wstring) xml_id_;
|
||||
_CP_OPT(std::wstring) xforms_bind_;
|
||||
_CP_OPT(std::wstring) current_value_;
|
||||
};
|
||||
|
||||
// form:button
|
||||
class form_button : public form_element
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeFormButton;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual void docx_convert(oox::docx_conversion_context & Context) ;
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
|
||||
public:
|
||||
|
||||
//form:image-align
|
||||
//form:image-position
|
||||
//form:button-type 19.255,
|
||||
//form:default-button 19.265,
|
||||
//form:delayfor-repeat
|
||||
//form:focus-on-click
|
||||
//form:image-data
|
||||
//form:repeat
|
||||
//form:toggle
|
||||
//form:xforms-submission
|
||||
//office:target-frame
|
||||
//xlink:href
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(form_button);
|
||||
|
||||
// form:text
|
||||
class form_text : public form_element
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeFormText;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual void docx_convert (oox::docx_conversion_context & Context) ;
|
||||
virtual void docx_convert_sdt (oox::docx_conversion_context & Context, draw_control* draw);
|
||||
virtual void docx_convert_field (oox::docx_conversion_context & Context, draw_control* draw);
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
|
||||
public:
|
||||
//form:convert-empty-to-null
|
||||
//form:current-value
|
||||
//form:readonly
|
||||
//form:max-length
|
||||
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(form_text);
|
||||
|
||||
// form:checkbox
|
||||
class form_checkbox : public form_text
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeFormCheckbox;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual void docx_convert (oox::docx_conversion_context & Context) ;
|
||||
virtual void docx_convert_sdt (oox::docx_conversion_context & Context, draw_control *draw);
|
||||
virtual void docx_convert_field (oox::docx_conversion_context & Context, draw_control* draw);
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
|
||||
public:
|
||||
bool current_state_;
|
||||
//form:image-align
|
||||
//form:image-position
|
||||
//form:current-state
|
||||
//form:is-tristate
|
||||
//form:visual-effect
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(form_checkbox);
|
||||
|
||||
// form:combobox
|
||||
class form_combobox : public form_text
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeFormCombobox;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual void docx_convert (oox::docx_conversion_context & Context) ;
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
|
||||
public:
|
||||
//form:list-source-type
|
||||
//form:size
|
||||
//form:auto-complete
|
||||
//form:list-source
|
||||
//form:sourcecell-range
|
||||
//form:dropdown
|
||||
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(form_combobox);
|
||||
|
||||
// form:listbox
|
||||
class form_listbox : public form_element
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeFormListbox;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual void docx_convert (oox::docx_conversion_context & Context) ;
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
|
||||
public:
|
||||
//form:list-source-type
|
||||
//form:size
|
||||
//form:list-source
|
||||
//form:source-cell-range
|
||||
//form:dropdown
|
||||
//form:bound-column
|
||||
//form:xforms-list-source
|
||||
//form:multiple
|
||||
//form:listlinkage-type
|
||||
|
||||
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(form_listbox);
|
||||
|
||||
}
|
||||
}
|
||||
//<form:connection-resource>7.6.2,
|
||||
//<form:date> 13.5.8,
|
||||
//<form:file> 13.5.5,
|
||||
//<form:fixed-text> 13.5.10,
|
||||
//<form:form> 13.3,
|
||||
//<form:formatted-text> 13.5.6,
|
||||
//<form:frame> 13.5.19,
|
||||
//<form:generic-control> 13.5.25,
|
||||
//<form:grid> 13.5.22,
|
||||
//<form:hidden> 13.5.21,
|
||||
//<form:image> 13.5.16,
|
||||
//<form:image-frame> 13.5.20,
|
||||
//<form:number> 13.5.7,
|
||||
//<form:password> 13.5.4,
|
||||
//<form:radio> 13.5.18,
|
||||
//<form:textarea> 13.5.3,
|
||||
//<form:time>
|
||||
//<form:value-range> 13.5.24 and
|
||||
111
ASCOfficeOdfFile/src/odf/office_meta.cpp
Normal file
111
ASCOfficeOdfFile/src/odf/office_meta.cpp
Normal file
@ -0,0 +1,111 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2018
|
||||
*
|
||||
* 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 "office_meta.h"
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
|
||||
#include "serialize_elements.h"
|
||||
|
||||
namespace cpdoccore {
|
||||
namespace odf_reader {
|
||||
|
||||
// office:meta
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
const wchar_t * office_meta::ns = L"office";
|
||||
const wchar_t * office_meta::name = L"meta";
|
||||
|
||||
void office_meta::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
}
|
||||
|
||||
void office_meta::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
if (Ns==L"meta" && Name == L"generator")
|
||||
{
|
||||
CP_CREATE_ELEMENT(meta_generator_);
|
||||
}
|
||||
else if (Ns==L"meta" && Name == L"document-statistic")
|
||||
{
|
||||
CP_CREATE_ELEMENT(meta_document_statistic_);
|
||||
}
|
||||
else if (Ns==L"meta" && Name == L"user-defined")
|
||||
{
|
||||
CP_CREATE_ELEMENT(meta_user_defined_);
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
const wchar_t * meta_generator::ns = L"meta";
|
||||
const wchar_t * meta_generator::name = L"generator";
|
||||
|
||||
void meta_generator::add_text(const std::wstring & text)
|
||||
{
|
||||
content_ = text;
|
||||
}
|
||||
|
||||
// config_item
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
const wchar_t * meta_document_statistic::ns = L"meta";
|
||||
const wchar_t * meta_document_statistic::name = L"document-statistic";
|
||||
|
||||
void meta_document_statistic::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"meta:table-count", meta_table_count_);
|
||||
CP_APPLY_ATTR(L"meta:image-count", meta_image_count_);
|
||||
CP_APPLY_ATTR(L"meta:object-count", meta_object_count_);
|
||||
CP_APPLY_ATTR(L"meta:page-count", meta_page_count_);
|
||||
CP_APPLY_ATTR(L"meta:paragraph-count", meta_paragraph_count_);
|
||||
CP_APPLY_ATTR(L"meta:word-count", meta_word_count_);
|
||||
CP_APPLY_ATTR(L"meta:character-count", meta_character_count_);
|
||||
}
|
||||
|
||||
// meta_user_defined
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
const wchar_t * meta_user_defined::ns = L"meta";
|
||||
const wchar_t * meta_user_defined::name = L"user-defined";
|
||||
|
||||
void meta_user_defined::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"meta:name", meta_name_, std::wstring(L""));
|
||||
}
|
||||
|
||||
void meta_user_defined::add_text(const std::wstring & text)
|
||||
{
|
||||
content_ = text;
|
||||
}
|
||||
}
|
||||
}
|
||||
132
ASCOfficeOdfFile/src/odf/office_meta.h
Normal file
132
ASCOfficeOdfFile/src/odf/office_meta.h
Normal file
@ -0,0 +1,132 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2018
|
||||
*
|
||||
* 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 <iosfwd>
|
||||
#include <cpdoccore/CPOptional.h>
|
||||
#include <cpdoccore/xml/xmlelement.h>
|
||||
#include <cpdoccore/xml/nodetype.h>
|
||||
#include "office_elements.h"
|
||||
#include "office_elements_create.h"
|
||||
|
||||
namespace cpdoccore {
|
||||
namespace odf_reader {
|
||||
|
||||
// office:meta
|
||||
class office_meta : public office_element_impl<office_meta>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeOfficeMeta;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
office_element_ptr_array meta_user_defined_;
|
||||
office_element_ptr meta_generator_;
|
||||
office_element_ptr meta_document_statistic_;
|
||||
|
||||
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_REGISTER_OFFICE_ELEMENT2(office_meta);
|
||||
|
||||
// meta:generator
|
||||
class meta_generator : public office_element_impl<meta_generator>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeOfficeMetaGenerator;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
std::wstring content_;
|
||||
|
||||
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_REGISTER_OFFICE_ELEMENT2(meta_generator);
|
||||
|
||||
// meta:document-statistic
|
||||
class meta_document_statistic : public office_element_impl<meta_document_statistic>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeOfficeMetaDocumentStatistic;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
_CP_OPT(int) meta_table_count_;
|
||||
_CP_OPT(int) meta_image_count_;
|
||||
_CP_OPT(int) meta_object_count_;
|
||||
_CP_OPT(int) meta_page_count_;
|
||||
_CP_OPT(int) meta_paragraph_count_;
|
||||
_CP_OPT(int) meta_word_count_;
|
||||
_CP_OPT(int) meta_character_count_;
|
||||
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_REGISTER_OFFICE_ELEMENT2(meta_document_statistic);
|
||||
|
||||
// meta:user-defined
|
||||
class meta_user_defined : public office_element_impl<meta_user_defined>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeOfficeMetaUserDefined;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
std::wstring meta_name_;
|
||||
std::wstring content_;
|
||||
|
||||
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_REGISTER_OFFICE_ELEMENT2(meta_user_defined);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -52,7 +52,7 @@ void office_scripts::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
void office_scripts::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
if CP_CHECK_NAME(L"office", L"script")
|
||||
CP_CREATE_ELEMENT(office_script_);
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
else
|
||||
CP_NOT_APPLICABLE_ELM();
|
||||
}
|
||||
|
||||
@ -58,7 +58,7 @@ private:
|
||||
virtual void add_text(const std::wstring & Text);
|
||||
|
||||
private:
|
||||
office_element_ptr_array office_script_;
|
||||
office_element_ptr_array content_;
|
||||
|
||||
// office-event-listeners ?
|
||||
|
||||
|
||||
@ -100,7 +100,11 @@ bool is_text_content(const std::wstring & ns, const std::wstring & name)
|
||||
|
||||
void office_text::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
if CP_CHECK_NAME(L"text", L"tracked-changes")
|
||||
if CP_CHECK_NAME(L"office", L"forms")
|
||||
{
|
||||
CP_CREATE_ELEMENT(forms_);
|
||||
}
|
||||
else if CP_CHECK_NAME(L"text", L"tracked-changes")
|
||||
{
|
||||
CP_CREATE_ELEMENT(tracked_changes_);
|
||||
}
|
||||
@ -130,6 +134,9 @@ void office_text::add_child_element( xml::sax * Reader, const std::wstring & Ns,
|
||||
|
||||
void office_text::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
if (sequences_)
|
||||
sequences_->docx_convert(Context);
|
||||
|
||||
if (user_fields_)
|
||||
user_fields_->docx_convert(Context);
|
||||
|
||||
@ -142,7 +149,10 @@ void office_text::docx_convert(oox::docx_conversion_context & Context)
|
||||
if (tracked_changes_)
|
||||
tracked_changes_->docx_convert(Context);
|
||||
|
||||
Context.start_office_text();
|
||||
if (forms_)
|
||||
forms_->docx_convert(Context);
|
||||
|
||||
Context.start_office_text();
|
||||
for (size_t i = 0; i < content_.size(); i++)
|
||||
{
|
||||
content_[i]->docx_convert(Context);
|
||||
|
||||
@ -67,6 +67,7 @@ private:
|
||||
office_element_ptr user_fields_;
|
||||
office_element_ptr variables_;
|
||||
office_element_ptr sequences_;
|
||||
office_element_ptr forms_;
|
||||
|
||||
office_element_ptr_array content_;
|
||||
};
|
||||
|
||||
@ -91,7 +91,7 @@ void paragraph_content_element<ElementT>::docx_serialize_field(const std::wstrin
|
||||
}
|
||||
}
|
||||
template <class ElementT>
|
||||
void paragraph_content_element<ElementT>::docx_serialize_sdt(const std::wstring & name, office_element_ptr & text, oox::docx_conversion_context & Context)
|
||||
void paragraph_content_element<ElementT>::docx_serialize_sdt_placeholder(const std::wstring & name, office_element_ptr & text, oox::docx_conversion_context & Context)
|
||||
{
|
||||
std::wostream & strm = Context.output_stream();
|
||||
Context.finish_run();
|
||||
@ -101,11 +101,6 @@ void paragraph_content_element<ElementT>::docx_serialize_sdt(const std::wstring
|
||||
strm << L"\"/><w:temporary/>";
|
||||
strm << L"<w:showingPlcHdr/><w:text/></w:sdtPr><w:sdtContent>";
|
||||
|
||||
//if (!text)
|
||||
//{
|
||||
// text = text::create(L"Enter your text here") ;
|
||||
//}
|
||||
|
||||
docx_serialize_run(text, Context);
|
||||
|
||||
strm << L"</w:sdtContent></w:sdt>";
|
||||
@ -153,7 +148,13 @@ void text::docx_convert(oox::docx_conversion_context & Context)
|
||||
Context.output_stream() << L"<w:del>";
|
||||
}
|
||||
}
|
||||
|
||||
if (Context.is_table_content())
|
||||
{
|
||||
int type = Context.get_table_content_context().get_type_current_content_template_index();
|
||||
if (type == 6)
|
||||
{
|
||||
}
|
||||
}
|
||||
Context.add_element_to_run();
|
||||
|
||||
std::wstring textNode = L"w:t";
|
||||
@ -287,13 +288,25 @@ std::wostream & line_break::text_to_stream(std::wostream & _Wostream) const
|
||||
_Wostream << std::wstring(L"\r\n");
|
||||
return _Wostream;
|
||||
}
|
||||
|
||||
void line_break::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
Context.add_element_to_run();
|
||||
Context.output_stream() << L"<w:br/>";
|
||||
}
|
||||
bool in_drawing = false;
|
||||
|
||||
if (Context.get_drawing_context().get_current_shape() || Context.get_drawing_context().get_current_frame())
|
||||
{
|
||||
in_drawing = true;
|
||||
|
||||
Context.finish_run();
|
||||
Context.finish_paragraph();
|
||||
Context.start_paragraph();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Context.add_element_to_run();
|
||||
Context.output_stream() << L"<w:br/>";
|
||||
}
|
||||
}
|
||||
void line_break::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
{
|
||||
Context.get_text_context().add_text(L"\n");
|
||||
@ -307,54 +320,78 @@ void line_break::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
const wchar_t * bookmark::ns = L"text";
|
||||
const wchar_t * bookmark::name = L"bookmark";
|
||||
|
||||
std::wostream & bookmark::text_to_stream(std::wostream & _Wostream) const
|
||||
{
|
||||
return _Wostream;
|
||||
}
|
||||
|
||||
void bookmark::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:name", text_name_, std::wstring(L""));
|
||||
}
|
||||
|
||||
std::wostream & bookmark::text_to_stream(std::wostream & _Wostream) const
|
||||
{
|
||||
return _Wostream;
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * bookmark_start::ns = L"text";
|
||||
const wchar_t * bookmark_start::name = L"bookmark-start";
|
||||
|
||||
void bookmark_start::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:name", name_, std::wstring(L""));
|
||||
}
|
||||
void bookmark_start::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
Context.start_bookmark(name_);
|
||||
}
|
||||
std::wostream & bookmark_start::text_to_stream(std::wostream & _Wostream) const
|
||||
{
|
||||
return _Wostream;
|
||||
}
|
||||
|
||||
void bookmark_start::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:name", text_name_, std::wstring(L""));
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * bookmark_end::ns = L"text";
|
||||
const wchar_t * bookmark_end::name = L"bookmark-end";
|
||||
|
||||
void bookmark_end::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:name", name_, std::wstring(L""));
|
||||
}
|
||||
void bookmark_end::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
Context.end_bookmark(name_);
|
||||
}
|
||||
std::wostream & bookmark_end::text_to_stream(std::wostream & _Wostream) const
|
||||
{
|
||||
return _Wostream;
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * bookmark_ref::ns = L"text";
|
||||
const wchar_t * bookmark_ref::name = L"bookmark-ref";
|
||||
|
||||
void bookmark_end::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
void bookmark_ref::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:name", text_name_, std::wstring(L""));
|
||||
CP_APPLY_ATTR(L"text:ref-name", ref_name_, std::wstring(L""));
|
||||
CP_APPLY_ATTR(L"text:reference-format", reference_format_);
|
||||
}
|
||||
void bookmark_ref::add_text(const std::wstring & Text)
|
||||
{
|
||||
content_ = Text;
|
||||
}
|
||||
// text:reference-ref
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
const wchar_t * reference_ref::ns = L"text";
|
||||
const wchar_t * reference_ref::name = L"reference-ref";
|
||||
|
||||
void reference_ref::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:ref-name", ref_name_, std::wstring(L""));
|
||||
CP_APPLY_ATTR(L"text:reference-format", reference_format_);
|
||||
}
|
||||
void reference_ref::add_text(const std::wstring & Text)
|
||||
{
|
||||
content_ = Text;
|
||||
}
|
||||
// text:reference-mark
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
const wchar_t * reference_mark::ns = L"text";
|
||||
const wchar_t * reference_mark::name = L"reference-mark";
|
||||
|
||||
std::wostream & reference_mark::text_to_stream(std::wostream & _Wostream) const
|
||||
{
|
||||
return _Wostream;
|
||||
}
|
||||
|
||||
void reference_mark::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:name", text_name_, std::wstring(L""));
|
||||
@ -365,11 +402,6 @@ void reference_mark::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
const wchar_t * reference_mark_start::ns = L"text";
|
||||
const wchar_t * reference_mark_start::name = L"reference-mark-start";
|
||||
|
||||
std::wostream & reference_mark_start::text_to_stream(std::wostream & _Wostream) const
|
||||
{
|
||||
return _Wostream;
|
||||
}
|
||||
|
||||
void reference_mark_start::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:name", text_name_, std::wstring(L""));
|
||||
@ -380,16 +412,43 @@ void reference_mark_start::add_attributes( const xml::attributes_wc_ptr & Attrib
|
||||
const wchar_t * reference_mark_end::ns = L"text";
|
||||
const wchar_t * reference_mark_end::name = L"reference-mark-end";
|
||||
|
||||
std::wostream & reference_mark_end::text_to_stream(std::wostream & _Wostream) const
|
||||
{
|
||||
return _Wostream;
|
||||
}
|
||||
|
||||
void reference_mark_end::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:name", text_name_, std::wstring(L""));
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * hidden_paragraph::ns = L"text";
|
||||
const wchar_t * hidden_paragraph::name = L"hidden-paragraph";
|
||||
|
||||
void hidden_paragraph::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:is-hidden", is_hidden_);
|
||||
CP_APPLY_ATTR(L"text:condition", condition_);
|
||||
}
|
||||
void hidden_paragraph::add_text(const std::wstring & Text)
|
||||
{
|
||||
content_ = Text;
|
||||
}
|
||||
void hidden_paragraph::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * hidden_text::ns = L"text";
|
||||
const wchar_t * hidden_text::name = L"hidden-text";
|
||||
|
||||
void hidden_text::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:is-hidden", is_hidden_);
|
||||
CP_APPLY_ATTR(L"text:condition", condition_);
|
||||
CP_APPLY_ATTR(L"text:string-value", string_value_);
|
||||
}
|
||||
void hidden_text::add_text(const std::wstring & Text)
|
||||
{
|
||||
content_ = Text;
|
||||
}
|
||||
void hidden_text::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * span::ns = L"text";
|
||||
const wchar_t * span::name = L"span";
|
||||
@ -518,7 +577,7 @@ std::wostream & a::text_to_stream(std::wostream & _Wostream) const
|
||||
|
||||
void a::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
common_xlink_attlist_.add_attributes(Attributes);
|
||||
xlink_attlist_.add_attributes(Attributes);
|
||||
|
||||
CP_APPLY_ATTR(L"office:name", office_name_, std::wstring(L""));
|
||||
CP_APPLY_ATTR(L"office:target-frame-name", office_target_frame_name_);
|
||||
@ -539,25 +598,36 @@ void a::add_text(const std::wstring & Text)
|
||||
|
||||
void a::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
bool pushed = false;
|
||||
bool addNewRun = false;
|
||||
bool pushed_style = false;
|
||||
|
||||
bool addNewRun = false;
|
||||
Context.finish_run();
|
||||
style_text_properties_ptr tempStyleTextProp;
|
||||
|
||||
|
||||
std::wostream & _Wostream = Context.output_stream();
|
||||
|
||||
std::wstring rId;
|
||||
rId = Context.add_hyperlink(common_xlink_attlist_.href_.get_value_or(L""), false);
|
||||
|
||||
_Wostream << L"<w:hyperlink r:id=\"" << rId << L"\">";
|
||||
std::wstring ref = xlink_attlist_.href_.get_value_or(L"");
|
||||
|
||||
if (Context.is_table_content())
|
||||
{
|
||||
_Wostream << L"<w:hyperlink w:anchor=\"" << ref.substr(1) << L"\" w:history=\"1\">"; //без #
|
||||
int type = Context.get_table_content_context().get_type_current_content_template_index();
|
||||
//type == 3 (LinkStart)
|
||||
Context.get_table_content_context().next_level_index();
|
||||
}
|
||||
else
|
||||
{
|
||||
std::wstring rId;
|
||||
rId = Context.add_hyperlink(ref, false);
|
||||
|
||||
_Wostream << L"<w:hyperlink r:id=\"" << rId << L"\">";
|
||||
}
|
||||
|
||||
style_instance * styleInst = NULL;
|
||||
|
||||
style_text_properties_ptr tempStyleTextProp;
|
||||
|
||||
if (!text_style_name_.empty())
|
||||
styleInst = Context.root()->odf_context().styleContainer().style_by_name(text_style_name_, style_family::Text,Context.process_headers_footers_);
|
||||
else
|
||||
styleInst = Context.root()->odf_context().styleContainer().style_by_name(text_style_name_, style_family::Text, Context.process_headers_footers_);
|
||||
else if (false == Context.is_table_content())
|
||||
styleInst = Context.root()->odf_context().styleContainer().hyperlink_style();
|
||||
|
||||
if (styleInst)
|
||||
@ -567,7 +637,7 @@ void a::docx_convert(oox::docx_conversion_context & Context)
|
||||
if (const style_content * styleContent = styleInst->content())
|
||||
{
|
||||
Context.push_text_properties(styleContent->get_style_text_properties());
|
||||
pushed = true;
|
||||
pushed_style = true;
|
||||
Context.get_styles_context().start_process_style(styleInst);
|
||||
Context.add_new_run();
|
||||
Context.get_styles_context().end_process_style();
|
||||
@ -576,16 +646,15 @@ void a::docx_convert(oox::docx_conversion_context & Context)
|
||||
}
|
||||
else
|
||||
{
|
||||
const std::wstring id = Context.styles_map_.get( styleInst->name(), styleInst->type() );
|
||||
const std::wstring id = Context.styles_map_.get( styleInst->name(), styleInst->type() );
|
||||
tempStyleTextProp = style_text_properties_ptr( new style_text_properties(id) );
|
||||
Context.push_text_properties( tempStyleTextProp.get() );
|
||||
pushed = true;
|
||||
pushed_style = true;
|
||||
|
||||
Context.add_new_run();
|
||||
addNewRun = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!addNewRun)
|
||||
Context.add_new_run();
|
||||
@ -593,11 +662,15 @@ void a::docx_convert(oox::docx_conversion_context & Context)
|
||||
for (size_t i = 0; i < content_.size(); i++)
|
||||
{
|
||||
content_[i]->docx_convert(Context);
|
||||
}
|
||||
if (Context.is_table_content())
|
||||
{
|
||||
Context.get_table_content_context().next_level_index();
|
||||
}
|
||||
}
|
||||
|
||||
Context.finish_run();
|
||||
|
||||
if (pushed)
|
||||
if (pushed_style)
|
||||
Context.pop_text_properties();
|
||||
_Wostream << L"</w:hyperlink>";
|
||||
}
|
||||
@ -609,7 +682,7 @@ void a::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
{
|
||||
content_[i]->xlsx_convert(Context);
|
||||
}
|
||||
Context.end_hyperlink(common_xlink_attlist_.href_.get_value_or(L""));
|
||||
Context.end_hyperlink(xlink_attlist_.href_.get_value_or(L""));
|
||||
}
|
||||
void a::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
{
|
||||
@ -619,7 +692,7 @@ void a::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
content_[i]->pptx_convert(Context);
|
||||
}
|
||||
|
||||
std::wstring hId = Context.get_slide_context().add_hyperlink(common_xlink_attlist_.href_.get_value_or(L""));
|
||||
std::wstring hId = Context.get_slide_context().add_hyperlink(xlink_attlist_.href_.get_value_or(L""));
|
||||
Context.get_text_context().end_hyperlink(hId);
|
||||
|
||||
}
|
||||
@ -890,7 +963,7 @@ void text_placeholder::add_text(const std::wstring & Text)
|
||||
|
||||
void text_placeholder::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
docx_serialize_sdt(L"Click placeholder and overwrite", text_, Context);
|
||||
docx_serialize_sdt_placeholder(L"Click placeholder and overwrite", text_, Context);
|
||||
}
|
||||
|
||||
void text_placeholder::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
@ -1126,19 +1199,38 @@ void text_file_name::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
// Context.get_text_context().end_field();
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * sequence_ref::ns = L"text";
|
||||
const wchar_t * sequence_ref::name = L"sequence-ref";
|
||||
|
||||
void sequence_ref::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:ref-name", ref_name_);
|
||||
CP_APPLY_ATTR(L"text:reference-format", reference_format_);
|
||||
}
|
||||
void sequence_ref::add_text(const std::wstring & Text)
|
||||
{
|
||||
content_ = Text;
|
||||
}
|
||||
void sequence_ref::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * sequence::ns = L"text";
|
||||
const wchar_t * sequence::name = L"sequence";
|
||||
|
||||
void sequence::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"style:num-format", style_num_format_);
|
||||
CP_APPLY_ATTR(L"style:num-letter-sync", style_num_letter_sync_);
|
||||
CP_APPLY_ATTR(L"text:formula", formula_);
|
||||
CP_APPLY_ATTR(L"text:ref-name", ref_name_);
|
||||
CP_APPLY_ATTR(L"text:name", name_);
|
||||
}
|
||||
std::wostream & sequence::text_to_stream(std::wostream & _Wostream) const
|
||||
{
|
||||
CP_SERIALIZE_TEXT(text_);
|
||||
return _Wostream;
|
||||
}
|
||||
|
||||
void sequence::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
}
|
||||
|
||||
void sequence::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
CP_CREATE_ELEMENT(text_);
|
||||
@ -1152,10 +1244,53 @@ void sequence::add_text(const std::wstring & Text)
|
||||
|
||||
void sequence::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
for (size_t i = 0; i < text_.size(); i++)
|
||||
{
|
||||
text_[i]->docx_convert(Context);
|
||||
}
|
||||
std::wstring ref, sequence;
|
||||
if (ref_name_)
|
||||
{
|
||||
sequence = Context.get_table_content_context().get_sequence(*ref_name_);
|
||||
size_t pos = ref_name_->find(L"ref" + ref);
|
||||
if (pos != std::wstring::npos)
|
||||
{
|
||||
ref = sequence + L"!" + ref_name_->substr(pos + 3 + sequence.length()) + L"|sequence";
|
||||
}
|
||||
}
|
||||
//if (!ref.empty())
|
||||
//{
|
||||
// Context.start_bookmark(ref);
|
||||
//}
|
||||
|
||||
Context.add_new_run();
|
||||
Context.output_stream() << L"<w:t>" << template_ << L"</w:t>";
|
||||
Context.finish_run();
|
||||
|
||||
std::wstring num_format = L"ARABIC";
|
||||
if (style_num_format_)
|
||||
{
|
||||
switch(style_num_format_->get_type())
|
||||
{
|
||||
case odf_types::style_numformat::romanUc: num_format= L"ROMANUC"; break;
|
||||
case odf_types::style_numformat::romanLc: num_format= L"ROMANLC"; break;
|
||||
case odf_types::style_numformat::alphaUc: num_format= L"ALPHAUC"; break;
|
||||
case odf_types::style_numformat::alphaLc: num_format= L"ALPHALC"; break;
|
||||
case odf_types::style_numformat::arabic:
|
||||
default:
|
||||
num_format= L"ARABIC"; break;
|
||||
}
|
||||
}
|
||||
|
||||
Context.output_stream() << L"<w:fldSimple w:instr=\" SEQ " << sequence << L" \\* " << num_format << L" \">";
|
||||
Context.add_new_run();
|
||||
for (size_t i = 0; i < text_.size(); i++)
|
||||
{
|
||||
text_[i]->docx_convert(Context);
|
||||
}
|
||||
Context.finish_run();
|
||||
|
||||
//if (!ref.empty())
|
||||
//{
|
||||
// Context.end_bookmark(ref);
|
||||
//}
|
||||
Context.output_stream() << L"</w:fldSimple>";
|
||||
}
|
||||
void sequence::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
{
|
||||
@ -1241,7 +1376,7 @@ void sheet_name::add_text(const std::wstring & Text)
|
||||
}
|
||||
void sheet_name::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
docx_serialize_sdt(L"sheet name", text_, Context);
|
||||
docx_serialize_sdt_placeholder(L"sheet name", text_, Context);
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * author_name::ns = L"text";
|
||||
@ -1287,7 +1422,7 @@ void sender_city::add_text(const std::wstring & Text)
|
||||
}
|
||||
void sender_city::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
docx_serialize_sdt(L"Sender city", text_, Context);
|
||||
docx_serialize_sdt_placeholder(L"Sender city", text_, Context);
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * sender_email::ns = L"text";
|
||||
@ -1302,7 +1437,7 @@ void sender_email::add_text(const std::wstring & Text)
|
||||
}
|
||||
void sender_email::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
docx_serialize_sdt(L"Sender email", text_, Context);
|
||||
docx_serialize_sdt_placeholder(L"Sender email", text_, Context);
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * sender_lastname::ns = L"text";
|
||||
@ -1317,7 +1452,7 @@ void sender_lastname::add_text(const std::wstring & Text)
|
||||
}
|
||||
void sender_lastname::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
docx_serialize_sdt(L"Sender last name", text_, Context);
|
||||
docx_serialize_sdt_placeholder(L"Sender last name", text_, Context);
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * sender_firstname::ns = L"text";
|
||||
@ -1332,7 +1467,7 @@ void sender_firstname::add_text(const std::wstring & Text)
|
||||
}
|
||||
void sender_firstname::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
docx_serialize_sdt(L"Sender first name", text_, Context);
|
||||
docx_serialize_sdt_placeholder(L"Sender first name", text_, Context);
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * sender_company::ns = L"text";
|
||||
@ -1347,7 +1482,7 @@ void sender_company::add_text(const std::wstring & Text)
|
||||
}
|
||||
void sender_company::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
docx_serialize_sdt(L"Sender company", text_, Context);
|
||||
docx_serialize_sdt_placeholder(L"Sender company", text_, Context);
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * sender_postal_code::ns = L"text";
|
||||
@ -1369,7 +1504,7 @@ void sender_postal_code::add_text(const std::wstring & Text)
|
||||
}
|
||||
void sender_postal_code::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
docx_serialize_sdt(L"Sender postal code", text_, Context);
|
||||
docx_serialize_sdt_placeholder(L"Sender postal code", text_, Context);
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * sender_street::ns = L"text";
|
||||
@ -1384,7 +1519,7 @@ void sender_street::add_text(const std::wstring & Text)
|
||||
}
|
||||
void sender_street::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
docx_serialize_sdt(L"Sender street", text_, Context);
|
||||
docx_serialize_sdt_placeholder(L"Sender street", text_, Context);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
@ -1400,7 +1535,7 @@ void sender_state_or_province::add_text(const std::wstring & Text)
|
||||
}
|
||||
void sender_state_or_province::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
docx_serialize_sdt(L"Sender state or province", text_, Context);
|
||||
docx_serialize_sdt_placeholder(L"Sender state or province", text_, Context);
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
const wchar_t * text_user_field_get::ns = L"text";
|
||||
@ -1423,11 +1558,420 @@ void text_user_field_get::docx_convert(oox::docx_conversion_context & Context)
|
||||
if (!text_)
|
||||
{
|
||||
std::wstring value = Context.get_user_field(*text_name_);
|
||||
text_ = text::create(value) ;
|
||||
|
||||
if (!value.empty())
|
||||
text_ = text::create(value) ;
|
||||
}
|
||||
|
||||
docx_serialize_run(text_, Context);
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
const wchar_t * text_user_defined::ns = L"text";
|
||||
const wchar_t * text_user_defined::name = L"user-defined";
|
||||
|
||||
void text_user_defined::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:name", text_name_);
|
||||
CP_APPLY_ATTR(L"text:fixed", text_fixed_);
|
||||
|
||||
office_value_.add_attributes(Attributes);
|
||||
}
|
||||
void text_user_defined::add_text(const std::wstring & Text)
|
||||
{
|
||||
text_ = text::create(Text) ;//cache
|
||||
}
|
||||
void text_user_defined::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
if (!text_name_) return;
|
||||
|
||||
odf_reader::odf_read_context & odfContext = Context.root()->odf_context();
|
||||
|
||||
std::wstring value = odfContext.Settings().get_user_defined(*text_name_);
|
||||
if (!value.empty())
|
||||
text_ = text::create(value) ;
|
||||
|
||||
docx_serialize_run(text_, Context);
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// text:bibliography-mark
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
const wchar_t * bibliography_mark::ns = L"text";
|
||||
const wchar_t * bibliography_mark::name = L"bibliography-mark";
|
||||
|
||||
void bibliography_mark::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:identifier", identifier_, std::wstring(L""));
|
||||
CP_APPLY_ATTR(L"text:bibliography-type",bibliography_type_, odf_types::bibliography(odf_types::bibliography::book));
|
||||
CP_APPLY_ATTR(L"text:author", author_);
|
||||
CP_APPLY_ATTR(L"text:url", url_);
|
||||
CP_APPLY_ATTR(L"text:title", title_);
|
||||
CP_APPLY_ATTR(L"text:year", year_);
|
||||
CP_APPLY_ATTR(L"text:address", address_);
|
||||
CP_APPLY_ATTR(L"text:annote", annote_);
|
||||
CP_APPLY_ATTR(L"text:booktitle", booktitle_);
|
||||
CP_APPLY_ATTR(L"text:edition", edition_);
|
||||
CP_APPLY_ATTR(L"text:editor_", editor_);
|
||||
CP_APPLY_ATTR(L"text:howpublished", howpublished_);
|
||||
CP_APPLY_ATTR(L"text:institution", institution_);
|
||||
CP_APPLY_ATTR(L"text:issn", issn_);
|
||||
CP_APPLY_ATTR(L"text:journal", journal_);
|
||||
CP_APPLY_ATTR(L"text:month", month_);
|
||||
CP_APPLY_ATTR(L"text:note", note_);
|
||||
CP_APPLY_ATTR(L"text:number", number_);
|
||||
CP_APPLY_ATTR(L"text:organizations", organizations_);
|
||||
CP_APPLY_ATTR(L"text:pages", pages_);
|
||||
CP_APPLY_ATTR(L"text:publisher", publisher_);
|
||||
CP_APPLY_ATTR(L"text:report-type", report_type_);
|
||||
CP_APPLY_ATTR(L"text:school", school_);
|
||||
CP_APPLY_ATTR(L"text:series", series_);
|
||||
CP_APPLY_ATTR(L"text:volume", volume_);
|
||||
}
|
||||
|
||||
void bibliography_mark::add_text(const std::wstring & Text)
|
||||
{
|
||||
office_element_ptr elm = text::create(Text) ;
|
||||
content_ = elm;
|
||||
}
|
||||
|
||||
std::wostream & bibliography_mark::text_to_stream(std::wostream & _Wostream) const
|
||||
{
|
||||
CP_SERIALIZE_TEXT(content_);
|
||||
return _Wostream;
|
||||
}
|
||||
void bibliography_mark::serialize(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"b:Tag")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(identifier_);
|
||||
}
|
||||
CP_XML_NODE(L"b:SourceType")
|
||||
{
|
||||
std::wstring type;
|
||||
switch(bibliography_type_.get_type())
|
||||
{
|
||||
case odf_types::bibliography::article: type = L"ArticleInAPeriodical"; break;
|
||||
case odf_types::bibliography::book: type = L"Book"; break;
|
||||
case odf_types::bibliography::booklet: type = L"BookSection"; break;
|
||||
case odf_types::bibliography::conference: type = L"ConferenceProceedings"; break;
|
||||
case odf_types::bibliography::email: type = L"ElectronicSource"; break;
|
||||
case odf_types::bibliography::inbook: type = L"Book"; break;
|
||||
case odf_types::bibliography::incollection: type = L"Misc"; break;
|
||||
case odf_types::bibliography::inproceedings: type = L"Misc"; break;
|
||||
case odf_types::bibliography::journal: type = L"JournalArticle"; break;
|
||||
case odf_types::bibliography::manual: type = L"ElectronicSource"; break;
|
||||
case odf_types::bibliography::mastersthesis: type = L"Misc"; break;
|
||||
case odf_types::bibliography::misc: type = L"Misc"; break;
|
||||
case odf_types::bibliography::phdthesis: type = L"Misc"; break;
|
||||
case odf_types::bibliography::proceedings: type = L"ConferenceProceedings"; break;
|
||||
case odf_types::bibliography::techreport: type = L"Report"; break;
|
||||
case odf_types::bibliography::unpublished: type = L"Misc"; break;
|
||||
case odf_types::bibliography::www: type = L"InternetSite"; break;
|
||||
}
|
||||
CP_XML_STREAM() << type;
|
||||
}
|
||||
//CP_XML_NODE(L"b:Guid")
|
||||
//{
|
||||
//}
|
||||
if (title_)
|
||||
{
|
||||
CP_XML_NODE(L"b:Title")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*title_);
|
||||
}
|
||||
}
|
||||
if (author_)
|
||||
{
|
||||
CP_XML_NODE(L"b:Author")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*author_);
|
||||
}
|
||||
}
|
||||
if (year_)
|
||||
{
|
||||
CP_XML_NODE(L"b:Year")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*year_);
|
||||
}
|
||||
}
|
||||
if (url_)
|
||||
{
|
||||
CP_XML_NODE(L"b:InternetSiteTitle")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*url_);
|
||||
}
|
||||
}
|
||||
if (note_)
|
||||
{
|
||||
CP_XML_NODE(L"b:Comments")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*note_);
|
||||
}
|
||||
}
|
||||
if (chapter_)
|
||||
{
|
||||
CP_XML_NODE(L"b:ChapterNumber")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*chapter_);
|
||||
}
|
||||
}
|
||||
if (journal_)
|
||||
{
|
||||
CP_XML_NODE(L"b:JournalName")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*journal_);
|
||||
}
|
||||
}
|
||||
if (month_)
|
||||
{
|
||||
CP_XML_NODE(L"b:Month")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*month_);
|
||||
}
|
||||
}
|
||||
if (pages_)
|
||||
{
|
||||
CP_XML_NODE(L"b:Pages")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*pages_);
|
||||
}
|
||||
}
|
||||
if (publisher_)
|
||||
{
|
||||
CP_XML_NODE(L"b:Publisher")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*publisher_);
|
||||
}
|
||||
}
|
||||
if (volume_)
|
||||
{
|
||||
CP_XML_NODE(L"b:Volume")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*volume_);
|
||||
}
|
||||
}
|
||||
if (address_)
|
||||
{
|
||||
CP_XML_NODE(L"b:City")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*address_);
|
||||
}
|
||||
}
|
||||
if (booktitle_)
|
||||
{
|
||||
CP_XML_NODE(L"b:BookTitle")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*booktitle_);
|
||||
}
|
||||
}
|
||||
if (edition_)
|
||||
{
|
||||
CP_XML_NODE(L"b:Edition")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*edition_);
|
||||
}
|
||||
}
|
||||
if (institution_)
|
||||
{
|
||||
CP_XML_NODE(L"b:Institution")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*institution_);
|
||||
}
|
||||
}
|
||||
if (institution_)
|
||||
{
|
||||
CP_XML_NODE(L"b:Institution")
|
||||
{
|
||||
CP_XML_STREAM() << XmlUtils::EncodeXmlString(*institution_);
|
||||
}
|
||||
}
|
||||
//isbn_;
|
||||
//annote_;
|
||||
//editor_;
|
||||
//howpublished_;
|
||||
//issn_;
|
||||
//number_;
|
||||
//organizations_;
|
||||
//report_type_;
|
||||
//school_;
|
||||
//series_;
|
||||
}
|
||||
}
|
||||
void bibliography_mark::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
std::wstringstream strm;
|
||||
serialize(strm);
|
||||
|
||||
Context.add_bibliography_item(strm.str());
|
||||
}
|
||||
|
||||
void bibliography_mark::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
{
|
||||
std::wstringstream strm;
|
||||
serialize(strm);
|
||||
|
||||
//if (content_)
|
||||
// content_->pptx_convert(Context);
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// text:alphabetical-index-auto-mark-file
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
const wchar_t * alphabetical_index_auto_mark_file::ns = L"text";
|
||||
const wchar_t * alphabetical_index_auto_mark_file::name = L"alphabetical-index-auto-mark-file";
|
||||
|
||||
void alphabetical_index_auto_mark_file::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
xlink_attlist_.add_attributes(Attributes);
|
||||
}
|
||||
void alphabetical_index_auto_mark_file::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// text:alphabetical-index-mark
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
const wchar_t * alphabetical_index_mark::ns = L"text";
|
||||
const wchar_t * alphabetical_index_mark::name = L"alphabetical-index-mark";
|
||||
|
||||
void alphabetical_index_mark::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:key1", key1_);
|
||||
CP_APPLY_ATTR(L"text:key1-phonetic", key1_phonetic_);
|
||||
CP_APPLY_ATTR(L"text:key2", key2_);
|
||||
CP_APPLY_ATTR(L"text:key2-phonetic", key2_phonetic_);
|
||||
CP_APPLY_ATTR(L"text:main-entry", main_entry_);
|
||||
CP_APPLY_ATTR(L"text:string-value", string_value_);
|
||||
CP_APPLY_ATTR(L"text:string-value-phonetic", string_value_phonetic_);
|
||||
}
|
||||
void alphabetical_index_mark::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
if (!string_value_) return;
|
||||
|
||||
Context.finish_run();
|
||||
|
||||
Context.output_stream() << L"<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>";
|
||||
Context.output_stream() << L"<w:r><w:instrText> XE \"" << *string_value_ << L"\"</w:instrText></w:r><w:r><w:fldChar w:fldCharType=\"end\"/></w:r>";
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// text:alphabetical-index-mark-start
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
const wchar_t * alphabetical_index_mark_start::ns = L"text";
|
||||
const wchar_t * alphabetical_index_mark_start::name = L"alphabetical-index-mark-start";
|
||||
|
||||
void alphabetical_index_mark_start::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:id", id_, std::wstring(L""));
|
||||
CP_APPLY_ATTR(L"text:key1", key1_);
|
||||
CP_APPLY_ATTR(L"text:key1-phonetic", key1_phonetic_);
|
||||
CP_APPLY_ATTR(L"text:key2", key2_);
|
||||
CP_APPLY_ATTR(L"text:key2-phonetic", key2_phonetic_);
|
||||
CP_APPLY_ATTR(L"text:main-entry", main_entry_);
|
||||
CP_APPLY_ATTR(L"text:string-value-phonetic", string_value_phonetic_);
|
||||
}
|
||||
void alphabetical_index_mark_start::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
Context.start_alphabetical_index(id_);
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// text:alphabetical-index-mark-end
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
const wchar_t * alphabetical_index_mark_end::ns = L"text";
|
||||
const wchar_t * alphabetical_index_mark_end::name = L"alphabetical-index-mark-end";
|
||||
|
||||
void alphabetical_index_mark_end::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:id", id_, std::wstring(L""));
|
||||
}
|
||||
void alphabetical_index_mark_end::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
Context.end_alphabetical_index(id_);
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// text:user-index-mark
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
const wchar_t * user_index_mark::ns = L"text";
|
||||
const wchar_t * user_index_mark::name = L"user-index-mark";
|
||||
|
||||
void user_index_mark::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:index-name", index_name_);
|
||||
CP_APPLY_ATTR(L"text:outline-level", outline_level_);
|
||||
CP_APPLY_ATTR(L"text:string-value", string_value_);
|
||||
}
|
||||
void user_index_mark::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// text:user-index-mark-start
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
const wchar_t * user_index_mark_start::ns = L"text";
|
||||
const wchar_t * user_index_mark_start::name = L"user-index-mark-start";
|
||||
|
||||
void user_index_mark_start::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:id", id_, std::wstring(L""));
|
||||
CP_APPLY_ATTR(L"text:index-name", index_name_);
|
||||
CP_APPLY_ATTR(L"text:outline-level", outline_level_);
|
||||
}
|
||||
void user_index_mark_start::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// text:user-index-mark-end
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
const wchar_t * user_index_mark_end::ns = L"text";
|
||||
const wchar_t * user_index_mark_end::name = L"user-index-mark-end";
|
||||
|
||||
void user_index_mark_end::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:id", id_, std::wstring(L""));
|
||||
}
|
||||
void user_index_mark_end::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// text:toc-mark
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
const wchar_t * toc_mark::ns = L"text";
|
||||
const wchar_t * toc_mark::name = L"toc-mark";
|
||||
|
||||
void toc_mark::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:outline-level", outline_level_);
|
||||
CP_APPLY_ATTR(L"text:string-value", string_value_);
|
||||
}
|
||||
void toc_mark::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// text:toc-mark-start
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
const wchar_t * toc_mark_start::ns = L"text";
|
||||
const wchar_t * toc_mark_start::name = L"toc-mark-start";
|
||||
|
||||
void toc_mark_start::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:id", id_, std::wstring(L""));
|
||||
CP_APPLY_ATTR(L"text:outline-level", outline_level_);
|
||||
}
|
||||
void toc_mark_start::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// text:toc-mark-end
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
const wchar_t * toc_mark_end::ns = L"text";
|
||||
const wchar_t * toc_mark_end::name = L"toc-mark-end";
|
||||
|
||||
void toc_mark_end::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:id", id_, std::wstring(L""));
|
||||
}
|
||||
void toc_mark_end::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
}//namespace text
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
@ -1446,6 +1990,17 @@ void presentation_date_time::pptx_convert(oox::pptx_conversion_context & Context
|
||||
{
|
||||
Context.get_text_context().start_field(oox::date, L"");
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * field_fieldmark_start::ns = L"field";
|
||||
const wchar_t * field_fieldmark_start::name = L"fieldmark-start";
|
||||
|
||||
void field_fieldmark_start::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:name", text_name_);
|
||||
CP_APPLY_ATTR(L"field:type", field_type_);
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * field_fieldmark_end::ns = L"field";
|
||||
const wchar_t * field_fieldmark_end::name = L"fieldmark-end";
|
||||
}
|
||||
}
|
||||
|
||||
@ -42,6 +42,7 @@
|
||||
#include "datatypes/targetframename.h"
|
||||
#include "datatypes/noteclass.h"
|
||||
#include "datatypes/bool.h"
|
||||
#include "datatypes/bibliography.h"
|
||||
|
||||
#include "../docx/docx_conversion_context.h"
|
||||
|
||||
@ -56,7 +57,7 @@ template <class ElementT>
|
||||
class paragraph_content_element : public office_element_impl<ElementT>
|
||||
{
|
||||
public:
|
||||
void docx_serialize_sdt(const std::wstring & name, office_element_ptr & text, oox::docx_conversion_context & Context);
|
||||
void docx_serialize_sdt_placeholder(const std::wstring & name, office_element_ptr & text, oox::docx_conversion_context & Context);
|
||||
void docx_serialize_field(const std::wstring & field_name, office_element_ptr & text, oox::docx_conversion_context & Context, bool bLock = false);
|
||||
void docx_serialize_run(office_element_ptr & text, oox::docx_conversion_context & Context);
|
||||
};
|
||||
@ -175,8 +176,6 @@ public:
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
line_break() {};
|
||||
|
||||
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) {}
|
||||
@ -199,17 +198,13 @@ public:
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
bookmark() {}
|
||||
bookmark(const std::wstring & Name) : text_name_(Name){};
|
||||
|
||||
const std::wstring & attr_name() const { return text_name_; }
|
||||
std::wstring text_name_;
|
||||
|
||||
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) {}
|
||||
|
||||
std::wstring text_name_;
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(bookmark);
|
||||
@ -226,11 +221,9 @@ public:
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
virtual void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
bookmark_start() {}
|
||||
bookmark_start(const std::wstring & Name) : text_name_(Name){};
|
||||
|
||||
std::wstring text_name_;
|
||||
std::wstring name_;
|
||||
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
@ -238,7 +231,6 @@ private:
|
||||
virtual void add_text(const std::wstring & Text) {}
|
||||
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(bookmark_start);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:bookmark-end
|
||||
@ -253,11 +245,9 @@ public:
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
virtual void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
bookmark_end() {} ;
|
||||
bookmark_end(const std::wstring & Name) : text_name_(Name){};
|
||||
|
||||
std::wstring text_name_;
|
||||
std::wstring name_;
|
||||
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
@ -265,8 +255,53 @@ private:
|
||||
virtual void add_text(const std::wstring & Text) {}
|
||||
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(bookmark_end);
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:bookmark-ref
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class bookmark_ref : public paragraph_content_element<bookmark_ref>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextBookmarkRef;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
std::wstring ref_name_;
|
||||
_CP_OPT(std::wstring) reference_format_;
|
||||
std::wstring content_;
|
||||
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_REGISTER_OFFICE_ELEMENT2(bookmark_ref);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:reference-ref
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class reference_ref : public paragraph_content_element<reference_ref>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextReferenceRef;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
std::wstring ref_name_;
|
||||
_CP_OPT(std::wstring) reference_format_;
|
||||
std::wstring content_;
|
||||
|
||||
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_REGISTER_OFFICE_ELEMENT2(reference_ref);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:reference-mark
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
@ -279,10 +314,6 @@ public:
|
||||
static const ElementType type = typeTextReferenceMark;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
reference_mark() {};
|
||||
reference_mark(const std::wstring & Name) : text_name_(Name){};
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
std::wstring text_name_;
|
||||
|
||||
private:
|
||||
@ -291,7 +322,6 @@ private:
|
||||
virtual void add_text(const std::wstring & Text) {}
|
||||
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(reference_mark);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:reference-mark-start
|
||||
@ -305,10 +335,6 @@ public:
|
||||
static const ElementType type = typeTextReferenceMarkStart;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
reference_mark_start() {}
|
||||
reference_mark_start(const std::wstring & Name) : text_name_(Name){};
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
std::wstring text_name_;
|
||||
|
||||
private:
|
||||
@ -330,11 +356,6 @@ public:
|
||||
static const ElementType type = typeTextReferenceMarkEnd;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
reference_mark_end() {};
|
||||
reference_mark_end(const std::wstring & Name) : text_name_(Name){};
|
||||
|
||||
std::wstring text_name_;
|
||||
|
||||
private:
|
||||
@ -402,7 +423,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);
|
||||
|
||||
odf_types::common_xlink_attlist common_xlink_attlist_;
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
|
||||
std::wstring office_name_;
|
||||
_CP_OPT(odf_types::target_frame_name) office_target_frame_name_;
|
||||
@ -597,13 +618,13 @@ 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_OPT(std::wstring) style_num_format_;
|
||||
_CP_OPT(odf_types::Bool) style_num_letter_sync_;
|
||||
_CP_OPT(odf_types::Bool) text_fixed_;
|
||||
_CP_OPT(int) text_page_adjust_;
|
||||
_CP_OPT(std::wstring) text_select_page_; //todooo to type
|
||||
_CP_OPT(odf_types::style_numformat) style_num_format_;
|
||||
_CP_OPT(odf_types::Bool) style_num_letter_sync_;
|
||||
_CP_OPT(odf_types::Bool) text_fixed_;
|
||||
_CP_OPT(int) text_page_adjust_;
|
||||
_CP_OPT(std::wstring) text_select_page_; //todooo to type
|
||||
|
||||
office_element_ptr text_;
|
||||
office_element_ptr text_;
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_page_number);
|
||||
@ -624,8 +645,8 @@ public:
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
_CP_OPT(std::wstring) style_num_format_;
|
||||
_CP_OPT(odf_types::Bool) style_num_letter_sync_;
|
||||
_CP_OPT(odf_types::style_numformat) style_num_format_;
|
||||
_CP_OPT(odf_types::Bool) style_num_letter_sync_;
|
||||
|
||||
office_element_ptr text_;
|
||||
private:
|
||||
@ -773,7 +794,55 @@ private:
|
||||
//text:display
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_file_name);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:hidden-paragraph
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class hidden_paragraph : public paragraph_content_element<hidden_paragraph>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextHiddenParagraph;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
_CP_OPT(odf_types::Bool) is_hidden_;
|
||||
_CP_OPT(std::wstring) condition_;
|
||||
|
||||
std::wstring content_;
|
||||
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_REGISTER_OFFICE_ELEMENT2(hidden_paragraph);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:hidden-text
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class hidden_text : public paragraph_content_element<hidden_text>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextHiddenText;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
_CP_OPT(odf_types::Bool) is_hidden_;
|
||||
_CP_OPT(std::wstring) condition_;
|
||||
_CP_OPT(std::wstring) string_value_;
|
||||
|
||||
std::wstring content_;
|
||||
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_REGISTER_OFFICE_ELEMENT2(hidden_text);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:sequence
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
@ -791,17 +860,46 @@ public:
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
_CP_OPT(odf_types::style_numformat) style_num_format_;
|
||||
_CP_OPT(std::wstring) style_num_letter_sync_;
|
||||
_CP_OPT(std::wstring) formula_;
|
||||
_CP_OPT(std::wstring) name_;
|
||||
_CP_OPT(std::wstring) ref_name_;
|
||||
|
||||
_CP_OPT(std::wstring) template_;
|
||||
office_element_ptr_array text_;
|
||||
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);
|
||||
|
||||
// todooo attributes
|
||||
office_element_ptr_array text_;
|
||||
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(sequence);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:sequence_ref
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class sequence_ref : public paragraph_content_element<sequence_ref>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextSequenceRef;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
_CP_OPT(std::wstring) reference_format_;//caption, category-and-value, value, chapter, direction, page, text, number, number-all-superior, number-no-superior
|
||||
_CP_OPT(std::wstring) ref_name_;
|
||||
|
||||
std::wstring content_;
|
||||
|
||||
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_REGISTER_OFFICE_ELEMENT2(sequence_ref);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
//text:drop-down
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class text_drop_down : public paragraph_content_element<text_drop_down>
|
||||
@ -1120,6 +1218,318 @@ private:
|
||||
office_element_ptr text_;
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_user_field_get);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
//text:user-defined
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class text_user_defined : public paragraph_content_element<text_user_defined>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextUserDefined;
|
||||
CPDOCCORE_DEFINE_VISITABLE()
|
||||
|
||||
virtual 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){}
|
||||
virtual void add_text(const std::wstring & Text);
|
||||
|
||||
_CP_OPT(std::wstring) style_data_style_name_;
|
||||
_CP_OPT(std::wstring) text_name_;
|
||||
_CP_OPT(odf_types::Bool) text_fixed_;
|
||||
odf_types::common_value_and_type_attlist office_value_;
|
||||
|
||||
office_element_ptr text_;
|
||||
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(text_user_defined);
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//text:bibliography-mark
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class bibliography_mark : public paragraph_content_element<bibliography_mark>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextBibliographyMark;
|
||||
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
void pptx_convert(oox::pptx_conversion_context & Context) ;
|
||||
|
||||
void serialize(std::wostream & strm);
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
std::wstring identifier_;
|
||||
odf_types::bibliography bibliography_type_;
|
||||
|
||||
_CP_OPT(std::wstring) url_;
|
||||
_CP_OPT(std::wstring) author_;
|
||||
_CP_OPT(std::wstring) title_;
|
||||
_CP_OPT(std::wstring) year_;
|
||||
_CP_OPT(std::wstring) isbn_;
|
||||
_CP_OPT(std::wstring) chapter_;
|
||||
_CP_OPT(std::wstring) address_;
|
||||
_CP_OPT(std::wstring) annote_;
|
||||
_CP_OPT(std::wstring) booktitle_;
|
||||
_CP_OPT(std::wstring) edition_;
|
||||
_CP_OPT(std::wstring) editor_;
|
||||
_CP_OPT(std::wstring) howpublished_;
|
||||
_CP_OPT(std::wstring) institution_;
|
||||
_CP_OPT(std::wstring) issn_;
|
||||
_CP_OPT(std::wstring) journal_;
|
||||
_CP_OPT(std::wstring) month_;
|
||||
_CP_OPT(std::wstring) note_;
|
||||
_CP_OPT(std::wstring) number_;
|
||||
_CP_OPT(std::wstring) organizations_;
|
||||
_CP_OPT(std::wstring) pages_;
|
||||
_CP_OPT(std::wstring) publisher_;
|
||||
_CP_OPT(std::wstring) report_type_;
|
||||
_CP_OPT(std::wstring) school_;
|
||||
_CP_OPT(std::wstring) series_;
|
||||
_CP_OPT(std::wstring) volume_;
|
||||
|
||||
office_element_ptr content_;
|
||||
|
||||
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_REGISTER_OFFICE_ELEMENT2(bibliography_mark);
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//text:alphabetical-index-auto-mark-file
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class alphabetical_index_auto_mark_file : public paragraph_content_element<alphabetical_index_auto_mark_file>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextAlphabeticalIndexAutoMarkFile;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
|
||||
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(alphabetical_index_auto_mark_file);
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//text:alphabetical-index-mark-start
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class alphabetical_index_mark_start : public paragraph_content_element<alphabetical_index_mark_start>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextAlphabeticalIndexMarkStart;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
std::wstring id_;
|
||||
_CP_OPT(std::wstring) key1_;
|
||||
_CP_OPT(std::wstring) key1_phonetic_;
|
||||
_CP_OPT(std::wstring) key2_;
|
||||
_CP_OPT(std::wstring) key2_phonetic_;
|
||||
_CP_OPT(odf_types::Bool) main_entry_;
|
||||
_CP_OPT(std::wstring) string_value_phonetic_;
|
||||
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(alphabetical_index_mark_start);
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//text:alphabetical-index-mark-end
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class alphabetical_index_mark_end : public paragraph_content_element<alphabetical_index_mark_end>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextAlphabeticalIndexMarkEnd;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
std::wstring id_;
|
||||
|
||||
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(alphabetical_index_mark_end);
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//text:alphabetical-index-mark
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class alphabetical_index_mark : public paragraph_content_element<alphabetical_index_mark>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextAlphabeticalIndexMark;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
_CP_OPT(std::wstring) key1_;
|
||||
_CP_OPT(std::wstring) key1_phonetic_;
|
||||
_CP_OPT(std::wstring) key2_;
|
||||
_CP_OPT(std::wstring) key2_phonetic_;
|
||||
_CP_OPT(odf_types::Bool) main_entry_;
|
||||
_CP_OPT(std::wstring) string_value_;
|
||||
_CP_OPT(std::wstring) string_value_phonetic_;
|
||||
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(alphabetical_index_mark);
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//text:user-index-mark-start
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class user_index_mark_start : public paragraph_content_element<user_index_mark_start>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextUserIndexMarkStart;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
std::wstring id_;
|
||||
_CP_OPT(std::wstring) index_name_;
|
||||
_CP_OPT(int) outline_level_;
|
||||
|
||||
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(user_index_mark_start);
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//text:user-index-mark-end
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class user_index_mark_end : public paragraph_content_element<user_index_mark_end>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextUserIndexMarkEnd;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
std::wstring id_;
|
||||
|
||||
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(user_index_mark_end);
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//text:user-index-mark
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class user_index_mark : public paragraph_content_element<user_index_mark>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextUserIndexMark;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
_CP_OPT(std::wstring) index_name_;
|
||||
_CP_OPT(int) outline_level_;
|
||||
_CP_OPT(std::wstring) string_value_;
|
||||
|
||||
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(user_index_mark);
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//text:toc-mark-start
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class toc_mark_start : public paragraph_content_element<toc_mark_start>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextTocMarkStart;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
_CP_OPT(int) outline_level_;
|
||||
std::wstring id_;
|
||||
|
||||
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(toc_mark_start);
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//text:toc-mark-end
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class toc_mark_end : public paragraph_content_element<toc_mark_end>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextTocMarkEnd;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
std::wstring id_;
|
||||
|
||||
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(toc_mark_end);
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
//text:toc-mark
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
class toc_mark : public paragraph_content_element<toc_mark>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextTocMark;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
_CP_OPT(std::wstring) string_value_;
|
||||
_CP_OPT(int) outline_level_;
|
||||
|
||||
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(toc_mark);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
} // namespace text
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
//presentation:footer
|
||||
@ -1165,5 +1575,44 @@ private:
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(presentation_date_time);
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// field:fieldmark-start
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class field_fieldmark_start : public text::paragraph_content_element<field_fieldmark_start>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextFieldFieldmarkStart;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
_CP_OPT(std::wstring) text_name_;
|
||||
_CP_OPT(std::wstring) field_type_;
|
||||
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(field_fieldmark_start);
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// field:fieldmark-end
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
class field_fieldmark_end : public text::paragraph_content_element<field_fieldmark_end>
|
||||
{
|
||||
public:
|
||||
static const wchar_t * ns;
|
||||
static const wchar_t * name;
|
||||
static const xml::NodeType xml_type = xml::typeElement;
|
||||
static const ElementType type = typeTextFieldFieldmarkStart;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
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(field_fieldmark_end);
|
||||
|
||||
} // namespace odf_reader
|
||||
} // namespace cpdoccore
|
||||
|
||||
@ -89,22 +89,16 @@ std::wostream & style_tab_stops::text_to_stream(std::wostream & _Wostream) const
|
||||
return _Wostream;
|
||||
}
|
||||
|
||||
void style_tab_stops::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{}
|
||||
|
||||
void style_tab_stops::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
if (L"style" == Ns && L"tab-stop" == Name)
|
||||
CP_CREATE_ELEMENT(style_tab_stops_);
|
||||
CP_CREATE_ELEMENT(content_);
|
||||
else
|
||||
{
|
||||
CP_NOT_APPLICABLE_ELM();
|
||||
}
|
||||
}
|
||||
|
||||
void style_tab_stops::add_text(const std::wstring & Text)
|
||||
{}
|
||||
|
||||
// style:drop-cap
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
const wchar_t * style_drop_cap::ns = L"style";
|
||||
@ -150,7 +144,7 @@ void style_background_image::add_attributes( const xml::attributes_wc_ptr & Attr
|
||||
common_xlink_attlist tmp;
|
||||
if (tmp.add_attributes(Attributes))
|
||||
{
|
||||
common_xlink_attlist_ = _CP_OPT(common_xlink_attlist)(tmp);
|
||||
xlink_attlist_ = _CP_OPT(common_xlink_attlist)(tmp);
|
||||
}
|
||||
}
|
||||
|
||||
@ -382,12 +376,12 @@ std::wostream & style_paragraph_properties::text_to_stream(std::wostream & _Wost
|
||||
|
||||
void style_paragraph_properties::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
style_paragraph_properties_content_.add_attributes(Attributes);
|
||||
content_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
void style_paragraph_properties::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
if (!style_paragraph_properties_content_.add_child_element(Reader, Ns, Name, getContext()))
|
||||
if (!content_.add_child_element(Reader, Ns, Name, getContext()))
|
||||
CP_NOT_APPLICABLE_ELM();
|
||||
}
|
||||
|
||||
@ -408,14 +402,12 @@ void paragraph_format_properties::apply_from(const paragraph_format_properties &
|
||||
_CP_APPLY_PROP(fo_widows_, Other.fo_widows_);
|
||||
_CP_APPLY_PROP(fo_orphans_, Other.fo_orphans_);
|
||||
|
||||
// TODO
|
||||
_CP_APPLY_PROP(style_tab_stops_, Other.style_tab_stops_);
|
||||
//style_tab_stops_ calc in context
|
||||
|
||||
_CP_APPLY_PROP(style_tab_stop_distance_, Other.style_tab_stop_distance_);
|
||||
_CP_APPLY_PROP(fo_hyphenation_keep_, Other.fo_hyphenation_keep_);
|
||||
_CP_APPLY_PROP(fo_hyphenation_ladder_count_, Other.fo_hyphenation_ladder_count_);
|
||||
|
||||
// TODO
|
||||
_CP_APPLY_PROP(style_drop_cap_, Other.style_drop_cap_);
|
||||
|
||||
_CP_APPLY_PROP(style_register_true_, Other.style_register_true_);
|
||||
|
||||
@ -88,6 +88,8 @@ public:
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
void docx_convert(oox::docx_conversion_context & Context, bool clear = false);
|
||||
|
||||
void pptx_convert(oox::pptx_conversion_context & Context);
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
@ -96,8 +98,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);
|
||||
|
||||
private:
|
||||
odf_types::length style_position_;
|
||||
public:
|
||||
odf_types::length style_position_;
|
||||
_CP_OPT(odf_types::style_type) style_type_;
|
||||
_CP_OPT(wchar_t) style_char_;
|
||||
|
||||
@ -124,20 +126,17 @@ public:
|
||||
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
size_t size() const { return style_tab_stops_.size(); }
|
||||
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
void pptx_convert(oox::pptx_conversion_context & Context);
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
office_element_ptr_array content_;
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
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);
|
||||
virtual void add_text(const std::wstring & Text){}
|
||||
|
||||
private:
|
||||
office_element_ptr_array style_tab_stops_;
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(style_tab_stops);
|
||||
@ -164,7 +163,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);
|
||||
|
||||
_CP_OPT(odf_types::common_xlink_attlist) common_xlink_attlist_;
|
||||
_CP_OPT(odf_types::common_xlink_attlist) xlink_attlist_;
|
||||
|
||||
};
|
||||
|
||||
@ -191,7 +190,7 @@ public:
|
||||
_CP_OPT(std::wstring) filter_name_;
|
||||
_CP_OPT(odf_types::percent) draw_opacity_;
|
||||
|
||||
_CP_OPT(odf_types::common_xlink_attlist) common_xlink_attlist_;
|
||||
_CP_OPT(odf_types::common_xlink_attlist) xlink_attlist_;
|
||||
office_element_ptr office_binary_data_;
|
||||
|
||||
};
|
||||
@ -212,52 +211,53 @@ public:
|
||||
|
||||
void xlsx_convert(std::wostream & strm, bool in_draw);
|
||||
|
||||
_CP_OPT(odf_types::line_width) fo_line_height_; // +
|
||||
_CP_OPT(odf_types::length) style_line_height_at_least_; // +
|
||||
_CP_OPT(odf_types::length) style_line_spacing_; // +
|
||||
_CP_OPT(bool) style_font_independent_line_spacing_; // ???
|
||||
_CP_OPT(odf_types::text_align) fo_text_align_; // +
|
||||
_CP_OPT(odf_types::text_align) fo_text_align_last_;
|
||||
_CP_OPT(bool) style_justify_single_word_;
|
||||
_CP_OPT(odf_types::keep_together) fo_keep_together_; // +
|
||||
_CP_OPT(unsigned int) fo_widows_; // +
|
||||
_CP_OPT(unsigned int) fo_orphans_;
|
||||
office_element_ptr style_tab_stops_; // +
|
||||
_CP_OPT(odf_types::length) style_tab_stop_distance_;
|
||||
_CP_OPT(odf_types::hyphenation_keep) fo_hyphenation_keep_;
|
||||
_CP_OPT(odf_types::integer_or_nolimit) fo_hyphenation_ladder_count_;
|
||||
office_element_ptr style_drop_cap_;
|
||||
_CP_OPT(bool) style_register_true_;
|
||||
_CP_OPT(odf_types::length_or_percent) fo_margin_left_; // +
|
||||
_CP_OPT(odf_types::length_or_percent) fo_margin_right_; // +
|
||||
_CP_OPT(odf_types::length_or_percent) fo_text_indent_; // +
|
||||
_CP_OPT(bool) style_auto_text_indent_; // ???
|
||||
_CP_OPT(odf_types::length_or_percent) fo_margin_top_; // +
|
||||
_CP_OPT(odf_types::length_or_percent) fo_margin_bottom_; // +
|
||||
_CP_OPT(odf_types::length_or_percent) fo_margin_;
|
||||
_CP_OPT(odf_types::fo_break) fo_break_before_; // +
|
||||
_CP_OPT(odf_types::fo_break) fo_break_after_;
|
||||
_CP_OPT(odf_types::background_color) fo_background_color_;
|
||||
office_element_ptr style_background_image_;
|
||||
|
||||
_CP_OPT(odf_types::border_style) fo_border_; // +
|
||||
_CP_OPT(odf_types::border_style) fo_border_top_; // +
|
||||
_CP_OPT(odf_types::border_style) fo_border_bottom_; // +
|
||||
_CP_OPT(odf_types::border_style) fo_border_left_; // +
|
||||
_CP_OPT(odf_types::border_style) fo_border_right_; // +
|
||||
|
||||
_CP_OPT( odf_types::border_widths ) style_border_line_width_; // +
|
||||
_CP_OPT(odf_types::line_width) fo_line_height_;
|
||||
_CP_OPT(odf_types::length) style_line_height_at_least_;
|
||||
_CP_OPT(odf_types::length) style_line_spacing_;
|
||||
_CP_OPT(bool) style_font_independent_line_spacing_; // ???
|
||||
_CP_OPT(odf_types::text_align) fo_text_align_;
|
||||
_CP_OPT(odf_types::text_align) fo_text_align_last_;
|
||||
_CP_OPT(bool) style_justify_single_word_;
|
||||
_CP_OPT(odf_types::keep_together) fo_keep_together_;
|
||||
_CP_OPT(unsigned int) fo_widows_;
|
||||
_CP_OPT(unsigned int) fo_orphans_;
|
||||
_CP_OPT(odf_types::length) style_tab_stop_distance_;
|
||||
_CP_OPT(odf_types::hyphenation_keep) fo_hyphenation_keep_;
|
||||
_CP_OPT(odf_types::integer_or_nolimit) fo_hyphenation_ladder_count_;
|
||||
_CP_OPT(bool) style_register_true_;
|
||||
_CP_OPT(odf_types::length_or_percent) fo_margin_left_;
|
||||
_CP_OPT(odf_types::length_or_percent) fo_margin_right_;
|
||||
_CP_OPT(odf_types::length_or_percent) fo_text_indent_;
|
||||
_CP_OPT(bool) style_auto_text_indent_; // ???
|
||||
_CP_OPT(odf_types::length_or_percent) fo_margin_top_;
|
||||
_CP_OPT(odf_types::length_or_percent) fo_margin_bottom_;
|
||||
_CP_OPT(odf_types::length_or_percent) fo_margin_;
|
||||
_CP_OPT(odf_types::fo_break) fo_break_before_;
|
||||
_CP_OPT(odf_types::fo_break) fo_break_after_;
|
||||
_CP_OPT(odf_types::background_color) fo_background_color_;
|
||||
|
||||
_CP_OPT( odf_types::border_widths ) style_border_line_width_top_; // +
|
||||
_CP_OPT( odf_types::border_widths ) style_border_line_width_bottom_;// +
|
||||
_CP_OPT( odf_types::border_widths ) style_border_line_width_left_; // +
|
||||
_CP_OPT( odf_types::border_widths ) style_border_line_width_right_; // +
|
||||
office_element_ptr style_background_image_;
|
||||
office_element_ptr style_drop_cap_;
|
||||
office_element_ptr style_tab_stops_;
|
||||
|
||||
_CP_OPT(odf_types::length) fo_padding_; // +
|
||||
_CP_OPT(odf_types::length) fo_padding_top_; // +
|
||||
_CP_OPT(odf_types::length) fo_padding_bottom_; // +
|
||||
_CP_OPT(odf_types::length) fo_padding_left_; // +
|
||||
_CP_OPT(odf_types::length) fo_padding_right_; // +
|
||||
_CP_OPT(odf_types::border_style) fo_border_;
|
||||
_CP_OPT(odf_types::border_style) fo_border_top_;
|
||||
_CP_OPT(odf_types::border_style) fo_border_bottom_;
|
||||
_CP_OPT(odf_types::border_style) fo_border_left_;
|
||||
_CP_OPT(odf_types::border_style) fo_border_right_;
|
||||
|
||||
_CP_OPT( odf_types::border_widths ) style_border_line_width_;
|
||||
|
||||
_CP_OPT( odf_types::border_widths ) style_border_line_width_top_;
|
||||
_CP_OPT( odf_types::border_widths ) style_border_line_width_bottom_;
|
||||
_CP_OPT( odf_types::border_widths ) style_border_line_width_left_;
|
||||
_CP_OPT( odf_types::border_widths ) style_border_line_width_right_;
|
||||
|
||||
_CP_OPT(odf_types::length) fo_padding_;
|
||||
_CP_OPT(odf_types::length) fo_padding_top_;
|
||||
_CP_OPT(odf_types::length) fo_padding_bottom_;
|
||||
_CP_OPT(odf_types::length) fo_padding_left_;
|
||||
_CP_OPT(odf_types::length) fo_padding_right_;
|
||||
_CP_OPT(odf_types::shadow_type) style_shadow_;
|
||||
_CP_OPT(odf_types::keep_together) fo_keep_with_next_;
|
||||
_CP_OPT(bool) text_number_lines_;
|
||||
@ -289,7 +289,7 @@ public:
|
||||
void docx_convert(oox::docx_conversion_context & Context);
|
||||
void pptx_convert(oox::pptx_conversion_context & Context);
|
||||
|
||||
const paragraph_format_properties & content() const { return style_paragraph_properties_content_; }
|
||||
paragraph_format_properties content_;
|
||||
|
||||
public:
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
@ -301,7 +301,6 @@ private:
|
||||
|
||||
|
||||
private:
|
||||
paragraph_format_properties style_paragraph_properties_content_;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -415,131 +415,106 @@ void paragraph_format_properties::docx_convert(oox::docx_conversion_context & Co
|
||||
Context.set_page_break_after(true);
|
||||
}
|
||||
}
|
||||
if (style_tab_stops_)
|
||||
style_tab_stops_->docx_convert(Context);
|
||||
|
||||
Context.get_tabs_context().docx_convert(Context);
|
||||
|
||||
//if (style_tab_stops_)
|
||||
//{
|
||||
// style_tab_stops_->docx_convert(Context);
|
||||
//}
|
||||
}
|
||||
void style_tab_stops::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
if (style_tab_stops_.size()<1)return;
|
||||
if (content_.empty()) return;
|
||||
std::wstringstream & _pPr = Context.get_styles_context().paragraph_nodes();
|
||||
|
||||
_pPr << L"<w:tabs>";
|
||||
|
||||
if (style_tab_stops_.size() > 0)
|
||||
{
|
||||
for (size_t i = 0; i < style_tab_stops_.size(); i++)
|
||||
for (size_t i = 0; i < content_.size(); i++)
|
||||
{
|
||||
style_tab_stops_[i]->docx_convert(Context);
|
||||
content_[i]->docx_convert(Context);
|
||||
}
|
||||
}
|
||||
_pPr << L"</w:tabs>";
|
||||
}
|
||||
|
||||
void style_tab_stop::docx_convert(oox::docx_conversion_context & Context)
|
||||
|
||||
void style_tab_stop::docx_convert(oox::docx_conversion_context & Context, bool clear)
|
||||
{
|
||||
std::wstringstream & _pPr = Context.get_styles_context().paragraph_nodes();
|
||||
|
||||
_pPr << L"<w:tab ";
|
||||
_pPr << L"<w:tab";
|
||||
|
||||
length def_tab = length(1.0, length::cm);// в ms значение 0.8 не корректно оО
|
||||
|
||||
|
||||
int tab_pos = (int)( 20.0 * style_position_.get_value_unit(length::pt) ) ;
|
||||
int min_tab_pos = (int)( 20.0 * def_tab.get_value_unit(length::pt) ) ;
|
||||
|
||||
int margin_left_pos = Context.get_margin_left();
|
||||
|
||||
if ((style_type_) && (style_type_->get_type() == style_type::Right))
|
||||
{
|
||||
tab_pos += margin_left_pos;
|
||||
}
|
||||
tab_pos += margin_left_pos;
|
||||
|
||||
if (tab_pos < min_tab_pos)
|
||||
tab_pos = min_tab_pos;
|
||||
|
||||
_pPr << L"w:pos=\"" << tab_pos << "\" ";
|
||||
|
||||
{
|
||||
std::wstring val = L"left"; //????
|
||||
if (style_type_)
|
||||
{
|
||||
switch(style_type_->get_type())
|
||||
{
|
||||
case style_type::Left:
|
||||
val = L"left";
|
||||
break;
|
||||
case style_type::Center:
|
||||
val = L"center";
|
||||
break;
|
||||
case style_type::Right:
|
||||
val = L"right";
|
||||
break;
|
||||
case style_type::Char:
|
||||
val = L"decimal";
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!val.empty())
|
||||
_pPr << L"w:val=\"" << val << "\" ";
|
||||
}
|
||||
|
||||
{
|
||||
std::wstring leader;
|
||||
std::wstring val = clear ? L"clear" : L"left"; //????
|
||||
if (style_type_ && !clear)
|
||||
{
|
||||
switch(style_type_->get_type())
|
||||
{
|
||||
case style_type::Left: val = L"left"; break;
|
||||
case style_type::Center:val = L"center"; break;
|
||||
case style_type::Right: val = L"right"; break;
|
||||
case style_type::Char: val = L"decimal"; break;
|
||||
}
|
||||
}
|
||||
_pPr << L" w:val=\"" << val << "\"";
|
||||
_pPr << L" w:pos=\"" << tab_pos << "\"";
|
||||
|
||||
std::wstring leader;
|
||||
|
||||
if ((style_leader_type_ && style_leader_type_->get_type() == line_type::None) ||
|
||||
(style_leader_style_ && style_leader_style_->get_type() == line_style::None))
|
||||
{
|
||||
leader = L"none";
|
||||
}
|
||||
else if (!style_leader_type_ || style_leader_type_ && style_leader_type_->get_type() != line_type::None)
|
||||
{
|
||||
if (style_leader_style_)
|
||||
{
|
||||
switch(style_leader_style_->get_type())
|
||||
{
|
||||
case line_style::None:
|
||||
leader = L"";
|
||||
break;
|
||||
case line_style::Solid:
|
||||
if (style_leader_text_)
|
||||
{
|
||||
if (*style_leader_text_ == L"-")
|
||||
leader = L"hyphen";
|
||||
else if (*style_leader_text_ == L"_")
|
||||
leader = L"underscore";
|
||||
}
|
||||
break;
|
||||
case line_style::Dotted:
|
||||
leader = L"dot";
|
||||
break;
|
||||
case line_style::Dash:
|
||||
leader = L"hyphen";
|
||||
break;
|
||||
case line_style::LongDash:
|
||||
leader = L"middleDot";
|
||||
break;
|
||||
case line_style::DotDash:
|
||||
leader = L"middleDot";
|
||||
break;
|
||||
case line_style::DotDotDash:
|
||||
leader = L"middleDot";
|
||||
break;
|
||||
case line_style::Wave:
|
||||
leader = L"middleDot";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!leader.empty())
|
||||
_pPr << L"w:leader=\"" << leader << "\" ";
|
||||
}
|
||||
|
||||
_pPr << L" />";
|
||||
if ((style_leader_type_ && style_leader_type_->get_type() == line_type::None) ||
|
||||
(style_leader_style_ && style_leader_style_->get_type() == line_style::None))
|
||||
{
|
||||
leader = L"none";
|
||||
}
|
||||
else if (!style_leader_type_ || style_leader_type_ && style_leader_type_->get_type() != line_type::None)
|
||||
{
|
||||
if (style_leader_style_)
|
||||
{
|
||||
switch(style_leader_style_->get_type())
|
||||
{
|
||||
case line_style::None: leader.clear(); break;
|
||||
case line_style::Solid:
|
||||
{
|
||||
if (style_leader_text_)
|
||||
{
|
||||
if (*style_leader_text_ == L"-")
|
||||
leader = L"hyphen";
|
||||
else if (*style_leader_text_ == L"_")
|
||||
leader = L"underscore";
|
||||
}
|
||||
}break;
|
||||
case line_style::Dotted: leader = L"dot"; break;
|
||||
case line_style::Dash: leader = L"hyphen"; break;
|
||||
case line_style::LongDash: leader = L"middleDot"; break;
|
||||
case line_style::DotDash: leader = L"middleDot"; break;
|
||||
case line_style::DotDotDash: leader = L"middleDot"; break;
|
||||
case line_style::Wave: leader = L"middleDot"; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!clear && !leader.empty())
|
||||
{
|
||||
_pPr << L" w:leader=\"" << leader << "\"";
|
||||
}
|
||||
_pPr << L"/>";
|
||||
}
|
||||
void style_tab_stop::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
docx_convert(Context, false);
|
||||
}
|
||||
|
||||
void style_paragraph_properties::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
style_paragraph_properties_content_.docx_convert(Context);
|
||||
content_.docx_convert(Context);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -635,7 +635,7 @@ void style_tab_stop::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
|
||||
void style_paragraph_properties::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
{
|
||||
style_paragraph_properties_content_.pptx_convert(Context);
|
||||
content_.pptx_convert(Context);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -90,7 +90,7 @@ const wchar_t * presentation_sound::name = L"sound";
|
||||
|
||||
void presentation_sound::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
common_xlink_attlist_.add_attributes(Attributes);
|
||||
xlink_attlist_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
void presentation_sound::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
@ -100,7 +100,7 @@ void presentation_sound::add_child_element( xml::sax * Reader, const std::wstrin
|
||||
|
||||
void presentation_sound::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
{
|
||||
Context.get_slide_context().set_link(common_xlink_attlist_.href_.get_value_or(L""), oox::typeAudio);
|
||||
Context.get_slide_context().set_link(xlink_attlist_.href_.get_value_or(L""), oox::typeAudio);
|
||||
}
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
const wchar_t * style_drawing_page_properties::ns = L"style";
|
||||
|
||||
@ -87,7 +87,7 @@ public:
|
||||
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
odf_types::common_xlink_attlist common_xlink_attlist_;
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
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);
|
||||
|
||||
@ -207,10 +207,9 @@ void style_table_column_properties::docx_convert(oox::docx_conversion_context &
|
||||
{
|
||||
std::wostream & strm = Context.output_stream();
|
||||
|
||||
|
||||
if (attlist_.style_column_width_)
|
||||
{
|
||||
double kf_max_width_ms =1.;
|
||||
double kf_max_width_ms = 1.;
|
||||
|
||||
const page_layout_instance * pp = Context.root()->odf_context().pageLayoutContainer().page_layout_first();//
|
||||
if ((pp) && (pp->properties()))
|
||||
@ -226,17 +225,15 @@ void style_table_column_properties::docx_convert(oox::docx_conversion_context &
|
||||
|
||||
int val = attlist_.style_column_width_->get_value_unit(length::pt);
|
||||
|
||||
double width = 0.5 + 20.0 * val * kf_max_width_ms;
|
||||
|
||||
//_CP_OPT(int) iUnormalWidth;
|
||||
//if (odf_reader::GetProperty(Context.get_settings_properties(),L"UnormalWidthPage",iUnormalWidth))
|
||||
{
|
||||
//kf_max_width_ms = 31680./iUnormalWidth.get();//эквивалент 22"
|
||||
}
|
||||
|
||||
|
||||
strm << L"<w:gridCol w:w=\"" <<
|
||||
(int)(0.5 + 20.0 * val * kf_max_width_ms) << "\"/>";
|
||||
Context.get_table_context().add_column_width(width);
|
||||
strm << L"<w:gridCol w:w=\"" << (int)(width) << "\"/>";
|
||||
}
|
||||
else
|
||||
{
|
||||
Context.get_table_context().add_column_width(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -244,7 +241,6 @@ void style_table_column_properties::pptx_convert(oox::pptx_conversion_context &
|
||||
{
|
||||
std::wostream & strm = Context.get_table_context().tableData();
|
||||
|
||||
|
||||
if (attlist_.style_column_width_)
|
||||
{
|
||||
int val = attlist_.style_column_width_->get_value_unit(length::emu);
|
||||
|
||||
@ -303,7 +303,7 @@ void default_style::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
|
||||
void default_style::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
style_content_.add_child_element(Reader, Ns, Name, getContext());
|
||||
content_.add_child_element(Reader, Ns, Name, getContext());
|
||||
}
|
||||
|
||||
void default_style::add_text(const std::wstring & Text)
|
||||
@ -433,7 +433,7 @@ void style::add_child_element( xml::sax * Reader, const std::wstring & Ns, const
|
||||
CP_CREATE_ELEMENT(style_map_);
|
||||
}
|
||||
else
|
||||
style_content_.add_child_element(Reader, Ns, Name, getContext());
|
||||
content_.add_child_element(Reader, Ns, Name, getContext());
|
||||
}
|
||||
|
||||
void style::add_text(const std::wstring & Text)
|
||||
@ -853,11 +853,6 @@ void style_footer_style::add_child_element( xml::sax * Reader, const std::wstrin
|
||||
}
|
||||
}
|
||||
|
||||
void style_page_layout_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"style:name", style_name_, std::wstring(L""));
|
||||
CP_APPLY_ATTR(L"style:page-usage", style_page_usage_, page_usage(page_usage::All));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
const wchar_t * style_page_layout::ns = L"style";
|
||||
@ -870,7 +865,8 @@ std::wostream & style_page_layout::text_to_stream(std::wostream & _Wostream) con
|
||||
|
||||
void style_page_layout::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
attlist_.add_attributes(Attributes);
|
||||
CP_APPLY_ATTR(L"style:name", style_name_, std::wstring(L""));
|
||||
CP_APPLY_ATTR(L"style:page-usage", style_page_usage_, page_usage(page_usage::All));
|
||||
}
|
||||
|
||||
void style_page_layout::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
|
||||
@ -136,7 +136,7 @@ public:
|
||||
|
||||
odf_types::style_family style_family_;
|
||||
|
||||
style_content style_content_;
|
||||
style_content content_;
|
||||
|
||||
friend class odf_document;
|
||||
|
||||
@ -251,6 +251,7 @@ private:
|
||||
|
||||
};
|
||||
CP_REGISTER_OFFICE_ELEMENT2(draw_opacity);
|
||||
|
||||
// style_draw_fill_image
|
||||
class draw_fill_image : public office_element_impl<draw_fill_image>
|
||||
{
|
||||
@ -281,7 +282,6 @@ typedef weak_ptr<style>::Type style_weak_ptr;
|
||||
typedef std::vector< style_weak_ptr > style_weak_ptr_array;
|
||||
typedef std::vector< style_ptr > style_ptr_array;
|
||||
|
||||
// style
|
||||
/// style:style
|
||||
class style : public office_element_impl<style>
|
||||
{
|
||||
@ -302,7 +302,6 @@ private:
|
||||
virtual void add_text(const std::wstring & Text);
|
||||
|
||||
public:
|
||||
// attr
|
||||
std::wstring style_name_;
|
||||
bool style_auto_update_; // default = false
|
||||
|
||||
@ -317,7 +316,7 @@ public:
|
||||
_CP_OPT( std::wstring ) style_class_;
|
||||
_CP_OPT( std::wstring ) style_default_outline_level_;
|
||||
|
||||
style_content style_content_;
|
||||
style_content content_;
|
||||
office_element_ptr_array style_map_;
|
||||
|
||||
friend class odf_document;
|
||||
@ -776,18 +775,6 @@ public:
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(style_section_properties);
|
||||
|
||||
/// style-page-layout-attlist
|
||||
class style_page_layout_attlist
|
||||
{
|
||||
public:
|
||||
void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
const std::wstring & get_style_name() const { return style_name_; }
|
||||
|
||||
std::wstring style_name_;
|
||||
odf_types::page_usage style_page_usage_; // default All
|
||||
|
||||
};
|
||||
|
||||
/// style:header-style
|
||||
class style_header_style : public office_element_impl<style_header_style>
|
||||
{
|
||||
@ -842,7 +829,8 @@ public:
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
style_page_layout_attlist attlist_;
|
||||
std::wstring style_name_;
|
||||
odf_types::page_usage style_page_usage_; // default All
|
||||
|
||||
office_element_ptr style_page_layout_properties_;
|
||||
office_element_ptr style_header_style_;
|
||||
|
||||
@ -117,7 +117,7 @@ void text_list_level_style_bullet_attr::add_attributes( const xml::attributes_wc
|
||||
|
||||
void text_list_level_style_image_attr::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
common_xlink_attlist_.add_attributes(Attributes);
|
||||
xlink_attlist_.add_attributes(Attributes);
|
||||
}
|
||||
|
||||
|
||||
@ -244,22 +244,6 @@ void text_list_level_style_bullet::add_child_element( xml::sax * Reader, const s
|
||||
|
||||
namespace {
|
||||
|
||||
std::wstring GetNumFormat(const std::wstring & Format)
|
||||
{
|
||||
if (L"1" == Format)
|
||||
return L"decimal";
|
||||
else if (L"i" == Format)
|
||||
return L"lowerRoman";
|
||||
else if (L"I" == Format)
|
||||
return L"upperRoman";
|
||||
else if (L"a" == Format)
|
||||
return L"lowerLetter";
|
||||
else if (L"A" == Format)
|
||||
return L"upperLetter";
|
||||
else
|
||||
return L"decimal";
|
||||
}
|
||||
|
||||
std::wstring GetLevelText(unsigned int displayLevels,
|
||||
unsigned int textLevel,
|
||||
oox::docx_conversion_context & Context)
|
||||
@ -356,7 +340,21 @@ void text_list_level_style_number::docx_convert(oox::docx_conversion_context & C
|
||||
}
|
||||
CP_XML_NODE(L"w:numFmt")
|
||||
{
|
||||
CP_XML_ATTR(L"w:val",GetNumFormat( text_list_level_style_number_attr_.common_num_format_attlist_.style_num_format_.get_value_or(L"") ));
|
||||
std::wstring num_format = L"arabic";
|
||||
if (text_list_level_style_number_attr_.common_num_format_attlist_.style_num_format_)
|
||||
{
|
||||
switch(text_list_level_style_number_attr_.common_num_format_attlist_.style_num_format_->get_type())
|
||||
{
|
||||
case odf_types::style_numformat::romanUc: num_format= L"upperRoman"; break;
|
||||
case odf_types::style_numformat::romanLc: num_format= L"lowerRoman"; break;
|
||||
case odf_types::style_numformat::alphaUc: num_format= L"upperLetter"; break;
|
||||
case odf_types::style_numformat::alphaLc: num_format= L"lowerLetter"; break;
|
||||
case odf_types::style_numformat::arabic:
|
||||
default:
|
||||
num_format= L"decimal"; break;
|
||||
}
|
||||
}
|
||||
CP_XML_ATTR(L"w:val", num_format);
|
||||
}
|
||||
CP_XML_NODE(L"w:suff")
|
||||
{
|
||||
@ -477,19 +475,17 @@ void text_list_level_style_number::pptx_convert(oox::pptx_conversion_context & C
|
||||
|
||||
if (text_list_level_style_number_attr_.common_num_format_attlist_.style_num_format_)
|
||||
{
|
||||
if (*text_list_level_style_number_attr_.common_num_format_attlist_.style_num_format_ == L"1")
|
||||
num_format= L"arabic";
|
||||
else if (*text_list_level_style_number_attr_.common_num_format_attlist_.style_num_format_ == L"I")
|
||||
num_format= L"romanUc";
|
||||
else if (*text_list_level_style_number_attr_.common_num_format_attlist_.style_num_format_ == L"i")
|
||||
num_format= L"romanLc";
|
||||
else if (*text_list_level_style_number_attr_.common_num_format_attlist_.style_num_format_ == L"A")
|
||||
num_format= L"alphaUc";
|
||||
else if (*text_list_level_style_number_attr_.common_num_format_attlist_.style_num_format_ == L"a")
|
||||
num_format= L"alphaLc";
|
||||
else
|
||||
num_format= L"arabic";
|
||||
}else num_format= L"arabic";
|
||||
switch(text_list_level_style_number_attr_.common_num_format_attlist_.style_num_format_->get_type())
|
||||
{
|
||||
case odf_types::style_numformat::romanUc: num_format= L"romanUc"; break;
|
||||
case odf_types::style_numformat::romanLc: num_format= L"romanLc"; break;
|
||||
case odf_types::style_numformat::alphaUc: num_format= L"alphaUc"; break;
|
||||
case odf_types::style_numformat::alphaLc: num_format= L"alphaLc"; break;
|
||||
case odf_types::style_numformat::arabic:
|
||||
default:
|
||||
num_format= L"arabic"; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (text_list_level_style_number_attr_.common_num_format_prefix_suffix_attlist_.style_num_prefix_)
|
||||
{
|
||||
|
||||
@ -256,7 +256,7 @@ public:
|
||||
void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
|
||||
private:
|
||||
odf_types::common_xlink_attlist common_xlink_attlist_;
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
|
||||
friend class text_list_level_style_image;
|
||||
|
||||
|
||||
@ -113,6 +113,8 @@ public:
|
||||
|
||||
bool inViewTable;
|
||||
bool inView;
|
||||
|
||||
std::map<std::wstring, std::wstring> map_user_defineds;
|
||||
};
|
||||
|
||||
settings_container::settings_container(): impl_(new settings_container::Impl() )
|
||||
@ -264,6 +266,16 @@ _CP_OPT(std::wstring) settings_container::find_view_by_name(const std::wstring &
|
||||
}
|
||||
return value;
|
||||
}
|
||||
void settings_container::add_user_defined(const std::wstring & name, const std::wstring & value)
|
||||
{
|
||||
impl_->map_user_defineds.insert(std::make_pair(name, value));
|
||||
}
|
||||
std::wstring settings_container::get_user_defined(const std::wstring & name)
|
||||
{
|
||||
std::map<std::wstring, std::wstring>::iterator pFind = impl_->map_user_defineds.find(name);
|
||||
|
||||
return pFind != impl_->map_user_defineds.end() ? pFind->second : L"";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -79,6 +79,9 @@ public:
|
||||
void end_table_view ();
|
||||
|
||||
void add_view (const std::wstring & name, const std::wstring & value);
|
||||
|
||||
void add_user_defined(const std::wstring & name, const std::wstring & value);
|
||||
std::wstring get_user_defined(const std::wstring & name);
|
||||
private:
|
||||
class Impl;
|
||||
_CP_SCOPED_PTR(Impl) impl_;
|
||||
|
||||
@ -112,7 +112,7 @@ void table_table_source_attlist::add_attributes( const xml::attributes_wc_ptr &
|
||||
|
||||
void table_linked_source_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
common_xlink_attlist_.add_attributes(Attributes);
|
||||
xlink_attlist_.add_attributes(Attributes);
|
||||
|
||||
CP_APPLY_ATTR(L"table:filter-name", table_filter_name_);
|
||||
CP_APPLY_ATTR(L"table:filter-options", table_filter_options_);
|
||||
@ -162,7 +162,8 @@ void table_table::add_child_element( xml::sax * Reader, const std::wstring & Ns,
|
||||
else if ((L"table" == Ns && L"table-row-group" == Name) ||
|
||||
(L"table" == Ns && L"table-rows" == Name) ||
|
||||
(L"table" == Ns && L"table-row" == Name) ||
|
||||
(L"table" == Ns && L"table-header-rows" == Name))
|
||||
(L"table" == Ns && L"table-header-rows" == Name)||
|
||||
(L"text" == Ns && L"soft-page-break" == Name))
|
||||
{
|
||||
table_rows_and_groups_.add_child_element(Reader, Ns, Name, getContext());
|
||||
}
|
||||
@ -533,7 +534,8 @@ void table_rows::add_child_element( xml::sax * Reader, const std::wstring & Ns,
|
||||
{
|
||||
CP_CREATE_ELEMENT_SIMPLE(table_table_rows_);
|
||||
}
|
||||
else if CP_CHECK_NAME(L"table", L"table-row")
|
||||
else if (CP_CHECK_NAME(L"table", L"table-row") || CP_CHECK_NAME(L"text", L"soft-page-break"))
|
||||
|
||||
{
|
||||
CP_CREATE_ELEMENT_SIMPLE(table_table_row_);
|
||||
}
|
||||
@ -605,7 +607,8 @@ void table_rows_no_group::add_child_element( xml::sax * Reader, const std::wstri
|
||||
}
|
||||
void table_rows_no_group::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name, document_context * Context)
|
||||
{
|
||||
if (CP_CHECK_NAME(L"table", L"table-rows") || CP_CHECK_NAME(L"table", L"table-row"))
|
||||
if (CP_CHECK_NAME(L"table", L"table-rows") || CP_CHECK_NAME(L"table", L"table-row") ||
|
||||
CP_CHECK_NAME(L"text", L"soft-page-break"))
|
||||
{
|
||||
if (!was_header_)
|
||||
table_rows_1_.add_child_element(Reader, Ns, Name, Context);
|
||||
@ -639,7 +642,8 @@ void table_rows_and_groups::add_child_element( xml::sax * Reader, const std::wst
|
||||
{
|
||||
CP_CREATE_ELEMENT_SIMPLE(content_);
|
||||
}
|
||||
else if (L"table" == Ns && (L"table-rows" == Name || L"table-row" == Name || L"table-header-rows" == Name) )
|
||||
else if ((L"table" == Ns && (L"table-rows" == Name || L"table-row" == Name || L"table-header-rows" == Name)) ||
|
||||
(L"text" == Ns && L"soft-page-break" == Name))
|
||||
{
|
||||
bool add_new_no_group = false;
|
||||
if (content_.empty()) add_new_no_group = true;
|
||||
|
||||
@ -130,7 +130,7 @@ class table_linked_source_attlist
|
||||
public:
|
||||
void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
|
||||
odf_types::common_xlink_attlist common_xlink_attlist_;
|
||||
odf_types::common_xlink_attlist xlink_attlist_;
|
||||
|
||||
_CP_OPT(std::wstring) table_filter_name_;
|
||||
_CP_OPT(std::wstring) table_filter_options_;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user