mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-02-18 05:46:08 +08:00
Compare commits
45 Commits
core-linux
...
core-linux
| Author | SHA1 | Date | |
|---|---|---|---|
| f01eb91316 | |||
| b9216e9bdc | |||
| 253c24cf03 | |||
| 02e8649a61 | |||
| 447dc81426 | |||
| 0f3c883d24 | |||
| 0b16b9a7f9 | |||
| 7014faa9a1 | |||
| 93287c84c8 | |||
| dafcbacfaf | |||
| 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 | |||
| 1c2b86519e | |||
| 323d1b44cd | |||
| 83fa44edcd | |||
| 2ead42a513 | |||
| 427046cb8f | |||
| e60cc05b6e |
@ -1321,6 +1321,12 @@ public:
|
||||
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;
|
||||
@ -1332,6 +1338,14 @@ public:
|
||||
bool bParaPr;
|
||||
bool bTextPr;
|
||||
bool bPStyle;
|
||||
bool bTentative;
|
||||
bool bTplc;
|
||||
bool bIsLgl;
|
||||
bool bLvlLegacy;
|
||||
bool bLegacy;
|
||||
bool bLegacyIndent;
|
||||
bool bLegacySpace;
|
||||
|
||||
docLvl()
|
||||
{
|
||||
bILvl = false;
|
||||
@ -1344,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()
|
||||
{
|
||||
@ -1359,6 +1380,19 @@ public:
|
||||
{
|
||||
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)
|
||||
{
|
||||
@ -1392,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;
|
||||
@ -1430,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;
|
||||
@ -1877,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;
|
||||
}
|
||||
|
||||
@ -2654,6 +2654,49 @@ public:
|
||||
odocLvl->bILvl = true;
|
||||
odocLvl->ILvl = m_oBufferedStream.GetLong();
|
||||
}
|
||||
else if ( c_oSerNumTypes::Tentative == type )
|
||||
{
|
||||
odocLvl->bTentative = true;
|
||||
odocLvl->Tentative = m_oBufferedStream.GetBool();
|
||||
}
|
||||
else if ( c_oSerNumTypes::Tplc == type )
|
||||
{
|
||||
odocLvl->bTplc = true;
|
||||
odocLvl->Tplc = m_oBufferedStream.GetULong();
|
||||
}
|
||||
else if ( c_oSerNumTypes::IsLgl == type )
|
||||
{
|
||||
odocLvl->bIsLgl = true;
|
||||
odocLvl->IsLgl = m_oBufferedStream.GetBool();
|
||||
}
|
||||
else if ( c_oSerNumTypes::LvlLegacy == type )
|
||||
{
|
||||
odocLvl->bLvlLegacy = true;
|
||||
READ1_DEF(length, res, this->ReadLvlLegacy, odocLvl);
|
||||
}
|
||||
else
|
||||
res = c_oSerConstants::ReadUnknown;
|
||||
return res;
|
||||
}
|
||||
int ReadLvlLegacy(BYTE type, long length, void* poResult)
|
||||
{
|
||||
int res = c_oSerConstants::ReadOk;
|
||||
docLvl* odocLvl = static_cast<docLvl*>(poResult);
|
||||
if ( c_oSerNumTypes::Legacy == type )
|
||||
{
|
||||
odocLvl->bLegacy = true;
|
||||
odocLvl->Legacy = m_oBufferedStream.GetBool();
|
||||
}
|
||||
else if ( c_oSerNumTypes::LegacyIndent == type )
|
||||
{
|
||||
odocLvl->bLegacyIndent = true;
|
||||
odocLvl->LegacyIndent = m_oBufferedStream.GetLong();
|
||||
}
|
||||
else if ( c_oSerNumTypes::LegacySpace == type )
|
||||
{
|
||||
odocLvl->bLegacySpace = true;
|
||||
odocLvl->LegacySpace = m_oBufferedStream.GetULong();
|
||||
}
|
||||
else
|
||||
res = c_oSerConstants::ReadUnknown;
|
||||
return res;
|
||||
|
||||
@ -204,7 +204,14 @@ extern int g_nCurFormatVersion;
|
||||
NumFmtFormat = 26,
|
||||
Num_LvlOverride = 27,
|
||||
StartOverride = 28,
|
||||
ILvl = 29
|
||||
ILvl = 29,
|
||||
Tentative = 30,
|
||||
Tplc = 31,
|
||||
IsLgl = 32,
|
||||
LvlLegacy = 33,
|
||||
Legacy = 34,
|
||||
LegacyIndent = 35,
|
||||
LegacySpace = 36
|
||||
};}
|
||||
namespace c_oSerOtherTableTypes{enum c_oSerOtherTableTypes
|
||||
{
|
||||
|
||||
@ -2987,6 +2987,54 @@ namespace BinDocxRW
|
||||
m_oBcw.m_oStream.WriteBYTE(c_oSerPropLenType::Long);
|
||||
m_oBcw.m_oStream.WriteLONG(lvl.m_oIlvl->GetValue());
|
||||
}
|
||||
if(lvl.m_oTentative.IsInit())
|
||||
{
|
||||
m_oBcw.m_oStream.WriteBYTE(c_oSerNumTypes::Tentative);
|
||||
m_oBcw.m_oStream.WriteBYTE(c_oSerPropLenType::Byte);
|
||||
m_oBcw.m_oStream.WriteBOOL(lvl.m_oTentative->ToBool());
|
||||
}
|
||||
if(lvl.m_oTplc.IsInit())
|
||||
{
|
||||
m_oBcw.m_oStream.WriteBYTE(c_oSerNumTypes::Tplc);
|
||||
m_oBcw.m_oStream.WriteBYTE(c_oSerPropLenType::Long);
|
||||
m_oBcw.m_oStream.WriteULONG(lvl.m_oTplc->GetValue());
|
||||
}
|
||||
if(lvl.m_oIsLgl.IsInit())
|
||||
{
|
||||
m_oBcw.m_oStream.WriteBYTE(c_oSerNumTypes::IsLgl);
|
||||
m_oBcw.m_oStream.WriteBYTE(c_oSerPropLenType::Byte);
|
||||
m_oBcw.m_oStream.WriteBOOL(lvl.m_oIsLgl->m_oVal.ToBool());
|
||||
}
|
||||
if(lvl.m_oLegacy.IsInit())
|
||||
{
|
||||
m_oBcw.m_oStream.WriteBYTE(c_oSerNumTypes::LvlLegacy);
|
||||
m_oBcw.m_oStream.WriteBYTE(c_oSerPropLenType::Variable);
|
||||
nCurPos = m_oBcw.WriteItemWithLengthStart();
|
||||
WriteLvlLegacy(lvl.m_oLegacy.get());
|
||||
m_oBcw.WriteItemWithLengthEnd(nCurPos);
|
||||
}
|
||||
}
|
||||
void WriteLvlLegacy(const ComplexTypes::Word::CLvlLegacy& lvlLegacy)
|
||||
{
|
||||
int nCurPos = 0;
|
||||
if (lvlLegacy.m_oLegacy.IsInit())
|
||||
{
|
||||
nCurPos = m_oBcw.WriteItemStart(c_oSerNumTypes::Legacy);
|
||||
m_oBcw.m_oStream.WriteBOOL(lvlLegacy.m_oLegacy->ToBool());
|
||||
m_oBcw.WriteItemEnd(nCurPos);
|
||||
}
|
||||
if (lvlLegacy.m_oLegacyIndent.IsInit())
|
||||
{
|
||||
nCurPos = m_oBcw.WriteItemStart(c_oSerNumTypes::LegacyIndent);
|
||||
m_oBcw.m_oStream.WriteLONG(lvlLegacy.m_oLegacyIndent->ToTwips());
|
||||
m_oBcw.WriteItemEnd(nCurPos);
|
||||
}
|
||||
if (lvlLegacy.m_oLegacySpace.IsInit())
|
||||
{
|
||||
nCurPos = m_oBcw.WriteItemStart(c_oSerNumTypes::LegacySpace);
|
||||
m_oBcw.m_oStream.WriteULONG(lvlLegacy.m_oLegacySpace->ToUnsignedTwips());
|
||||
m_oBcw.WriteItemEnd(nCurPos);
|
||||
}
|
||||
}
|
||||
void WriteLevelText(const std::wstring& text)
|
||||
{
|
||||
|
||||
@ -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}"
|
||||
|
||||
@ -77,6 +77,7 @@ SOURCES += \
|
||||
../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 \
|
||||
@ -185,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 \
|
||||
@ -341,6 +343,7 @@ HEADERS += \
|
||||
../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 \
|
||||
@ -449,6 +452,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 \
|
||||
|
||||
@ -67,6 +67,7 @@
|
||||
#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"
|
||||
|
||||
@ -128,3 +128,4 @@
|
||||
#include "../src/odf/datatypes/tableorder.cpp"
|
||||
#include "../src/odf/datatypes/dategroup.cpp"
|
||||
#include "../src/odf/datatypes/commandtype.cpp"
|
||||
#include "../src/odf/datatypes/stylenumformat.cpp"
|
||||
|
||||
@ -334,29 +334,108 @@ void docx_conversion_context::end_math_formula()
|
||||
output_stream() << L"<m:oMath>" << math_content << L"</m:oMath>";
|
||||
}
|
||||
}
|
||||
void docx_conversion_context::start_table_content()
|
||||
void docx_conversion_context::start_sdt(int type)
|
||||
{
|
||||
in_table_content_ = true;
|
||||
|
||||
output_stream() << L"<w:sdt>";
|
||||
output_stream() << L"<w:sdtPr>";
|
||||
//output_stream() << L"<w:id w:val=\"-505364165\"/>";
|
||||
output_stream() << L"<w:docPartObj>";
|
||||
output_stream() << L"<w:docPartGallery w:val=\"Table of Contents\"/>";
|
||||
output_stream() << L"<w:docPartUnique/>";
|
||||
output_stream() << L"</w:docPartObj>";
|
||||
output_stream() << L"</w:sdtPr>";
|
||||
output_stream() << L"<w:sdtContent>";
|
||||
|
||||
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::end_table_content()
|
||||
void docx_conversion_context::start_index_content()
|
||||
{
|
||||
if (!in_table_content_) return;
|
||||
|
||||
output_stream() << L"</w:sdtContent>";
|
||||
output_stream() << L"</w:sdt>";
|
||||
start_paragraph(false);
|
||||
|
||||
std::wstring sInstrText;
|
||||
|
||||
switch(table_content_context_.type_table_content)
|
||||
{
|
||||
case 1: sInstrText += L" TOC \\h \\o \"1-3\" \\u \\l 1-3 "; 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_.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_level_index();
|
||||
}
|
||||
void docx_conversion_context::end_index_element()
|
||||
{
|
||||
table_content_context_.clear_current_level_index();
|
||||
}
|
||||
void docx_conversion_context::start_bookmark (const std::wstring &name)
|
||||
{
|
||||
@ -394,6 +473,64 @@ void docx_conversion_context::end_bookmark (const std::wstring &name)
|
||||
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)
|
||||
{
|
||||
charts_.push_back(oox_chart_context_ptr(new oox_chart_context(mediaitems_, name)));
|
||||
@ -551,21 +688,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();
|
||||
@ -945,7 +1086,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
|
||||
{
|
||||
@ -1054,7 +1195,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()
|
||||
@ -1258,7 +1400,11 @@ int docx_conversion_context::process_paragraph_attr(odf_reader::text::paragraph_
|
||||
|
||||
if (false == Attr->text_style_name_.empty())
|
||||
{
|
||||
if (odf_reader::style_instance * styleInst =
|
||||
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_)
|
||||
)
|
||||
{
|
||||
@ -1268,33 +1414,39 @@ int docx_conversion_context::process_paragraph_attr(odf_reader::text::paragraph_
|
||||
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())
|
||||
{
|
||||
id = styles_map_.get( parentStyleContent->name(), parentStyleContent->type() );
|
||||
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);
|
||||
|
||||
{//вытаскивает rtl c цепочки стилей !! - просто прописать в наследуемом НЕЛЬЗЯ !!
|
||||
odf_reader::paragraph_format_properties properties = odf_reader::calc_paragraph_properties_content(styleInst);
|
||||
|
||||
if (properties.style_writing_mode_)
|
||||
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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
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);
|
||||
//for calculate tabs
|
||||
}
|
||||
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);
|
||||
|
||||
@ -1407,7 +1559,7 @@ void docx_conversion_context::process_page_break_after(const odf_reader::style_i
|
||||
{
|
||||
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_;
|
||||
_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)
|
||||
@ -1611,7 +1763,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;
|
||||
@ -1778,7 +1930,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;
|
||||
|
||||
@ -1803,6 +1955,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);
|
||||
|
||||
@ -222,6 +222,7 @@ public:
|
||||
{
|
||||
current_level_--;
|
||||
frames_.pop_back();
|
||||
caption_.clear();
|
||||
}
|
||||
|
||||
std::wstring & get_text_stream_frame()
|
||||
@ -257,6 +258,7 @@ public:
|
||||
current_shape_ = NULL;
|
||||
shape_text_content_.clear();
|
||||
current_shape_id_ = 0;
|
||||
caption_.clear();
|
||||
}
|
||||
void stop_control()
|
||||
{
|
||||
@ -264,6 +266,7 @@ public:
|
||||
current_control_ = NULL;
|
||||
shape_text_content_.clear();
|
||||
current_shape_id_ = 0;
|
||||
caption_.clear();
|
||||
}
|
||||
void stop_group()
|
||||
{
|
||||
@ -288,6 +291,11 @@ public:
|
||||
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_;
|
||||
@ -306,6 +314,7 @@ private:
|
||||
odf_reader::draw_control*current_control_;
|
||||
|
||||
std::wstring zero_string_;
|
||||
std::wstring caption_;
|
||||
|
||||
};
|
||||
|
||||
@ -604,6 +613,121 @@ private:
|
||||
_state current_state_;
|
||||
std::map<std::wstring, _state> mapElements_;
|
||||
};
|
||||
class table_content_context
|
||||
{
|
||||
public:
|
||||
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;
|
||||
std::vector<int> levels;
|
||||
|
||||
void clear()
|
||||
{
|
||||
name.clear();
|
||||
levels.clear();
|
||||
}
|
||||
};
|
||||
void start_template(int type)
|
||||
{
|
||||
current_template.clear();
|
||||
type_table_content = type;
|
||||
}
|
||||
void end_template()
|
||||
{
|
||||
}
|
||||
void add_level_content(int type)
|
||||
{
|
||||
current_state.levels.push_back(type);
|
||||
}
|
||||
void start_level(const std::wstring& style_name)
|
||||
{
|
||||
current_state.name = style_name;
|
||||
}
|
||||
void end_level()
|
||||
{
|
||||
current_template.insert(std::make_pair(current_state.name, current_state));
|
||||
current_state.clear();
|
||||
}
|
||||
//std::vector<int> find(const std::wstring &name)
|
||||
//{
|
||||
// std::map<std::wstring, _state>::iterator pFind = current_template.find(name);
|
||||
// if (pFind == current_template.end())
|
||||
// {
|
||||
// std::vector<int> empty;
|
||||
// return empty;
|
||||
// }
|
||||
// return pFind->second.levels;
|
||||
//}
|
||||
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_level_.clear();
|
||||
}
|
||||
current_level_ = pFind->second.levels;
|
||||
current_level_index_ = 0;
|
||||
}
|
||||
|
||||
void next_level_index()
|
||||
{
|
||||
current_level_index_++;
|
||||
}
|
||||
int get_type_current_level_index()
|
||||
{
|
||||
if (current_level_index_ < (int)current_level_.size() && current_level_index_ >= 0)
|
||||
return current_level_[current_level_index_];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void clear_current_level_index()
|
||||
{
|
||||
current_level_index_ = 0;
|
||||
current_level_.clear();
|
||||
}
|
||||
|
||||
bool empty_current_table_content_level_index()
|
||||
{
|
||||
return current_level_.empty();
|
||||
}
|
||||
void clear_all()
|
||||
{
|
||||
type_table_content = 0;
|
||||
current_level_index_ = 0;
|
||||
current_level_.clear();
|
||||
current_template.clear();
|
||||
current_state.clear();
|
||||
caption_sequence_name.clear();
|
||||
|
||||
}
|
||||
std::wstring caption_sequence_name;
|
||||
int type_table_content;
|
||||
private:
|
||||
std::vector<int> current_level_;
|
||||
int current_level_index_;
|
||||
|
||||
std::map<std::wstring, _state> current_template;
|
||||
_state current_state;
|
||||
};
|
||||
//---------------------------------------------------------------------------------------------------------
|
||||
class docx_conversion_context : boost::noncopyable
|
||||
{
|
||||
@ -627,7 +751,7 @@ public:
|
||||
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_; }
|
||||
@ -636,6 +760,7 @@ 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_; }
|
||||
@ -675,8 +800,14 @@ public:
|
||||
void start_office_text ();
|
||||
void end_office_text ();
|
||||
|
||||
void start_table_content ();
|
||||
void end_table_content ();
|
||||
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 ();
|
||||
@ -752,6 +883,9 @@ public:
|
||||
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);
|
||||
@ -782,12 +916,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_; }
|
||||
@ -813,6 +951,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_;
|
||||
@ -825,6 +964,8 @@ private:
|
||||
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_;
|
||||
|
||||
@ -859,18 +1000,21 @@ 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, int> mapBookmarks;
|
||||
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;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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()
|
||||
{
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -1247,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;
|
||||
}
|
||||
|
||||
|
||||
@ -1262,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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -56,6 +56,7 @@
|
||||
#include "office_scripts.h"
|
||||
#include "office_forms.h"
|
||||
#include "office_event_listeners.h"
|
||||
#include "office_meta.h"
|
||||
|
||||
#include "styles.h"
|
||||
#include "style_regions.h"
|
||||
@ -142,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());
|
||||
|
||||
@ -207,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);
|
||||
@ -217,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
|
||||
{
|
||||
@ -636,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)
|
||||
|
||||
@ -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 );
|
||||
|
||||
@ -333,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
|
||||
@ -371,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)
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -50,6 +50,7 @@ enum ElementType
|
||||
typeTextReferenceMark,
|
||||
typeTextReferenceMarkStart,
|
||||
typeTextReferenceMarkEnd,
|
||||
typeTextReferenceRef,
|
||||
|
||||
typeTextFieldFieldmarkStart,
|
||||
typeTextFieldFieldmarkEnd,
|
||||
@ -98,12 +99,19 @@ enum ElementType
|
||||
typeTextSequenceDecls,
|
||||
typeTextSequenceDecl,
|
||||
typeTextSequence,
|
||||
typeTextSequenceRef,
|
||||
|
||||
typeTextHiddenParagraph,
|
||||
typeTextHiddenText,
|
||||
|
||||
typePresentationFooter,
|
||||
typePresentationDateTime,
|
||||
|
||||
typeDcCreator,
|
||||
typeDcDate,
|
||||
typeDcDescription,
|
||||
typeDcSubject,
|
||||
typeDcTitle,
|
||||
|
||||
typeDrawA,
|
||||
|
||||
@ -122,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,
|
||||
@ -156,6 +199,8 @@ enum ElementType
|
||||
typeTextUserFieldSet,
|
||||
typeTextUserFieldInput,
|
||||
|
||||
typeTextUserDefined,
|
||||
|
||||
typeTextTrackedChanges,
|
||||
typeTextChangedRegion,
|
||||
typeTextChangeStart,
|
||||
@ -234,6 +279,8 @@ enum ElementType
|
||||
typeTableOddColumnsTemplate,
|
||||
typeTableOddRowsTemplate,
|
||||
|
||||
typeTextIndexTitleTemplate,
|
||||
|
||||
typeTextNotesConfiguration,
|
||||
|
||||
typeStyleFontFace,
|
||||
@ -374,6 +421,15 @@ enum ElementType
|
||||
typeOfficeSettingsConfigItemMapNamed,
|
||||
typeOfficeSettingsConfigItemMapEntry,
|
||||
|
||||
typeOfficeMeta,
|
||||
typeOfficeMetaUserDefined,
|
||||
typeOfficeMetaDocumentStatistic,
|
||||
typeOfficeMetaGenerator,
|
||||
typeOfficeMetaCreationDate,
|
||||
typeOfficeMetaKeyword,
|
||||
typeOfficeMetaEditingCycles,
|
||||
typeOfficeMetaEditingDuration,
|
||||
|
||||
typeDrawG,
|
||||
typeDrawFrame,
|
||||
typeDrawImage,
|
||||
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -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_level_index();
|
||||
if (type == 6)
|
||||
{
|
||||
}
|
||||
}
|
||||
Context.add_element_to_run();
|
||||
|
||||
std::wstring textNode = L"w:t";
|
||||
@ -289,8 +290,22 @@ std::wostream & line_break::text_to_stream(std::wostream & _Wostream) const
|
||||
}
|
||||
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)
|
||||
{
|
||||
@ -305,23 +320,18 @@ 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";
|
||||
|
||||
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", name_, std::wstring(L""));
|
||||
@ -330,14 +340,14 @@ 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;
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
const wchar_t * bookmark_end::ns = L"text";
|
||||
const wchar_t * bookmark_end::name = L"bookmark-end";
|
||||
|
||||
std::wostream & bookmark_end::text_to_stream(std::wostream & _Wostream) const
|
||||
{
|
||||
return _Wostream;
|
||||
}
|
||||
void bookmark_end::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:name", name_, std::wstring(L""));
|
||||
@ -346,34 +356,42 @@ 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";
|
||||
|
||||
std::wostream & bookmark_ref::text_to_stream(std::wostream & _Wostream) const
|
||||
{
|
||||
return _Wostream;
|
||||
}
|
||||
|
||||
void bookmark_ref::add_attributes( const xml::attributes_wc_ptr & Attributes )
|
||||
{
|
||||
CP_APPLY_ATTR(L"text:ref-name", text_ref_name_, std::wstring(L""));
|
||||
CP_APPLY_ATTR(L"text:reference-format", text_reference_format_);
|
||||
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""));
|
||||
@ -384,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""));
|
||||
@ -399,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";
|
||||
@ -570,6 +610,9 @@ void a::docx_convert(oox::docx_conversion_context & Context)
|
||||
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_level_index();
|
||||
//type == 3 (LinkStart)
|
||||
Context.get_table_content_context().next_level_index();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -580,7 +623,8 @@ void a::docx_convert(oox::docx_conversion_context & Context)
|
||||
}
|
||||
|
||||
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 if (false == Context.is_table_content())
|
||||
@ -602,8 +646,6 @@ void a::docx_convert(oox::docx_conversion_context & Context)
|
||||
}
|
||||
else
|
||||
{
|
||||
style_text_properties_ptr tempStyleTextProp;
|
||||
|
||||
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() );
|
||||
@ -620,7 +662,11 @@ 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();
|
||||
|
||||
@ -917,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)
|
||||
@ -1153,24 +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", text_formula_);
|
||||
CP_APPLY_ATTR(L"text:ref-name", text_ref_name_);
|
||||
CP_APPLY_ATTR(L"text:name", text_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 )
|
||||
{
|
||||
CP_APPLY_ATTR(L"style:data-style-name", style_num_format_);
|
||||
CP_APPLY_ATTR(L"style:data-style-name", style_num_letter_sync_);
|
||||
CP_APPLY_ATTR(L"text:formula", text_formula_);
|
||||
CP_APPLY_ATTR(L"text:ref-name", text_ref_name_);
|
||||
CP_APPLY_ATTR(L"text:name", text_name_);
|
||||
}
|
||||
|
||||
void sequence::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
|
||||
{
|
||||
CP_CREATE_ELEMENT(text_);
|
||||
@ -1184,10 +1244,75 @@ 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;
|
||||
if (text_ref_name_ && text_name_)
|
||||
{
|
||||
size_t pos = text_ref_name_->find(L"ref" + *text_name_);
|
||||
if (pos != std::wstring::npos)
|
||||
{
|
||||
ref = *text_name_ + L"!" + text_ref_name_->substr(pos + 3 + text_name_->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 " << template_ << 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>";
|
||||
|
||||
|
||||
//Context.add_new_run();
|
||||
// Context.output_stream() << L"<w:fldChar w:fldCharType=\"begin\"/>";
|
||||
//Context.finish_run();
|
||||
//
|
||||
//Context.add_new_run();
|
||||
//Context.output_stream() << L"<w:instrText xml:space=\"preserve\"> SEQ " << template_ << L" \\* ARABIC </w:instrText>";
|
||||
// Context.finish_run();
|
||||
|
||||
//Context.add_new_run();
|
||||
// Context.output_stream() << L"<w:fldChar w:fldCharType=\"separate\"/>";
|
||||
//Context.finish_run();
|
||||
//
|
||||
//for (size_t i = 0; i < text_.size(); i++)
|
||||
//{
|
||||
// text_[i]->docx_convert(Context);
|
||||
//}
|
||||
//Context.end_bookmark();
|
||||
//
|
||||
//Context.add_new_run();
|
||||
// Context.output_stream() << L"<w:fldChar w:fldCharType=\"end\"/>";
|
||||
//Context.finish_run();
|
||||
}
|
||||
void sequence::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
{
|
||||
@ -1273,7 +1398,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";
|
||||
@ -1319,7 +1444,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";
|
||||
@ -1334,7 +1459,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";
|
||||
@ -1349,7 +1474,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";
|
||||
@ -1364,7 +1489,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";
|
||||
@ -1379,7 +1504,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";
|
||||
@ -1401,7 +1526,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";
|
||||
@ -1416,7 +1541,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);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
@ -1432,7 +1557,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";
|
||||
@ -1455,11 +1580,237 @@ 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_, std::wstring(L""));
|
||||
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_);
|
||||
}
|
||||
|
||||
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::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
if (content_)
|
||||
content_->docx_convert(Context);
|
||||
}
|
||||
|
||||
void bibliography_mark::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
{
|
||||
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
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
|
||||
@ -56,7 +56,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 +175,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,9 +197,6 @@ public:
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
bookmark() {}
|
||||
bookmark(const std::wstring & Name) : text_name_(Name){};
|
||||
|
||||
std::wstring text_name_;
|
||||
|
||||
private:
|
||||
@ -227,9 +222,6 @@ public:
|
||||
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) : name_(Name){};
|
||||
|
||||
std::wstring name_;
|
||||
|
||||
private:
|
||||
@ -251,11 +243,8 @@ public:
|
||||
static const ElementType type = typeTextBookmarkEnd;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual void docx_convert(oox::docx_conversion_context & Context);
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
bookmark_end() {} ;
|
||||
bookmark_end(const std::wstring & Name) : name_(Name){};
|
||||
virtual void docx_convert(oox::docx_conversion_context & Context);
|
||||
|
||||
std::wstring name_;
|
||||
|
||||
@ -279,12 +268,8 @@ public:
|
||||
static const ElementType type = typeTextBookmarkRef;
|
||||
CPDOCCORE_DEFINE_VISITABLE();
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
bookmark_ref() {} ;
|
||||
|
||||
std::wstring text_ref_name_;
|
||||
_CP_OPT(std::wstring) text_reference_format_;
|
||||
std::wstring ref_name_;
|
||||
_CP_OPT(std::wstring) reference_format_;
|
||||
std::wstring content_;
|
||||
private:
|
||||
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
|
||||
@ -293,7 +278,29 @@ private:
|
||||
|
||||
};
|
||||
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
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
@ -306,10 +313,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:
|
||||
@ -318,7 +321,6 @@ private:
|
||||
virtual void add_text(const std::wstring & Text) {}
|
||||
|
||||
};
|
||||
|
||||
CP_REGISTER_OFFICE_ELEMENT2(reference_mark);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// text:reference-mark-start
|
||||
@ -332,10 +334,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:
|
||||
@ -357,11 +355,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:
|
||||
@ -624,13 +617,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);
|
||||
@ -651,8 +644,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:
|
||||
@ -800,7 +793,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
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
@ -818,22 +859,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) text_formula_;
|
||||
_CP_OPT(std::wstring) text_name_;
|
||||
_CP_OPT(std::wstring) text_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);
|
||||
|
||||
_CP_OPT(std::wstring) style_num_format_;
|
||||
_CP_OPT(std::wstring) style_num_letter_sync_;
|
||||
_CP_OPT(std::wstring) text_formula_;
|
||||
_CP_OPT(std::wstring) text_name_;
|
||||
_CP_OPT(std::wstring) text_ref_name_;
|
||||
|
||||
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>
|
||||
@ -1152,6 +1217,297 @@ 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) ;
|
||||
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
|
||||
std::wstring identifier_;
|
||||
std::wstring bibliography_type_; // todoooo in datatype
|
||||
|
||||
_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_;
|
||||
|
||||
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
|
||||
|
||||
@ -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";
|
||||
@ -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);
|
||||
@ -239,7 +238,7 @@ public:
|
||||
|
||||
office_element_ptr style_background_image_;
|
||||
office_element_ptr style_drop_cap_;
|
||||
office_element_ptr style_tab_stops_;
|
||||
office_element_ptr style_tab_stops_;
|
||||
|
||||
_CP_OPT(odf_types::border_style) fo_border_;
|
||||
_CP_OPT(odf_types::border_style) fo_border_top_;
|
||||
@ -290,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 content_; }
|
||||
paragraph_format_properties content_;
|
||||
|
||||
public:
|
||||
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
|
||||
@ -302,7 +301,6 @@ private:
|
||||
|
||||
|
||||
private:
|
||||
paragraph_format_properties content_;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -415,126 +415,101 @@ 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)
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -775,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>
|
||||
{
|
||||
@ -841,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_;
|
||||
|
||||
@ -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_)
|
||||
{
|
||||
|
||||
@ -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_;
|
||||
|
||||
@ -238,16 +238,24 @@ void table_table_column::docx_convert(oox::docx_conversion_context & Context)
|
||||
|
||||
for (unsigned int i = 0; i < columnsRepeated; ++i)
|
||||
{
|
||||
bool bAddWidth = false;
|
||||
if (table_table_column_attlist_.table_style_name_)
|
||||
{
|
||||
const std::wstring colStyleName = table_table_column_attlist_.table_style_name_.get();
|
||||
if (style_instance * inst =
|
||||
Context.root()->odf_context().styleContainer().style_by_name( colStyleName , style_family::TableColumn,Context.process_headers_footers_ ))
|
||||
Context.root()->odf_context().styleContainer().style_by_name( colStyleName , style_family::TableColumn, Context.process_headers_footers_ ))
|
||||
{
|
||||
if (inst->content())
|
||||
{
|
||||
inst->content()->docx_convert(Context);
|
||||
bAddWidth = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (false == bAddWidth)
|
||||
{
|
||||
Context.get_table_context().add_column_width(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -266,22 +274,27 @@ void table_table_cell::docx_convert(oox::docx_conversion_context & Context)
|
||||
_Wostream << L"<w:tcPr>";
|
||||
|
||||
const std::wstring styleName = attlist_.table_style_name_.get_value_or(L"");
|
||||
|
||||
//_Wostream << L"<w:tcW w:w=\"0\" w:type=\"auto\" />";
|
||||
|
||||
if (attlist_extra_.table_number_rows_spanned_ > 1)
|
||||
{
|
||||
_Wostream << L"<w:vMerge w:val=\"restart\" />";
|
||||
_Wostream << L"<w:vMerge w:val=\"restart\"/>";
|
||||
Context.get_table_context().set_rows_spanned(Context.get_table_context().current_column(),
|
||||
attlist_extra_.table_number_rows_spanned_ - 1,
|
||||
attlist_extra_.table_number_columns_spanned_ - 1,
|
||||
styleName
|
||||
);
|
||||
}
|
||||
|
||||
double width = Context.get_table_context().get_current_cell_width();
|
||||
|
||||
if (width > 0.01)
|
||||
{
|
||||
_Wostream << L"<w:tcW w:w=\"" << (int)width << L"\" w:type=\"dxa\"/>";
|
||||
}
|
||||
|
||||
if (attlist_extra_.table_number_columns_spanned_ > 1)
|
||||
{
|
||||
_Wostream << L"<w:gridSpan w:val=\"" << attlist_extra_.table_number_columns_spanned_ << "\" />";
|
||||
_Wostream << L"<w:gridSpan w:val=\"" << attlist_extra_.table_number_columns_spanned_ << "\"/>";
|
||||
Context.get_table_context().set_columns_spanned(attlist_extra_.table_number_columns_spanned_ - 1);
|
||||
}
|
||||
|
||||
@ -324,8 +337,7 @@ void table_table_cell::docx_convert(oox::docx_conversion_context & Context)
|
||||
|
||||
/// Стиль по умолчанию для данной строки
|
||||
{
|
||||
const std::wstring & defaultCellStyle =
|
||||
Context.get_table_context().get_default_cell_style_row();
|
||||
const std::wstring & defaultCellStyle = Context.get_table_context().get_default_cell_style_row();
|
||||
|
||||
if (const style_instance * inst =
|
||||
Context.root()->odf_context().styleContainer().style_by_name(defaultCellStyle, style_family::TableCell,Context.process_headers_footers_))
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -99,6 +99,7 @@ namespace
|
||||
case XmlUtils::XmlNodeType_DocumentType:
|
||||
return typeDocumentType;
|
||||
case XmlUtils::XmlNodeType_Whitespace:
|
||||
case XmlUtils::XmlNodeType_SIGNIFICANT_WHITESPACE:
|
||||
return typeWhitespace;
|
||||
case XmlUtils::XmlNodeType_EndElement:
|
||||
return typeEndElement;
|
||||
|
||||
@ -865,6 +865,14 @@
|
||||
RelativePath="..\src\odf\datatypes\styleleadercolor.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\odf\datatypes\stylenumformat.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\odf\datatypes\stylenumformat.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\odf\datatypes\styleposition.cpp"
|
||||
>
|
||||
|
||||
@ -1591,6 +1591,14 @@
|
||||
RelativePath="..\src\odf\office_forms.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\odf\office_meta.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\odf\office_meta.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\odf\office_presentation.cpp"
|
||||
>
|
||||
|
||||
@ -250,13 +250,13 @@ int odf_lists_styles_context::start_style_level(int level, int type)
|
||||
int odf_type =1;
|
||||
int format_type = -1;
|
||||
|
||||
std::wstring num_format = L"1";
|
||||
style_numformat num_format;
|
||||
bool sync_letter = false;
|
||||
switch(type)
|
||||
{
|
||||
case 0: //numberformatAiueo :
|
||||
case 1: //numberformatAiueoFullWidth :
|
||||
num_format = L"ア, イ, ウ, ...";
|
||||
num_format = style_numformat(style_numformat::aiueo);
|
||||
break;
|
||||
case 2: //numberformatArabicAbjad :
|
||||
break;
|
||||
@ -272,19 +272,19 @@ int odf_lists_styles_context::start_style_level(int level, int type)
|
||||
case 7: //numberformatChicago :
|
||||
break;
|
||||
case 8: //numberformatChineseCounting :
|
||||
num_format = L"イ, ロ, ハ, ...";
|
||||
num_format = style_numformat(style_numformat::chineseCounting);
|
||||
break;
|
||||
case 9: //numberformatChineseCountingThousand :
|
||||
break;
|
||||
case 10: //numberformatChineseLegalSimplified :
|
||||
num_format = L"一, 二, 三, ...";
|
||||
num_format = style_numformat(style_numformat::chineseLegal);
|
||||
break;
|
||||
case 11: //numberformatChosung :
|
||||
break;
|
||||
case 12: //numberformatCustom :
|
||||
break;
|
||||
case 13: //numberformatDecimal :
|
||||
num_format = L"1";
|
||||
num_format = style_numformat(style_numformat::arabic);
|
||||
break;
|
||||
case 14: //numberformatDecimalEnclosedCircle :
|
||||
break;
|
||||
@ -326,19 +326,19 @@ int odf_lists_styles_context::start_style_level(int level, int type)
|
||||
case 32: //numberformatIdeographEnclosedCircle :
|
||||
break;
|
||||
case 33: //numberformatIdeographLegalTraditional :
|
||||
num_format = L"壹, 貳, 參, ...";
|
||||
num_format = style_numformat(style_numformat::ideographLegal);
|
||||
break;
|
||||
case 34: //numberformatIdeographTraditional :
|
||||
num_format = L"甲, 乙, 丙, ...";
|
||||
num_format = style_numformat(style_numformat::ideographTraditional);
|
||||
break;
|
||||
case 35: //numberformatIdeographZodiac :
|
||||
num_format = L"子, 丑, 寅, ...";
|
||||
num_format = style_numformat(style_numformat::ideographZodiac);
|
||||
break;
|
||||
case 36: //numberformatIdeographZodiacTraditional :
|
||||
num_format = L"甲子, 乙丑, 丙寅, ...";
|
||||
num_format = style_numformat(style_numformat::ideographZodiacTraditional);
|
||||
break;
|
||||
case 37: //numberformatIroha :
|
||||
num_format = L"イ, ロ, ハ, ...";
|
||||
num_format = style_numformat(style_numformat::iroha);
|
||||
break;
|
||||
case 38: //numberformatIrohaFullWidth :
|
||||
break;
|
||||
@ -350,21 +350,21 @@ int odf_lists_styles_context::start_style_level(int level, int type)
|
||||
break;
|
||||
case 42: //numberformatKoreanCounting :
|
||||
case 43: //numberformatKoreanDigital :
|
||||
num_format = L"일, 이, 삼, ...";
|
||||
num_format = style_numformat(style_numformat::koreanDigital);
|
||||
break;
|
||||
case 44: //numberformatKoreanDigital2 :
|
||||
break;
|
||||
case 45: //numberformatKoreanLegal :
|
||||
break;
|
||||
case 46: //numberformatLowerLetter
|
||||
num_format = L"a";
|
||||
num_format = style_numformat(style_numformat::alphaLc);
|
||||
sync_letter = true;
|
||||
break;
|
||||
case 47: //numberformatLowerRoman :
|
||||
num_format = L"i";
|
||||
num_format = style_numformat(style_numformat::romanLc);
|
||||
break;
|
||||
case 48: //numberformatNone :
|
||||
num_format = L"";
|
||||
//num_format = L"";
|
||||
break;
|
||||
case 49: //numberformatNumberInDash : //??
|
||||
//suffix -
|
||||
@ -375,11 +375,11 @@ int odf_lists_styles_context::start_style_level(int level, int type)
|
||||
case 51: //numberformatOrdinalText :
|
||||
break;
|
||||
case 52: //numberformatRussianLower :
|
||||
num_format = L"А, Б, .., Аа, Аб, ... (ru)";
|
||||
num_format = style_numformat(style_numformat::russianLo);
|
||||
sync_letter = true;
|
||||
break;
|
||||
case 53: //numberformatRussianUpper :
|
||||
num_format = L"А, Б, .., Аа, Аб, ... (ru)";
|
||||
num_format = style_numformat(style_numformat::russianUp);
|
||||
sync_letter = true;
|
||||
break;
|
||||
case 54: //numberformatTaiwaneseCounting :
|
||||
@ -395,11 +395,11 @@ int odf_lists_styles_context::start_style_level(int level, int type)
|
||||
case 59: //numberformatThaiNumbers :
|
||||
break;
|
||||
case 60: //numberformatUpperLetter :
|
||||
num_format = L"A";
|
||||
num_format = style_numformat(style_numformat::alphaUc);
|
||||
sync_letter = true;
|
||||
break;
|
||||
case 61: //numberformatUpperRoman :
|
||||
num_format = L"I";
|
||||
num_format = style_numformat(style_numformat::romanUc);
|
||||
break;
|
||||
case 62: //numberformatVietnameseCounting :
|
||||
break;
|
||||
|
||||
@ -537,7 +537,7 @@ void odf_page_layout_context::set_page_number_format(_CP_OPT(int) & type, _CP_OP
|
||||
case 34: break; //numberformatIdeographTraditional = 34,
|
||||
case 35: break; //numberformatIdeographZodiac = 35,
|
||||
case 36: break; //numberformatIdeographZodiacTraditional = 36,
|
||||
case 37: break; //numberformatIroha = 37,
|
||||
case 37: layout_state_list_.back().page_number_format = style_numformat(style_numformat::iroha); break;
|
||||
case 38: break; //numberformatIrohaFullWidth = 38,
|
||||
case 39: break; //numberformatJapaneseCounting = 39,
|
||||
case 40: break; //numberformatJapaneseDigitalTenThousand = 40,
|
||||
@ -546,26 +546,27 @@ void odf_page_layout_context::set_page_number_format(_CP_OPT(int) & type, _CP_OP
|
||||
case 43: break; //numberformatKoreanDigital = 43,
|
||||
case 44: break; //numberformatKoreanDigital2 = 44,
|
||||
case 45: break; //numberformatKoreanLegal = 45,
|
||||
case 46: layout_state_list_.back().page_number_format = L"a"; break; //numberformatLowerLetter = 46,
|
||||
case 47: layout_state_list_.back().page_number_format = L"i"; break; //numberformatLowerRoman = 47,
|
||||
case 46: layout_state_list_.back().page_number_format = style_numformat(style_numformat::alphaLc); break; //numberformatLowerLetter = 46,
|
||||
case 47: layout_state_list_.back().page_number_format = style_numformat(style_numformat::romanLc); break; //numberformatLowerRoman = 47,
|
||||
case 48: break; //numberformatNone = 48,
|
||||
case 49: break; //numberformatnumberInDash = 49,
|
||||
case 50: break; //numberformatOrdinal = 50,
|
||||
case 51: break; //numberformatOrdinalText = 51,
|
||||
case 52: break; //numberformatRussianLower = 52,
|
||||
case 53: break; //numberformatRussianUpper = 53,
|
||||
case 52: layout_state_list_.back().page_number_format = style_numformat(style_numformat::russianUp); break;
|
||||
case 53: layout_state_list_.back().page_number_format = style_numformat(style_numformat::russianLo); break;
|
||||
|
||||
case 54: break; //numberformatTaiwaneseCounting = 54,
|
||||
case 55: break; //numberformatTaiwaneseCountingThousand = 55,
|
||||
case 56: break; //numberformatTaiwaneseDigital = 56,
|
||||
case 57: break; //numberformatThaiCounting = 57,
|
||||
case 58: break; //numberformatThaiLetters = 58,
|
||||
case 59: break; //numberformatThainumbers = 59,
|
||||
case 60: layout_state_list_.back().page_number_format = L"A"; break; //numberformatUpperLetter = 60,
|
||||
case 61: layout_state_list_.back().page_number_format = L"I"; break; //numberformatUpperRoman = 61,
|
||||
case 60: layout_state_list_.back().page_number_format = style_numformat(style_numformat::alphaUc); break; //numberformatUpperLetter = 60,
|
||||
case 61: layout_state_list_.back().page_number_format = style_numformat(style_numformat::romanUc); break; //numberformatUpperRoman = 61,
|
||||
case 62: break; //numberformatVietnameseCounting = 62
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}//todooo
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -37,6 +37,7 @@
|
||||
#include "office_elements_create.h"
|
||||
|
||||
#include "length.h"
|
||||
#include "stylenumformat.h"
|
||||
|
||||
namespace cpdoccore {
|
||||
namespace odf_writer {
|
||||
@ -106,7 +107,7 @@ public:
|
||||
_CP_OPT(odf_types::length) header_size_;
|
||||
_CP_OPT(odf_types::length) footer_size_;
|
||||
|
||||
_CP_OPT(std::wstring) page_number_format;
|
||||
_CP_OPT(odf_types::style_numformat) page_number_format;
|
||||
|
||||
private:
|
||||
std::wstring style_oox_name_;
|
||||
|
||||
@ -3590,28 +3590,28 @@ void DocxConverter::convert_comment(int oox_comm_id)
|
||||
{
|
||||
if (!docx_document->m_pComments)return;
|
||||
|
||||
for (size_t comm = 0 ; comm < docx_document->m_pComments->m_arrComments.size(); comm++)
|
||||
{
|
||||
OOX::CComment* oox_comment = docx_document->m_pComments->m_arrComments[comm];
|
||||
|
||||
if (oox_comment == NULL) continue;
|
||||
if (oox_comment->m_oId.IsInit() == false) continue;
|
||||
|
||||
if (oox_comment->m_oId->GetValue() == oox_comm_id)
|
||||
{
|
||||
odt_context->start_comment_content();
|
||||
{
|
||||
if (oox_comment->m_oAuthor.IsInit()) odt_context->comment_context()->set_author (*oox_comment->m_oAuthor);
|
||||
if (oox_comment->m_oDate.IsInit()) odt_context->comment_context()->set_date (oox_comment->m_oDate->GetValue());
|
||||
if (oox_comment->m_oInitials.IsInit()) {}
|
||||
std::map<int, int>::iterator pFind = docx_document->m_pComments->m_mapComments.find(oox_comm_id);
|
||||
|
||||
for (std::vector<OOX::WritingElement*>::iterator it = oox_comment->m_arrItems.begin(); it != oox_comment->m_arrItems.end(); ++it)
|
||||
{
|
||||
convert(*it);
|
||||
}
|
||||
if (pFind == docx_document->m_pComments->m_mapComments.end()) return;
|
||||
|
||||
if ( pFind->second < docx_document->m_pComments->m_arrComments.size() && pFind->second >= 0)
|
||||
{
|
||||
OOX::CComment* oox_comment = docx_document->m_pComments->m_arrComments[pFind->second];
|
||||
|
||||
if (oox_comment == NULL) return;
|
||||
|
||||
odt_context->start_comment_content();
|
||||
{
|
||||
if (oox_comment->m_oAuthor.IsInit()) odt_context->comment_context()->set_author (*oox_comment->m_oAuthor);
|
||||
if (oox_comment->m_oDate.IsInit()) odt_context->comment_context()->set_date (oox_comment->m_oDate->GetValue());
|
||||
if (oox_comment->m_oInitials.IsInit()) {}
|
||||
|
||||
for (std::vector<OOX::WritingElement*>::iterator it = oox_comment->m_arrItems.begin(); it != oox_comment->m_arrItems.end(); ++it)
|
||||
{
|
||||
convert(*it);
|
||||
}
|
||||
odt_context->end_comment_content();
|
||||
}
|
||||
odt_context->end_comment_content();
|
||||
}
|
||||
}
|
||||
void DocxConverter::convert_footnote(int oox_ref_id)
|
||||
|
||||
@ -163,78 +163,64 @@ namespace PPTX
|
||||
|
||||
COfficeFileFormatChecker office_checker;
|
||||
office_checker.isOOXFormatFile(oox_file.GetPath());
|
||||
//if ( std::wstring::npos != sProgID.find(L"Word.Document"))
|
||||
//-----------------------------------------------------------------------------------------
|
||||
DocWrapper::FontProcessor oFontProcessor;
|
||||
NSBinPptxRW::CDrawingConverter oDrawingConverter;
|
||||
|
||||
NSCommon::smart_ptr<OOX::IFileContainer> old_rels = *pWriter->m_pCurrentContainer;
|
||||
NSCommon::smart_ptr<PPTX::Theme> old_theme = *pWriter->m_pTheme;
|
||||
|
||||
NSShapeImageGen::CMediaManager* old_manager = oDrawingConverter.m_pBinaryWriter->m_pCommon->m_pMediaManager;
|
||||
oDrawingConverter.m_pBinaryWriter->m_pCommon->m_pMediaManager = pWriter->m_pCommon->m_pMediaManager;
|
||||
|
||||
oDrawingConverter.SetFontPicker(pWriter->m_pCommon->m_pFontPicker);
|
||||
|
||||
int type = 0;
|
||||
if (office_checker.nFileType == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX ||
|
||||
office_checker.nFileType == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCM )
|
||||
{
|
||||
pWriter->StartRecord(1);
|
||||
pWriter->WriteBYTE(1);
|
||||
pWriter->EndRecord();
|
||||
|
||||
DocWrapper::FontProcessor oFontProcessor;
|
||||
NSBinPptxRW::CDrawingConverter oDrawingConverter;
|
||||
BinDocxRW::CDocxSerializer oDocxSerializer;
|
||||
|
||||
NSBinPptxRW::CBinaryFileWriter* old_writer = oDrawingConverter.m_pBinaryWriter;
|
||||
NSCommon::smart_ptr<OOX::IFileContainer> old_rels = *pWriter->m_pCurrentContainer;
|
||||
BinDocxRW::CDocxSerializer* old_serial = pWriter->m_pMainDocument;
|
||||
NSCommon::smart_ptr<PPTX::Theme> old_theme = *pWriter->m_pTheme;
|
||||
|
||||
oDrawingConverter.m_pBinaryWriter = pWriter;
|
||||
oDocxSerializer.m_pParamsWriter = new BinDocxRW::ParamsWriter(pWriter, &oFontProcessor, &oDrawingConverter, NULL);
|
||||
|
||||
pWriter->m_pMainDocument = &oDocxSerializer;
|
||||
type = 1;
|
||||
BinDocxRW::CDocxSerializer* old_serializer = pWriter->m_pMainDocument;
|
||||
|
||||
BinDocxRW::CDocxSerializer oDocxSerializer;
|
||||
oDrawingConverter.m_pBinaryWriter->m_pMainDocument = &oDocxSerializer;
|
||||
oDocxSerializer.m_pParamsWriter = new BinDocxRW::ParamsWriter(oDrawingConverter.m_pBinaryWriter, &oFontProcessor, &oDrawingConverter, NULL);
|
||||
|
||||
BinDocxRW::BinaryFileWriter oBinaryFileWriter(*oDocxSerializer.m_pParamsWriter);
|
||||
|
||||
pWriter->StartRecord(2);
|
||||
oBinaryFileWriter.intoBindoc(oox_unpacked.GetPath());
|
||||
pWriter->EndRecord();
|
||||
|
||||
oDrawingConverter.m_pBinaryWriter = old_writer;
|
||||
*pWriter->m_pCurrentContainer = old_rels;
|
||||
pWriter->m_pMainDocument = old_serial;
|
||||
*pWriter->m_pTheme = old_theme;
|
||||
oBinaryFileWriter.intoBindoc(oox_unpacked.GetPath());
|
||||
|
||||
pWriter->m_pMainDocument = old_serializer;
|
||||
}
|
||||
else if (office_checker.nFileType == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX ||
|
||||
office_checker.nFileType == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSM)
|
||||
//if ( std::wstring::npos != sProgID.find(L"Excel.Sheet")) //"ET.Xlsx.6" !!!
|
||||
{
|
||||
pWriter->StartRecord(1);
|
||||
pWriter->WriteBYTE(2);
|
||||
pWriter->EndRecord();
|
||||
|
||||
DocWrapper::FontProcessor fp;
|
||||
NSBinPptxRW::CDrawingConverter oDrawingConverter;
|
||||
type = 2;
|
||||
|
||||
NSBinPptxRW::CBinaryFileWriter* old_writer = oDrawingConverter.m_pBinaryWriter;
|
||||
NSCommon::smart_ptr<OOX::IFileContainer> old_rels = *pWriter->m_pCurrentContainer;
|
||||
NSCommon::smart_ptr<PPTX::Theme> old_theme = *pWriter->m_pTheme;
|
||||
|
||||
oDrawingConverter.m_pBinaryWriter = pWriter;
|
||||
|
||||
BinXlsxRW::BinaryFileWriter xlsxBinaryWriter(fp);
|
||||
BinXlsxRW::BinaryFileWriter xlsxBinaryWriter(oFontProcessor);
|
||||
OOX::Spreadsheet::CXlsx oXlsxEmbedded(oox_unpacked);
|
||||
|
||||
pWriter->StartRecord(2);
|
||||
xlsxBinaryWriter.intoBindoc(oXlsxEmbedded, *pWriter , NULL, &oDrawingConverter);
|
||||
pWriter->EndRecord();
|
||||
|
||||
oDrawingConverter.m_pBinaryWriter = old_writer;
|
||||
*pWriter->m_pCurrentContainer = old_rels;
|
||||
*pWriter->m_pTheme = old_theme;
|
||||
xlsxBinaryWriter.intoBindoc(oXlsxEmbedded, *oDrawingConverter.m_pBinaryWriter , NULL, &oDrawingConverter);
|
||||
}
|
||||
//else if (office_checker.nFileType == AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX)
|
||||
//{
|
||||
//}
|
||||
else
|
||||
{//unknown ms package
|
||||
pWriter->StartRecord(1);
|
||||
pWriter->WriteBYTE(0);
|
||||
pWriter->EndRecord();
|
||||
|
||||
pWriter->WriteString1(2, ole_file->filename().GetFilename());
|
||||
oDrawingConverter.m_pBinaryWriter->WriteString1(2, ole_file->filename().GetFilename());
|
||||
}
|
||||
*pWriter->m_pCurrentContainer = old_rels;
|
||||
*pWriter->m_pTheme = old_theme;
|
||||
oDrawingConverter.m_pBinaryWriter->m_pCommon->m_pMediaManager = old_manager;
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
pWriter->StartRecord(1);
|
||||
pWriter->WriteBYTE(type);
|
||||
pWriter->EndRecord();
|
||||
|
||||
pWriter->StartRecord(2);
|
||||
pWriter->WriteBYTEArray(oDrawingConverter.m_pBinaryWriter->GetBuffer(), oDrawingConverter.m_pBinaryWriter->GetPosition());
|
||||
pWriter->EndRecord();
|
||||
|
||||
NSDirectory::DeleteDirectory(oox_unpacked.GetPath());
|
||||
}
|
||||
else if ( std::wstring::npos != sProgID.find(L"Equation"))
|
||||
@ -359,14 +345,8 @@ namespace PPTX
|
||||
|
||||
std::wstring sThemePath, sMediaPath, sEmbedPath;
|
||||
oDocxSerializer.CreateDocxFolders (sDstEmbeddedTemp, sThemePath, sMediaPath, sEmbedPath);
|
||||
|
||||
NSBinPptxRW::CBinaryFileReader* old_reader = oDrawingConverter.m_pReader;
|
||||
NSBinPptxRW::CRelsGenerator* old_rels = pReader->m_pRels;
|
||||
|
||||
//m_mapEnumeratedGlobal.clear();
|
||||
|
||||
oDrawingConverter.m_pReader = pReader;
|
||||
pReader->m_pRels = new NSBinPptxRW::CRelsGenerator();
|
||||
oDrawingConverter.m_pReader->Init(pReader->GetData() + pReader->GetPos(), 0, _embed_data_size);
|
||||
|
||||
oDrawingConverter.SetMainDocument(&oDocxSerializer);
|
||||
|
||||
@ -390,46 +370,24 @@ namespace PPTX
|
||||
|
||||
OOX::CContentTypes *pContentTypes = oDrawingConverter.GetContentTypes();
|
||||
//docProps
|
||||
OOX::CPath pathDocProps = sDstEmbeddedTemp + FILE_SEPARATOR_STR + _T("docProps");
|
||||
OOX::CPath pathDocProps = sDstEmbeddedTemp + FILE_SEPARATOR_STR + L"docProps";
|
||||
NSDirectory::CreateDirectory(pathDocProps.GetPath());
|
||||
|
||||
OOX::CPath DocProps = std::wstring(_T("docProps"));
|
||||
OOX::CPath DocProps = std::wstring(L"docProps");
|
||||
|
||||
OOX::CApp oApp(NULL);
|
||||
oApp.SetDefaults();
|
||||
oApp.write(pathDocProps + FILE_SEPARATOR_STR + _T("app.xml"), DocProps, *pContentTypes);
|
||||
|
||||
OOX::CCore oCore(NULL);
|
||||
oCore.SetDefaults();
|
||||
oCore.write(pathDocProps + FILE_SEPARATOR_STR + _T("core.xml"), DocProps, *pContentTypes);
|
||||
|
||||
OOX::CApp* pApp = new OOX::CApp(NULL);
|
||||
if (pApp)
|
||||
{
|
||||
pApp->SetApplication(L"ONLYOFFICE");
|
||||
#if defined(INTVER)
|
||||
pApp->SetAppVersion(VALUE2STR(INTVER));
|
||||
#endif
|
||||
pApp->SetDocSecurity(0);
|
||||
pApp->SetScaleCrop(false);
|
||||
pApp->SetLinksUpToDate(false);
|
||||
pApp->SetSharedDoc(false);
|
||||
pApp->SetHyperlinksChanged(false);
|
||||
|
||||
pApp->write(pathDocProps + FILE_SEPARATOR_STR + _T("app.xml"), DocProps, *pContentTypes);
|
||||
delete pApp;
|
||||
}
|
||||
OOX::CCore* pCore = new OOX::CCore(NULL);
|
||||
if (pCore)
|
||||
{
|
||||
pCore->SetCreator(_T(""));
|
||||
pCore->SetLastModifiedBy(_T(""));
|
||||
pCore->write(pathDocProps + FILE_SEPARATOR_STR + _T("core.xml"), DocProps, *pContentTypes);
|
||||
delete pCore;
|
||||
}
|
||||
oDocxSerializer.m_pCurFileWriter->Write();
|
||||
pContentTypes->Write(sDstEmbeddedTemp);
|
||||
|
||||
COfficeUtils oOfficeUtils(NULL);
|
||||
oOfficeUtils.CompressFileOrDirectory(sDstEmbeddedTemp, sDstEmbedded + FILE_SEPARATOR_STR + sDocxFilename, true);
|
||||
|
||||
pReader->m_pRels->CloseRels();
|
||||
delete pReader->m_pRels;
|
||||
|
||||
pReader->m_pRels = old_rels;
|
||||
oDrawingConverter.m_pReader = old_reader;
|
||||
//------------------------------------------------------------------
|
||||
//std::wstring sEmbWorksheetRelsName = L"embeddings/" + sDocxFilename;
|
||||
//std::wstring sEmbWorksheetRelType = OOX::FileTypes::MicrosoftOfficeWordDocument.RelationType();
|
||||
@ -455,13 +413,9 @@ namespace PPTX
|
||||
|
||||
boost::unordered_map<std::wstring, size_t> old_enum_map = oXlsx.m_mapEnumeratedGlobal;
|
||||
|
||||
NSBinPptxRW::CBinaryFileReader* old_reader = oDrawingConverter.m_pReader;
|
||||
NSBinPptxRW::CRelsGenerator* old_rels = pReader->m_pRels;
|
||||
|
||||
oXlsx.m_mapEnumeratedGlobal.clear();
|
||||
|
||||
oDrawingConverter.m_pReader = pReader;
|
||||
pReader->m_pRels = new NSBinPptxRW::CRelsGenerator();
|
||||
oDrawingConverter.m_pReader->Init(pReader->GetData() + pReader->GetPos(), 0, _embed_data_size);
|
||||
|
||||
oDrawingConverter.SetDstPath(sDstEmbeddedTemp + FILE_SEPARATOR_STR + L"xl");
|
||||
oDrawingConverter.SetSrcPath(pReader->m_strFolder, 2);
|
||||
@ -470,7 +424,7 @@ namespace PPTX
|
||||
oDrawingConverter.SetEmbedDstPath(sEmbedPath);
|
||||
|
||||
std::wstring sXlsxFilename = L"Microsoft_Excel_Worksheet" + std::to_wstring( id ) + L".xlsx";
|
||||
oEmbeddedReader.ReadMainTable(oXlsx, *pReader, pReader->m_strFolder, sDstEmbeddedTemp, oSaveParams, &oDrawingConverter);
|
||||
oEmbeddedReader.ReadMainTable(oXlsx, *oDrawingConverter.m_pReader, pReader->m_strFolder, sDstEmbeddedTemp, oSaveParams, &oDrawingConverter);
|
||||
|
||||
oXlsx.PrepareToWrite();
|
||||
|
||||
@ -479,11 +433,6 @@ namespace PPTX
|
||||
COfficeUtils oOfficeUtils(NULL);
|
||||
oOfficeUtils.CompressFileOrDirectory(sDstEmbeddedTemp, sDstEmbedded + FILE_SEPARATOR_STR + sXlsxFilename, true);
|
||||
|
||||
pReader->m_pRels->CloseRels();
|
||||
delete pReader->m_pRels;
|
||||
|
||||
pReader->m_pRels = old_rels;
|
||||
oDrawingConverter.m_pReader = old_reader;
|
||||
oXlsx.m_mapEnumeratedGlobal = old_enum_map;
|
||||
//------------------------------------------------------------------
|
||||
//std::wstring sEmbWorksheetRelsName = L"embeddings/" + sXlsxFilename;
|
||||
|
||||
@ -567,6 +567,10 @@
|
||||
<Filter
|
||||
Name="___"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\source\Writer\OOXCommentsWriter.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\source\Writer\OOXContentTypesWriter.h"
|
||||
>
|
||||
|
||||
@ -1007,32 +1007,32 @@ bool RtfCharPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& oRea
|
||||
//COMMAND_RTF_BOOL( "ul", charProps->m_bUnderline, sCommand, hasParameter, parameter)
|
||||
COMMAND_RTF_INT ( "ulc", charProps->m_nUnderlineColor, sCommand, hasParameter, parameter)
|
||||
|
||||
COMMAND_RTF_INT ( "uld", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Dotted)
|
||||
COMMAND_RTF_INT ( "uld", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Dotted)
|
||||
COMMAND_RTF_INT ( "uldash", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Dashed)
|
||||
COMMAND_RTF_INT ( "uldashd", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Dash_dotted)
|
||||
COMMAND_RTF_INT ( "uldashdd", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Dash_dot_dotted)
|
||||
COMMAND_RTF_INT ( "uldb", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Double)
|
||||
COMMAND_RTF_INT ( "ulhwave", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Heavy_wave)
|
||||
COMMAND_RTF_INT ( "ulldash", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Long_dashe)
|
||||
COMMAND_RTF_INT ( "uldashd", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Dash_dotted)
|
||||
COMMAND_RTF_INT ( "uldashdd", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Dash_dot_dotted)
|
||||
COMMAND_RTF_INT ( "uldb", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Double)
|
||||
COMMAND_RTF_INT ( "ulhwave", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Heavy_wave)
|
||||
COMMAND_RTF_INT ( "ulldash", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Long_dashe)
|
||||
COMMAND_RTF_INT ( "ulnone", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_none)
|
||||
COMMAND_RTF_INT ( "ulth", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Thick)
|
||||
COMMAND_RTF_INT ( "ulthd", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Thick_dotted)
|
||||
COMMAND_RTF_INT ( "ulthdash", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Thick_dashed)
|
||||
COMMAND_RTF_INT ( "ulthdashd", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Thick_dash_dotted)
|
||||
COMMAND_RTF_INT ( "ulth", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Thick)
|
||||
COMMAND_RTF_INT ( "ulthd", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Thick_dotted)
|
||||
COMMAND_RTF_INT ( "ulthdash", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Thick_dashed)
|
||||
COMMAND_RTF_INT ( "ulthdashd", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Thick_dash_dotted)
|
||||
COMMAND_RTF_INT ( "ulthdashdd", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Thick_dash_dot_dotted)
|
||||
COMMAND_RTF_INT ( "ulthldash", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Thick_long_dashed)
|
||||
COMMAND_RTF_INT ( "ulthldash", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Thick_long_dashed)
|
||||
COMMAND_RTF_INT ( "ululdbwave", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Double_wave)
|
||||
COMMAND_RTF_INT ( "ulw", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Word)
|
||||
COMMAND_RTF_INT ( "ulw", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Word)
|
||||
COMMAND_RTF_INT ( "ulwave", charProps->m_eUnderStyle, sCommand, true, RtfCharProperty::uls_Wave)
|
||||
|
||||
COMMAND_RTF_INT ( "up", charProps->m_nUp, sCommand, hasParameter, parameter)
|
||||
|
||||
COMMAND_RTF_INT ( "crauth", charProps->m_nCrAuth, sCommand, hasParameter, parameter)
|
||||
COMMAND_RTF_INT ( "crdate", charProps->m_nCrDate, sCommand, hasParameter, parameter)
|
||||
COMMAND_RTF_INT ( "insrsid", charProps->m_nInsrsid, sCommand, hasParameter, parameter)
|
||||
COMMAND_RTF_INT ( "insrsid", charProps->m_nInsrsid, sCommand, hasParameter, parameter)
|
||||
|
||||
COMMAND_RTF_INT ( "revauth", charProps->m_nRevauth, sCommand, hasParameter, parameter)
|
||||
COMMAND_RTF_INT ( "revdttm", charProps->m_nRevdttm, sCommand, hasParameter, parameter)
|
||||
COMMAND_RTF_INT ( "revauth", charProps->m_nRevauth, sCommand, hasParameter, parameter)
|
||||
COMMAND_RTF_INT ( "revdttm", charProps->m_nRevdttm, sCommand, hasParameter, parameter)
|
||||
COMMAND_RTF_INT ( "revauthdel", charProps->m_nRevauthDel, sCommand, hasParameter, parameter)
|
||||
COMMAND_RTF_INT ( "revdttmdel", charProps->m_nRevdttmDel, sCommand, hasParameter, parameter)
|
||||
|
||||
@ -2814,7 +2814,69 @@ bool RtfParagraphPropDestination::ExecuteCommand(RtfDocument& oDocument, RtfRead
|
||||
if ( pNewBookmarkEnd->IsValid() )
|
||||
m_oCurParagraph->AddItem( pNewBookmarkEnd );
|
||||
}
|
||||
else if ( "footnote" == sCommand )
|
||||
else if ( "atrfstart" == sCommand )
|
||||
{
|
||||
RtfAnnotElemPtr pNewAnnotElem ( new RtfAnnotElem(1) );
|
||||
RtfAnnotElemReader oAnnotElemReader ( *pNewAnnotElem );
|
||||
|
||||
oAbstrReader.StartSubReader( oAnnotElemReader, oDocument, oReader );
|
||||
|
||||
if ( pNewAnnotElem->IsValid() )
|
||||
m_oCurParagraph->AddItem( pNewAnnotElem );
|
||||
}
|
||||
else if ( "atrfend" == sCommand )
|
||||
{
|
||||
RtfAnnotElemPtr pNewAnnotElem ( new RtfAnnotElem(2) );
|
||||
RtfAnnotElemReader oAnnotElemReader ( *pNewAnnotElem );
|
||||
|
||||
oAbstrReader.StartSubReader( oAnnotElemReader, oDocument, oReader );
|
||||
|
||||
if ( pNewAnnotElem->IsValid() )
|
||||
m_oCurParagraph->AddItem( pNewAnnotElem );
|
||||
|
||||
}
|
||||
else if ( "annotation" == sCommand )
|
||||
{
|
||||
RtfAnnotationPtr pNewAnnot ( new RtfAnnotation() );
|
||||
RtfAnnotationReader oAnnotReader ( *pNewAnnot );
|
||||
|
||||
oAbstrReader.StartSubReader( oAnnotReader, oDocument, oReader );
|
||||
|
||||
if ( pNewAnnot->IsValid() )
|
||||
m_oCurParagraph->AddItem( pNewAnnot );
|
||||
}
|
||||
else if ( "atnid" == sCommand )
|
||||
{
|
||||
RtfAnnotElemPtr pNewAnnotElem ( new RtfAnnotElem(5) );
|
||||
RtfAnnotElemReader oAnnotElemReader( *pNewAnnotElem );
|
||||
|
||||
oAbstrReader.StartSubReader( oAnnotElemReader, oDocument, oReader );
|
||||
|
||||
if ( pNewAnnotElem->IsValid() )
|
||||
m_oCurParagraph->AddItem( pNewAnnotElem );
|
||||
}
|
||||
else if ( "atnauthor" == sCommand )
|
||||
{
|
||||
RtfAnnotElemPtr pNewAnnotElem ( new RtfAnnotElem(4) );
|
||||
RtfAnnotElemReader oAnnotElemReader( *pNewAnnotElem );
|
||||
|
||||
oAbstrReader.StartSubReader( oAnnotElemReader, oDocument, oReader );
|
||||
|
||||
if ( pNewAnnotElem->IsValid() )
|
||||
m_oCurParagraph->AddItem( pNewAnnotElem );
|
||||
}
|
||||
else if ( "atnref" == sCommand )
|
||||
{
|
||||
RtfAnnotElemPtr pNewAnnotElem ( new RtfAnnotElem(3) );
|
||||
RtfAnnotElemReader oAnnotElemReader ( *pNewAnnotElem );
|
||||
|
||||
oAbstrReader.StartSubReader( oAnnotElemReader, oDocument, oReader );
|
||||
|
||||
if ( pNewAnnotElem->IsValid() )
|
||||
m_oCurParagraph->AddItem( pNewAnnotElem );
|
||||
|
||||
}
|
||||
else if ( "footnote" == sCommand )
|
||||
{
|
||||
RtfFootnotePtr pNewFootnote ( new RtfFootnote() );
|
||||
pNewFootnote->m_oCharProp = oReader.m_oState->m_oCharProp;
|
||||
@ -2825,6 +2887,14 @@ bool RtfParagraphPropDestination::ExecuteCommand(RtfDocument& oDocument, RtfRead
|
||||
if ( pNewFootnote->IsValid() )
|
||||
m_oCurParagraph->AddItem( pNewFootnote );
|
||||
}
|
||||
//else if ( "chatn" == sCommand )
|
||||
//{
|
||||
// RtfCharSpecialPtr pNewChar ( new RtfCharSpecial() );
|
||||
//
|
||||
// pNewChar->m_oProperty = oReader.m_oState->m_oCharProp;
|
||||
// pNewChar->m_eType = RtfCharSpecial::rsc_chatn;
|
||||
// m_oCurParagraph->AddItem( pNewChar );
|
||||
//}
|
||||
else if ( "chftn" == sCommand )
|
||||
{
|
||||
if ( 1 == oReader.m_nFootnote )
|
||||
|
||||
@ -1513,6 +1513,40 @@ private:
|
||||
m_oField.m_bTextOnly = true;
|
||||
}
|
||||
};
|
||||
class RtfAnnotElemReader: public RtfAbstractReader
|
||||
{
|
||||
public:
|
||||
RtfAnnotElem& m_oAnnot;
|
||||
|
||||
RtfAnnotElemReader( RtfAnnotElem& oAnnot ) : m_oAnnot(oAnnot)
|
||||
{
|
||||
}
|
||||
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter)
|
||||
{
|
||||
if( "atrfstart" == sCommand )
|
||||
;
|
||||
else if( "atrfend" == sCommand )
|
||||
;
|
||||
else if( "atnref" == sCommand )
|
||||
;
|
||||
else if( "atndate" == sCommand )
|
||||
;
|
||||
else if( "atnid" == sCommand )
|
||||
;
|
||||
else if( "atnauthor" == sCommand )
|
||||
;
|
||||
else if ( "atnparent" == sCommand )
|
||||
;
|
||||
else
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, std::wstring sText)
|
||||
{
|
||||
m_oAnnot.m_sValue += sText ;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class RtfBookmarkStartReader: public RtfAbstractReader
|
||||
{
|
||||
@ -1679,6 +1713,60 @@ public:
|
||||
oReader.m_nFootnote = PROP_DEF;
|
||||
}
|
||||
};
|
||||
|
||||
class RtfAnnotationReader: public RtfAbstractReader
|
||||
{
|
||||
private:
|
||||
RtfParagraphPropDestination m_oParPropDest;
|
||||
public:
|
||||
RtfAnnotation& m_oRtfAnnotation;
|
||||
|
||||
RtfAnnotationReader( RtfAnnotation& oRtfAnnotation ) : m_oRtfAnnotation(oRtfAnnotation)
|
||||
{
|
||||
}
|
||||
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter)
|
||||
{
|
||||
if( "annotation" == sCommand )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if( "atnref" == sCommand )
|
||||
{
|
||||
m_oRtfAnnotation.m_oRef = RtfAnnotElemPtr ( new RtfAnnotElem(3) );
|
||||
RtfAnnotElemReader oAnnotReader ( *m_oRtfAnnotation.m_oRef );
|
||||
|
||||
StartSubReader( oAnnotReader, oDocument, oReader );
|
||||
|
||||
}
|
||||
else if( "atndate" == sCommand )
|
||||
{
|
||||
m_oRtfAnnotation.m_oDate = RtfAnnotElemPtr ( new RtfAnnotElem(6) );
|
||||
RtfAnnotElemReader oAnnotReader ( *m_oRtfAnnotation.m_oDate );
|
||||
|
||||
StartSubReader( oAnnotReader, oDocument, oReader );
|
||||
}
|
||||
else if( "atnparent" == sCommand )
|
||||
{
|
||||
m_oRtfAnnotation.m_oParent = RtfAnnotElemPtr ( new RtfAnnotElem(7) );
|
||||
RtfAnnotElemReader oAnnotReader ( *m_oRtfAnnotation.m_oParent );
|
||||
|
||||
StartSubReader( oAnnotReader, oDocument, oReader );
|
||||
}
|
||||
else
|
||||
return m_oParPropDest.ExecuteCommand( oDocument, oReader, (*this), sCommand, hasParameter, parameter );
|
||||
return true;
|
||||
}
|
||||
void ExecuteText( RtfDocument& oDocument, RtfReader& oReader, std::wstring sText )
|
||||
{
|
||||
m_oParPropDest.ExecuteText( oDocument, oReader, sText );
|
||||
}
|
||||
void ExitReader( RtfDocument& oDocument, RtfReader& oReader )
|
||||
{
|
||||
m_oParPropDest.Finalize( oReader );
|
||||
|
||||
m_oRtfAnnotation.m_oContent = m_oParPropDest.m_oTextItems;
|
||||
}
|
||||
};
|
||||
class RtfDefParPropReader: public RtfAbstractReader
|
||||
{
|
||||
private:
|
||||
|
||||
@ -135,14 +135,14 @@ public:
|
||||
int nId = ooxFtnEdn->m_oId->GetValue();
|
||||
OOXTextItemReader oTextItemReader;
|
||||
|
||||
for (std::vector<OOX::WritingElement*>::iterator it = ooxFtnEdn->m_arrItems.begin(); it != ooxFtnEdn->m_arrItems.end(); ++it)
|
||||
for (size_t i = 0; i < ooxFtnEdn->m_arrItems.size(); ++i)
|
||||
{
|
||||
if( nSeparatorId == nId )
|
||||
{
|
||||
TextItemContainerPtr oNewTextItem ( new TextItemContainer() );
|
||||
oTextItemReader.m_oTextItems = oNewTextItem;
|
||||
|
||||
if( true == oTextItemReader.Parse( *it, oParam ) )
|
||||
if( true == oTextItemReader.Parse( ooxFtnEdn->m_arrItems[i], oParam ) )
|
||||
{
|
||||
if( true == bFootnote )
|
||||
oParam.oRtf->m_oFootnoteSep = oNewTextItem;
|
||||
@ -155,7 +155,7 @@ public:
|
||||
TextItemContainerPtr oNewTextItem ( new TextItemContainer() );
|
||||
oTextItemReader.m_oTextItems = oNewTextItem;
|
||||
|
||||
if( true == oTextItemReader.Parse( *it, oParam ) )
|
||||
if( true == oTextItemReader.Parse( ooxFtnEdn->m_arrItems[i], oParam ) )
|
||||
{
|
||||
if( true == bFootnote )
|
||||
oParam.oRtf->m_oFootnoteCon = oNewTextItem;
|
||||
@ -168,7 +168,7 @@ public:
|
||||
TextItemContainerPtr oNewTextItem ( new TextItemContainer() );
|
||||
oTextItemReader.m_oTextItems = oNewTextItem;
|
||||
|
||||
if( true == oTextItemReader.Parse( *it, oParam ) )
|
||||
if( true == oTextItemReader.Parse( ooxFtnEdn->m_arrItems[i], oParam ) )
|
||||
{
|
||||
if( true == bFootnote )
|
||||
oParam.oReader->m_mapFootnotes[ nId] = oNewTextItem;
|
||||
|
||||
@ -32,9 +32,9 @@
|
||||
|
||||
#include "OOXParagraphReader.h"
|
||||
|
||||
#include "OOXTextItemReader.h"
|
||||
#include "OOXpPrFrameReader.h"
|
||||
#include "OOXpPrTabReader.h"
|
||||
#include "OOXTableReader.h"
|
||||
|
||||
#include "../RtfOle.h"
|
||||
|
||||
@ -457,6 +457,117 @@ bool OOXParagraphReader::Parse3( ReaderParameter oParam , RtfParagraph& oOutputP
|
||||
}
|
||||
}
|
||||
}break;
|
||||
case OOX::et_w_commentRangeStart:
|
||||
case OOX::et_w_commentReference:
|
||||
{
|
||||
OOX::Logic::CCommentRangeStart * pCommentStart = dynamic_cast<OOX::Logic::CCommentRangeStart*>(m_ooxElement);
|
||||
|
||||
if(pCommentStart->m_oId.IsInit())
|
||||
{
|
||||
int nId = pCommentStart->m_oId->GetValue();
|
||||
std::map<int, OOXReader::_comment>::iterator pFind = oParam.oReader->m_mapComments.find( nId );
|
||||
|
||||
if( pFind == oParam.oReader->m_mapComments.end())
|
||||
{
|
||||
RtfAnnotElemPtr oNewAnnotElem ( new RtfAnnotElem(1) );
|
||||
oNewAnnotElem->m_sValue = std::to_wstring(0x7700000 + nId);
|
||||
|
||||
OOXReader::_comment comment;
|
||||
comment.ref = oNewAnnotElem->m_sValue;
|
||||
comment.index = oParam.oReader->m_mapComments.size();
|
||||
|
||||
oParam.oReader->m_mapComments.insert(std::make_pair( nId, comment));
|
||||
oOutputParagraph.AddItem( oNewAnnotElem );
|
||||
}
|
||||
}
|
||||
}break;
|
||||
case OOX::et_w_commentRangeEnd:
|
||||
{
|
||||
OOX::Logic::CCommentRangeEnd * pCommentEnd = dynamic_cast<OOX::Logic::CCommentRangeEnd*>(m_ooxElement);
|
||||
|
||||
int nId = pCommentEnd->m_oId->GetValue();
|
||||
|
||||
std::map<int, OOXReader::_comment>::iterator pFindRef = oParam.oReader->m_mapComments.find( nId );
|
||||
|
||||
if( pFindRef != oParam.oReader->m_mapComments.end())
|
||||
{
|
||||
RtfAnnotElemPtr oNewAnnotElem ( new RtfAnnotElem(2) );
|
||||
oNewAnnotElem->m_sValue = pFindRef->second.ref;
|
||||
oOutputParagraph.AddItem( oNewAnnotElem );
|
||||
|
||||
//find comment and add info
|
||||
std::map<int, int>::iterator pFindComment = oParam.oDocx->m_pComments->m_mapComments.find(nId);
|
||||
|
||||
if (pFindComment != oParam.oDocx->m_pComments->m_mapComments.end())
|
||||
{
|
||||
if ( pFindComment->second < oParam.oDocx->m_pComments->m_arrComments.size() && pFindComment->second >= 0)
|
||||
{
|
||||
OOX::CComment* oox_comment = oParam.oDocx->m_pComments->m_arrComments[pFindComment->second];
|
||||
if (oox_comment)
|
||||
{
|
||||
if (oox_comment->m_oAuthor.IsInit())
|
||||
{
|
||||
RtfAnnotElemPtr oNewAnnotAuthor ( new RtfAnnotElem(4) );
|
||||
oNewAnnotAuthor->m_sValue = *oox_comment->m_oAuthor;
|
||||
oOutputParagraph.AddItem( oNewAnnotAuthor );
|
||||
}
|
||||
if (oox_comment->m_oInitials.IsInit())
|
||||
{
|
||||
RtfAnnotElemPtr oNewAnnotAuthorId ( new RtfAnnotElem(5) );
|
||||
oNewAnnotAuthorId->m_sValue = *oox_comment->m_oInitials;
|
||||
oOutputParagraph.AddItem( oNewAnnotAuthorId );
|
||||
}
|
||||
|
||||
RtfAnnotationPtr oNewAnnotContent(new RtfAnnotation());
|
||||
|
||||
oNewAnnotContent->m_oRef = RtfAnnotElemPtr ( new RtfAnnotElem(3) );
|
||||
oNewAnnotContent->m_oRef->m_sValue = pFindRef->second.ref;
|
||||
|
||||
if (oox_comment->m_oDate.IsInit())
|
||||
{
|
||||
oNewAnnotContent->m_oDate = RtfAnnotElemPtr ( new RtfAnnotElem(6) );
|
||||
|
||||
int nDate = RtfUtility::convertDateTime(oox_comment->m_oDate->GetValue());
|
||||
oNewAnnotContent->m_oDate->m_sValue = std::to_wstring(nDate);
|
||||
}
|
||||
|
||||
OOXTextItemReader oTextItemReader;
|
||||
oTextItemReader.m_oTextItems = oNewAnnotContent->m_oContent;
|
||||
|
||||
for (size_t i = 0; i < oox_comment->m_arrItems.size(); ++i)
|
||||
{
|
||||
if (oParam.oDocx->m_pCommentsExt)
|
||||
{
|
||||
OOX::Logic::CParagraph *pParagraph = dynamic_cast<OOX::Logic::CParagraph*>(oox_comment->m_arrItems[i]);
|
||||
if ((pParagraph) && (pParagraph->m_oParaId.IsInit()))
|
||||
{
|
||||
std::map<int, int>::iterator pFindPara = oParam.oDocx->m_pCommentsExt->m_mapComments.find(pParagraph->m_oParaId->GetValue());
|
||||
if (pFindPara != oParam.oDocx->m_pCommentsExt->m_mapComments.end())
|
||||
{
|
||||
oParam.oReader->m_mapCommentsPara.insert(std::make_pair( pParagraph->m_oParaId->GetValue(), pFindRef->second.index));
|
||||
|
||||
if (oParam.oDocx->m_pCommentsExt->m_arrComments[pFindPara->second]->m_oParaIdParent.IsInit())
|
||||
{
|
||||
std::map<int, int>::iterator pFindParent = oParam.oReader->m_mapCommentsPara.find(oParam.oDocx->m_pCommentsExt->m_arrComments[pFindPara->second]->m_oParaIdParent->GetValue());
|
||||
if (pFindParent != oParam.oReader->m_mapCommentsPara.end())
|
||||
{
|
||||
oNewAnnotContent->m_oParent = RtfAnnotElemPtr ( new RtfAnnotElem(7) );
|
||||
oNewAnnotContent->m_oParent->m_sValue = std::to_wstring( pFindParent->second - pFindRef->second.index);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
oTextItemReader.Parse(oox_comment->m_arrItems[i], oParam);
|
||||
}
|
||||
|
||||
oOutputParagraph.AddItem( oNewAnnotContent );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@ -66,8 +66,17 @@ public:
|
||||
|
||||
int m_nCurOleChartId;
|
||||
int m_nCurFittextId;
|
||||
|
||||
std::map<int, std::wstring> m_aBookmarks;
|
||||
|
||||
struct _comment
|
||||
{
|
||||
std::wstring ref;
|
||||
int index;
|
||||
};
|
||||
std::map<int, _comment> m_mapComments; //nId, ref & index added
|
||||
std::map<int, int> m_mapCommentsPara; //paraId, index added
|
||||
|
||||
std::map<int, int> m_mapPictureBullet;
|
||||
std::map<int, TextItemContainerPtr> m_mapFootnotes;
|
||||
std::map<int, TextItemContainerPtr> m_mapEndnotes;
|
||||
|
||||
@ -34,6 +34,7 @@
|
||||
|
||||
#include "Writer/OOXWriter.h"
|
||||
#include "Writer/OOXFootnoteWriter.h"
|
||||
#include "Writer/OOXCommentsWriter.h"
|
||||
|
||||
#include "Utils.h"
|
||||
|
||||
@ -56,11 +57,10 @@ std::wstring RtfBookmarkStart::RenderToRtf(RenderParameter oRenderParameter)
|
||||
std::wstring RtfBookmarkStart::RenderToOOX(RenderParameter oRenderParameter)
|
||||
{
|
||||
std::wstring sResult;
|
||||
//ATLASSERT( false == m_sName.empty() );
|
||||
sResult += L"<w:bookmarkStart";
|
||||
|
||||
OOXWriter * poOOXWriter = static_cast<OOXWriter*> ( oRenderParameter.poWriter );
|
||||
RtfDocument * poDocument = static_cast<RtfDocument*> (oRenderParameter.poDocument);
|
||||
RtfDocument * poDocument = static_cast<RtfDocument*> ( oRenderParameter.poDocument );
|
||||
|
||||
std::map<std::wstring, int>::iterator pPair = poOOXWriter->m_aBookmarksId.find( m_sName );
|
||||
|
||||
@ -118,6 +118,131 @@ std::wstring RtfBookmarkEnd::RenderToOOX(RenderParameter oRenderParameter)
|
||||
sResult += L"/>";
|
||||
return sResult;
|
||||
}
|
||||
|
||||
std::wstring RtfAnnotElem::RenderToRtf(RenderParameter oRenderParameter)
|
||||
{
|
||||
std::wstring sResult;
|
||||
|
||||
if (m_nType == 1) sResult += L"{\\*\\atrfstart " + m_sValue + L"}";
|
||||
else if (m_nType == 2) sResult += L"{\\*\\atrfend " + m_sValue + L"}";
|
||||
else if (m_nType == 3) sResult += L"{\\*\\atnref " + m_sValue + L"}";
|
||||
else if (m_nType == 4) sResult += L"{\\*\\atnauthor " + m_sValue + L"}";
|
||||
else if (m_nType == 5) sResult += L"{\\*\\atnid " + m_sValue + L"}";
|
||||
else if (m_nType == 6) sResult += L"{\\*\\atndate " + m_sValue + L"}";
|
||||
else if (m_nType == 7) sResult += L"{\\*\\atnparent " + m_sValue + L"}";
|
||||
|
||||
return sResult;
|
||||
}
|
||||
|
||||
std::wstring RtfAnnotElem::RenderToOOX(RenderParameter oRenderParameter)
|
||||
{
|
||||
if (m_nType > 8 || m_nType < 1) return L"";
|
||||
|
||||
std::wstring sResult;
|
||||
|
||||
OOXWriter* poOOXWriter = static_cast<OOXWriter*> (oRenderParameter.poWriter);
|
||||
OOXCommentsWriter* poCommentsWriter = static_cast<OOXCommentsWriter*>( poOOXWriter->m_poCommentsWriter );
|
||||
|
||||
if (m_nType == 4)
|
||||
{
|
||||
poCommentsWriter->AddCommentAuthor(m_sValue);
|
||||
}
|
||||
else if (m_nType == 5)
|
||||
{
|
||||
poCommentsWriter->AddCommentID(m_sValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::map<std::wstring,OOXCommentsWriter::_comment>::iterator pFind = poCommentsWriter->m_mapComments.find(m_sValue);
|
||||
|
||||
int id = -1;
|
||||
if (pFind == poCommentsWriter->m_mapComments.end())
|
||||
{
|
||||
id = poCommentsWriter->m_mapComments.size() ;//+ 1;
|
||||
poCommentsWriter->AddComment(m_sValue, id);
|
||||
}
|
||||
else
|
||||
{
|
||||
id = pFind->second.nID;
|
||||
}
|
||||
if (m_nType == 1)
|
||||
{
|
||||
sResult += L"<w:commentRangeStart w:id=\"" + std::to_wstring(id) + L"\"/>";
|
||||
}
|
||||
else if (m_nType == 3)
|
||||
{
|
||||
sResult += L"<w:commentReference w:id=\"" + std::to_wstring(id) + L"\"/>";
|
||||
}
|
||||
else if (m_nType == 2)
|
||||
{
|
||||
poCommentsWriter->SetCommentEnd(m_sValue);
|
||||
|
||||
sResult += L"<w:commentRangeEnd w:id=\"" + std::to_wstring(id) + L"\"/>";
|
||||
sResult += L"<w:r><w:commentReference w:id=\"" + std::to_wstring(id) + L"\"/></w:r>";
|
||||
}
|
||||
}
|
||||
|
||||
return sResult;
|
||||
}
|
||||
|
||||
std::wstring RtfAnnotation::RenderToRtf(RenderParameter oRenderParameter)
|
||||
{
|
||||
std::wstring sResult;
|
||||
|
||||
sResult += L"\\chatn{\\*\\annotation";
|
||||
if (m_oRef)
|
||||
{
|
||||
sResult += m_oRef->RenderToRtf(oRenderParameter);
|
||||
}
|
||||
if (m_oDate)
|
||||
{
|
||||
sResult += m_oDate->RenderToRtf(oRenderParameter);
|
||||
}
|
||||
if (m_oParent)
|
||||
{
|
||||
sResult += m_oParent->RenderToRtf(oRenderParameter);
|
||||
}
|
||||
if (m_oContent)
|
||||
{
|
||||
sResult += m_oContent->RenderToRtf(oRenderParameter);
|
||||
}
|
||||
sResult += L"}";
|
||||
return sResult;
|
||||
}
|
||||
|
||||
std::wstring RtfAnnotation::RenderToOOX(RenderParameter oRenderParameter)
|
||||
{
|
||||
OOXWriter* poOOXWriter = static_cast<OOXWriter*> (oRenderParameter.poWriter);
|
||||
OOXCommentsWriter* poCommentsWriter = static_cast<OOXCommentsWriter*>( poOOXWriter->m_poCommentsWriter );
|
||||
|
||||
if (!m_oRef) return L"";
|
||||
|
||||
if (m_oDate)
|
||||
{
|
||||
int nValue = boost::lexical_cast<int>(m_oDate->m_sValue);
|
||||
|
||||
poCommentsWriter->AddCommentDate(m_oRef->m_sValue, RtfUtility::convertDateTime(nValue));
|
||||
}
|
||||
if (m_oContent)
|
||||
{
|
||||
RenderParameter oNewParameter = oRenderParameter;
|
||||
|
||||
oNewParameter.nType = RENDER_TO_OOX_PARAM_COMMENT;
|
||||
oNewParameter.poRels = poCommentsWriter->m_oRelsWriter.get();
|
||||
|
||||
std::wstring content = m_oContent->RenderToOOX(oNewParameter);
|
||||
|
||||
std::wstring sParaId = XmlUtils::IntToString(poOOXWriter->m_nextParaId, L"%08X");//last para id in comment
|
||||
|
||||
poCommentsWriter->AddCommentContent(m_oRef->m_sValue, sParaId, content);
|
||||
}
|
||||
if (m_oParent)
|
||||
{
|
||||
poCommentsWriter->AddCommentParent(m_oRef->m_sValue, m_oParent->m_sValue);
|
||||
}
|
||||
return L"";
|
||||
}
|
||||
|
||||
std::wstring RtfFootnote::RenderToRtf(RenderParameter oRenderParameter)
|
||||
{
|
||||
std::wstring sResult;
|
||||
@ -147,9 +272,11 @@ std::wstring RtfFootnote::RenderToOOX(RenderParameter oRenderParameter)
|
||||
{
|
||||
int nID = poDocument->m_oIdGenerator.Generate_EndnoteNumber();
|
||||
OOXEndnoteWriter* poEndnoteWriter = static_cast<OOXEndnoteWriter*>( poOOXWriter->m_poEndnoteWriter );
|
||||
|
||||
RenderParameter oNewParameter = oRenderParameter;
|
||||
oNewParameter.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
|
||||
oNewParameter.poRels = poEndnoteWriter->m_oRelsWriter.get();
|
||||
|
||||
poEndnoteWriter->AddEndnote( L"", nID, m_oContent->RenderToOOX(oNewParameter) );
|
||||
|
||||
sResult += L"<w:r>";
|
||||
|
||||
@ -64,6 +64,48 @@ public:
|
||||
std::wstring RenderToRtf(RenderParameter oRenderParameter);
|
||||
std::wstring RenderToOOX(RenderParameter oRenderParameter);
|
||||
};
|
||||
|
||||
class RtfAnnotElem : public IDocumentElement
|
||||
{
|
||||
public:
|
||||
std::wstring m_sValue;
|
||||
int m_nType;
|
||||
|
||||
RtfAnnotElem(int type = 0) : m_nType (type)
|
||||
{
|
||||
}
|
||||
int GetType()
|
||||
{
|
||||
return TYPE_RTF_ANNOTVALUE;
|
||||
}
|
||||
std::wstring RenderToRtf(RenderParameter oRenderParameter);
|
||||
std::wstring RenderToOOX(RenderParameter oRenderParameter);
|
||||
};
|
||||
typedef boost::shared_ptr<RtfAnnotElem> RtfAnnotElemPtr;
|
||||
|
||||
class RtfAnnotation : public IDocumentElement
|
||||
{
|
||||
public:
|
||||
RtfAnnotElemPtr m_oRef;
|
||||
RtfAnnotElemPtr m_oDate;
|
||||
RtfAnnotElemPtr m_oParent;
|
||||
|
||||
TextItemContainerPtr m_oContent;
|
||||
RtfCharProperty m_oCharProp;
|
||||
|
||||
RtfAnnotation()
|
||||
{
|
||||
m_oContent = TextItemContainerPtr( new TextItemContainer() );
|
||||
}
|
||||
int GetType()
|
||||
{
|
||||
return TYPE_RTF_ANNOTATION;
|
||||
}
|
||||
std::wstring RenderToRtf(RenderParameter oRenderParameter);
|
||||
std::wstring RenderToOOX(RenderParameter oRenderParameter);
|
||||
};
|
||||
typedef boost::shared_ptr<RtfAnnotation> RtfAnnotationPtr;
|
||||
|
||||
class RtfFootnote : public IDocumentElement
|
||||
{
|
||||
public:
|
||||
|
||||
@ -40,7 +40,7 @@ std::wstring RtfChar::RenderToOOX(RenderParameter oRenderParameter)
|
||||
OOXWriter* poOOXWriter = static_cast<OOXWriter*> (oRenderParameter.poWriter);
|
||||
|
||||
std::wstring sResult;
|
||||
if (RENDER_TO_OOX_PARAM_RUN == oRenderParameter.nType)
|
||||
if (RENDER_TO_OOX_PARAM_RUN == oRenderParameter.nType)
|
||||
{
|
||||
bool bInsert = false;
|
||||
bool bDelete = false;
|
||||
@ -69,6 +69,7 @@ std::wstring RtfChar::RenderToOOX(RenderParameter oRenderParameter)
|
||||
sResult += L"<w:rPr>";
|
||||
sResult += m_oProperty.RenderToOOX(oRenderParameter);
|
||||
sResult += L"</w:rPr>";
|
||||
|
||||
sResult += renderTextToXML(L"Text", bDelete );
|
||||
sResult += L"</w:r>";
|
||||
|
||||
|
||||
@ -82,6 +82,11 @@ const long g_cdMaxPercent = 1000000;
|
||||
|
||||
#define TYPE_RTF_FOOTNOTE 30
|
||||
|
||||
#define TYPE_RTF_ANNOTSTART 31
|
||||
#define TYPE_RTF_ANNOTEND 32
|
||||
#define TYPE_RTF_ANNOTVALUE 33
|
||||
#define TYPE_RTF_ANNOTATION 34
|
||||
|
||||
#define RENDER_TO_OOX_PARAM_UNKNOWN 0
|
||||
#define RENDER_TO_OOX_PARAM_LAST 1
|
||||
#define RENDER_TO_OOX_PARAM_RUN 2
|
||||
@ -107,6 +112,7 @@ const long g_cdMaxPercent = 1000000;
|
||||
#define RENDER_TO_OOX_PARAM_OLE_ONLY 25
|
||||
#define RENDER_TO_OOX_PARAM_OLDLIST_ABS 26
|
||||
#define RENDER_TO_OOX_PARAM_OLDLIST_OVR 27
|
||||
#define RENDER_TO_OOX_PARAM_COMMENT 28
|
||||
|
||||
#define RENDER_TO_RTF_PARAM_UNKNOWN 0
|
||||
#define RENDER_TO_RTF_PARAM_CHAR 1
|
||||
|
||||
@ -32,6 +32,8 @@
|
||||
#include "RtfParagraph.h"
|
||||
#include "RtfWriter.h"
|
||||
|
||||
#include "Writer/OOXWriter.h"
|
||||
|
||||
int RtfParagraph::AddItem( IDocumentElementPtr piRend )
|
||||
{
|
||||
if( TYPE_RTF_CHAR == piRend->GetType() )
|
||||
@ -85,7 +87,10 @@ std::wstring RtfParagraph::RenderToRtf(RenderParameter oRenderParameter)
|
||||
|
||||
std::wstring RtfParagraph::RenderToOOX(RenderParameter oRenderParameter)
|
||||
{
|
||||
std::wstring sResult ;
|
||||
OOXWriter* poOOXWriter = static_cast<OOXWriter*>(oRenderParameter.poWriter);
|
||||
|
||||
std::wstring sResult ;
|
||||
|
||||
if( RENDER_TO_OOX_PARAM_PLAIN == oRenderParameter.nType )
|
||||
{
|
||||
for (size_t i = 0; i < m_aArray.size(); i++ )
|
||||
@ -125,8 +130,13 @@ std::wstring RtfParagraph::RenderToOOX(RenderParameter oRenderParameter)
|
||||
if( NULL != m_oOldList )
|
||||
bCanConvertToNumbering = m_oOldList->CanConvertToNumbering();
|
||||
|
||||
sResult += L"<w:p>";
|
||||
sResult += L"<w:pPr>";
|
||||
sResult += L"<w:p";
|
||||
if (oRenderParameter.nType == RENDER_TO_OOX_PARAM_COMMENT)
|
||||
{
|
||||
std::wstring sParaId = XmlUtils::IntToString(++poOOXWriter->m_nextParaId, L"%08X");
|
||||
sResult += L" w14:paraId=\"" + sParaId + L"\" w14:textId=\"" + sParaId + L"\"";
|
||||
}
|
||||
sResult += L"><w:pPr>";
|
||||
|
||||
m_oProperty.m_bOldList = (NULL != m_oOldList);
|
||||
sResult += m_oProperty.RenderToOOX(oRenderParameter);
|
||||
@ -162,7 +172,15 @@ std::wstring RtfParagraph::RenderToOOX(RenderParameter oRenderParameter)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (oRenderParameter.nType == RENDER_TO_OOX_PARAM_COMMENT)
|
||||
{
|
||||
sResult += L"<w:r>";
|
||||
sResult += L"<w:rPr>";
|
||||
sResult += m_oProperty.m_oCharProperty.RenderToOOX(oRenderParameter);
|
||||
sResult += L"</w:rPr>";
|
||||
sResult += L"<w:annotationRef/>";
|
||||
sResult += L"</w:r>";
|
||||
}
|
||||
oNewParam.nType = RENDER_TO_OOX_PARAM_RUN;
|
||||
|
||||
std::wstring ParagraphContent;
|
||||
|
||||
@ -379,7 +379,7 @@ public:
|
||||
|
||||
return date_str;
|
||||
}
|
||||
static int convertDateTime (std::wstring & dt_)
|
||||
static int convertDateTime (const std::wstring & dt_)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
|
||||
236
ASCOfficeRtfFile/RtfFormatLib/source/Writer/OOXCommentsWriter.h
Normal file
236
ASCOfficeRtfFile/RtfFormatLib/source/Writer/OOXCommentsWriter.h
Normal file
@ -0,0 +1,236 @@
|
||||
/*
|
||||
* (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 "OOXWriter.h"
|
||||
|
||||
class OOXCommentsWriter
|
||||
{
|
||||
public:
|
||||
OOXRelsWriterPtr m_oRelsWriter;
|
||||
|
||||
OOXCommentsWriter( OOXWriter& oWriter, RtfDocument& oDocument ) : m_oWriter(oWriter), m_oDocument(oDocument)
|
||||
{
|
||||
m_oRelsWriter = OOXRelsWriterPtr( new OOXRelsWriter( _T("comments.xml"), oDocument ) );
|
||||
oWriter.m_oCustomRelsWriter.push_back( m_oRelsWriter );
|
||||
}
|
||||
void SetCommentEnd(const std::wstring & ref) //for author
|
||||
{
|
||||
m_sCurrent_ref = ref;
|
||||
}
|
||||
void AddComment( const std::wstring & ref, int nID)
|
||||
{
|
||||
_comment comment(nID);
|
||||
m_mapComments.insert(std::make_pair(ref, comment));
|
||||
}
|
||||
void AddCommentID( const std::wstring & id)
|
||||
{
|
||||
std::map<std::wstring, _comment>::iterator pFind = m_mapComments.find(m_sCurrent_ref);
|
||||
|
||||
if (pFind != m_mapComments.end())
|
||||
{
|
||||
pFind->second.authorId = id;
|
||||
}
|
||||
}
|
||||
void AddCommentAuthor( const std::wstring & author)
|
||||
{
|
||||
std::map<std::wstring, _comment>::iterator pFind = m_mapComments.find(m_sCurrent_ref);
|
||||
|
||||
if (pFind != m_mapComments.end())
|
||||
{
|
||||
pFind->second.author = author;
|
||||
}
|
||||
}
|
||||
void AddCommentContent( const std::wstring & ref, const std::wstring & paraId, const std::wstring & content)
|
||||
{
|
||||
std::map<std::wstring, _comment>::iterator pFind = m_mapComments.find(ref);
|
||||
|
||||
if (pFind != m_mapComments.end())
|
||||
{
|
||||
pFind->second.content = content;
|
||||
pFind->second.paraId = paraId;
|
||||
|
||||
m_mapCommentsParent.insert(std::make_pair(pFind->second.nID, paraId));
|
||||
}
|
||||
}
|
||||
void AddCommentParent( const std::wstring & ref, const std::wstring & parent)
|
||||
{
|
||||
std::map<std::wstring, _comment>::iterator pFind = m_mapComments.find(ref);
|
||||
|
||||
if (pFind != m_mapComments.end())
|
||||
{
|
||||
pFind->second.nParentID = boost::lexical_cast<int>(parent);
|
||||
}
|
||||
}
|
||||
void AddCommentDate( const std::wstring & ref, const std::wstring & date)
|
||||
{
|
||||
std::map<std::wstring, _comment>::iterator pFind = m_mapComments.find(ref);
|
||||
|
||||
if (pFind != m_mapComments.end())
|
||||
{
|
||||
pFind->second.date = date;
|
||||
}
|
||||
}
|
||||
bool Save( std::wstring sFolder )
|
||||
{
|
||||
if( m_mapComments.empty() ) return false;
|
||||
|
||||
CFile file;
|
||||
if (file.CreateFile(sFolder + FILE_SEPARATOR_STR + _T("comments.xml"))) return false;
|
||||
|
||||
m_oWriter.m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"), _T("comments.xml") );
|
||||
m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml"), _T("/word/comments.xml") );
|
||||
|
||||
std::wstring sXml = CreateXml();
|
||||
|
||||
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml);
|
||||
|
||||
file.WriteFile((void*)sXmlUTF.c_str(), (DWORD)sXmlUTF.length());
|
||||
|
||||
file.CloseFile();
|
||||
//-------------------------------------------------------------------------------------------------------------------------
|
||||
if (file.CreateFile(sFolder + FILE_SEPARATOR_STR + L"commentsExtended.xml")) return false;
|
||||
|
||||
m_oWriter.m_oDocRels.AddRelationship( L"http://schemas.microsoft.com/office/2011/relationships/commentsExtended", L"commentsExtended.xml" );
|
||||
m_oWriter.m_oContentTypes.AddContent( L"application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml", L"/word/commentsExtended.xml" );
|
||||
|
||||
sXml = CreateXmlExtended();
|
||||
|
||||
sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml);
|
||||
|
||||
file.WriteFile((void*)sXmlUTF.c_str(), (DWORD)sXmlUTF.length());
|
||||
|
||||
file.CloseFile();
|
||||
return true;
|
||||
}
|
||||
struct _comment
|
||||
{
|
||||
_comment(int id) : nID(id) {}
|
||||
int nID = 0;
|
||||
int nParentID = 0;
|
||||
std::wstring author;
|
||||
std::wstring date;
|
||||
std::wstring content;
|
||||
std::wstring authorId;
|
||||
std::wstring paraId;
|
||||
|
||||
};
|
||||
std::map<std::wstring, _comment> m_mapComments;
|
||||
private:
|
||||
RtfDocument& m_oDocument;
|
||||
OOXWriter& m_oWriter;
|
||||
|
||||
std::wstring m_sCurrent_ref;
|
||||
std::wstring m_sCommentsExtended;
|
||||
std::map<int, std::wstring> m_mapCommentsParent;
|
||||
|
||||
std::wstring CreateXml()
|
||||
{
|
||||
std::wstring sResult = L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n";
|
||||
|
||||
sResult += L"<w:comments \
|
||||
xmlns:wpc=\"http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas\" \
|
||||
xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \
|
||||
xmlns:o=\"urn:schemas-microsoft-com:office:office\" \
|
||||
xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" \
|
||||
xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" \
|
||||
xmlns:v=\"urn:schemas-microsoft-com:vml\" \
|
||||
xmlns:wp14=\"http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing\" \
|
||||
xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" \
|
||||
xmlns:w10=\"urn:schemas-microsoft-com:office:word\" \
|
||||
xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" \
|
||||
xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\" \
|
||||
xmlns:w15=\"http://schemas.microsoft.com/office/word/2012/wordml\" \
|
||||
xmlns:wpg=\"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup\" \
|
||||
xmlns:wpi=\"http://schemas.microsoft.com/office/word/2010/wordprocessingInk\" \
|
||||
xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" \
|
||||
xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessingShape\" \
|
||||
mc:Ignorable=\"w14 w15 wp14\">";
|
||||
|
||||
for (std::map<std::wstring, _comment>::iterator it = m_mapComments.begin(); it != m_mapComments.end(); ++it)
|
||||
{
|
||||
sResult += L"<w:comment w:id=\"" + std::to_wstring(it->second.nID) + L"\" w:author=\"" +
|
||||
it->second.author + L"\" w:date=\"" + it->second.date + L"\" w:initials=\"" + it->second.authorId + L"\">";
|
||||
sResult += it->second.content;
|
||||
|
||||
sResult += L"</w:comment>";
|
||||
//--------------------------------------------------------
|
||||
m_sCommentsExtended += L"<w15:commentEx w15:paraId=\"" + it->second.paraId + L"\"";
|
||||
if (it->second.nParentID != 0)
|
||||
{
|
||||
it->second.nParentID = it->second.nID + it->second.nParentID;
|
||||
|
||||
std::map<int, std::wstring>::iterator pFind = m_mapCommentsParent.find(it->second.nParentID);
|
||||
|
||||
if (pFind != m_mapCommentsParent.end())
|
||||
{
|
||||
m_sCommentsExtended += L" w15:paraIdParent=\"" + pFind->second + L"\"";
|
||||
}
|
||||
}
|
||||
m_sCommentsExtended += L" w15:done=\"0\"/>";
|
||||
|
||||
}
|
||||
sResult += L"</w:comments>";
|
||||
return sResult;
|
||||
}
|
||||
std::wstring CreateXmlExtended()
|
||||
{
|
||||
std::wstring sResult;
|
||||
sResult += L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n";
|
||||
|
||||
sResult += L"<w15:commentsEx \
|
||||
xmlns:wpc=\"http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas\" \
|
||||
xmlns:cx=\"http://schemas.microsoft.com/office/drawing/2014/chartex\" \
|
||||
xmlns:cx1=\"http://schemas.microsoft.com/office/drawing/2015/9/8/chartex\" \
|
||||
xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \
|
||||
xmlns:o=\"urn:schemas-microsoft-com:office:office\" \
|
||||
xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" \
|
||||
xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" \
|
||||
xmlns:v=\"urn:schemas-microsoft-com:vml\" \
|
||||
xmlns:wp14=\"http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing\" \
|
||||
xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" \
|
||||
xmlns:w10=\"urn:schemas-microsoft-com:office:word\" \
|
||||
xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" \
|
||||
xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\" \
|
||||
xmlns:w15=\"http://schemas.microsoft.com/office/word/2012/wordml\" \
|
||||
xmlns:w16se=\"http://schemas.microsoft.com/office/word/2015/wordml/symex\" \
|
||||
xmlns:wpg=\"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup\" \
|
||||
xmlns:wpi=\"http://schemas.microsoft.com/office/word/2010/wordprocessingInk\" \
|
||||
xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" \
|
||||
xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessingShape\" \
|
||||
mc:Ignorable=\"w14 w15 w16se wp14\">";
|
||||
sResult += m_sCommentsExtended;
|
||||
sResult += L"</w15:commentsEx>";
|
||||
return sResult;
|
||||
}
|
||||
|
||||
};
|
||||
@ -51,27 +51,28 @@ std::wstring OOXDocumentWriter::CreateXmlStart()
|
||||
|
||||
//пишем document.xml
|
||||
std::wstring sResult = L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\n";
|
||||
sResult += L"<w:document ";
|
||||
|
||||
sResult += L"xmlns:wpc=\"http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas\" \
|
||||
xmlns:cx=\"http://schemas.microsoft.com/office/drawing/2014/chartex\" \
|
||||
xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \
|
||||
xmlns:o=\"urn:schemas-microsoft-com:office:office\" \
|
||||
xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" \
|
||||
xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" \
|
||||
xmlns:v=\"urn:schemas-microsoft-com:vml\" \
|
||||
xmlns:wp14=\"http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing\" \
|
||||
xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" \
|
||||
xmlns:w10=\"urn:schemas-microsoft-com:office:word\" \
|
||||
sResult += L"<w:document \
|
||||
xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" \
|
||||
xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" \
|
||||
xmlns:v=\"urn:schemas-microsoft-com:vml\" \
|
||||
xmlns:o=\"urn:schemas-microsoft-com:office:office\" \
|
||||
xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" \
|
||||
xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" \
|
||||
xmlns:w10=\"urn:schemas-microsoft-com:office:word\" \
|
||||
xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" \
|
||||
xmlns:wpc=\"http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas\" \
|
||||
xmlns:cx=\"http://schemas.microsoft.com/office/drawing/2014/chartex\" \
|
||||
xmlns:cx1=\"http://schemas.microsoft.com/office/drawing/2015/9/8/chartex\" \
|
||||
xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \
|
||||
xmlns:wp14=\"http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing\" \
|
||||
xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\" \
|
||||
xmlns:w15=\"http://schemas.microsoft.com/office/word/2012/wordml\" \
|
||||
xmlns:w16se=\"http://schemas.microsoft.com/office/word/2015/wordml/symex\" \
|
||||
xmlns:wpg=\"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup\" \
|
||||
xmlns:wpi=\"http://schemas.microsoft.com/office/word/2010/wordprocessingInk\" \
|
||||
xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" \
|
||||
xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessingShape\" \
|
||||
xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" \
|
||||
mc:Ignorable=\"w14 wp14\"";
|
||||
sResult += L">";
|
||||
mc:Ignorable=\"w14 w15 w16se wp14\">";
|
||||
|
||||
if (m_oDocument.m_pBackground)
|
||||
{
|
||||
|
||||
@ -41,6 +41,7 @@
|
||||
#include "OOXSettingsWriter.h"
|
||||
#include "OOXThemeWriter.h"
|
||||
#include "OOXFootnoteWriter.h"
|
||||
#include "OOXCommentsWriter.h"
|
||||
|
||||
#include "../../../../Common/DocxFormat/Source/DocxFormat/Docx.h"
|
||||
#include "../../../../Common/DocxFormat/Source/DocxFormat/App.h"
|
||||
@ -53,11 +54,13 @@ OOXWriter::OOXWriter( RtfDocument& oDocument, std::wstring sPath ) :
|
||||
m_sTargetFolder ( sPath.c_str() ),
|
||||
m_oRels ( L"", oDocument ),
|
||||
m_nCurTrackChangesId( 0),
|
||||
m_nextParaId ( 0x00000000),
|
||||
m_oDocRels ( L"document.xml", oDocument )
|
||||
{
|
||||
m_nCurFitWidth = PROP_DEF;
|
||||
m_poFootnoteWriter = NULL;
|
||||
m_poEndnoteWriter = NULL;
|
||||
m_poCommentsWriter = NULL;
|
||||
|
||||
m_poDocumentWriter = new OOXDocumentWriter ( *this, m_oDocument );
|
||||
m_poFootnoteWriter = new OOXFootnoteWriter ( *this, m_oDocument );
|
||||
@ -66,6 +69,7 @@ OOXWriter::OOXWriter( RtfDocument& oDocument, std::wstring sPath ) :
|
||||
m_poNumberingWriter = new OOXNumberingWriter( *this, m_oDocument );
|
||||
m_poSettingsWriter = new OOXSettingsWriter ( *this, m_oDocument );
|
||||
m_poStylesWriter = new OOXStylesWriter ( *this, m_oDocument );
|
||||
m_poCommentsWriter = new OOXCommentsWriter ( *this, m_oDocument );
|
||||
|
||||
m_poDocPropsApp = new OOX::CApp(NULL);
|
||||
m_poDocPropsCore = new OOX::CCore(NULL);
|
||||
@ -88,6 +92,7 @@ OOXWriter::OOXWriter( RtfDocument& oDocument, std::wstring sPath ) :
|
||||
}
|
||||
OOXWriter::~OOXWriter()
|
||||
{
|
||||
delete ((OOXCommentsWriter*) m_poCommentsWriter);
|
||||
delete ((OOXDocumentWriter*) m_poDocumentWriter);
|
||||
delete ((OOXFootnoteWriter*) m_poFootnoteWriter);
|
||||
delete ((OOXEndnoteWriter*) m_poEndnoteWriter);
|
||||
@ -142,10 +147,11 @@ bool OOXWriter::SaveByItemEnd()
|
||||
|
||||
((OOXFootnoteWriter*) m_poFootnoteWriter)->Save (pathWord.GetPath());
|
||||
((OOXEndnoteWriter*) m_poEndnoteWriter)->Save (pathWord.GetPath());
|
||||
((OOXCommentsWriter*) m_poCommentsWriter)->Save (pathWord.GetPath());
|
||||
((OOXNumberingWriter*) m_poNumberingWriter)->Save (m_sTargetFolder);
|
||||
((OOXStylesWriter*) m_poStylesWriter)->Save (m_sTargetFolder);
|
||||
((OOXFontTableWriter*) m_poFontTableWriter)->Save (m_sTargetFolder);
|
||||
|
||||
|
||||
((OOXSettingsWriter*) m_poSettingsWriter)->Save (m_sTargetFolder); //setting в последнюю очередь
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
|
||||
@ -44,6 +44,8 @@ public:
|
||||
int m_nCurFitWidth;
|
||||
int m_nCurTrackChangesId;
|
||||
|
||||
long int m_nextParaId;
|
||||
|
||||
OOXRelsWriter m_oDocRels;
|
||||
OOXRelsWriter m_oRels;
|
||||
|
||||
@ -57,6 +59,7 @@ public:
|
||||
void* m_poNumberingWriter;
|
||||
void* m_poSettingsWriter;
|
||||
void* m_poStylesWriter;
|
||||
void* m_poCommentsWriter;
|
||||
|
||||
void* m_poDocPropsApp;
|
||||
void* m_poDocPropsCore;
|
||||
|
||||
@ -40,6 +40,19 @@
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
|
||||
#if defined(_WIN64)
|
||||
#pragma comment(lib, "../../build/bin/icu/win_64/icuuc.lib")
|
||||
#elif defined (_WIN32)
|
||||
|
||||
#if defined(_DEBUG)
|
||||
#pragma comment(lib, "../../build/lib/win_32/DEBUG/graphics.lib")
|
||||
#pragma comment(lib, "../../build/lib/win_32/DEBUG/kernel.lib")
|
||||
#else
|
||||
#pragma comment(lib, "../../build/lib/win_32/graphics.lib")
|
||||
#pragma comment(lib, "../../build/lib/win_32/kernel.lib")
|
||||
#endif
|
||||
#pragma comment(lib, "../../build/bin/icu/win_32/icuuc.lib")
|
||||
#endif
|
||||
HRESULT convert_single(std::wstring srcFileName)
|
||||
{
|
||||
int n1 = srcFileName.rfind(_T('.'));
|
||||
|
||||
@ -2,82 +2,18 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RtfFormatLib", "..\RtfFormatLib\Win32\RtfFormatLib.vcproj", "{AF2D00A7-A351-4700-AE88-C1D9ADE29345}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DocxFormat", "..\..\Common\DocxFormat\Projects\DocxFormat2005.vcproj", "{A100103A-353E-45E8-A9B8-90B87CC5C0B0}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0} = {21663823-DE45-479B-91D0-B4FEF4916EF0}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "raster", "..\..\DesktopEditor\raster\raster_vs2005.vcproj", "{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36} = {BC52A07C-A797-423D-8C4F-8678805BBB36}
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3} = {0588563C-F05C-428C-B21A-DD74756628B3}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cximage", "..\..\DesktopEditor\cximage\CxImage\cximage_vs2005.vcproj", "{BC52A07C-A797-423D-8C4F-8678805BBB36}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470} = {818753F2-DBB9-4D3B-898A-A604309BE470}
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D} = {FFDA5DA1-BB65-4695-B678-BE59B4A1355D}
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1} = {EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E} = {9A037A69-D1DF-4505-AB2A-6CB3641C476E}
|
||||
{40A69F40-063E-43FD-8543-455495D8733E} = {40A69F40-063E-43FD-8543-455495D8733E}
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3} = {0588563C-F05C-428C-B21A-DD74756628B3}
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169} = {DF861D33-9BC1-418C-82B1-581F590FE169}
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239} = {764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7} = {43A0E60E-5C4A-4C09-A29B-7683F503BBD7}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jasper", "..\..\DesktopEditor\cximage\jasper\jasper_vs2005.vcproj", "{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jbig", "..\..\DesktopEditor\cximage\jbig\jbig_vs2005.vcproj", "{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jpeg", "..\..\DesktopEditor\cximage\jpeg\Jpeg_vs2005.vcproj", "{818753F2-DBB9-4D3B-898A-A604309BE470}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpsd", "..\..\DesktopEditor\cximage\libpsd\libpsd_vs2005.vcproj", "{9A037A69-D1DF-4505-AB2A-6CB3641C476E}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mng", "..\..\DesktopEditor\cximage\mng\mng_vs2005.vcproj", "{40A69F40-063E-43FD-8543-455495D8733E}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "png", "..\..\DesktopEditor\cximage\png\png_vs2005.vcproj", "{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdcr", "..\..\DesktopEditor\cximage\raw\libdcr_vs2005.vcproj", "{DF861D33-9BC1-418C-82B1-581F590FE169}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tiff", "..\..\DesktopEditor\cximage\tiff\Tiff_vs2005.vcproj", "{0588563C-F05C-428C-B21A-DD74756628B3}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jbig2", "..\..\DesktopEditor\raster\JBig2\win32\jbig2.vcproj", "{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OfficeUtilsLib", "..\..\OfficeUtils\win32\OfficeUtilsLib.vcproj", "{F8274B05-168E-4D6E-B843-AA7510725363}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RtfFormatTest", "RtfFormatTest.vcproj", "{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B} = {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}
|
||||
{AF2D00A7-A351-4700-AE88-C1D9ADE29345} = {AF2D00A7-A351-4700-AE88-C1D9ADE29345}
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302} = {36636678-AE25-4BE6-9A34-2561D1BCF302}
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD} = {617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0} = {A100103A-353E-45E8-A9B8-90B87CC5C0B0}
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2} = {37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363} = {F8274B05-168E-4D6E-B843-AA7510725363}
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0} = {21663823-DE45-479B-91D0-B4FEF4916EF0}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPTXFormat", "..\..\ASCOfficePPTXFile\PPTXLib\PPTXFormat.vcproj", "{36636678-AE25-4BE6-9A34-2561D1BCF302}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "graphics", "..\..\DesktopEditor\graphics\graphics_vs2005.vcproj", "{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD} = {617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "font_engine", "..\..\DesktopEditor\fontengine\font_engine_vs2005.vcproj", "{C739151F-5384-41DF-A1A6-F089E2C1AD56}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "agg2d", "..\..\DesktopEditor\agg-2.4\agg_vs2005.vcproj", "{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "..\..\DesktopEditor\freetype-2.5.2\builds\windows\vc2005\freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libxml2", "..\..\DesktopEditor\xml\build\vs2005\libxml2.vcproj", "{21663823-DE45-479B-91D0-B4FEF4916EF0}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
@ -102,102 +38,6 @@ Global
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release|Win32.Build.0 = Release|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release|x64.ActiveCfg = Release|x64
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release|x64.Build.0 = Release|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug|x64.Build.0 = Debug|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release|Win32.Build.0 = Release|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release|x64.ActiveCfg = Release|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release|x64.Build.0 = Release|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug|x64.Build.0 = Debug|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release|Win32.Build.0 = Release|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release|x64.ActiveCfg = Release|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release|x64.Build.0 = Release|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug|x64.Build.0 = Debug|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release|Win32.Build.0 = Release|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release|x64.ActiveCfg = Release|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release|x64.Build.0 = Release|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug|x64.Build.0 = Debug|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release|Win32.Build.0 = Release|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release|x64.ActiveCfg = Release|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release|x64.Build.0 = Release|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug|x64.Build.0 = Debug|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release|Win32.Build.0 = Release|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release|x64.ActiveCfg = Release|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release|x64.Build.0 = Release|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug|x64.Build.0 = Debug|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release|Win32.Build.0 = Release|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release|x64.ActiveCfg = Release|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release|x64.Build.0 = Release|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Debug|x64.Build.0 = Debug|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Release|Win32.Build.0 = Release|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Release|x64.ActiveCfg = Release|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Release|x64.Build.0 = Release|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug|x64.Build.0 = Debug|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release|Win32.Build.0 = Release|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release|x64.ActiveCfg = Release|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release|x64.Build.0 = Release|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug|x64.Build.0 = Debug|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release|Win32.Build.0 = Release|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release|x64.ActiveCfg = Release|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release|x64.Build.0 = Release|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug|x64.Build.0 = Debug|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Release|Win32.Build.0 = Release|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Release|x64.ActiveCfg = Release|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Release|x64.Build.0 = Release|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug|x64.Build.0 = Debug|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release|Win32.Build.0 = Release|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release|x64.ActiveCfg = Release|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release|x64.Build.0 = Release|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug|x64.Build.0 = Debug|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Release|Win32.Build.0 = Release|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Release|x64.ActiveCfg = Release|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Release|x64.Build.0 = Release|x64
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Debug|x64.ActiveCfg = Debug|x64
|
||||
@ -214,46 +54,6 @@ Global
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release|Win32.Build.0 = Release|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release|x64.ActiveCfg = Release|x64
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release|x64.Build.0 = Release|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug|x64.Build.0 = Debug|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release|Win32.Build.0 = Release|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release|x64.ActiveCfg = Release|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release|x64.Build.0 = Release|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug|x64.Build.0 = Debug|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release|Win32.Build.0 = Release|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release|x64.ActiveCfg = Release|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release|x64.Build.0 = Release|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug|x64.Build.0 = Debug|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release|Win32.Build.0 = Release|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release|x64.ActiveCfg = Release|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release|x64.Build.0 = Release|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|x64.Build.0 = Debug|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.Build.0 = Release|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|x64.ActiveCfg = Release|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|x64.Build.0 = Release|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug|x64.Build.0 = Debug|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release|Win32.Build.0 = Release|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release|x64.ActiveCfg = Release|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED;USE_LITE_READER;_USE_XMLLITE_READER_;PPTX_DEF;PPT_DEF;ENABLE_PPT_TO_PPTX_CONVERT;AVS_USE_CONVERT_PPTX_TOCUSTOM_VML;DONT_WRITE_EMBEDDED_FONTS"
|
||||
MinimalRebuild="false"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
@ -427,23 +427,7 @@
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\DesktopEditor\xml\src\xmldom.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\DesktopEditor\xml\src\xmllight.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath="..\..\build\bin\icu\win_32\icudt.lib"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\build\bin\icu\win_32\icuuc.lib"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="RtfFormatTest.cpp"
|
||||
>
|
||||
|
||||
@ -708,7 +708,7 @@ NAMESPACE_END
|
||||
// ***************** Miscellaneous ********************
|
||||
|
||||
// Nearly all Intel's and AMD's have SSE. Enable it independent of SSE ASM and intrinscs
|
||||
#if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64) && !defined(CRYPTOPP_DISABLE_ASM)
|
||||
#if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64) && !defined(CRYPTOPP_DISABLE_ASM) && !defined(_IOS)
|
||||
#define CRYPTOPP_BOOL_ALIGN16 1
|
||||
#else
|
||||
#define CRYPTOPP_BOOL_ALIGN16 0
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
core_linux {
|
||||
INCLUDEPATH += $$PWD/$$CORE_BUILDS_PLATFORM_PREFIX/usr/local/include
|
||||
|
||||
LIBS += $$PWD/$$CORE_BUILDS_PLATFORM_PREFIX/build/libcurl.a
|
||||
LIBS += -lcurl
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
SET SCRIPTPATH=%~dp0
|
||||
CD /D %~dp0
|
||||
|
||||
SET ICU_MAJOR_VER=60
|
||||
SET ICU_MAJOR_VER=58
|
||||
SET ICU_MINOR_VER=2
|
||||
|
||||
SET build_platform=win_32
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
SCRIPT=$(readlink -f "$0" || grealpath "$0")
|
||||
SCRIPTPATH=$(dirname "$SCRIPT")
|
||||
|
||||
ICU_MAJOR_VER=60
|
||||
ICU_MAJOR_VER=58
|
||||
ICU_MINOR_VER=2
|
||||
|
||||
SHARED_LIB_VER=$ICU_MAJOR_VER.$ICU_MINOR_VER
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
ICU_MAJOR_VER = 58
|
||||
|
||||
core_windows {
|
||||
message($$PWD/$$CORE_BUILDS_PLATFORM_PREFIX/icu/include)
|
||||
INCLUDEPATH += $$PWD/$$CORE_BUILDS_PLATFORM_PREFIX/icu/include
|
||||
@ -14,13 +16,13 @@ core_win_32 {
|
||||
core_linux {
|
||||
INCLUDEPATH += $$PWD/$$CORE_BUILDS_PLATFORM_PREFIX/usr/local/include
|
||||
|
||||
LIBS += $$PWD/$$CORE_BUILDS_PLATFORM_PREFIX/build/libicuuc.so.60
|
||||
LIBS += $$PWD/$$CORE_BUILDS_PLATFORM_PREFIX/build/libicudata.so.60
|
||||
LIBS += $$PWD/$$CORE_BUILDS_PLATFORM_PREFIX/build/libicuuc.so.$$ICU_MAJOR_VER
|
||||
LIBS += $$PWD/$$CORE_BUILDS_PLATFORM_PREFIX/build/libicudata.so.$$ICU_MAJOR_VER
|
||||
}
|
||||
|
||||
core_mac {
|
||||
INCLUDEPATH += $$PWD/$$CORE_BUILDS_PLATFORM_PREFIX/usr/local/include
|
||||
|
||||
LIBS += $$PWD/$$CORE_BUILDS_PLATFORM_PREFIX/build/libicuuc.60.dylib
|
||||
LIBS += $$PWD/$$CORE_BUILDS_PLATFORM_PREFIX/build/libicudata.60.dylib
|
||||
LIBS += $$PWD/$$CORE_BUILDS_PLATFORM_PREFIX/build/libicuuc.$${ICU_MAJOR_VER}.dylib
|
||||
LIBS += $$PWD/$$CORE_BUILDS_PLATFORM_PREFIX/build/libicudata.$${ICU_MAJOR_VER}.dylib
|
||||
}
|
||||
|
||||
@ -30,8 +30,8 @@ fi
|
||||
echo "$platform$arch"
|
||||
|
||||
if [ ! -f Makefile ]; then
|
||||
perl ./Configure $platform$arch
|
||||
./config
|
||||
#perl ./Configure $platform$arch
|
||||
./config no-shared no-asm
|
||||
fi
|
||||
|
||||
make
|
||||
|
||||
8
Common/3dParty/openssl/openssl.pri
Normal file
8
Common/3dParty/openssl/openssl.pri
Normal file
@ -0,0 +1,8 @@
|
||||
core_linux {
|
||||
|
||||
INCLUDEPATH += $$PWD/openssl/include
|
||||
|
||||
LIBS += -L$$PWD/openssl/libssl.a
|
||||
LIBS += -L$$PWD/openssl/libcrypto.a
|
||||
|
||||
}
|
||||
@ -165,6 +165,10 @@ namespace SimpleTypes
|
||||
{
|
||||
return (long)Pt_To_Dx(m_dValue);
|
||||
}
|
||||
unsigned long ToUnsignedTwips() const
|
||||
{
|
||||
return (unsigned long)Pt_To_Dx(m_dValue);
|
||||
}
|
||||
virtual double FromPoints(double dValue)
|
||||
{
|
||||
m_dValue = dValue;
|
||||
|
||||
@ -413,6 +413,18 @@ namespace OOX
|
||||
{
|
||||
return type().DefaultFileName();
|
||||
}
|
||||
void SetDefaults()
|
||||
{
|
||||
SetApplication(L"ONLYOFFICE");
|
||||
#if defined(INTVER)
|
||||
SetAppVersion(VALUE2STR(INTVER));
|
||||
#endif
|
||||
SetDocSecurity(0);
|
||||
SetScaleCrop(false);
|
||||
SetLinksUpToDate(false);
|
||||
SetSharedDoc(false);
|
||||
SetHyperlinksChanged(false);
|
||||
}
|
||||
void SetApplication(const std::wstring& sVal)
|
||||
{
|
||||
m_sApplication = sVal;
|
||||
|
||||
@ -336,7 +336,15 @@ namespace OOX
|
||||
{
|
||||
sName = oReader.GetName();
|
||||
if ( L"w:comment" == sName )
|
||||
m_arrComments.push_back( new CComment(oReader) );
|
||||
{
|
||||
CComment* pComment = new CComment(oReader);
|
||||
|
||||
if ((pComment) && (pComment->m_oId.IsInit()))
|
||||
{
|
||||
m_mapComments.insert( std::make_pair( pComment->m_oId->GetValue(), m_arrComments.size()));
|
||||
}
|
||||
m_arrComments.push_back( pComment );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -357,7 +365,8 @@ namespace OOX
|
||||
return type().DefaultFileName();
|
||||
}
|
||||
|
||||
std::vector<CComment*> m_arrComments;
|
||||
std::vector<CComment*> m_arrComments;
|
||||
std::map<int, int> m_mapComments; //id, index
|
||||
|
||||
};
|
||||
class CCommentExt : public WritingElement
|
||||
@ -401,10 +410,9 @@ namespace OOX
|
||||
}
|
||||
|
||||
public:
|
||||
// Attributes
|
||||
nullable<SimpleTypes::CLongHexNumber<> > m_oParaId;
|
||||
nullable<SimpleTypes::CLongHexNumber<> > m_oParaIdParent;
|
||||
nullable<SimpleTypes::COnOff<> > m_oDone;
|
||||
nullable<SimpleTypes::CLongHexNumber<> > m_oParaId;
|
||||
nullable<SimpleTypes::CLongHexNumber<> > m_oParaIdParent;
|
||||
nullable<SimpleTypes::COnOff<> > m_oDone;
|
||||
};
|
||||
|
||||
class CCommentsExt : public OOX::File
|
||||
@ -449,7 +457,14 @@ namespace OOX
|
||||
{
|
||||
sName = oReader.GetName();
|
||||
if ( L"w15:commentEx" == sName )
|
||||
m_arrComments.push_back( new CCommentExt(oReader) );
|
||||
{
|
||||
CCommentExt* pCommentExt = new CCommentExt(oReader);
|
||||
if ((pCommentExt) && (pCommentExt->m_oParaId.IsInit()))
|
||||
{
|
||||
m_mapComments.insert( std::make_pair( pCommentExt->m_oParaId->GetValue(), m_arrComments.size()));
|
||||
m_arrComments.push_back( pCommentExt );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -470,7 +485,8 @@ namespace OOX
|
||||
return type().DefaultFileName();
|
||||
}
|
||||
|
||||
std::vector<CCommentExt*> m_arrComments;
|
||||
std::vector<CCommentExt*> m_arrComments;
|
||||
std::map<int, int> m_mapComments; //paraId, index
|
||||
};
|
||||
|
||||
class CPresenceInfo : public WritingElement
|
||||
|
||||
@ -57,8 +57,6 @@ namespace OOX
|
||||
virtual ~CCore()
|
||||
{
|
||||
}
|
||||
|
||||
public:
|
||||
virtual void read(const CPath& oPath)
|
||||
{
|
||||
XmlUtils::CXmlNode oProperties;
|
||||
@ -230,7 +228,6 @@ namespace OOX
|
||||
oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() );
|
||||
}
|
||||
|
||||
public:
|
||||
virtual const FileType type() const
|
||||
{
|
||||
return FileTypes::Core;
|
||||
@ -244,7 +241,11 @@ namespace OOX
|
||||
{
|
||||
return type().DefaultFileName();
|
||||
}
|
||||
|
||||
void SetDefaults()
|
||||
{
|
||||
m_sCreator = L"";
|
||||
m_sLastModifiedBy = L"";
|
||||
}
|
||||
void SetCreator(std::wstring sVal)
|
||||
{
|
||||
m_sCreator = sVal;
|
||||
|
||||
@ -309,13 +309,15 @@ void OOX::Spreadsheet::CXlsx::PrepareWorkbook()
|
||||
{
|
||||
pFont->m_oRFont.Init();
|
||||
pFont->m_oRFont->m_sVal = _T("Calibri");
|
||||
|
||||
if(false == pFont->m_oScheme.IsInit())
|
||||
{
|
||||
pFont->m_oScheme.Init();
|
||||
pFont->m_oScheme->m_oFontScheme.Init();
|
||||
pFont->m_oScheme->m_oFontScheme->SetValue(SimpleTypes::Spreadsheet::fontschemeMinor);
|
||||
}
|
||||
}
|
||||
if(false == pFont->m_oScheme.IsInit())
|
||||
{
|
||||
pFont->m_oScheme.Init();
|
||||
pFont->m_oScheme->m_oFontScheme.Init();
|
||||
pFont->m_oScheme->m_oFontScheme->SetValue(SimpleTypes::Spreadsheet::fontschemeMinor);
|
||||
}
|
||||
|
||||
if(false == pFont->m_oSz.IsInit() || false == pFont->m_oSz->m_oVal.IsInit())
|
||||
{
|
||||
pFont->m_oSz.Init();
|
||||
|
||||
@ -1,6 +1,10 @@
|
||||
VERSION = 2.4.535.0
|
||||
|
||||
VERSION = $$cat(version.txt)
|
||||
DEFINES += INTVER=$$VERSION
|
||||
|
||||
QMAKE_TARGET_COMPANY = Ascensio System SIA
|
||||
QMAKE_TARGET_COPYRIGHT = Ascensio System SIA Copyright (c) 2018
|
||||
|
||||
# CONFIGURATION
|
||||
CONFIG(debug, debug|release) {
|
||||
CONFIG += core_debug
|
||||
|
||||
1
Common/version.txt
Normal file
1
Common/version.txt
Normal file
@ -0,0 +1 @@
|
||||
2.4.537.0
|
||||
@ -29,14 +29,15 @@
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
#include "ApplicationFonts.h"
|
||||
//#include "ApplicationFonts.h"
|
||||
#include "ApplicationFontsWorker.h"
|
||||
#include "../common/File.h"
|
||||
#include "../common/Array.h"
|
||||
#include "../common/Directory.h"
|
||||
#include "./MemoryStream.h"
|
||||
#include "./../graphics/pro/Fonts.h"
|
||||
|
||||
using namespace NSFonts;
|
||||
#include "./MemoryStream.h"
|
||||
#include "./../graphics/pro/Fonts.h"
|
||||
|
||||
using namespace NSFonts;
|
||||
|
||||
namespace NSFontsApplication
|
||||
{
|
||||
@ -347,11 +348,11 @@ namespace NSFontsApplication
|
||||
}
|
||||
};
|
||||
|
||||
static std::vector<std::wstring> SaveAllFontsJS(CApplicationFonts& applicationFonts, CStringWriter& oWriterJS)
|
||||
static std::vector<std::wstring> SaveAllFontsJS(NSFonts::IApplicationFonts* applicationFonts, CStringWriter& oWriterJS)
|
||||
{
|
||||
std::vector<std::wstring> arrNames;
|
||||
|
||||
std::vector<NSFonts::CFontInfo*>* pList = applicationFonts.GetList()->GetFonts();
|
||||
std::vector<NSFonts::CFontInfo*>* pList = applicationFonts->GetList()->GetFonts();
|
||||
|
||||
#ifdef _IOS
|
||||
|
||||
@ -361,7 +362,7 @@ namespace NSFontsApplication
|
||||
CFontInfo* pInfo = pList->operator [](i);
|
||||
|
||||
if (pInfo->m_wsFontName.find(L".") == 0)
|
||||
{
|
||||
{
|
||||
pList->erase(pList->begin() + i);
|
||||
// странные шрифты какие-то есть в ios
|
||||
//pList->RemoveAt(i);
|
||||
@ -556,7 +557,7 @@ namespace NSFontsApplication
|
||||
{
|
||||
BYTE* pData = NULL;
|
||||
LONG lLen = 0;
|
||||
applicationFonts.GetList()->ToBuffer(&pData, &lLen, L"", true);
|
||||
applicationFonts->GetList()->ToBuffer(&pData, &lLen, L"", true);
|
||||
|
||||
char* cData64 = NULL;
|
||||
int nData64Dst = 0;
|
||||
@ -658,14 +659,14 @@ std::vector<std::wstring> CApplicationFontsWorker::CheckApplication(bool bIsNeed
|
||||
std::vector<std::wstring> arrNames;
|
||||
|
||||
std::vector<std::wstring> fonts;
|
||||
CApplicationFonts oFonts;
|
||||
NSFonts::IApplicationFonts* pFonts = NSFonts::NSApplication::Create();
|
||||
|
||||
pDataDst = NULL;
|
||||
nLenDst = 0;
|
||||
|
||||
if (bIsNeedSystemFonts)
|
||||
{
|
||||
fonts = oFonts.GetSetupFontFiles();
|
||||
fonts = pFonts->GetSetupFontFiles();
|
||||
}
|
||||
|
||||
for (std::vector<std::wstring>::iterator iter = m_arAdditionalFolders.begin(); iter != m_arAdditionalFolders.end(); ++iter)
|
||||
@ -720,10 +721,10 @@ std::vector<std::wstring> CApplicationFontsWorker::CheckApplication(bool bIsNeed
|
||||
}
|
||||
|
||||
// произошли изменения
|
||||
oFonts.InitializeFromArrayFiles(fonts);
|
||||
pFonts->InitializeFromArrayFiles(fonts);
|
||||
|
||||
NSFontsApplication::CStringWriter oWriterJS;
|
||||
arrNames = NSFontsApplication::SaveAllFontsJS(oFonts, oWriterJS);
|
||||
arrNames = NSFontsApplication::SaveAllFontsJS(pFonts, oWriterJS);
|
||||
|
||||
// теперь нужно записать новую дату
|
||||
NSMemoryStream::CMemoryStream oStream;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2018
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
@ -773,4 +773,32 @@ void CFontManager::SetSubpixelRendering(const bool& hmul, const bool& vmul)
|
||||
m_nRENDER_MODE = FT_RENDER_MODE_LCD_V;
|
||||
else
|
||||
m_nRENDER_MODE = FT_RENDER_MODE_NORMAL;
|
||||
}
|
||||
|
||||
void CFontManager::GetFace(double& d0, double& d1, double& d2)
|
||||
{
|
||||
d0 = 2048;
|
||||
d1 = 0;
|
||||
d2 = 0;
|
||||
|
||||
if (m_pFont)
|
||||
{
|
||||
TT_OS2* os2 = NULL;
|
||||
TT_Header* header = NULL;
|
||||
if (m_pFont->m_pFace)
|
||||
{
|
||||
if ((header = (TT_Header*)FT_Get_Sfnt_Table(m_pFont->m_pFace, ft_sfnt_head)) != NULL)
|
||||
{
|
||||
d1 = header->yMax;
|
||||
d2 = header->yMin;
|
||||
d0 = header->Units_Per_EM;
|
||||
}
|
||||
|
||||
if ((os2 = (TT_OS2*)FT_Get_Sfnt_Table(m_pFont->m_pFace, ft_sfnt_os2)) != NULL && os2->version != 0xFFFFU)
|
||||
{
|
||||
d1 = os2->usWinAscent;
|
||||
d2 = -os2->usWinDescent;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2018
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
@ -217,7 +217,9 @@ public:
|
||||
virtual std::wstring GetFontType();
|
||||
virtual unsigned int GetNameIndex(const std::wstring& wsName);
|
||||
|
||||
virtual void SetSubpixelRendering(const bool& hmul, const bool& vmul);
|
||||
virtual void SetSubpixelRendering(const bool& hmul, const bool& vmul);
|
||||
|
||||
virtual void GetFace(double& d0, double& d1, double& d2);
|
||||
};
|
||||
|
||||
#endif // _BUILD_FONT_ENGINE_FONTMANAGER_H_
|
||||
|
||||
@ -152,27 +152,7 @@ static inline unsigned char Div255(int nValue)
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
class CDIB : public IGrObject
|
||||
{
|
||||
public:
|
||||
BYTE* m_pBits;
|
||||
LONG m_lWidth;
|
||||
LONG m_lHeight;
|
||||
|
||||
public:
|
||||
CDIB() : IGrObject()
|
||||
{
|
||||
m_pBits = NULL;
|
||||
m_lWidth = 0;
|
||||
m_lHeight = 0;
|
||||
}
|
||||
virtual ~CDIB()
|
||||
{
|
||||
// delete all in system wrapper
|
||||
}
|
||||
|
||||
virtual INT Create(LONG lWidth, LONG lHeight, double dDPIX, double dDPIY) = 0;
|
||||
};
|
||||
class CDIB;
|
||||
|
||||
class CGraphics_ClipStateRecord
|
||||
{
|
||||
|
||||
@ -718,6 +718,16 @@ namespace Aggplus
|
||||
|
||||
return Ok;
|
||||
}
|
||||
|
||||
bool CGraphicsPath::IsPointInPath(const double& x, const double& y)
|
||||
{
|
||||
agg::rasterizer_scanline_aa<> rasterizer;
|
||||
agg::conv_curve<agg::path_storage> c_c_path(m_internal->m_agg_ps);
|
||||
rasterizer.add_path(c_c_path);
|
||||
|
||||
return rasterizer.hit_test((int)x, (int)y);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace Aggplus
|
||||
|
||||
@ -97,6 +97,7 @@ namespace Aggplus
|
||||
int EllipseArc3(double fX, double fY, double fXRad, double fYRad, double dAngle1, double dAngle2, double *pfXCur, double *pfYCur, INT bClockDirection = FALSE);
|
||||
int Ellipse(double fX, double fY, double fXRad, double fYRad);
|
||||
Status AddArc2(double fX, double fY, double fWidth, double fHeight, double fStartAngle, double fSweepAngle);
|
||||
bool IsPointInPath(const double& x, const double& y);
|
||||
|
||||
public:
|
||||
CGraphicsPath_private* m_internal;
|
||||
|
||||
@ -213,8 +213,13 @@ namespace Aggplus
|
||||
double CMatrix::ty() const
|
||||
{
|
||||
return m_internal->m_agg_mtx.ty;
|
||||
}
|
||||
double CMatrix::rotation()
|
||||
{
|
||||
return m_internal->m_agg_mtx.rotation();
|
||||
}
|
||||
|
||||
|
||||
void CMatrix::SetElements(const double& sx, const double& shy, const double& shx, const double& sy, const double& tx, const double& ty)
|
||||
{
|
||||
m_internal->m_agg_mtx.sx = sx;
|
||||
|
||||
@ -71,7 +71,7 @@ namespace Aggplus
|
||||
double shy() const;
|
||||
double tx() const;
|
||||
double ty() const;
|
||||
|
||||
double rotation();
|
||||
void SetElements(const double& sx, const double& shy, const double& shx, const double& sy, const double& tx = 0, const double& ty = 0);
|
||||
|
||||
Status GetElements(float* m) const;
|
||||
|
||||
@ -460,6 +460,10 @@ namespace NSFonts
|
||||
virtual bool IsItalic() = 0;
|
||||
virtual bool IsBold() = 0;
|
||||
|
||||
|
||||
virtual void SetItalic(const INT& value) = 0;
|
||||
virtual void SetNeedBold(const INT& value) = 0;
|
||||
|
||||
virtual bool IsSymbolic(bool bIsOS2Check = false) = 0;
|
||||
|
||||
virtual int IsUnicodeRangeAvailable(unsigned long ulBit, unsigned int un4ByteIndex) = 0;
|
||||
@ -565,6 +569,8 @@ namespace NSFonts
|
||||
virtual void SetSubpixelRendering(const bool& hmul, const bool& vmul) = 0;
|
||||
|
||||
virtual unsigned int GetNameIndex(const std::wstring& wsName) = 0;
|
||||
|
||||
virtual void GetFace(double& d0, double& d1, double& d2) = 0;
|
||||
|
||||
public:
|
||||
static IFontFile* LoadFontFile(CLibrary& library, IFontStream* pStream, int lFaceIndex);
|
||||
|
||||
@ -40,7 +40,31 @@
|
||||
#include "./Image.h"
|
||||
|
||||
#include "../IRenderer.h"
|
||||
#include "../structures.h"
|
||||
|
||||
namespace Aggplus {
|
||||
class CDIB : public IGrObject
|
||||
{
|
||||
public:
|
||||
BYTE* m_pBits;
|
||||
LONG m_lWidth;
|
||||
LONG m_lHeight;
|
||||
|
||||
public:
|
||||
CDIB() : IGrObject()
|
||||
{
|
||||
m_pBits = NULL;
|
||||
m_lWidth = 0;
|
||||
m_lHeight = 0;
|
||||
}
|
||||
virtual ~CDIB()
|
||||
{
|
||||
// delete all in system wrapper
|
||||
}
|
||||
|
||||
virtual INT Create(LONG lWidth, LONG lHeight, double dDPIX, double dDPIY) = 0;
|
||||
};
|
||||
}
|
||||
namespace NSGraphics
|
||||
{
|
||||
class GRAPHICS_DECL IGraphicsRenderer : public IRenderer
|
||||
@ -63,9 +87,46 @@ namespace NSGraphics
|
||||
public:
|
||||
virtual void CreateFromBgraFrame(CBgraFrame* pFrame) = 0;
|
||||
virtual void SetCoordTransformOffset(double dOffsetX, double dOffsetY) = 0;
|
||||
|
||||
|
||||
virtual void SavePen(NSStructures::CPen& oPen) = 0;
|
||||
virtual void RestorePen(const NSStructures::CPen& oPen) = 0;
|
||||
|
||||
virtual void SaveBrush(NSStructures::CBrush& oBrush) = 0;
|
||||
virtual void RestoreBrush(const NSStructures::CBrush& oBrush) = 0;
|
||||
|
||||
virtual void put_GlobalAlphaEnabled(const bool& bEnabled, const double& dVal) = 0;
|
||||
virtual void put_IntegerGrid(const bool& bEnabled) = 0;
|
||||
virtual bool get_IntegerGrid() = 0;
|
||||
virtual void AddRect(const double& x, const double& y, const double& w, const double& h) = 0;
|
||||
virtual void SetFontAttack() = 0;
|
||||
|
||||
virtual void Create(BYTE* pPixels, const Aggplus::CDoubleRect& oRect, LONG lWidthControl, LONG lHeightControl, Aggplus::CDIB* pDib = NULL) = 0;
|
||||
virtual void CreateFlip(BYTE* pPixels, const Aggplus::CDoubleRect& oRect, LONG lWidthControl, LONG lHeightControl, Aggplus::CDIB* pDib = NULL) = 0;
|
||||
|
||||
virtual Aggplus::CMatrix* GetFullTransform() = 0;
|
||||
virtual Aggplus::CMatrix* GetTransformMatrix() = 0;
|
||||
virtual void CalculateFullTransform() = 0;
|
||||
virtual void PathCommandRect(double x, double y, double w, double h) = 0;
|
||||
virtual Aggplus::CMatrix* GetCoordTransform() = 0;
|
||||
virtual void Fill() = 0;
|
||||
virtual void Stroke() = 0;
|
||||
virtual double GetPixW() = 0;
|
||||
virtual double GetPixH() = 0;
|
||||
|
||||
// smart methods
|
||||
virtual void drawHorLine(BYTE align, double y, double x, double r, double penW) = 0;
|
||||
virtual void drawHorLine2(BYTE align, double y, double x, double r, double penW) = 0;
|
||||
|
||||
virtual void drawVerLine(BYTE align, double x, double y, double b, double penW) = 0;
|
||||
virtual void drawHorLineExt(BYTE align, double y, double x, double r, double penW, double leftMW, double rightMW) = 0;
|
||||
|
||||
|
||||
};
|
||||
|
||||
GRAPHICS_DECL IGraphicsRenderer* Create();
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif // _GRAPHICS_EXPORTS_GRAPHICS_H_
|
||||
|
||||
@ -515,6 +515,9 @@ namespace MetaFile
|
||||
else //if (WINDING == unFillMode)
|
||||
unClipMode |= c_nClipRegionTypeWinding;
|
||||
|
||||
if (RGN_COPY == unMode)
|
||||
ResetClip();
|
||||
|
||||
m_pRenderer->put_ClipMode(unClipMode);
|
||||
m_pRenderer->BeginCommand(c_nClipType);
|
||||
m_pRenderer->BeginCommand(c_nPathType);
|
||||
|
||||
@ -232,7 +232,7 @@ static const struct ActionNamesEmf
|
||||
//-----------------------------------------------------------
|
||||
// 2.3.2 Clipping
|
||||
//-----------------------------------------------------------
|
||||
case EMR_EXCLUDECLIPRECT: Read_EMR_EXCLUDECLIPRECT(); break;
|
||||
case EMR_EXCLUDECLIPRECT: Read_EMR_EXCLUDECLIPRECT(); break;
|
||||
case EMR_EXTSELECTCLIPRGN: Read_EMR_EXTSELECTCLIPRGN(); break;
|
||||
case EMR_INTERSECTCLIPRECT: Read_EMR_INTERSECTCLIPRECT(); break;
|
||||
case EMR_SELECTCLIPPATH: Read_EMR_SELECTCLIPPATH(); break;
|
||||
|
||||
@ -211,7 +211,8 @@ namespace XmlUtils
|
||||
|
||||
if ((XmlNodeType_Element == eNodeType && nCurDepth == nDepth + 1)
|
||||
|| ((XmlNodeType_Text == eNodeType ||
|
||||
XmlNodeType_Whitespace == eNodeType) && nCurDepth == nDepth + 1))
|
||||
XmlNodeType_Whitespace == eNodeType ||
|
||||
XmlNodeType_SIGNIFICANT_WHITESPACE == eNodeType ) && nCurDepth == nDepth + 1))
|
||||
return true;
|
||||
else if (XmlNodeType_EndElement == eNodeType && nCurDepth == nDepth)
|
||||
return false;
|
||||
|
||||
@ -67,10 +67,6 @@ SOURCES += \
|
||||
|
||||
signature_openssl {
|
||||
|
||||
DEFINES += XMLSEC_OPENSSL_110
|
||||
INCLUDEPATH += $$CORE_ROOT_DIR/Common/3dParty/openssl/openssl/include
|
||||
|
||||
LIBS += -L$$CORE_ROOT_DIR/Common/3dParty/openssl/openssl -lssl
|
||||
LIBS += -L$$CORE_ROOT_DIR/Common/3dParty/openssl/openssl -lcrypto
|
||||
include(../../../Common/3dParty/openssl/openssl.pri)
|
||||
|
||||
}
|
||||
|
||||
@ -57,6 +57,7 @@
|
||||
69DA32F91CEE100E00E10AF0 /* libraster_ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 69DA32491CEE094A00E10AF0 /* libraster_ios.a */; };
|
||||
69EC66D91E01775B003527E2 /* libUnicodeConverter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 69EC66D21E01770D003527E2 /* libUnicodeConverter.a */; };
|
||||
8A9FAC2B207772E1007787F6 /* libicu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A9FAC27207772CC007787F6 /* libicu.a */; };
|
||||
8ADB5F4220C52EFE00B72D37 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 8ADB5F4120C52EFE00B72D37 /* version.h */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
@ -479,6 +480,7 @@
|
||||
69DA325C1CEE09BB00E10AF0 /* PPTXFormatLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PPTXFormatLib.xcodeproj; path = ../../../../ASCOfficePPTXFile/PPTXLib/Mac/PPTXFormatLib.xcodeproj; sourceTree = "<group>"; };
|
||||
69EC66CD1E01770C003527E2 /* UnicodeConverter.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = UnicodeConverter.xcodeproj; path = ../../../../UnicodeConverter/build/UnicodeConverter/UnicodeConverter.xcodeproj; sourceTree = "<group>"; };
|
||||
8A9FAC22207772CC007787F6 /* icu.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = icu.xcodeproj; path = icu/icu.xcodeproj; sourceTree = "<group>"; };
|
||||
8ADB5F4120C52EFE00B72D37 /* version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@ -567,6 +569,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
6967AFA51E27918600A129E2 /* src */,
|
||||
8ADB5F4120C52EFE00B72D37 /* version.h */,
|
||||
17C27A171AC2DB3D00E1D003 /* X2tConverter.h */,
|
||||
17C27A191AC2DB3D00E1D003 /* X2tConverter.mm */,
|
||||
);
|
||||
@ -828,6 +831,7 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
6967AFB11E2793A500A129E2 /* cextracttools.h in Headers */,
|
||||
8ADB5F4220C52EFE00B72D37 /* version.h in Headers */,
|
||||
6911A9691F6036DA0061AB4D /* OfficeFileErrorDescription.h in Headers */,
|
||||
6967B10F1E27A65600A129E2 /* OfficeFileFormatChecker.h in Headers */,
|
||||
6967AFB51E27940600A129E2 /* ASCConverters.h in Headers */,
|
||||
@ -845,6 +849,7 @@
|
||||
17C8DEC61ACD696100902C85 /* Sources */,
|
||||
17C8DEC81ACD696100902C85 /* Frameworks */,
|
||||
17C8DECB1ACD696100902C85 /* Headers */,
|
||||
8ADB5F4420C52F6E00B72D37 /* ShellScript */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
@ -1225,6 +1230,19 @@
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "SIMULATOR_LIBRARY_PATH=\"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a\" &&\nDEVICE_LIBRARY_PATH=\"${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a\" &&\nUNIVERSAL_LIBRARY_DIR=\"${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal\" &&\nFRAMEWORK=\"${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal/${PROJECT_NAME}.framework\" &&\n\n# Create framework directory structure.\nrm -rf \"${FRAMEWORK}\" &&\nmkdir -p \"${UNIVERSAL_LIBRARY_DIR}\" &&\n\n# Generate universal binary for the device and simulator.\nlipo \"${SIMULATOR_LIBRARY_PATH}\" \"${DEVICE_LIBRARY_PATH}\" -create -output \"${FRAMEWORK}\"";
|
||||
};
|
||||
8ADB5F4420C52F6E00B72D37 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "VERSION=$(cat \"../../../../Common/version.txt\")\n\necho \"#ifndef X2T_VERSION_H\n#define X2T_VERSION_H\n\n#define X2T_VERSION \\\"$VERSION\\\"\n\n#endif\" > \"X2tConverter/version.h\"\n\n";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user