Compare commits

...

129 Commits

Author SHA1 Message Date
7929d798c8 open presentation notes 2017-04-12 19:40:09 +03:00
4c3d8ca059 . 2017-04-12 19:14:12 +03:00
ad74a8ea6b fix bug #34747 2017-04-11 17:11:56 +03:00
f50dda7c31 fix bug #34736 2017-04-11 15:28:51 +03:00
f78a805fa3 . 2017-04-11 13:17:58 +03:00
bc177269a9 OdfFormatReader - fix solid background in documents 2017-04-11 10:52:19 +03:00
84cab29276 fix build 2017-04-11 10:32:09 +03:00
d7c7584b4d OdfFormatWriter - slides size, ... 2017-04-11 10:24:53 +03:00
1346072ab2 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop
* 'develop' of https://github.com/ONLYOFFICE/core:
  x2t binary - dont write unsupported graphicData (sle:slicer)
  fix bugs after refactoring
  xmlsec
  OdfFormat ...
2017-04-10 16:26:59 +03:00
3b6b463b1b fix build converter ios 2017-04-10 16:26:50 +03:00
a75daf9d90 x2t binary - dont write unsupported graphicData (sle:slicer) 2017-04-10 11:10:22 +03:00
dc81f97bac fix bugs after refactoring 2017-04-09 20:55:53 +03:00
d194249ffb xmlsec 2017-04-08 14:26:26 +03:00
4ec04c31c5 OdfFormat ... 2017-04-07 18:36:47 +03:00
8774035be9 OdfFormatReader - presentation table extended graphics properties 2017-04-06 19:30:44 +03:00
8cec4ce82e OdfFormatWriter presentation layouts, layers
OdfFormat - nation style-name
2017-04-06 17:40:26 +03:00
17e46a2c99 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop
* 'develop' of https://github.com/ONLYOFFICE/core:
  OdfFormatWriter - presentation tables styled
  OdfFormatWriter - presentation tables
2017-04-06 15:26:59 +03:00
c5ffcd4b44 open documents with password (ios) 2017-04-06 15:26:54 +03:00
38813fd105 OdfFormatWriter - presentation tables styled 2017-04-05 18:48:51 +03:00
19960fa3b5 OdfFormatWriter - presentation tables 2017-04-04 20:07:27 +03:00
32121d6d3b Merge tag 'v4.3.0' into develop
v4.3.0
2017-04-03 12:57:47 +03:00
2dcef22681 Merge branch 'release/v4.3.0' 2017-04-03 12:57:28 +03:00
ee5a56183e fix linux build 2017-04-03 12:20:12 +03:00
b90e3a3cd1 . 2017-04-03 11:49:20 +03:00
f074d1252b OdfFormatWriter - odp 2017-04-03 11:15:30 +03:00
30f07d3aa4 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop 2017-03-31 17:58:20 +03:00
d27b7b2f56 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop
* 'develop' of https://github.com/ONLYOFFICE/core:
  x2t version up
  for bug 34597
  fix bug 34603
  for bug 34498
2017-03-31 17:57:44 +03:00
1dbf3e83ad ios collaboration 2017-03-31 17:57:35 +03:00
a5f70c9740 x2t - change projects 2017-03-31 16:29:15 +03:00
ab72c8973d OdfFormatWriter - presentation hyperlink, backgrounds slides & masters 2017-03-31 16:06:31 +03:00
a204c576ad Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop 2017-03-31 11:29:41 +03:00
4a7d40d3fb x2t version up 2017-03-31 08:17:46 +03:00
4f5fb86f87 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop 2017-03-30 17:33:49 +03:00
f7f2629e9d for bug 34597 2017-03-30 16:51:08 +03:00
048c2fd034 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop 2017-03-30 16:04:22 +03:00
3299c47858 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop 2017-03-30 16:03:47 +03:00
8977e2c792 fix bug 34603 2017-03-30 16:02:23 +03:00
089e7d3230 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop 2017-03-30 11:00:56 +03:00
bd5863a02d for bug 34498 2017-03-29 20:12:04 +03:00
e0296d5a9a OdfFormatWriter - odp master page 2017-03-29 16:09:39 +03:00
e26cf3bf39 OdfFormatWriter - convert pptx->odp 2017-03-29 13:06:41 +03:00
8525a1e9f0 . 2017-03-29 13:04:40 +03:00
2e8c83a668 RtfFormat, TxtFormat - chage convert from ooxml drawing 2017-03-29 13:04:07 +03:00
e857496565 .. 2017-03-29 13:02:24 +03:00
143f65ae5a BinaryFormat - refactoring drawing objects, convert embedded objects, ole objects 2017-03-29 13:01:22 +03:00
f89d75ae92 PptxFormat refactoring and extending drawing objects 2017-03-29 12:57:07 +03:00
403507206d . 2017-03-29 12:52:52 +03:00
7f6431700c DocxFormat - refactoring, move common drawing in pptx format, ... 2017-03-29 12:52:17 +03:00
7977bcf069 . 2017-03-29 12:47:58 +03:00
32ad6b46e2 ooxml files encrypting 2017-03-29 12:35:09 +03:00
bf6bfce051 fix bug 34509 2017-03-24 20:02:11 +03:00
805c24ff1a fix bug 27498 2017-03-24 18:35:08 +03:00
2c4bb7c808 for bug 34498. ULong 2017-03-23 20:24:52 +03:00
15a711396f x2t xlsx outline level save/read in binary 2017-03-22 17:53:09 +03:00
3d8403346b fix added bug 34297 2017-03-20 17:42:00 +03:00
5700503efe fix build converter ios 2017-03-16 12:56:04 +03:00
d01b1e7d41 fix bug 33781 2017-03-15 13:28:49 +03:00
584cc6ab80 fix bug 34297 2017-03-11 18:47:30 +03:00
4b727edde8 . 2017-03-09 16:05:45 +03:00
9d10c4ddce Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop 2017-03-07 12:19:08 +03:00
d5026d014d . 2017-03-06 17:24:29 +03:00
ac0b7e4e22 fix bug 34019 2017-03-06 15:45:43 +03:00
623fe25415 fix 34229 2017-03-06 15:30:54 +03:00
c4c9d50aae fix bug 34222 2017-03-06 14:29:15 +03:00
5d8dda02ec pptx extended reading fix 2017-03-04 16:01:15 +03:00
bc3461147d fix pptx note slide default 2017-03-03 14:29:18 +03:00
80d4e6057b .. 2017-03-03 13:35:37 +03:00
2dc5c2916a .. 2017-03-03 13:28:16 +03:00
5f9631a3c5 .. 2017-03-02 13:14:27 +03:00
ef7df69036 linux build fix 2017-03-01 20:06:37 +03:00
b3961994d2 Pptx .. 2017-03-01 19:40:40 +03:00
927a847607 . 2017-03-01 18:14:33 +03:00
674cc6c1a2 fix doct->docx background page settings 2017-03-01 14:18:35 +03:00
5d77cf9473 add ../ path for dll path 2017-03-01 13:23:11 +03:00
512dad1d24 fix double write attribute in background 2017-02-28 20:02:54 +03:00
3d684934f1 fix ppt background
fix bug 34177
read attributes (from line props, shape props , effects, 3D) without namespace
2017-02-28 19:03:04 +03:00
dd6ac185fb fix - remove tmp pptx folder 2017-02-28 18:27:00 +03:00
9825b6e32e Error writing xlsx (wrong ConditionalFormatting place) 2017-02-27 20:27:31 +03:00
653008ebfc XlsxFormat (graphicFrame) 2017-02-27 18:26:50 +03:00
236e93aa9c add GlobalVariable 2017-02-27 16:46:17 +03:00
164c7faf94 ..fix previus 2017-02-27 12:35:49 +03:00
4c07ddbcc7 . 2017-02-26 22:22:46 +03:00
7be543c3a6 pptx format .. extended reading xml 2017-02-26 18:57:48 +03:00
ccb47b0bda . 2017-02-23 15:20:20 +03:00
8aefacd411 new chart witout office_drawing(faster...) 2017-02-22 19:57:15 +03:00
6cd5fbcaca . 2017-02-21 23:38:23 +03:00
7c964b3f9c .. 2017-02-21 19:17:24 +03:00
8c43c781bd fix build 2017-02-21 18:00:39 +03:00
7496de06f0 . 2017-02-21 13:19:21 +03:00
fdd443a2d7 . 2017-02-21 13:18:29 +03:00
037c4046eb PptxFormat - extending reading xml; sppr, txpr in chart without DrawingConverter 2017-02-21 11:32:31 +03:00
4e5ac14ca9 errors for builder (open/save) 2017-02-18 14:17:42 +03:00
dedf74b366 fix for build 2017-02-18 11:02:42 +03:00
6f2eef1137 .. 2017-02-17 16:42:49 +03:00
9a8d3edbef . 2017-02-17 16:33:19 +03:00
305ebda78d OfficeUtils - add sort for compress 2017-02-17 16:28:00 +03:00
114050c23e fix bug #33849 2017-02-16 19:26:50 +03:00
7eee0755bf RtfFormatReader - generate replacement text hyperlink if absent 2017-02-16 16:23:21 +03:00
c329f29e9a RtfFormatReader - fix hyperlink text 2017-02-16 15:49:08 +03:00
0f3a02ca7c . 2017-02-16 15:20:53 +03:00
62d4860873 pptx - extending reading xml 2017-02-16 15:08:53 +03:00
21666ee309 x2t verion up 2.0.3.440 2017-02-16 11:38:20 +03:00
47ff766e4e . 2017-02-15 11:36:04 +03:00
50cbc671b3 RtfFormatWriter - text in drawing shapes, ... 2017-02-13 20:11:52 +03:00
f2d3390bd4 RtfFormatWriter - fix custom shape path 2017-02-13 14:23:38 +03:00
fb5af12d7a OdfFormat - refactroing svg; RtfFormatWriter - add custom shapes 2017-02-12 15:38:51 +03:00
63655a97e9 .. 2017-02-11 15:32:29 +03:00
fdf032d9f8 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop
* 'develop' of https://github.com/ONLYOFFICE/core:
  RtfFormat - add office digital signatures
  bug with some jpeg
  x2t version up 2.0.3.438
  RtfFormat - fix croping image, ...
  RtfFormat - extended drawing
  fix bug #34016
  fix bug #34018
  fix bug 34011
  fix bug #33752 after refactoring
  fix convert oox group shape to vml group shape
  RtfFormatWriter - fix table cell width (auto)
  OdfFormat - Reader/Writer - background page (image, pattern, gradient)
  fix bug #33918
2017-02-10 18:16:27 +03:00
3b85b58558 up 2017-02-10 18:16:18 +03:00
00f1f40a1e RtfFormat - add office digital signatures 2017-02-10 18:09:48 +03:00
46c05a4c27 bug with some jpeg 2017-02-10 17:14:53 +03:00
f3a510bd58 x2t version up 2.0.3.438 2017-02-10 15:49:17 +03:00
45231b822c RtfFormat - fix croping image, ... 2017-02-10 15:02:00 +03:00
e0591675d2 RtfFormat - extended drawing 2017-02-09 17:20:02 +03:00
67a849f110 fix bug #34016 2017-02-09 14:24:31 +03:00
15800296f7 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop 2017-02-08 20:04:33 +03:00
52fe741f9a fix bug #34018 2017-02-08 20:03:38 +03:00
b3ee693890 fix bug 34011 2017-02-08 19:35:45 +03:00
8c2e1738ea fix bug #33752 after refactoring 2017-02-07 12:42:46 +03:00
bf33aed853 fix convert oox group shape to vml group shape 2017-02-06 20:07:58 +03:00
5869c7a02e RtfFormatWriter - fix table cell width (auto) 2017-02-06 13:55:01 +03:00
bbd429a994 OdfFormat - Reader/Writer - background page (image, pattern, gradient) 2017-02-05 15:57:17 +03:00
f4d636539e Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop 2017-02-03 18:34:43 +03:00
92e02257d7 fix bug #33918 2017-02-03 18:33:50 +03:00
d2046d7ccb add missed include 2017-02-03 18:15:57 +03:00
7bc35a157a Implemented case when the size of the masked image doesn't match to the size of the mask. 2017-02-03 18:02:28 +03:00
903245e8a7 fixed converter for iOS 2017-02-03 17:33:48 +03:00
25ee9c3c1c Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop
* 'develop' of https://github.com/ONLYOFFICE/core:
  x2t vesion up  2.0.3.435
  PDFReader: text clip
  .
  fix...
  .
  x2t version up
  DocxFormat - fix vml single geom position RtfFormat - read/write background page (solid, pattern, gradient, image)
2017-02-03 16:28:47 +03:00
9ead40d279 up header 2017-02-03 16:28:42 +03:00
1723 changed files with 329143 additions and 40712 deletions

View File

@ -50,8 +50,8 @@ namespace DocFileFormat
EncryptionHeader( FileInformationBlock* fib, POLE::Stream* tableStream );
private:
CRYPT::CryptRC4Data crypt_data_rc4;
CRYPT::ECMADecryptor::_cryptData crypt_data_aes;
bool bStandard;
CRYPT::_rc4CryptData crypt_data_rc4;
CRYPT::_ecmaCryptData crypt_data_aes;
bool bStandard;
};
}

View File

@ -385,6 +385,10 @@
RelativePath="..\..\ASCOfficeDocxFile2\DocWrapper\FontProcessor.cpp"
>
</File>
<File
RelativePath="..\..\ASCOfficeDocxFile2\BinReader\Readers.cpp"
>
</File>
<File
RelativePath="..\..\ASCOfficeDocxFile2\DocWrapper\XlsxSerializer.cpp"
>
@ -434,6 +438,10 @@
RelativePath="..\..\Common\FileDownloader\FileDownloader_win.cpp"
>
</File>
<File
RelativePath="..\..\Common\OfficeFileFormatChecker2.cpp"
>
</File>
<File
RelativePath="..\..\UnicodeConverter\UnicodeConverter.cpp"
>

View File

@ -38,72 +38,63 @@ namespace Writers
{
class ChartWriter
{
class ChartElem
struct _chartElem
{
public:
std::wstring content;
std::wstring filename;
int index;
std::wstring content;
std::wstring filename;
int index;
};
std::vector<ChartElem*> m_aCharts;
ContentTypesWriter& m_oContentTypesWriter;
int nChartCount;
std::vector<_chartElem> m_aCharts;
int nChartCount;
public:
std::wstring m_sDir;
public:
ChartWriter(std::wstring sDir, ContentTypesWriter& oContentTypesWriter):m_sDir(sDir),m_oContentTypesWriter(oContentTypesWriter)
ChartWriter(std::wstring sDir) : m_sDir(sDir)
{
nChartCount = 0;
}
~ChartWriter()
{
for(size_t i = 0, length = m_aCharts.size(); i < length; ++i)
{
delete m_aCharts[i];
}
}
bool IsEmpty()
{
return 0 == m_aCharts.size();
}
void Write()
bool Write()
{
if(false == IsEmpty())
if(IsEmpty()) return false;
OOX::CPath pathChartDir = m_sDir + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + _T("charts");
for(size_t i = 0; i < m_aCharts.size(); ++i)
{
OOX::CPath pathChartDir = m_sDir + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + _T("charts");
NSDirectory::CreateDirectory(pathChartDir.GetPath());
_chartElem & elem = m_aCharts[i];
for(size_t i = 0, length = m_aCharts.size(); i < length; ++i)
{
ChartElem* elem = m_aCharts[i];
OOX::CPath filePath = pathChartDir + FILE_SEPARATOR_STR + elem.filename;
OOX::CPath filePath = pathChartDir + FILE_SEPARATOR_STR + elem->filename;
NSFile::CFileBinary oFile;
oFile.CreateFileW(filePath.GetPath());
oFile.WriteStringUTF8(L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n");
oFile.WriteStringUTF8(elem->content);
oFile.CloseFile();
//Content_Types
std::wstring sRelPath = L"/word/charts/" + elem->filename;
m_oContentTypesWriter.AddOverride(sRelPath, L"application/vnd.openxmlformats-officedocument.drawingml.chart+xml");
}
NSFile::CFileBinary oFile;
oFile.CreateFileW(filePath.GetPath());
oFile.WriteStringUTF8(L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n");
oFile.WriteStringUTF8(elem.content);
oFile.CloseFile();
}
return true;
}
void AddChart(std::wstring& content, std::wstring& sRelsName, std::wstring& sFileName, int& index)
{
ChartElem* pChartElem = new ChartElem();
pChartElem->content = content;
pChartElem->index = nChartCount + 1;
nChartCount++;
pChartElem->filename = L"chart" + std::to_wstring(pChartElem->index) + L".xml";
_chartElem oChartElem;
sRelsName = L"charts/" + pChartElem->filename;
sFileName = pChartElem->filename;
index = pChartElem->index;
oChartElem.content = content;
oChartElem.index = nChartCount + 1;
nChartCount++;
oChartElem.filename = L"chart" + std::to_wstring(oChartElem.index) + L".xml";
sRelsName = L"charts/" + oChartElem.filename;
sFileName = oChartElem.filename;
index = oChartElem.index;
m_aCharts.push_back(pChartElem);
m_aCharts.push_back(oChartElem);
}
int getChartCount()
{

View File

@ -46,20 +46,19 @@ namespace Writers
class CommentsWriter
{
std::wstring m_sDir;
ContentTypesWriter& m_oContentTypesWriter;
public:
std::wstring m_sComment;
std::wstring m_sCommentExt;
std::wstring m_sPeople;
public:
CommentsWriter(std::wstring sDir, ContentTypesWriter& oContentTypesWriter):m_sDir(sDir),m_oContentTypesWriter(oContentTypesWriter)
std::wstring m_sComment;
std::wstring m_sCommentExt;
std::wstring m_sPeople;
CommentsWriter(std::wstring sDir) : m_sDir(sDir)
{
}
void setElements(std::wstring& sComment, std::wstring& sCommentExt, std::wstring& sPeople)
{
m_sComment = sComment;
m_sCommentExt = sCommentExt;
m_sPeople = sPeople;
m_sComment = sComment;
m_sCommentExt = sCommentExt;
m_sPeople = sPeople;
}
void Write()
{
@ -67,42 +66,30 @@ namespace Writers
{
OOX::CPath filePath = m_sDir + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + _T("comments.xml");
CFile oFile;
oFile.CreateFile(filePath.GetPath());
NSFile::CFileBinary oFile;
oFile.CreateFileW(filePath.GetPath());
oFile.WriteStringUTF8(g_string_comment_Start);
oFile.WriteStringUTF8(m_sComment);
oFile.WriteStringUTF8(g_string_comment_End);
oFile.CloseFile();
//Content_Types
m_oContentTypesWriter.AddOverride(std::wstring(_T("/word/comments.xml")), std::wstring(_T("application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml")));
//Rels
//m_oDocumentRelsWriter.AddRels(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"), _T("comments.xml"));
}
if(false == m_sCommentExt.empty())
{
CFile oFile;
oFile.CreateFile(m_sDir + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + _T("commentsExtended.xml"));
NSFile::CFileBinary oFile;
oFile.CreateFileW(m_sDir + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + _T("commentsExtended.xml"));
oFile.WriteStringUTF8(g_string_commentExt_Start);
oFile.WriteStringUTF8(m_sCommentExt);
oFile.WriteStringUTF8(g_string_commentExt_End);
oFile.CloseFile();
//Content_Types
m_oContentTypesWriter.AddOverride(std::wstring(_T("/word/commentsExtended.xml")), std::wstring(_T("application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml")));
}
if(false == m_sPeople.empty())
{
CFile oFile;
oFile.CreateFile(m_sDir + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + _T("people.xml"));
NSFile::CFileBinary oFile;
oFile.CreateFileW(m_sDir + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + _T("people.xml"));
oFile.WriteStringUTF8(g_string_people_Start);
oFile.WriteStringUTF8(m_sPeople);
oFile.WriteStringUTF8(g_string_people_End);
oFile.CloseFile();
//Content_Types
m_oContentTypesWriter.AddOverride(std::wstring(_T("/word/people.xml")), std::wstring(_T("application/vnd.openxmlformats-officedocument.wordprocessingml.people+xml")));
}
}
};

View File

@ -1,80 +0,0 @@
/*
* (c) Copyright Ascensio System SIA 2010-2017
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
#ifndef CONTENT_TYPES_WRITER
#define CONTENT_TYPES_WRITER
#include "../../XlsxSerializerCom/Common/Common.h"
namespace Writers
{
static std::wstring g_string_ct_Start = L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">";
static std::wstring g_string_ct_Ext = L"<Default Extension=\"bin\" ContentType=\"application/vnd.openxmlformats-officedocument.oleObject\"/><Default Extension=\"bmp\" ContentType=\"image/bmp\"/><Default Extension=\"jpg\" ContentType=\"image/jpeg\"/><Default Extension=\"jpeg\" ContentType=\"image/jpeg\"/><Default Extension=\"jpe\" ContentType=\"image/jpeg\"/><Default Extension=\"png\" ContentType=\"image/png\"/><Default Extension=\"gif\" ContentType=\"image/gif\"/><Default Extension=\"emf\" ContentType=\"image/x-emf\"/><Default Extension=\"wmf\" ContentType=\"image/x-wmf\"/><Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/><Default Extension=\"xlsx\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"/>";
static std::wstring g_string_ct_Override = L"<Override PartName=\"/word/document.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\"/><Override PartName=\"/word/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\"/><Override PartName=\"/word/settings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\"/><Override PartName=\"/word/webSettings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml\"/><Override PartName=\"/word/fontTable.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml\"/><Override PartName=\"/word/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/><Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/><Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>";
static std::wstring g_string_ct_End = L"</Types>";
class ContentTypesWriter
{
XmlUtils::CStringWriter m_oWriter;
std::wstring m_sDir;
XmlUtils::CStringWriter m_oAdditional;
public:
ContentTypesWriter(std::wstring sDir) : m_sDir(sDir)
{
}
void Write()
{
m_oWriter.WriteString(g_string_ct_Start);
m_oWriter.WriteString(g_string_ct_Ext);
m_oWriter.WriteString(g_string_ct_Override);
m_oWriter.Write(m_oAdditional);
m_oWriter.WriteString(g_string_ct_End);
OOX::CPath filePath = m_sDir + L"/[Content_Types].xml";
CFile oFile;
oFile.CreateFile(filePath.GetPath());
oFile.WriteStringUTF8(m_oWriter.GetData());
oFile.CloseFile();
}
void AddOverride(const std::wstring& PartName, const std::wstring& ContentType)
{
std::wstring sOverride = L"<Override PartName=\"" + PartName+ L"\" ContentType=\"" + ContentType + L"\"/>";
m_oAdditional.WriteString(sOverride);
}
void AddOverrideRaw(const std::wstring& sXml)
{
m_oAdditional.WriteString(sXml);
}
};
}
#endif // #ifndef CONTENT_TYPES_WRITER

View File

@ -39,15 +39,16 @@ namespace Writers
class DefaultThemeWriter
{
public:
DefaultThemeWriter()
std::wstring m_sContent;
DefaultThemeWriter( )
{
}
void Write(std::wstring sThemeFilePath)
{
std::wstring s_Common;
s_Common = _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?> \
<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\"> \
if (m_sContent.empty())
{
m_sContent = _T("<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\">\
<a:themeElements> \
<a:clrScheme name=\"Office\"> \
<a:dk1> \
@ -87,7 +88,7 @@ namespace Writers
<a:srgbClr val=\"800080\"/> \
</a:folHlink> \
</a:clrScheme> ");
s_Common +=
m_sContent +=
_T("<a:fontScheme name=\"Office\"> \
<a:majorFont> \
<a:latin typeface=\"Cambria\"/> \
@ -158,7 +159,7 @@ s_Common +=
<a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/> \
</a:minorFont> \
</a:fontScheme>");
s_Common +=
m_sContent +=
_T("<a:fmtScheme name=\"Office\"> \
<a:fillStyleLst> \
<a:solidFill> \
@ -329,13 +330,14 @@ s_Common +=
<a:objectDefaults/> \
<a:extraClrSchemeLst/> \
</a:theme>");
}
OOX::CPath fileName = sThemeFilePath;
CFile oFile;
oFile.CreateFile(fileName.GetPath());
oFile.WriteStringUTF8(s_Common);
NSFile::CFileBinary oFile;
oFile.CreateFileW(fileName.GetPath());
oFile.WriteStringUTF8(L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
oFile.WriteStringUTF8(m_sContent);
oFile.CloseFile();
}
};

View File

@ -56,8 +56,8 @@ namespace Writers
OOX::CPath fileName = m_sDir + FILE_SEPARATOR_STR + _T("_rels") + FILE_SEPARATOR_STR + _T(".rels");
CFile oFile;
oFile.CreateFile(fileName.GetPath());
NSFile::CFileBinary oFile;
oFile.CreateFileW(fileName.GetPath());
oFile.WriteStringUTF8(s_Common);
oFile.CloseFile();
}

View File

@ -51,8 +51,8 @@ namespace Writers
{
OOX::CPath filePath = m_sDir + FILE_SEPARATOR_STR + _T("word") +FILE_SEPARATOR_STR + _T("document.xml");
CFile oFile;
oFile.CreateFile(filePath.GetPath());
NSFile::CFileBinary oFile;
oFile.CreateFileW(filePath.GetPath());
oFile.WriteStringUTF8( std::wstring(_T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>")));
oFile.WriteStringUTF8( std::wstring(_T("<w:document 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: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 wp14\">")));

View File

@ -31,6 +31,7 @@
*/
#ifndef FILE_WRITER
#define FILE_WRITER
#include "../../DesktopEditor/common/Path.h"
#include "NumberingWriter.h"
#include "fontTableWriter.h"
@ -45,19 +46,21 @@
#include "webSettingsWriter.h"
#include "DefaultThemeWriter.h"
namespace BinDocxRW {
namespace BinDocxRW
{
class CComments;
}
namespace NSBinPptxRW
{
class CDrawingConverter;
}
namespace Writers
{
class FileWriter
{
public:
NSBinPptxRW::CDrawingConverter* m_pDrawingConverter;
std::wstring m_sThemePath;
bool m_bSaveChartAsImg;
ContentTypesWriter m_oContentTypesWriter;
public:
FontTableWriter m_oFontTableWriter;
DocumentWriter m_oDocumentWriter;
MediaWriter m_oMediaWriter;
@ -71,35 +74,57 @@ namespace Writers
ChartWriter m_oChartWriter;
DocumentRelsWriter m_oDocumentRelsWriter;
WebSettingsWriter m_oWebSettingsWriter;
DefaultThemeWriter m_oDefaultTheme;
int m_nDocPrIndex;
BinDocxRW::CComments* m_pComments;
public:
FileWriter(std::wstring sDirOutput,std::wstring sFontDir, bool bNoFontDir, int nVersion, bool bSaveChartAsImg, NSBinPptxRW::CDrawingConverter* pDrawingConverter, std::wstring sThemePath):
m_pDrawingConverter(pDrawingConverter),m_sThemePath(sThemePath),m_bSaveChartAsImg(bSaveChartAsImg),
m_oContentTypesWriter(sDirOutput), m_oFontTableWriter(sDirOutput, sFontDir, bNoFontDir),
m_oHeaderFooterWriter(sDirOutput, m_oContentTypesWriter),
m_oFootnotesWriter(sDirOutput, m_oContentTypesWriter),
m_oEndnotesWriter(sDirOutput, m_oContentTypesWriter),
m_oMediaWriter(sDirOutput),
m_oStylesWriter(sDirOutput, nVersion),
m_oNumberingWriter(sDirOutput, m_oContentTypesWriter),
m_oDocumentWriter(sDirOutput, m_oHeaderFooterWriter),
m_oSettingWriter(sDirOutput, m_oHeaderFooterWriter),
m_oCommentsWriter(sDirOutput, m_oContentTypesWriter),
m_oChartWriter(sDirOutput, m_oContentTypesWriter),
m_oDocumentRelsWriter(sDirOutput),
m_oWebSettingsWriter(sDirOutput),
DefaultThemeWriter m_oTheme;
NSBinPptxRW::CDrawingConverter* m_pDrawingConverter;
bool m_bSaveChartAsImg;
std::wstring m_sThemePath;
int m_nDocPrIndex;
BinDocxRW::CComments* m_pComments;
FileWriter (std::wstring sDirOutput,std::wstring sFontDir, bool bNoFontDir, int nVersion, bool bSaveChartAsImg, NSBinPptxRW::CDrawingConverter* pDrawingConverter, std::wstring sThemePath)
: m_pDrawingConverter(pDrawingConverter), m_sThemePath(sThemePath), m_bSaveChartAsImg(bSaveChartAsImg),
m_oFontTableWriter (sDirOutput, sFontDir, bNoFontDir),
m_oHeaderFooterWriter (sDirOutput),
m_oFootnotesWriter (sDirOutput),
m_oEndnotesWriter (sDirOutput),
m_oMediaWriter (sDirOutput),
m_oStylesWriter (sDirOutput, nVersion),
m_oNumberingWriter (sDirOutput),
m_oDocumentWriter (sDirOutput, m_oHeaderFooterWriter),
m_oSettingWriter (sDirOutput, m_oHeaderFooterWriter),
m_oCommentsWriter (sDirOutput),
m_oChartWriter (sDirOutput),
m_oDocumentRelsWriter (sDirOutput),
m_oWebSettingsWriter (sDirOutput),
m_nDocPrIndex(0),
m_pComments(NULL)
{
}
public: int getNextDocPr()
{
m_nDocPrIndex++;
return m_nDocPrIndex;
}
int getNextDocPr()
{
m_nDocPrIndex++;
return m_nDocPrIndex;
}
void Write()
{
m_oCommentsWriter.Write();
m_oChartWriter.Write();
m_oStylesWriter.Write();
m_oNumberingWriter.Write();
m_oFontTableWriter.Write();
m_oHeaderFooterWriter.Write();
m_oFootnotesWriter.Write();
m_oEndnotesWriter.Write();
//Setting пишем после HeaderFooter, чтобы заполнить evenAndOddHeaders
m_oSettingWriter.Write();
m_oWebSettingsWriter.Write();
//Document пишем после HeaderFooter, чтобы заполнить sectPr
m_oDocumentWriter.Write();
//Rels и ContentTypes пишем в конце
m_oDocumentRelsWriter.Write();
}
};
}
#endif // #ifndef FILE_WRITER

View File

@ -33,6 +33,7 @@
#define HEADER_FOOTER_WRITER
#include "../../XlsxSerializerCom/Common/Common.h"
#include "../../Common/DocxFormat/Source/Common/SimpleTypes_Word.h"
namespace Writers
{
@ -54,10 +55,10 @@ namespace Writers
{
return m_sFilename.empty();
}
std::wstring m_sFilename;
ContentWriter Header;
std::wstring rId;
SimpleTypes::EHdrFtr eType;
std::wstring m_sFilename;
ContentWriter Header;
std::wstring rId;
SimpleTypes::EHdrFtr eType;
};
static std::wstring g_string_hdr_Start = _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><w:hdr 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: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 wp14\">");
static std::wstring g_string_hdr_End = _T("</w:hdr>");
@ -74,12 +75,11 @@ namespace Writers
class HeaderFooterWriter
{
std::wstring m_sDir;
ContentTypesWriter& m_oContentTypesWriter;
public:
std::vector<HdrFtrItem*> m_aHeaders;
std::vector<HdrFtrItem*> m_aFooters;
public:
HeaderFooterWriter( std::wstring sDir, ContentTypesWriter& oContentTypesWriter) : m_sDir(sDir),m_oContentTypesWriter(oContentTypesWriter)
HeaderFooterWriter( std::wstring sDir) : m_sDir(sDir)
{
}
~HeaderFooterWriter()
@ -109,8 +109,8 @@ namespace Writers
{
OOX::CPath filePath = m_sDir + FILE_SEPARATOR_STR +_T("word") + FILE_SEPARATOR_STR + sFilename;
CFile oFile;
oFile.CreateFile(filePath.GetPath());
NSFile::CFileBinary oFile;
oFile.CreateFileW(filePath.GetPath());
if(bHeader)
oFile.WriteStringUTF8(g_string_hdr_Start);
@ -122,43 +122,33 @@ namespace Writers
else
oFile.WriteStringUTF8(g_string_ftr_End);
oFile.CloseFile();
//Content_Types
m_oContentTypesWriter.AddOverride(L"/word/" + sFilename, L"application/vnd.openxmlformats-officedocument.wordprocessingml." + sHeader + L"+xml");
//Rels
//return m_oDocumentRelsWriter.AddRels(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/") + sHeader, sFilename);
}
};
class FootnotesWriter
{
std::wstring m_sDir;
ContentTypesWriter& m_oContentTypesWriter;
public:
ContentWriter m_oNotesWriter;
FootnotesWriter( std::wstring sDir, ContentTypesWriter& oContentTypesWriter):m_sDir(sDir),m_oContentTypesWriter(oContentTypesWriter)
FootnotesWriter( std::wstring sDir ):m_sDir(sDir)
{
}
void Write()
{
if(!IsEmpty())
{
std::wstring sFilename = getFilename();
if(IsEmpty()) return;
std::wstring filePath = m_sDir + FILE_SEPARATOR_STR + L"word" + FILE_SEPARATOR_STR + sFilename;
std::wstring sFilename = getFilename();
CFile oFile;
oFile.CreateFile(filePath);
oFile.WriteStringUTF8(g_string_footnotes_Start);
oFile.WriteStringUTF8(m_oNotesWriter.m_oContent.GetData());
oFile.WriteStringUTF8(g_string_footnotes_End);
oFile.CloseFile();
std::wstring filePath = m_sDir + FILE_SEPARATOR_STR + L"word" + FILE_SEPARATOR_STR + sFilename;
//ContentType
m_oContentTypesWriter.AddOverride(L"/word/" + sFilename, L"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml");
}
NSFile::CFileBinary oFile;
oFile.CreateFileW (filePath);
oFile.WriteStringUTF8 (g_string_footnotes_Start);
oFile.WriteStringUTF8 (m_oNotesWriter.m_oContent.GetData());
oFile.WriteStringUTF8 (g_string_footnotes_End);
oFile.CloseFile();
}
std::wstring getFilename()
std::wstring getFilename()
{
return _T("footnotes.xml");
}
@ -169,33 +159,29 @@ namespace Writers
};
class EndnotesWriter
{
std::wstring m_sDir;
ContentTypesWriter& m_oContentTypesWriter;
std::wstring m_sDir;
public:
ContentWriter m_oNotesWriter;
EndnotesWriter( std::wstring sDir, ContentTypesWriter& oContentTypesWriter):m_sDir(sDir),m_oContentTypesWriter(oContentTypesWriter)
EndnotesWriter( std::wstring sDir ) : m_sDir(sDir)
{
}
void Write()
{
if(!IsEmpty())
{
std::wstring sFilename = getFilename();
if(IsEmpty()) return;
std::wstring filePath = m_sDir + FILE_SEPARATOR_STR +_T("word") + FILE_SEPARATOR_STR + sFilename;
std::wstring sFilename = getFilename();
CFile oFile;
oFile.CreateFile(filePath);
oFile.WriteStringUTF8(g_string_endnotes_Start);
oFile.WriteStringUTF8(m_oNotesWriter.m_oContent.GetData());
oFile.WriteStringUTF8(g_string_endnotes_End);
oFile.CloseFile();
std::wstring filePath = m_sDir + FILE_SEPARATOR_STR +_T("word") + FILE_SEPARATOR_STR + sFilename;
//ContentType
m_oContentTypesWriter.AddOverride(_T("/word/") + sFilename, _T("application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml"));
}
NSFile::CFileBinary oFile;
oFile.CreateFileW(filePath);
oFile.WriteStringUTF8(g_string_endnotes_Start);
oFile.WriteStringUTF8(m_oNotesWriter.m_oContent.GetData());
oFile.WriteStringUTF8(g_string_endnotes_End);
oFile.CloseFile();
}
std::wstring getFilename()
std::wstring getFilename()
{
return _T("endnotes.xml");
}

View File

@ -32,7 +32,6 @@
#ifndef NUMBERING_WRITER
#define NUMBERING_WRITER
#include "ContentTypesWriter.h"
#include "DocumentRelsWriter.h"
namespace Writers
@ -43,13 +42,12 @@ namespace Writers
class NumberingWriter
{
XmlUtils::CStringWriter m_oWriter;
std::wstring m_sDir;
ContentTypesWriter& m_oContentTypesWriter;
std::wstring m_sDir;
public:
XmlUtils::CStringWriter m_oANum;
XmlUtils::CStringWriter m_oNumList;
public:
NumberingWriter( std::wstring sDir, ContentTypesWriter& oContentTypesWriter):m_sDir(sDir),m_oContentTypesWriter(oContentTypesWriter)
NumberingWriter( std::wstring sDir) : m_sDir(sDir)
{
}
bool IsEmpty()
@ -58,26 +56,20 @@ namespace Writers
}
void Write()
{
if(false == IsEmpty())
{
m_oWriter.WriteString(g_string_n_Start);
m_oWriter.Write(m_oANum);
m_oWriter.Write(m_oNumList);
m_oWriter.WriteString(g_string_n_End);
if(IsEmpty()) return;
OOX::CPath filePath = m_sDir + FILE_SEPARATOR_STR +_T("word") + FILE_SEPARATOR_STR + _T("numbering.xml");
m_oWriter.WriteString(g_string_n_Start);
m_oWriter.Write(m_oANum);
m_oWriter.Write(m_oNumList);
m_oWriter.WriteString(g_string_n_End);
CFile oFile;
oFile.CreateFile(filePath.GetPath());
OOX::CPath filePath = m_sDir + FILE_SEPARATOR_STR +_T("word") + FILE_SEPARATOR_STR + _T("numbering.xml");
oFile.WriteStringUTF8(m_oWriter.GetData());
oFile.CloseFile();
NSFile::CFileBinary oFile;
oFile.CreateFileW(filePath.GetPath());
//ContentType
m_oContentTypesWriter.AddOverride( std::wstring(_T("/word/numbering.xml")), std::wstring(_T("application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml")));
//Rels
//m_oDocumentRelsWriter.AddRels(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering"), _T("numbering.xml"));
}
oFile.WriteStringUTF8(m_oWriter.GetData());
oFile.CloseFile();
}
};
}

View File

@ -34,6 +34,8 @@
#include "../../Common/DocxFormat/Source/XML/Utils.h"
#include <boost/algorithm/string.hpp>
namespace BinDocxRW {
class SectPr
@ -339,9 +341,9 @@ public:
if(ThemeColor.bColor)
sShd += L" w:themeFill=\"" + ThemeColor.ToStringColor() + L"\"";
if(ThemeColor.bTint)
sShd += L" w:themeFillTint=\"" + ThemeColor.ToStringColor() + L"\"";
sShd += L" w:themeFillTint=\"" + ThemeColor.ToStringTint() + L"\"";
if(ThemeColor.bShade)
sShd += L" w:themeFillShade=\"" + ThemeColor.ToStringColor() + L"\"";
sShd += L" w:themeFillShade=\"" + ThemeColor.ToStringShade() + L"\"";
}
sShd += L"/>";
}
@ -876,7 +878,7 @@ public:
pCStringWriter->WriteString(CellPr);
pCStringWriter->WriteString(L"</w:tcPr>");
}
for(int i = 0, length = TblStylePr.size(); i < length; ++i)
for(int i = 0, length = (int)TblStylePr.size(); i < length; ++i)
{
pCStringWriter->WriteString(TblStylePr[i]);
}
@ -1241,7 +1243,7 @@ public:
}
~docLvl()
{
for(int i = 0,length = Text.size(); i < length; i++)
for(int i = 0,length = (int)Text.size(); i < length; i++)
{
delete Text[i];
}
@ -1297,7 +1299,7 @@ public:
if(bText)
{
std::wstring sText;
for(int i = 0, length = Text.size(); i < length; ++i)
for(int i = 0, length = (int)Text.size(); i < length; ++i)
{
docLvlText* item = Text[i];
if(item->bText)
@ -1360,7 +1362,7 @@ public:
}
~docANum()
{
for(int i = 0, length = Lvls.size(); i < length; i++)
for(int i = 0, length = (int)Lvls.size(); i < length; i++)
{
delete Lvls[i];
}
@ -1380,7 +1382,7 @@ public:
std::wstring sCorrectNumStyleLink = XmlUtils::EncodeXmlString(NumStyleLink);
oWriterANum.WriteString(L"<w:numStyleLink w:val=\"" + sCorrectNumStyleLink + L"\"/>");
}
for(int i = 0, length = Lvls.size(); i < length; ++i)
for(int i = 0, length = (int)Lvls.size(); i < length; ++i)
{
Lvls[i]->Write(oWriterANum, i);
}
@ -1453,7 +1455,8 @@ public:
std::vector<std::wstring> aItems;
std::wstring sCurItem;
bool bDQuot = false;
for(int i = 0, length = fld.length(); i < length; ++i)
for(int i = 0, length = (int)fld.length(); i < length; ++i)
{
wchar_t sCurLetter = fld[i];
if('\"' == sCurLetter)
@ -1476,7 +1479,8 @@ public:
}
if(sCurItem.length() > 0)
aItems.push_back(sCurItem);
for(int i = 0, length = aItems.size(); i < length; ++i)
for(int i = 0, length = (int)aItems.size(); i < length; ++i)
{
std::wstring item = aItems[i];
if(bNextLink)
@ -1500,7 +1504,7 @@ public:
res = new WriteHyperlink();
boost::algorithm::trim(sLink);
int nAnchorIndex = sLink.find(L"#");
int nAnchorIndex = (int)sLink.find(L"#");
if(-1 != nAnchorIndex)
{
res->href = sLink.substr(0, nAnchorIndex);
@ -1589,7 +1593,7 @@ public:
}
~CComment()
{
for(int i = 0, length = replies.size(); i < length; ++i)
for(size_t i = 0; i <replies.size(); ++i)
{
delete replies[i];
}
@ -1597,32 +1601,37 @@ public:
}
int getCount()
{
return replies.size() + 1;
return (int)replies.size() + 1;
}
void setFormatStart(int IdFormatStart)
{
bIdFormat = true;
IdFormat = IdFormatStart;
for(int i = 0, length = replies.size(); i < length; ++i)
for(size_t i = 0; i < replies.size(); ++i)
{
CComment* pComment = replies[i];
CComment* pComment = replies[i];
pComment->bIdFormat = true;
pComment->IdFormat = IdFormatStart + i + 1;
pComment->IdFormat = (int)(IdFormatStart + i + 1);
}
}
std::wstring writeRef(const std::wstring& sBefore, const std::wstring& sRef, const std::wstring& sAfter)
{
std::wstring sRes;
sRes += (writeRef(this, sBefore, sRef, sAfter));
for(int i = 0, length = replies.size(); i < length; ++i)
for(size_t i = 0; i< replies.size(); ++i)
{
sRes += (writeRef(replies[i], sBefore, sRef, sAfter));
}
return sRes;
}
std::wstring writeTemplates(funcArg fReadFunction)
{
std::wstring sRes;
sRes += (fReadFunction(this));
for(int i = 0, length = replies.size(); i < length; ++i)
for(size_t i = 0; i < replies.size(); ++i)
sRes += (fReadFunction(replies[i]));
return sRes;
}
@ -1708,7 +1717,7 @@ public:
bool bFirst = true;
int nPrevIndex = 0;
for(int i = 0, length = sText.length(); i < length; i++)
for(size_t i = 0; i < sText.length(); i++)
{
wchar_t cToken = sText[i];
if('\n' == cToken)
@ -1717,7 +1726,7 @@ public:
nPrevIndex = i + 1;
}
}
writeContentWritePart(pComment, sText, nPrevIndex, sText.length(), bFirst, sRes);
writeContentWritePart(pComment, sText, nPrevIndex, (int)sText.length(), bFirst, sRes);
}
sRes += L"</w:comment>";
return sRes;
@ -1736,7 +1745,7 @@ w15:paraIdParent=\"" + pComment->m_sParaIdParent + L"\" w15:done=\"" + sDone + L
else
sRes += L"<w15:commentEx w15:paraId=\"" + pComment->m_sParaId + L"\" w15:done=\"" + sDone + L"\"/>";
//расставляем paraIdParent
for(int i = 0, length = pComment->replies.size(); i < length; i++)
for(size_t i = 0; i < pComment->replies.size(); i++)
pComment->replies[i]->m_sParaIdParent = pComment->m_sParaId;
}
return sRes;
@ -1782,7 +1791,7 @@ public:
{
m_mapComments[pComment->IdOpen] = pComment;
addAuthor(pComment);
for(int i = 0, length = pComment->replies.size(); i < length; i++)
for(size_t i = 0; i < pComment->replies.size(); i++)
addAuthor(pComment->replies[i]);
}
}
@ -1866,7 +1875,7 @@ public:
}
~CDrawingPropertyWrap()
{
for(int i = 0, length = Points.size(); i < length; ++i)
for(size_t i = 0; i < Points.size(); ++i)
delete Points[i];
Points.clear();
}
@ -1874,7 +1883,12 @@ public:
class CDrawingProperty
{
public:
long DataPos;
bool bObject;
std::wstring sObjectProgram;
long nObjectId;
BYTE nObjectType;
long DataPos;
long DataLength;
BYTE Type;
bool BehindDoc;
@ -1907,8 +1921,8 @@ public:
int m_nDocPr;
std::wstring sGraphicFramePr;
std::wstring sDocPr;
CDrawingPropertyWrap DrawingPropertyWrap;
CDrawingPropertyWrap DrawingPropertyWrap;
bool bDataPos;
bool bDataLength;
@ -1942,6 +1956,10 @@ public:
CDrawingProperty(int nDocPr)
{
m_nDocPr = nDocPr;
bObject = false;
nObjectType = 0;
nObjectId = 0;
bDataPos = false;
bDataLength = false;
bType = false;
@ -2055,7 +2073,7 @@ distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\"><wp:extent cx=\"" + std::to_wstr
int nSimplePos = 0;
if(bBSimplePos && BSimplePos)
nSimplePos = 1;
int nRelativeHeight = 0;
unsigned long nRelativeHeight = 0;
if(bRelativeHeight)
nRelativeHeight = RelativeHeight;
int nBehindDoc = 0;
@ -2211,7 +2229,7 @@ distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\"><wp:extent cx=\"" + std::to_wstr
sXml += L"<wp:start x=\"" + std::to_wstring(emuX) + L"\" y=\"" + std::to_wstring(emuY) + L"\"/>";
}
for(int i = 0, length = DrawingPropertyWrap.Points.size(); i < length; ++i)
for(size_t i = 0; i < DrawingPropertyWrap.Points.size(); ++i)
{
CDrawingPropertyWrapPoint* pWrapPoint = DrawingPropertyWrap.Points[i];
if(pWrapPoint->bX && pWrapPoint->bY)

View File

@ -0,0 +1,113 @@
/*
* (c) Copyright Ascensio System SIA 2010-2017
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
#include "Readers.h"
namespace BinDocxRW {
Binary_HdrFtrTableReader::Binary_HdrFtrTableReader(NSBinPptxRW::CBinaryFileReader& poBufferedStream, Writers::FileWriter& oFileWriter, CComments* pComments):Binary_CommonReader(poBufferedStream),m_oFileWriter(oFileWriter),m_oHeaderFooterWriter(oFileWriter.m_oHeaderFooterWriter),m_pComments(pComments)
{
}
int Binary_HdrFtrTableReader::Read()
{
return ReadTable(&Binary_HdrFtrTableReader::ReadHdrFtrContent, this);
}
int Binary_HdrFtrTableReader::ReadHdrFtrContent(BYTE type, long length, void* poResult)
{
int res = c_oSerConstants::ReadOk;
if ( c_oSerHdrFtrTypes::Header == type || c_oSerHdrFtrTypes::Footer == type )
{
nCurType = type;
res = Read1(length, &Binary_HdrFtrTableReader::ReadHdrFtrFEO, this, poResult);
}
else
res = c_oSerConstants::ReadUnknown;
return res;
}
int Binary_HdrFtrTableReader::ReadHdrFtrFEO(BYTE type, long length, void* poResult)
{
int res = c_oSerConstants::ReadOk;
if ( c_oSerHdrFtrTypes::HdrFtr_First == type || c_oSerHdrFtrTypes::HdrFtr_Even == type || c_oSerHdrFtrTypes::HdrFtr_Odd == type )
{
nCurHeaderType = type;
res = Read1(length, &Binary_HdrFtrTableReader::ReadHdrFtrItem, this, poResult);
}
else
res = c_oSerConstants::ReadUnknown;
return res;
}
int Binary_HdrFtrTableReader::ReadHdrFtrItem(BYTE type, long length, void* poResult)
{
int res = c_oSerConstants::ReadOk;
if ( c_oSerHdrFtrTypes::HdrFtr_Content == type )
{
Writers::HdrFtrItem* poHdrFtrItem = NULL;
switch(nCurHeaderType)
{
case c_oSerHdrFtrTypes::HdrFtr_First:poHdrFtrItem = new Writers::HdrFtrItem(SimpleTypes::hdrftrFirst);break;
case c_oSerHdrFtrTypes::HdrFtr_Even:poHdrFtrItem = new Writers::HdrFtrItem(SimpleTypes::hdrftrEven);break;
case c_oSerHdrFtrTypes::HdrFtr_Odd:poHdrFtrItem = new Writers::HdrFtrItem(SimpleTypes::hdrftrDefault);break;
}
if(NULL != poHdrFtrItem)
{
if(nCurType == c_oSerHdrFtrTypes::Header)
{
m_oHeaderFooterWriter.m_aHeaders.push_back(poHdrFtrItem);
poHdrFtrItem->m_sFilename = L"header" + std::to_wstring((int)m_oHeaderFooterWriter.m_aHeaders.size()) + L".xml";
}
else
{
m_oHeaderFooterWriter.m_aFooters.push_back(poHdrFtrItem);
poHdrFtrItem->m_sFilename = L"footer" + std::to_wstring((int)m_oHeaderFooterWriter.m_aFooters.size()) + L".xml";
}
m_oFileWriter.m_pDrawingConverter->SetDstContentRels();
Binary_DocumentTableReader oBinary_DocumentTableReader(m_oBufferedStream, m_oFileWriter, poHdrFtrItem->Header, m_pComments);
res = Read1(length, &Binary_HdrFtrTableReader::ReadHdrFtrItemContent, this, &oBinary_DocumentTableReader);
OOX::CPath fileRelsPath = m_oFileWriter.m_oDocumentWriter.m_sDir + FILE_SEPARATOR_STR + _T("word") +
FILE_SEPARATOR_STR + _T("_rels")+
FILE_SEPARATOR_STR + poHdrFtrItem->m_sFilename + _T(".rels");
m_oFileWriter.m_pDrawingConverter->SaveDstContentRels(fileRelsPath.GetPath());
}
}
else
res = c_oSerConstants::ReadUnknown;
return res;
}
int Binary_HdrFtrTableReader::ReadHdrFtrItemContent(BYTE type, long length, void* poResult)
{
Binary_DocumentTableReader* pBinary_DocumentTableReader = static_cast<Binary_DocumentTableReader*>(poResult);
return pBinary_DocumentTableReader->ReadDocumentContent(type, length, NULL);
}
}

View File

@ -41,6 +41,7 @@
#include "../DocWrapper/XlsxSerializer.h"
#include "../../DesktopEditor/common/ASCVariant.h"
#include "../../OfficeUtils/src/OfficeUtils.h"
namespace BinDocxRW {
@ -254,10 +255,11 @@ private:
};
class Binary_HdrFtrTableReader : public Binary_CommonReader<Binary_HdrFtrTableReader>
{
Writers::FileWriter& m_oFileWriter;
int nCurType;
int nCurHeaderType;
CComments* m_pComments;
Writers::FileWriter& m_oFileWriter;
CComments* m_pComments;
int nCurType;
int nCurHeaderType;
public:
Writers::HeaderFooterWriter& m_oHeaderFooterWriter;
public:
@ -581,13 +583,14 @@ class Binary_pPrReader : public Binary_CommonReader<Binary_pPrReader>
private:
Writers::FontTableWriter& m_oFontTableWriter;
public:
Binary_CommonReader2 oBinary_CommonReader2;
Binary_rPrReader oBinary_rPrReader;
Binary_HdrFtrTableReader oBinary_HdrFtrTableReader;
Writers::FileWriter& m_oFileWriter;
bool bDoNotWriteNullProp;
long m_nCurNumId;
long m_nCurLvl;
Binary_CommonReader2 oBinary_CommonReader2;
Binary_rPrReader oBinary_rPrReader;
Binary_HdrFtrTableReader oBinary_HdrFtrTableReader;
Writers::FileWriter& m_oFileWriter;
bool bDoNotWriteNullProp;
long m_nCurNumId;
long m_nCurLvl;
Binary_pPrReader(NSBinPptxRW::CBinaryFileReader& poBufferedStream, Writers::FileWriter& oFileWriter):
m_oFontTableWriter(oFileWriter.m_oFontTableWriter), Binary_CommonReader(poBufferedStream), oBinary_CommonReader2(poBufferedStream), oBinary_rPrReader(poBufferedStream, oFileWriter), oBinary_HdrFtrTableReader(poBufferedStream, oFileWriter, oFileWriter.m_pComments), m_oFileWriter(oFileWriter)
@ -760,11 +763,11 @@ public:
{
Tabs oTabs;
res = Read2(length, &Binary_pPrReader::ReadTabs, this, &oTabs);
int nLen = oTabs.m_aTabs.size();
size_t nLen = oTabs.m_aTabs.size();
if(nLen > 0)
{
pCStringWriter->WriteString(std::wstring(_T("<w:tabs>")));
for(int i = 0; i < nLen; ++i)
for(size_t i = 0; i < nLen; ++i)
{
Tab& oTab = oTabs.m_aTabs[i];
long nTab = SerializeCommon::Round( g_dKoef_mm_to_twips * oTab.Pos);
@ -1386,7 +1389,7 @@ public:
if( c_oSerProp_secPrType::hdrftrelem == type )
{
int nHdrFtrIndex = m_oBufferedStream.GetLong();
if(nHdrFtrIndex >= 0 && nHdrFtrIndex <= m_oFileWriter.m_oHeaderFooterWriter.m_aHeaders.size())
if(nHdrFtrIndex >= 0 && nHdrFtrIndex <= (int)m_oFileWriter.m_oHeaderFooterWriter.m_aHeaders.size())
{
Writers::HdrFtrItem* pHdrFtrItem = m_oFileWriter.m_oHeaderFooterWriter.m_aHeaders[nHdrFtrIndex];
pHdrFtrItem->m_sFilename;
@ -1411,7 +1414,7 @@ public:
if( c_oSerProp_secPrType::hdrftrelem == type )
{
int nHdrFtrIndex = m_oBufferedStream.GetLong();
if(nHdrFtrIndex >= 0 && nHdrFtrIndex <= oBinary_HdrFtrTableReader.m_oHeaderFooterWriter.m_aFooters.size())
if(nHdrFtrIndex >= 0 && nHdrFtrIndex <= (int)oBinary_HdrFtrTableReader.m_oHeaderFooterWriter.m_aFooters.size())
{
Writers::HdrFtrItem* pHdrFtrItem = oBinary_HdrFtrTableReader.m_oHeaderFooterWriter.m_aFooters[nHdrFtrIndex];
pHdrFtrItem->m_sFilename;
@ -1979,7 +1982,7 @@ public:
if(true == orowPrAfterBefore.bGridAfter && orowPrAfterBefore.nGridAfter > 0 && false == orowPrAfterBefore.oAfterWidth.bW)
{
//ищем по tblGrid
long nGridLength = m_aCurTblGrid.size();
long nGridLength = (long)m_aCurTblGrid.size();
if(orowPrAfterBefore.nGridAfter < nGridLength)
{
double nSumW = 0;
@ -2396,14 +2399,14 @@ public:
int Read()
{
int res = ReadTable(&Binary_NumberingTableReader::ReadNumberingContent, this);
for(int i = 0, length = m_aDocANums.size(); i < length; ++i)
for(size_t i = 0; i < m_aDocANums.size(); ++i)
{
docANum* pdocANum = m_aDocANums[i];
pdocANum->Write(oNumberingWriters.m_oANum);
delete m_aDocANums[i];
}
m_aDocANums.clear();
for(int i = 0, length = m_aDocNums.size(); i < length; ++i)
for(size_t i = 0; i < m_aDocNums.size(); ++i)
{
m_aDocNums[i]->Write(oNumberingWriters.m_oNumList);
delete m_aDocNums[i];
@ -2605,11 +2608,12 @@ public:
};
class BinaryStyleTableReader : public Binary_CommonReader<BinaryStyleTableReader>
{
Binary_pPrReader oBinary_pPrReader;
Binary_rPrReader oBinary_rPrReader;
Binary_tblPrReader oBinary_tblPrReader;
Writers::StylesWriter& m_oStylesWriter;
Writers::FontTableWriter& m_oFontTableWriter;
Binary_pPrReader oBinary_pPrReader;
Binary_rPrReader oBinary_rPrReader;
Binary_tblPrReader oBinary_tblPrReader;
Writers::StylesWriter& m_oStylesWriter;
Writers::FontTableWriter& m_oFontTableWriter;
public:
BinaryStyleTableReader(NSBinPptxRW::CBinaryFileReader& poBufferedStream, Writers::FileWriter& oFileWriter) :Binary_CommonReader(poBufferedStream), m_oStylesWriter(oFileWriter.m_oStylesWriter), m_oFontTableWriter(oFileWriter.m_oFontTableWriter), oBinary_pPrReader(poBufferedStream, oFileWriter), oBinary_rPrReader(poBufferedStream, oFileWriter), oBinary_tblPrReader(poBufferedStream, oFileWriter)
{
@ -2895,10 +2899,11 @@ public:
}
else if(c_oSerOtherTableTypes::DocxTheme == type)
{
//переписываем взятую из ресурсов тему.
long nCurPos = m_oBufferedStream.GetPos();
m_oFileWriter.m_pDrawingConverter->SaveThemeXml(nCurPos, length, m_oFileWriter.m_sThemePath);
m_oBufferedStream.Seek(nCurPos + length);
smart_ptr<PPTX::Theme> pTheme = new PPTX::Theme();
pTheme->fromPPTY(&m_oBufferedStream);
NSBinPptxRW::CXmlWriter xmlWriter;
pTheme->toXmlWriter(&xmlWriter);
m_oFileWriter.m_oTheme.m_sContent = xmlWriter.GetXmlString();
}
else
res = c_oSerConstants::ReadUnknown;
@ -3366,7 +3371,7 @@ public:
int res = c_oSerConstants::ReadOk;
if ( c_oSer_OMathBottomNodesValType::Val == type )
{
LONG lVal = Mm_To_Dx(m_oBufferedStream.GetDouble());
LONG lVal = (LONG)Mm_To_Dx(m_oBufferedStream.GetDouble());
m_oFileWriter.m_oSettingWriter.AddSetting(L"<m:interSp m:val=\"" + std::to_wstring(lVal) + L"\"/>");
}
@ -3398,7 +3403,7 @@ public:
int res = c_oSerConstants::ReadOk;
if ( c_oSer_OMathBottomNodesValType::Val == type )
{
LONG lVal = Mm_To_Dx(m_oBufferedStream.GetDouble());
LONG lVal = (LONG)Mm_To_Dx(m_oBufferedStream.GetDouble());
m_oFileWriter.m_oSettingWriter.AddSetting(L"<m:intraSp m:val=\"" + std::to_wstring(lVal) + L"\"/>");
}
@ -3411,7 +3416,7 @@ public:
int res = c_oSerConstants::ReadOk;
if ( c_oSer_OMathBottomNodesValType::Val == type )
{
LONG lVal = Mm_To_Dx(m_oBufferedStream.GetDouble());
LONG lVal = (LONG)Mm_To_Dx(m_oBufferedStream.GetDouble());
m_oFileWriter.m_oSettingWriter.AddSetting(L"<m:lMargin m:val=\"" + std::to_wstring(lVal) + L"\"/>");
}
@ -3462,7 +3467,7 @@ public:
int res = c_oSerConstants::ReadOk;
if ( c_oSer_OMathBottomNodesValType::Val == type )
{
LONG lVal = Mm_To_Dx(m_oBufferedStream.GetDouble());
LONG lVal = (LONG)Mm_To_Dx(m_oBufferedStream.GetDouble());
m_oFileWriter.m_oSettingWriter.AddSetting(L"<m:postSp m:val=\"" + std::to_wstring(lVal) + L"\"/>");
}
@ -3475,7 +3480,7 @@ public:
int res = c_oSerConstants::ReadOk;
if ( c_oSer_OMathBottomNodesValType::Val == type )
{
LONG lVal = Mm_To_Dx(m_oBufferedStream.GetDouble());
LONG lVal = (LONG)Mm_To_Dx(m_oBufferedStream.GetDouble());
m_oFileWriter.m_oSettingWriter.AddSetting(L"<m:preSp m:val=\"" + std::to_wstring(lVal)+ L"\"/>");
}
@ -3488,7 +3493,7 @@ public:
int res = c_oSerConstants::ReadOk;
if ( c_oSer_OMathBottomNodesValType::Val == type )
{
LONG lVal = Mm_To_Dx(m_oBufferedStream.GetDouble());
LONG lVal = (LONG)Mm_To_Dx(m_oBufferedStream.GetDouble());
m_oFileWriter.m_oSettingWriter.AddSetting(L"<m:rMargin m:val=\"" + std::to_wstring(lVal) + L"\"/>");
}
@ -3518,7 +3523,7 @@ public:
int res = c_oSerConstants::ReadOk;
if ( c_oSer_OMathBottomNodesValType::Val == type )
{
LONG lVal = Mm_To_Dx(m_oBufferedStream.GetDouble());
LONG lVal = (LONG)Mm_To_Dx(m_oBufferedStream.GetDouble());
m_oFileWriter.m_oSettingWriter.AddSetting(L"<m:wrapIndent m:val=\"" + std::to_wstring(lVal) + L"\"/>");
}
@ -6304,6 +6309,8 @@ public:
}
int ReadObject(BYTE type, long length, void* poResult)
{
CDrawingProperty oCDrawingProperty(m_oFileWriter.getNextDocPr());
int res = c_oSerConstants::ReadOk;
if( c_oSerParType::OMath == type )
{
@ -6313,7 +6320,6 @@ public:
}
else if(c_oSerRunType::pptxDrawing == type)
{
CDrawingProperty oCDrawingProperty(m_oFileWriter.getNextDocPr());
res = Read2(length, &Binary_DocumentTableReader::ReadPptxDrawing, this, &oCDrawingProperty);
if(oCDrawingProperty.bDataPos && oCDrawingProperty.bDataLength)
@ -6526,7 +6532,9 @@ public:
}
int Read_Background(BYTE type, long length, void* poResult)
{
int res = c_oSerConstants::ReadOk;
m_oFileWriter.m_oSettingWriter.AddSetting(L"<w:displayBackgroundShape/>");
int res = c_oSerConstants::ReadOk;
Background* pBackground = static_cast<Background*>(poResult);
if( c_oSerBackgroundType::Color == type )
@ -6571,7 +6579,7 @@ public:
pDrawingProperty->bDataLength = true;
pDrawingProperty->DataPos = m_oBufferedStream.GetPos();
pDrawingProperty->DataLength = length;
//сейчас пропуская, потому что перед чтение этого поля надо собрать остальные данные
//сейчас пропуская, потому что перед чтение этого поля надо собрать остальные данные
res = c_oSerConstants::ReadUnknown;
}
else if ( c_oSerImageType2::Chart2 == type )
@ -6587,20 +6595,18 @@ public:
OOX::CPath pathChartsWorksheetDir = m_oFileWriter.m_oChartWriter.m_sDir + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR +_T("embeddings");
OOX::CSystemUtility::CreateDirectories(pathChartsWorksheetDir.GetPath());
m_oFileWriter.m_pDrawingConverter->SetDstContentRels();
int nativeDocumentType = m_oFileWriter.m_pDrawingConverter->m_pImageManager->m_nDocumentType;
std::wstring sThemeDir;
int nIndex = m_oFileWriter.m_sThemePath.rfind(FILE_SEPARATOR_CHAR);
if(-1 != nIndex)
sThemeDir = m_oFileWriter.m_sThemePath.substr(0, nIndex);
m_oFileWriter.m_pDrawingConverter->m_pImageManager->m_nDocumentType = XMLWRITER_DOC_TYPE_XLSX;
m_oFileWriter.m_pDrawingConverter->SetDstContentRels();
BinXlsxRW::SaveParams oSaveParams(sThemeDir);
BinXlsxRW::SaveParams oSaveParams(m_oFileWriter.m_sThemePath, m_oFileWriter.m_pDrawingConverter->GetContentTypes());
BinXlsxRW::BinaryChartReader oBinaryChartReader(m_oBufferedStream, oSaveParams, m_oFileWriter.m_pDrawingConverter);
OOX::Spreadsheet::CChartSpace* pChartSpace = new OOX::Spreadsheet::CChartSpace();
oBinaryChartReader.ReadCT_ChartSpace(length, &pChartSpace->m_oChartSpace);
//save xlsx
//save xlsx
std::wstring sXlsxFilename = L"Microsoft_Excel_Worksheet" + std::to_wstring(m_oFileWriter.m_oChartWriter.getChartCount() + 1) + L".xlsx";
std::wstring sXlsxPath = pathChartsWorksheetDir.GetPath() + FILE_SEPARATOR_STR + sXlsxFilename;
BinXlsxRW::CXlsxSerializer oXlsxSerializer;
@ -6608,7 +6614,7 @@ public:
std::wstring sChartsWorksheetRelsName = L"../embeddings/" + sXlsxFilename;
long rIdXlsx;
std::wstring bstrChartsWorksheetRelType = OOX::Spreadsheet::FileTypes::ChartsWorksheet.RelationType();
std::wstring bstrChartsWorksheetRelType = OOX::FileTypes::MicrosoftOfficeExcelWorksheet.RelationType();
m_oFileWriter.m_pDrawingConverter->WriteRels(bstrChartsWorksheetRelType, sChartsWorksheetRelsName, std::wstring(), &rIdXlsx);
pChartSpace->m_oChartSpace.m_externalData = new OOX::Spreadsheet::CT_ExternalData();
@ -6618,7 +6624,7 @@ public:
pChartSpace->m_oChartSpace.m_externalData->m_autoUpdate = new OOX::Spreadsheet::CT_Boolean();
pChartSpace->m_oChartSpace.m_externalData->m_autoUpdate->m_val = new bool(false);
//save chart.xml
//save chart.xml
NSStringUtils::CStringBuilder sw;
pChartSpace->toXML(sw);
@ -6628,16 +6634,19 @@ public:
std::wstring sContent = sw.GetData();
m_oFileWriter.m_oChartWriter.AddChart(sContent, sRelsName, sFilename, nChartIndex);
m_oFileWriter.m_oContentTypesWriter.AddOverrideRaw(oSaveParams.sAdditionalContentTypes);
OOX::CPath pathChartsRels = pathChartsRelsDir.GetPath() + FILE_SEPARATOR_STR + sFilename + L".rels";
m_oFileWriter.m_pDrawingConverter->SaveDstContentRels(pathChartsRels.GetPath());
long rIdChart;
std::wstring bstrChartRelType = OOX::Spreadsheet::FileTypes::Charts.RelationType();
m_oFileWriter.m_pDrawingConverter->WriteRels(bstrChartRelType, sRelsName, std::wstring(), &rIdChart);
std::wstring bstrChartRelType = OOX::FileTypes::Chart.RelationType();
m_oFileWriter.m_pDrawingConverter->WriteRels(bstrChartRelType, sRelsName, std::wstring(), &rIdChart);
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.drawingml.chart+xml", L"/word/charts", sFilename);
pDrawingProperty->sChartRels = L"rId" + std::to_wstring( rIdChart);
m_oFileWriter.m_pDrawingConverter->m_pImageManager->m_nDocumentType = nativeDocumentType;
}
else
res = c_oSerConstants::ReadUnknown;
@ -6650,7 +6659,7 @@ public:
pDrawingProperty->bDataLength = true;
pDrawingProperty->DataPos = m_oBufferedStream.GetPos();
pDrawingProperty->DataLength = length;
//сейчас пропуская, потому что перед чтение этого поля надо собрать остальные данные
//сейчас пропуская, потому что перед чтение этого поля надо собрать остальные данные
}
res = c_oSerConstants::ReadUnknown;
}
@ -6687,7 +6696,7 @@ public:
else if ( c_oSerImageType2::RelativeHeight == type )
{
pDrawingProperty->bRelativeHeight = true;
pDrawingProperty->RelativeHeight = m_oBufferedStream.GetLong();
pDrawingProperty->RelativeHeight = m_oBufferedStream.GetULong();
}
else if ( c_oSerImageType2::BSimplePos == type )
{
@ -6762,56 +6771,118 @@ public:
}
else if ( c_oSerImageType2::GraphicFramePr == type )
{
OOX::Drawing::CGraphicalObjectFrameLocking* pLocking = new OOX::Drawing::CGraphicalObjectFrameLocking();
res = Read2(length, &Binary_DocumentTableReader::ReadNvGraphicFramePr, this, pLocking);
OOX::Drawing::CNonVisualGraphicFrameProperties oGraphicFramePr;
oGraphicFramePr.m_oGraphicFrameLocks.reset(pLocking);
PPTX::Logic::CNvGraphicFramePr oGraphicFramePr(L"wp");
res = Read2(length, &Binary_DocumentTableReader::ReadCNvGraphicFramePr, this, &oGraphicFramePr);
pDrawingProperty->sGraphicFramePr = oGraphicFramePr.toXML();
}
else if ( c_oSerImageType2::DocPr == type )
{
OOX::Drawing::CNonVisualDrawingProps pNonVisualDrawingProps;
pNonVisualDrawingProps.m_eType = OOX::et_wp_docPr;
PPTX::Logic::CNvPr pNonVisualDrawingProps(L"wp");
res = Read1(length, &Binary_DocumentTableReader::ReadDocPr, this, &pNonVisualDrawingProps);
pDrawingProperty->sDocPr = pNonVisualDrawingProps.toXML();
pDrawingProperty->sDocPr = pNonVisualDrawingProps.toXML2(L"wp:docPr");
}
else
res = c_oSerConstants::ReadUnknown;
return res;
}
int ReadNvGraphicFramePr(BYTE type, long length, void* poResult)
int ReadEmbedded(BYTE type, long length, void* poResult)
{
int res = c_oSerConstants::ReadOk;
OOX::Drawing::CGraphicalObjectFrameLocking* pLocking = static_cast<OOX::Drawing::CGraphicalObjectFrameLocking*>(poResult);
CDrawingProperty* pDrawingProperty = static_cast<CDrawingProperty*>(poResult);
if ( c_oSerEmbedded::Type == type )
{
pDrawingProperty->nObjectType = m_oBufferedStream.GetUChar();
}
else if ( c_oSerEmbedded::Program == type )
{
pDrawingProperty->sObjectProgram = m_oBufferedStream.GetString2();
}
else if ( c_oSerEmbedded::Data == type )
{
pDrawingProperty->bObject = true;
long pos = m_oBufferedStream.GetPos();
if (pDrawingProperty->nObjectType == 1)
{
}
else if (pDrawingProperty->nObjectType == 2)
{
BinXlsxRW::CXlsxSerializer oXlsxSerializer;
oXlsxSerializer.setDrawingConverter(m_oFileWriter.m_pDrawingConverter);
std::wstring strDstEmbedded = m_oBufferedStream.m_pRels->m_pManager->GetDstMedia();
int nPos = (int)strDstEmbedded.rfind(wchar_t('m'));
if (-1 != nPos)
strDstEmbedded = strDstEmbedded.substr(0, nPos);
strDstEmbedded += L"embeddings";
NSDirectory::CreateDirectory(strDstEmbedded);
std::wstring strDstEmbeddedTemp = strDstEmbedded + FILE_SEPARATOR_STR + L"Temp";
NSDirectory::CreateDirectory(strDstEmbeddedTemp);
int id = m_oFileWriter.m_oChartWriter.getChartCount();
m_oFileWriter.m_oChartWriter.setChartCount(id + 1);
std::wstring sXlsxFilename = L"Microsoft_Excel_Worksheet" + std::to_wstring( id + 1) + L".xlsx";
BinXlsxRW::SaveParams oSaveParams(m_oFileWriter.m_sThemePath, m_oFileWriter.m_pDrawingConverter->GetContentTypes());//???
OOX::Spreadsheet::CXlsx oXlsx;
BinXlsxRW::BinaryFileReader embeddedReader;
embeddedReader.ReadMainTable(oXlsx, m_oBufferedStream, L"", strDstEmbeddedTemp, oSaveParams, m_oFileWriter.m_pDrawingConverter);
oXlsx.PrepareToWrite();
oXlsx.Write(strDstEmbeddedTemp, *oSaveParams.pContentTypes);
COfficeUtils oOfficeUtils(NULL);
oOfficeUtils.CompressFileOrDirectory(strDstEmbeddedTemp, strDstEmbedded + FILE_SEPARATOR_STR + sXlsxFilename, -1);
std::wstring sEmbWorksheetRelsName = L"embeddings/" + sXlsxFilename;
std::wstring bstrEmbWorksheetRelType = OOX::FileTypes::MicrosoftOfficeExcelWorksheet.RelationType();
m_oFileWriter.m_pDrawingConverter->WriteRels(bstrEmbWorksheetRelType, sEmbWorksheetRelsName, std::wstring(), &pDrawingProperty->nObjectId);
NSDirectory::DeleteDirectory(strDstEmbeddedTemp);
}
m_oBufferedStream.Seek( pos + length);
}
else
res = c_oSerConstants::ReadUnknown;
return res;
}
int ReadCNvGraphicFramePr(BYTE type, long length, void* poResult)
{
int res = c_oSerConstants::ReadOk;
PPTX::Logic::CNvGraphicFramePr * pLocking = static_cast<PPTX::Logic::CNvGraphicFramePr*>(poResult);
if ( c_oSerGraphicFramePr::NoChangeAspect == type )
{
pLocking->m_oNoChangeAspect.Init();
pLocking->m_oNoChangeAspect->FromBool(m_oBufferedStream.GetBool());
pLocking->noChangeAspect = m_oBufferedStream.GetBool();
}
else if ( c_oSerGraphicFramePr::NoDrilldown == type )
{
pLocking->m_oNoDrilldown.Init();
pLocking->m_oNoDrilldown->FromBool(m_oBufferedStream.GetBool());
pLocking->noDrilldown = m_oBufferedStream.GetBool();
}
else if ( c_oSerGraphicFramePr::NoGrp == type )
{
pLocking->m_oNoGrp.Init();
pLocking->m_oNoGrp->FromBool(m_oBufferedStream.GetBool());
pLocking->noGrp = m_oBufferedStream.GetBool();
}
else if ( c_oSerGraphicFramePr::NoMove == type )
{
pLocking->m_oNoMove.Init();
pLocking->m_oNoMove->FromBool(m_oBufferedStream.GetBool());
pLocking->noMove = m_oBufferedStream.GetBool();
}
else if ( c_oSerGraphicFramePr::NoResize == type )
{
pLocking->m_oNoResize.Init();
pLocking->m_oNoResize->FromBool(m_oBufferedStream.GetBool());
pLocking->noResize = m_oBufferedStream.GetBool();
}
else if ( c_oSerGraphicFramePr::NoSelect == type )
{
pLocking->m_oNoSelect.Init();
pLocking->m_oNoSelect->FromBool(m_oBufferedStream.GetBool());
pLocking->noSelect = m_oBufferedStream.GetBool();
}
else
res = c_oSerConstants::ReadUnknown;
@ -6820,31 +6891,28 @@ public:
int ReadDocPr(BYTE type, long length, void* poResult)
{
int res = c_oSerConstants::ReadOk;
OOX::Drawing::CNonVisualDrawingProps* pNonVisualDrawingProps = static_cast<OOX::Drawing::CNonVisualDrawingProps*>(poResult);
PPTX::Logic::CNvPr* pNonVisualDrawingProps = static_cast<PPTX::Logic::CNvPr*>(poResult);
if ( c_oSerDocPr::Id == type )
{
pNonVisualDrawingProps->m_oId.Init();
pNonVisualDrawingProps->m_oId->SetValue(m_oBufferedStream.GetLong());
pNonVisualDrawingProps->id = m_oBufferedStream.GetLong();
}
else if ( c_oSerDocPr::Name == type )
{
pNonVisualDrawingProps->m_sName.Init();
pNonVisualDrawingProps->m_sName->append(m_oBufferedStream.GetString3(length));
pNonVisualDrawingProps->name = m_oBufferedStream.GetString3(length);
}
else if ( c_oSerDocPr::Hidden == type )
{
pNonVisualDrawingProps->m_oHidden.Init();
pNonVisualDrawingProps->m_oHidden->FromBool(m_oBufferedStream.GetBool());
pNonVisualDrawingProps->hidden = m_oBufferedStream.GetBool();
}
else if ( c_oSerDocPr::Title == type )
{
pNonVisualDrawingProps->m_sTitle.Init();
pNonVisualDrawingProps->m_sTitle->append(m_oBufferedStream.GetString3(length));
pNonVisualDrawingProps->title = m_oBufferedStream.GetString3(length);
}
else if ( c_oSerDocPr::Descr == type )
{
pNonVisualDrawingProps->m_sDescr.Init();
pNonVisualDrawingProps->m_sDescr->append(m_oBufferedStream.GetString3(length));
pNonVisualDrawingProps->descr = m_oBufferedStream.GetString3(length);
}
else
res = c_oSerConstants::ReadUnknown;
@ -7081,88 +7149,13 @@ public:
return oBinary_pPrReader.Read_SecPr(type, length, poResult);
}
};
Binary_HdrFtrTableReader::Binary_HdrFtrTableReader(NSBinPptxRW::CBinaryFileReader& poBufferedStream, Writers::FileWriter& oFileWriter, CComments* pComments):Binary_CommonReader(poBufferedStream),m_oFileWriter(oFileWriter),m_oHeaderFooterWriter(oFileWriter.m_oHeaderFooterWriter),m_pComments(pComments)
{
}
int Binary_HdrFtrTableReader::Read()
{
return ReadTable(&Binary_HdrFtrTableReader::ReadHdrFtrContent, this);
}
int Binary_HdrFtrTableReader::ReadHdrFtrContent(BYTE type, long length, void* poResult)
{
int res = c_oSerConstants::ReadOk;
if ( c_oSerHdrFtrTypes::Header == type || c_oSerHdrFtrTypes::Footer == type )
{
nCurType = type;
res = Read1(length, &Binary_HdrFtrTableReader::ReadHdrFtrFEO, this, poResult);
}
else
res = c_oSerConstants::ReadUnknown;
return res;
};
int Binary_HdrFtrTableReader::ReadHdrFtrFEO(BYTE type, long length, void* poResult)
{
int res = c_oSerConstants::ReadOk;
if ( c_oSerHdrFtrTypes::HdrFtr_First == type || c_oSerHdrFtrTypes::HdrFtr_Even == type || c_oSerHdrFtrTypes::HdrFtr_Odd == type )
{
nCurHeaderType = type;
res = Read1(length, &Binary_HdrFtrTableReader::ReadHdrFtrItem, this, poResult);
}
else
res = c_oSerConstants::ReadUnknown;
return res;
};
int Binary_HdrFtrTableReader::ReadHdrFtrItem(BYTE type, long length, void* poResult)
{
int res = c_oSerConstants::ReadOk;
if ( c_oSerHdrFtrTypes::HdrFtr_Content == type )
{
Writers::HdrFtrItem* poHdrFtrItem = NULL;
switch(nCurHeaderType)
{
case c_oSerHdrFtrTypes::HdrFtr_First:poHdrFtrItem = new Writers::HdrFtrItem(SimpleTypes::hdrftrFirst);break;
case c_oSerHdrFtrTypes::HdrFtr_Even:poHdrFtrItem = new Writers::HdrFtrItem(SimpleTypes::hdrftrEven);break;
case c_oSerHdrFtrTypes::HdrFtr_Odd:poHdrFtrItem = new Writers::HdrFtrItem(SimpleTypes::hdrftrDefault);break;
}
if(NULL != poHdrFtrItem)
{
if(nCurType == c_oSerHdrFtrTypes::Header)
{
m_oHeaderFooterWriter.m_aHeaders.push_back(poHdrFtrItem);
poHdrFtrItem->m_sFilename = L"header" + std::to_wstring(m_oHeaderFooterWriter.m_aHeaders.size()) + L".xml";
}
else
{
m_oHeaderFooterWriter.m_aFooters.push_back(poHdrFtrItem);
poHdrFtrItem->m_sFilename = L"footer" + std::to_wstring(m_oHeaderFooterWriter.m_aFooters.size()) + L".xml";
}
m_oFileWriter.m_pDrawingConverter->SetDstContentRels();
Binary_DocumentTableReader oBinary_DocumentTableReader(m_oBufferedStream, m_oFileWriter, poHdrFtrItem->Header, m_pComments);
res = Read1(length, &Binary_HdrFtrTableReader::ReadHdrFtrItemContent, this, &oBinary_DocumentTableReader);
OOX::CPath fileRelsPath = m_oFileWriter.m_oDocumentWriter.m_sDir + FILE_SEPARATOR_STR + _T("word") +
FILE_SEPARATOR_STR + _T("_rels")+
FILE_SEPARATOR_STR + poHdrFtrItem->m_sFilename + _T(".rels");
m_oFileWriter.m_pDrawingConverter->SaveDstContentRels(fileRelsPath.GetPath());
}
}
else
res = c_oSerConstants::ReadUnknown;
return res;
};
int Binary_HdrFtrTableReader::ReadHdrFtrItemContent(BYTE type, long length, void* poResult)
{
Binary_DocumentTableReader* pBinary_DocumentTableReader = static_cast<Binary_DocumentTableReader*>(poResult);
return pBinary_DocumentTableReader->ReadDocumentContent(type, length, NULL);
};
class Binary_NotesTableReader : public Binary_CommonReader<Binary_NotesTableReader>
{
Writers::FileWriter& m_oFileWriter;
CComments* m_pComments;
bool m_bIsFootnote;
nullable<SimpleTypes::CDecimalNumber<> > m_oId;
nullable<SimpleTypes::CFtnEdn<> > m_oType;
Writers::FileWriter& m_oFileWriter;
CComments* m_pComments;
bool m_bIsFootnote;
nullable<SimpleTypes::CDecimalNumber<>> m_oId;
nullable<SimpleTypes::CFtnEdn<>> m_oType;
public:
Binary_NotesTableReader(NSBinPptxRW::CBinaryFileReader& poBufferedStream, Writers::FileWriter& oFileWriter, CComments* pComments, bool bIsFootnote):
Binary_CommonReader(poBufferedStream),m_oFileWriter(oFileWriter),m_pComments(pComments),m_bIsFootnote(bIsFootnote)
@ -7269,9 +7262,11 @@ class BinaryFileReader
{
private:
NSBinPptxRW::CBinaryFileReader& m_oBufferedStream;
Writers::FileWriter& m_oFileWriter;
std::wstring m_sFileInDir;
public: BinaryFileReader(std::wstring& sFileInDir, NSBinPptxRW::CBinaryFileReader& oBufferedStream, Writers::FileWriter& oFileWriter):m_sFileInDir(sFileInDir),m_oBufferedStream(oBufferedStream), m_oFileWriter(oFileWriter)
Writers::FileWriter& m_oFileWriter;
std::wstring m_sFileInDir;
public:
BinaryFileReader(std::wstring& sFileInDir, NSBinPptxRW::CBinaryFileReader& oBufferedStream, Writers::FileWriter& oFileWriter) :
m_sFileInDir(sFileInDir), m_oBufferedStream(oBufferedStream), m_oFileWriter(oFileWriter)
{
}
int ReadFile()
@ -7280,19 +7275,23 @@ public: BinaryFileReader(std::wstring& sFileInDir, NSBinPptxRW::CBinaryFileReade
}
int ReadMainTable()
{
m_oBufferedStream.m_nDocumentType = XMLWRITER_DOC_TYPE_DOCX;
long res = c_oSerConstants::ReadOk;
//mtLen
res = m_oBufferedStream.Peek(1) == false ? c_oSerConstants::ErrorStream : c_oSerConstants::ReadOk;
if(c_oSerConstants::ReadOk != res)
return res;
long nOtherOffset = -1;
long nStyleOffset = -1;
long nSettingsOffset = -1;
long nDocumentOffset = -1;
long nCommentsOffset = -1;
long nOtherOffset = -1;
long nStyleOffset = -1;
long nSettingsOffset = -1;
long nDocumentOffset = -1;
long nCommentsOffset = -1;
std::vector<BYTE> aTypes;
std::vector<long> aOffBits;
BYTE mtLen = m_oBufferedStream.GetUChar();
for(int i = 0; i < mtLen; ++i)
{
//mtItem
@ -7371,7 +7370,7 @@ public: BinaryFileReader(std::wstring& sFileInDir, NSBinPptxRW::CBinaryFileReade
return res;
}
for(int i = 0, length = aTypes.size(); i < length; ++i)
for(size_t i = 0; i < aTypes.size(); ++i)
{
BYTE mtiType = aTypes[i];
long mtiOffBits = aOffBits[i];
@ -7381,29 +7380,29 @@ public: BinaryFileReader(std::wstring& sFileInDir, NSBinPptxRW::CBinaryFileReade
{
//case c_oSerTableTypes::Signature:break;
//case c_oSerTableTypes::Info:break;
//case c_oSerTableTypes::Style:
// res = BinaryStyleTableReader(m_oBufferedStream, m_oFileWriter).Read();
// break;
//case c_oSerTableTypes::Document:
// res = Binary_DocumentTableReader(m_oBufferedStream, m_oFileWriter, m_oFileWriter.m_oDocumentWriter).Read();
// break;
case c_oSerTableTypes::HdrFtr:
res = Binary_HdrFtrTableReader(m_oBufferedStream, m_oFileWriter, m_oFileWriter.m_pComments).Read();
break;
case c_oSerTableTypes::Numbering:
res = Binary_NumberingTableReader(m_oBufferedStream, m_oFileWriter).Read();
break;
case c_oSerTableTypes::Footnotes:
res = Binary_NotesTableReader(m_oBufferedStream, m_oFileWriter, m_oFileWriter.m_pComments, true).Read();
break;
case c_oSerTableTypes::Endnotes:
res = Binary_NotesTableReader(m_oBufferedStream, m_oFileWriter, m_oFileWriter.m_pComments, false).Read();
break;
//case c_oSerTableTypes::Style:
// res = BinaryStyleTableReader(m_oBufferedStream, m_oFileWriter).Read();
// break;
//case c_oSerTableTypes::Document:
// res = Binary_DocumentTableReader(m_oBufferedStream, m_oFileWriter, m_oFileWriter.m_oDocumentWriter).Read();
// break;
case c_oSerTableTypes::HdrFtr:
res = Binary_HdrFtrTableReader(m_oBufferedStream, m_oFileWriter, m_oFileWriter.m_pComments).Read();
break;
case c_oSerTableTypes::Numbering:
res = Binary_NumberingTableReader(m_oBufferedStream, m_oFileWriter).Read();
break;
case c_oSerTableTypes::Footnotes:
res = Binary_NotesTableReader(m_oBufferedStream, m_oFileWriter, m_oFileWriter.m_pComments, true).Read();
break;
case c_oSerTableTypes::Endnotes:
res = Binary_NotesTableReader(m_oBufferedStream, m_oFileWriter, m_oFileWriter.m_pComments, false).Read();
break;
//Comments должны читаться раньше чем c_oSerTableTypes::Document
//case c_oSerTableTypes::Comments:
// res = oBinary_CommentsTableReader.Read();
// break;
//Comments должны читаться раньше чем c_oSerTableTypes::Document
//case c_oSerTableTypes::Comments:
// res = oBinary_CommentsTableReader.Read();
// break;
//case c_oSerTableTypes::Other:
// res = Binary_OtherTableReader(m_sFileInDir, m_oBufferedStream, m_oFileWriter).Read();
// break;
@ -7417,27 +7416,39 @@ public: BinaryFileReader(std::wstring& sFileInDir, NSBinPptxRW::CBinaryFileReade
m_oFileWriter.m_pDrawingConverter->SetDstContentRels();
long stamdartRId;
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles")), std::wstring(_T("styles.xml")), std::wstring(), &stamdartRId);
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings")), std::wstring(_T("settings.xml")), std::wstring(), &stamdartRId);
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings")), std::wstring(_T("webSettings.xml")), std::wstring(), &stamdartRId);
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable")), std::wstring(_T("fontTable.xml")), std::wstring(), &stamdartRId);
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme")), std::wstring(_T("theme/theme1.xml")), std::wstring(), &stamdartRId);
if(false == m_oFileWriter.m_oNumberingWriter.IsEmpty())
m_oFileWriter.m_pDrawingConverter->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles", L"styles.xml", L"", &stamdartRId);
m_oFileWriter.m_pDrawingConverter->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings", L"settings.xml", L"", &stamdartRId);
m_oFileWriter.m_pDrawingConverter->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings",L"webSettings.xml", L"", &stamdartRId);
m_oFileWriter.m_pDrawingConverter->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable", L"fontTable.xml", L"", &stamdartRId);
m_oFileWriter.m_pDrawingConverter->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme", L"theme/theme1.xml",L"", &stamdartRId);
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml", L"/word", L"document.xml");
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml", L"/word", L"styles.xml");
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml", L"/word", L"settings.xml");
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml", L"/word", L"webSettings.xml");
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml", L"/word", L"fontTable.xml");
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.theme+xml", L"/word/theme", L"theme1.xml");
if(false == m_oFileWriter.m_oNumberingWriter.IsEmpty())
{
long rId;
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering")), std::wstring(_T("numbering.xml")), std::wstring(), &rId);
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml", L"/word", L"numbering.xml");
}
if(false == m_oFileWriter.m_oFootnotesWriter.IsEmpty())
{
long rId;
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes")), std::wstring(_T("footnotes.xml")), std::wstring(), &rId);
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml", L"/word", L"footnotes.xml");
}
if(false == m_oFileWriter.m_oEndnotesWriter.IsEmpty())
{
long rId;
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes")), std::wstring(_T("endnotes.xml")), std::wstring(), &rId);
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml", L"/word", L"endnotes.xml");
}
for(int i = 0, length = m_oFileWriter.m_oHeaderFooterWriter.m_aHeaders.size(); i < length; ++i)
for(size_t i = 0; i < m_oFileWriter.m_oHeaderFooterWriter.m_aHeaders.size(); ++i)
{
Writers::HdrFtrItem* pHeader = m_oFileWriter.m_oHeaderFooterWriter.m_aHeaders[i];
if(false == pHeader->IsEmpty())
@ -7445,9 +7456,11 @@ public: BinaryFileReader(std::wstring& sFileInDir, NSBinPptxRW::CBinaryFileReade
long rId;
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/header")), pHeader->m_sFilename, std::wstring(), &rId);
pHeader->rId = L"rId" + std::to_wstring( rId );
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml", L"/word", pHeader->m_sFilename);
}
}
for(int i = 0, length = m_oFileWriter.m_oHeaderFooterWriter.m_aFooters.size(); i < length; ++i)
for(size_t i = 0; i < m_oFileWriter.m_oHeaderFooterWriter.m_aFooters.size(); ++i)
{
Writers::HdrFtrItem* pFooter = m_oFileWriter.m_oHeaderFooterWriter.m_aFooters[i];
if(false == pFooter->IsEmpty())
@ -7455,6 +7468,8 @@ public: BinaryFileReader(std::wstring& sFileInDir, NSBinPptxRW::CBinaryFileReade
long rId;
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer")), pFooter->m_sFilename, std::wstring(), &rId);
pFooter->rId = L"rId" + std::to_wstring( rId );
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml", L"/word", pFooter->m_sFilename);
}
}
res = Binary_DocumentTableReader(m_oBufferedStream, m_oFileWriter, m_oFileWriter.m_oDocumentWriter, &oBinary_CommentsTableReader.m_oComments).Read();
@ -7463,26 +7478,32 @@ public: BinaryFileReader(std::wstring& sFileInDir, NSBinPptxRW::CBinaryFileReade
+ FILE_SEPARATOR_STR + _T("_rels")
+ FILE_SEPARATOR_STR + _T("document.xml.rels");
CComments& oComments = oBinary_CommentsTableReader.m_oComments;
CComments& oComments= oBinary_CommentsTableReader.m_oComments;
Writers::CommentsWriter& oCommentsWriter = m_oFileWriter.m_oCommentsWriter;
std::wstring sContent = oComments.writeContent();
std::wstring sContentEx = oComments.writeContentExt();//важно чтобы writeContentExt вызывался после writeContent
std::wstring sPeople = oComments.writePeople();
std::wstring sContent = oComments.writeContent();
std::wstring sContentEx = oComments.writeContentExt(); //важно чтобы writeContentExt вызывался после writeContent
std::wstring sPeople = oComments.writePeople();
oCommentsWriter.setElements(sContent, sContentEx, sPeople);
if(false == oCommentsWriter.m_sComment.empty())
if(false == oCommentsWriter.m_sComment.empty())
{
long rId;
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments")), std::wstring(_T("comments.xml")), std::wstring(), &rId);
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml", L"/word", L"comments.xml");
}
if(false == oCommentsWriter.m_sCommentExt.empty())
{
long rId;
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.microsoft.com/office/2011/relationships/commentsExtended")), std::wstring(_T("commentsExtended.xml")), std::wstring(), &rId);
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml", L"/word", L"commentsExtended.xml");
}
if(false == oCommentsWriter.m_sPeople.empty())
{
long rId;
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.microsoft.com/office/2011/relationships/people")), std::wstring(_T("people.xml")), std::wstring(), &rId);
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.people+xml", L"/word", L"people.xml");
}
m_oFileWriter.m_pDrawingConverter->SaveDstContentRels(fileRelsPath.GetPath());

View File

@ -42,9 +42,9 @@ namespace Writers
class SettingWriter
{
std::wstring m_sDir;
XmlUtils::CStringWriter m_oSettingWriter;
HeaderFooterWriter& m_oHeaderFooterWriter;
std::wstring m_sDir;
XmlUtils::CStringWriter m_oSettingWriter;
HeaderFooterWriter& m_oHeaderFooterWriter;
public:
SettingWriter(std::wstring sDir, HeaderFooterWriter& oHeaderFooterWriter):m_sDir(sDir),m_oHeaderFooterWriter(oHeaderFooterWriter)
{
@ -54,8 +54,8 @@ namespace Writers
Prepare();
OOX::CPath filePath = m_sDir + FILE_SEPARATOR_STR + L"word" + FILE_SEPARATOR_STR + L"settings.xml";
CFile oFile;
oFile.CreateFile(filePath.GetPath());
NSFile::CFileBinary oFile;
oFile.CreateFileW(filePath.GetPath());
oFile.WriteStringUTF8(g_string_set_Start);
oFile.WriteStringUTF8(m_oSettingWriter.GetData());
oFile.WriteStringUTF8(g_string_set_Default);

View File

@ -58,7 +58,6 @@ namespace Writers
}
void Write()
{
m_oWriter.WriteString(g_string_st_Start);
m_oWriter.WriteString(std::wstring(_T("<w:docDefaults>")));
m_oWriter.WriteString(std::wstring(_T("<w:rPrDefault>")));
@ -81,8 +80,8 @@ namespace Writers
OOX::CPath filePath = m_sDir + FILE_SEPARATOR_STR +_T("word") + FILE_SEPARATOR_STR + _T("styles.xml");
CFile oFile;
oFile.CreateFile(filePath.GetPath());
NSFile::CFileBinary oFile;
oFile.CreateFileW(filePath.GetPath());
oFile.WriteStringUTF8(m_oWriter.GetData());
oFile.CloseFile();

View File

@ -34,6 +34,7 @@
#include "../../XlsxSerializerCom/Common/Common.h"
#include "../../DesktopEditor/fontengine/FontManager.h"
#include "../../DesktopEditor/fontengine/ApplicationFonts.h"
namespace Writers
{
@ -48,8 +49,8 @@ namespace Writers
CFontManager* m_pFontManager;
public:
std::map<std::wstring, int> m_mapFonts;
public:
FontTableWriter(std::wstring sDir, std::wstring sFontDir, bool bNoFontDir):m_sDir(sDir)
FontTableWriter(std::wstring sDir, std::wstring sFontDir, bool bNoFontDir):m_sDir(sDir)
{
m_pFontManager = NULL;
if(!bNoFontDir)
@ -102,8 +103,8 @@ namespace Writers
OOX::CPath filePath = m_sDir + FILE_SEPARATOR_STR +_T("word") + FILE_SEPARATOR_STR + _T("fontTable.xml");
CFile oFile;
oFile.CreateFile(filePath.GetPath());
NSFile::CFileBinary oFile;
oFile.CreateFileW(filePath.GetPath());
oFile.WriteStringUTF8(m_oWriter.GetData());
oFile.CloseFile();
@ -121,7 +122,7 @@ namespace Writers
CFontInfo* pFontInfo = m_pFontManager->GetFontInfoByParams(oFontSelectFormat);
if(NULL != pFontInfo)
{
for(int i = 0; i < 10; ++i)
for (size_t i = 0; i < 10; ++i)
{
BYTE cElem = pFontInfo->m_aPanose[i];
if(0 != cElem)

View File

@ -54,8 +54,8 @@ namespace Writers
OOX::CPath fileName = m_sDir + FILE_SEPARATOR_STR +_T("word") + FILE_SEPARATOR_STR + _T("webSettings.xml");
CFile oFile;
oFile.CreateFile(fileName.GetPath());
NSFile::CFileBinary oFile;
oFile.CreateFileW(fileName.GetPath());
oFile.WriteStringUTF8(s_Common);
oFile.CloseFile();
}

View File

@ -33,13 +33,11 @@
#define BINEQUATIONWRITER_H
#include "BinReaderWriterDefines.h"
#include "../../Common/DocxFormat/Source/Common/SimpleTypes_OMath.h"
#include "../../Common/DocxFormat/Source/MathEquation/OutputDev.h"
#include <stack>
/*namespace BinDocxRW
{
class BinaryCommonWriter;
}*/
namespace MathEquation
{
class EquationRun

View File

@ -997,6 +997,12 @@ extern int g_nCurFormatVersion;
Title = 3,
Descr = 4
};}
namespace c_oSerEmbedded{enum c_oSerEmbedded
{
Type = 0,
Data = 1,
Program = 2
};}
}
#endif // #ifndef DOCX_BIN_READER_WRITER_DEFINES

View File

@ -35,9 +35,9 @@
namespace BinDocxRW
{
BinaryHeaderFooterTableWriter::BinaryHeaderFooterTableWriter(ParamsWriter& oParamsWriter, OOX::IFileContainer* oDocumentRels, std::map<int, bool>* mapIgnoreComments):
m_oBcw(oParamsWriter), m_oParamsWriter(oParamsWriter), m_poTheme(oParamsWriter.m_poTheme), m_oFontProcessor(*oParamsWriter.m_pFontProcessor), m_oSettings(oParamsWriter.m_oSettings),m_pOfficeDrawingConverter(oParamsWriter.m_pOfficeDrawingConverter), m_oDocumentRels(oDocumentRels),m_mapIgnoreComments(mapIgnoreComments)
m_oBcw(oParamsWriter), m_oParamsWriter(oParamsWriter), m_poTheme(oParamsWriter.m_poTheme), m_oFontProcessor(*oParamsWriter.m_pFontProcessor), m_oSettings(oParamsWriter.m_oSettings), m_pOfficeDrawingConverter(oParamsWriter.m_pOfficeDrawingConverter), m_oDocumentRels(oDocumentRels),m_mapIgnoreComments(mapIgnoreComments)
{
};
}
void BinaryHeaderFooterTableWriter::Write()
{
int nStart = m_oBcw.WriteItemWithLengthStart();
@ -57,11 +57,11 @@ namespace BinDocxRW
m_oBcw.WriteItemEnd(nCurPos);
}
m_oBcw.WriteItemWithLengthEnd(nStart);
};
}
void BinaryHeaderFooterTableWriter::WriteHdrFtrContent(std::vector<OOX::CHdrFtr*>& aHdrFtrs, std::vector<SimpleTypes::EHdrFtr>& aHdrFtrTypes, std::vector<OOX::Logic::CSectionProperty*>& aHdrSectPrs, bool bHdr)
{
int nCurPos = 0;
for(int i = 0, length = aHdrFtrs.size(); i < length; ++i)
for(size_t i = 0; i < aHdrFtrs.size(); ++i)
{
OOX::CHdrFtr* pHdrFtr = aHdrFtrs[i];
SimpleTypes::EHdrFtr eType = aHdrFtrTypes[i];
@ -69,26 +69,26 @@ namespace BinDocxRW
BYTE byteHdrFtrType = c_oSerHdrFtrTypes::HdrFtr_Odd;
switch(eType)
{
case SimpleTypes::hdrftrFirst: byteHdrFtrType = c_oSerHdrFtrTypes::HdrFtr_First;break;
case SimpleTypes::hdrftrEven: byteHdrFtrType = c_oSerHdrFtrTypes::HdrFtr_Even;break;
default: byteHdrFtrType = c_oSerHdrFtrTypes::HdrFtr_Odd;break;
case SimpleTypes::hdrftrFirst: byteHdrFtrType = c_oSerHdrFtrTypes::HdrFtr_First; break;
case SimpleTypes::hdrftrEven: byteHdrFtrType = c_oSerHdrFtrTypes::HdrFtr_Even; break;
default: byteHdrFtrType = c_oSerHdrFtrTypes::HdrFtr_Odd; break;
}
nCurPos = m_oBcw.WriteItemStart(byteHdrFtrType);
WriteHdrFtrItem(pSectPr, pHdrFtr, bHdr);
m_oBcw.WriteItemEnd(nCurPos);
}
};
}
void BinaryHeaderFooterTableWriter::WriteHdrFtrItem(OOX::Logic::CSectionProperty* pSectPr, OOX::CHdrFtr* pHdrFtr, bool bHdr)
{
int nCurPos = 0;
//Content
ParamsDocumentWriter oParamsDocumentWriter(pHdrFtr, pHdrFtr->m_oReadPath.GetPath());
m_oParamsWriter.m_pCurRels = oParamsDocumentWriter.m_pRels;
m_oParamsWriter.m_sCurDocumentPath = oParamsDocumentWriter.m_sDocumentPath;
BinaryDocumentTableWriter oBinaryDocumentTableWriter(m_oParamsWriter, oParamsDocumentWriter, m_mapIgnoreComments, NULL);
oBinaryDocumentTableWriter.prepareOfficeDrawingConverter(m_pOfficeDrawingConverter, oParamsDocumentWriter.m_sDocumentPath, pHdrFtr->m_arrShapeTypes);
nCurPos = m_oBcw.WriteItemStart(c_oSerHdrFtrTypes::HdrFtr_Content);
oBinaryDocumentTableWriter.WriteDocumentContent(pHdrFtr->m_arrItems);
m_oBcw.WriteItemEnd(nCurPos);
};
{
int nCurPos = 0;
//Content
ParamsDocumentWriter oParamsDocumentWriter(pHdrFtr, pHdrFtr->m_oReadPath.GetPath());
m_oParamsWriter.m_pCurRels = oParamsDocumentWriter.m_pRels;
m_oParamsWriter.m_sCurDocumentPath = oParamsDocumentWriter.m_sDocumentPath;
BinaryDocumentTableWriter oBinaryDocumentTableWriter(m_oParamsWriter, oParamsDocumentWriter, m_mapIgnoreComments, NULL);
oBinaryDocumentTableWriter.prepareOfficeDrawingConverter(m_pOfficeDrawingConverter, oParamsDocumentWriter.m_sDocumentPath, pHdrFtr->m_arrShapeTypes);
nCurPos = m_oBcw.WriteItemStart(c_oSerHdrFtrTypes::HdrFtr_Content);
oBinaryDocumentTableWriter.WriteDocumentContent(pHdrFtr->m_arrItems);
m_oBcw.WriteItemEnd(nCurPos);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -43,10 +43,16 @@ int BinDocxRW::g_nCurFormatVersion = 0;
BinDocxRW::CDocxSerializer::CDocxSerializer()
{
m_pParamsWriter = NULL;
m_pCurFileWriter = NULL;
m_bIsNoBase64Save = false;
m_bSaveChartAsImg = false;
m_pParamsWriter = NULL;
m_pCurFileWriter = NULL;
m_bIsNoBase64Save = false;
m_bSaveChartAsImg = false;
}
BinDocxRW::CDocxSerializer::~CDocxSerializer()
{
RELEASEOBJECT(m_pParamsWriter);
RELEASEOBJECT(m_pCurFileWriter);
}
bool BinDocxRW::CDocxSerializer::ConvertDocxToDoct(const std::wstring& sSrcFileName, const std::wstring& sDstFileName, const std::wstring& sTmpDir, const std::wstring& sXMLOptions)
{
@ -61,7 +67,7 @@ bool BinDocxRW::CDocxSerializer::ConvertDocxToDoct(const std::wstring& sSrcFileN
if(S_OK == oCOfficeUtils.ExtractToDirectory(sSrcFileName, strDirSrc, NULL, 0))
if(saveToFile(strEditorBin, strDirSrc, sXMLOptions))
if(S_OK == oCOfficeUtils.CompressFileOrDirectory(strDirDst, sDstFileName, -1))
if(S_OK == oCOfficeUtils.CompressFileOrDirectory(strDirDst, sDstFileName))
return true;
return false;
}
@ -88,7 +94,7 @@ bool BinDocxRW::CDocxSerializer::ConvertDoctToDocx(const std::wstring& sSrcFileN
if(loadFromFile(sEditorBin, strDirDst, sXMLOptions, sThemePath, sMediaPath, sEmbedPath))
{
if(S_OK == oCOfficeUtils.CompressFileOrDirectory(strDirDst, sDstFileName, -1))
if(S_OK == oCOfficeUtils.CompressFileOrDirectory(strDirDst, sDstFileName, true))
return true;
}
}
@ -106,6 +112,7 @@ bool BinDocxRW::CDocxSerializer::saveToFile(const std::wstring& sSrcFileName, co
CFontManager* pFontManager = pFontPicker->get_FontManager();
DocWrapper::FontProcessor fp;
fp.setFontManager(pFontManager);
NSBinPptxRW::CDrawingConverter oDrawingConverter;
oDrawingConverter.SetFontManager(pFontManager);
NSBinPptxRW::CBinaryFileWriter& oBufferedStream = *oDrawingConverter.m_pBinaryWriter;
@ -136,10 +143,13 @@ bool BinDocxRW::CDocxSerializer::saveToFile(const std::wstring& sSrcFileName, co
m_pParamsWriter = new ParamsWriter(&oBufferedStream, &fp, &oDrawingConverter, pEmbeddedFontsManager);
BinaryFileWriter oBinaryFileWriter(*m_pParamsWriter);
oBinaryFileWriter.intoBindoc(sDstPath);
BYTE* pbBinBuffer = oBufferedStream.GetBuffer();
int nBinBufferLen = oBufferedStream.GetPosition();
if (m_bIsNoBase64Save)
{
NSFile::CFileBinary oFile;
@ -207,6 +217,7 @@ bool BinDocxRW::CDocxSerializer::CreateDocxFolders(std::wstring strDirectory, st
bool BinDocxRW::CDocxSerializer::loadFromFile(const std::wstring& sSrcFileName, const std::wstring& sDstPath, const std::wstring& sXMLOptions, const std::wstring& sThemePath, const std::wstring& sMediaPath, const std::wstring& sEmbedPath)
{
bool bResultOk = false;
RELEASEOBJECT(m_pCurFileWriter);
NSFile::CFileBinary oFile;
if(oFile.OpenFile(sSrcFileName))
@ -219,7 +230,7 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const std::wstring& sSrcFileName,
//проверяем формат
bool bValidFormat = false;
std::wstring sSignature(g_sFormatSignature);
int nSigLength = sSignature.length();
int nSigLength = (int)sSignature.length();
if(nBase64DataSize > nSigLength)
{
std::string sCurSig((char*)pBase64Data, nSigLength);
@ -263,7 +274,8 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const std::wstring& sSrcFileName,
if(false != Base64::Base64Decode((const char*)(pBase64Data + nIndex), nBase64DataSize - nIndex, pData, &nDataSize))
{
NSBinPptxRW::CDrawingConverter oDrawingConverter;
NSBinPptxRW::CDrawingConverter oDrawingConverter;
NSBinPptxRW::CBinaryFileReader& oBufferedStream = *oDrawingConverter.m_pReader;
oBufferedStream.Init(pData, 0, nDataSize);
@ -276,24 +288,26 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const std::wstring& sSrcFileName,
{
g_nCurFormatVersion = nVersion = nTempVersion;
}
}
}
oDrawingConverter.SetMainDocument(this);
oDrawingConverter.SetMediaDstPath(sMediaPath);
oDrawingConverter.SetEmbedDstPath(sEmbedPath);
m_pCurFileWriter = new Writers::FileWriter(sDstPath, m_sFontDir, false, nVersion, m_bSaveChartAsImg, &oDrawingConverter, sThemePath);
//папка с картинками
//папка с картинками
std::wstring strFileInDir = NSSystemPath::GetDirectoryName(sSrcFileName);
std::wstring sFileInDir = strFileInDir.c_str();
oDrawingConverter.SetSourceFileDir(sFileInDir);
//default theme
m_pCurFileWriter->m_oDefaultTheme.Write(sThemePath);
BinaryFileReader oBinaryFileReader(sFileInDir, oBufferedStream, *m_pCurFileWriter);
oBinaryFileReader.ReadFile();
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
OOX::CContentTypes oContentTypes;
//themes
m_pCurFileWriter->m_oTheme.Write(sThemePath);
OOX::CContentTypes *pContentTypes = oDrawingConverter.GetContentTypes();
//docProps
OOX::CPath pathDocProps = sDstPath + FILE_SEPARATOR_STR + _T("docProps");
NSDirectory::CreateDirectory(pathDocProps.GetPath());
@ -304,14 +318,14 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const std::wstring& sSrcFileName,
if (pApp)
{
pApp->SetApplication(_T("OnlyOffice"));
pApp->SetAppVersion(_T("3.0000"));
pApp->SetAppVersion(_T("4.3000"));
pApp->SetDocSecurity(0);
pApp->SetScaleCrop(false);
pApp->SetLinksUpToDate(false);
pApp->SetSharedDoc(false);
pApp->SetHyperlinksChanged(false);
pApp->write(pathDocProps + FILE_SEPARATOR_STR + _T("app.xml"), DocProps, oContentTypes);
pApp->write(pathDocProps + FILE_SEPARATOR_STR + _T("app.xml"), DocProps, *pContentTypes);
delete pApp;
}
OOX::CCore* pCore = new OOX::CCore();
@ -319,34 +333,15 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const std::wstring& sSrcFileName,
{
pCore->SetCreator(_T(""));
pCore->SetLastModifiedBy(_T(""));
pCore->write(pathDocProps + FILE_SEPARATOR_STR + _T("core.xml"), DocProps, oContentTypes);
pCore->write(pathDocProps + FILE_SEPARATOR_STR + _T("core.xml"), DocProps, *pContentTypes);
delete pCore;
}
/////////////////////////////////////////////////////////////////////////////////////
m_pCurFileWriter->m_oContentTypesWriter.AddOverrideRaw(oDrawingConverter.GetContentTypes());
m_pCurFileWriter->Write();
pContentTypes->Write(sDstPath);
m_pCurFileWriter->m_oCommentsWriter.Write();
m_pCurFileWriter->m_oChartWriter.Write();
m_pCurFileWriter->m_oStylesWriter.Write();
m_pCurFileWriter->m_oNumberingWriter.Write();
m_pCurFileWriter->m_oFontTableWriter.Write();
m_pCurFileWriter->m_oHeaderFooterWriter.Write();
m_pCurFileWriter->m_oFootnotesWriter.Write();
m_pCurFileWriter->m_oEndnotesWriter.Write();
//Setting пишем после HeaderFooter, чтобы заполнить evenAndOddHeaders
m_pCurFileWriter->m_oSettingWriter.Write();
m_pCurFileWriter->m_oWebSettingsWriter.Write();
//Document пишем после HeaderFooter, чтобы заполнить sectPr
m_pCurFileWriter->m_oDocumentWriter.Write();
//Rels и ContentTypes пишем в конце
m_pCurFileWriter->m_oDocumentRelsWriter.Write();
m_pCurFileWriter->m_oContentTypesWriter.Write();
//CSerializer oSerializer = CSerializer();
//if(false != oSerializer.Write(oBufferedStream, sDirectoryOut))
//{
bResultOk = true;
//}
}
}
RELEASEARRAYOBJECTS(pBase64Data);
@ -371,11 +366,6 @@ bool BinDocxRW::CDocxSerializer::getBinaryContent(const std::wstring& bsTxConten
XmlUtils::CXmlLiteReader oReader;
// std::wstring bsTxContentTemp = _T("<root xmlns:w15=\"http://schemas.microsoft.com/office/word/2012/wordml\" 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: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\">");
//
// bsTxContentTemp += bsTxContent;
// bsTxContentTemp + _T("</root>");
std::wstring sBegin(_T("<root xmlns:w15=\"http://schemas.microsoft.com/office/word/2012/wordml\" 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: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\">"));
std::wstring sEnd(_T("</root>"));
@ -398,6 +388,7 @@ bool BinDocxRW::CDocxSerializer::getBinaryContent(const std::wstring& bsTxConten
BinDocxRW::BinaryCommonWriter oBinaryCommonWriter(oParamsWriter);
int nCurPos = oBinaryCommonWriter.WriteItemWithLengthStart();
BinDocxRW::ParamsDocumentWriter oParams(oParamsWriter.m_pCurRels, oParamsWriter.m_sCurDocumentPath);
BinDocxRW::BinaryDocumentTableWriter oBinaryDocumentTableWriter(oParamsWriter, oParams, &oParamsWriter.m_mapIgnoreComments, NULL);
oBinaryDocumentTableWriter.WriteDocumentContent(oSdtContent.m_arrItems);
oBinaryCommonWriter.WriteItemWithLengthEnd(nCurPos);
@ -419,6 +410,7 @@ bool BinDocxRW::CDocxSerializer::getBinaryContentElem(OOX::EElementType eElemTyp
BinDocxRW::BinaryCommonWriter oBinaryCommonWriter(oParamsWriter);
int nCurPos = oBinaryCommonWriter.WriteItemWithLengthStart();
BinDocxRW::ParamsDocumentWriter oParams(oParamsWriter.m_pCurRels, oParamsWriter.m_sCurDocumentPath);
BinDocxRW::BinaryDocumentTableWriter oBinaryDocumentTableWriter(oParamsWriter, oParams, &oParamsWriter.m_mapIgnoreComments, NULL);
if(OOX::et_m_oMathPara == eElemType)
@ -431,6 +423,11 @@ bool BinDocxRW::CDocxSerializer::getBinaryContentElem(OOX::EElementType eElemTyp
OOX::Logic::COMath* pMath = static_cast<OOX::Logic::COMath*>(pElem);
oBinaryDocumentTableWriter.WriteMathArgNodes(pMath->m_arrItems);
}
else if(OOX::et_w_sdtContent == eElemType)
{
OOX::Logic::CSdtContent* pContent = static_cast<OOX::Logic::CSdtContent*>(pElem);
oBinaryDocumentTableWriter.WriteDocumentContent(pContent->m_arrItems);
}
oBinaryCommonWriter.WriteItemWithLengthEnd(nCurPos);
oParamsWriter.m_pCBufferedStream = pBufferedStreamOld;

View File

@ -51,14 +51,16 @@ namespace BinDocxRW
class CDocxSerializer
{
public:
std::wstring m_sFontDir;
std::wstring m_sEmbeddedFontsDir;
bool m_bIsNoBase64Save;
bool m_bSaveChartAsImg;
ParamsWriter* m_pParamsWriter;
Writers::FileWriter* m_pCurFileWriter;
public:
std::wstring m_sFontDir;
std::wstring m_sEmbeddedFontsDir;
bool m_bIsNoBase64Save;
bool m_bSaveChartAsImg;
ParamsWriter* m_pParamsWriter;
Writers::FileWriter* m_pCurFileWriter;
CDocxSerializer();
virtual ~CDocxSerializer();
bool ConvertDocxToDoct(const std::wstring& sSrcFileName, const std::wstring& sDstFileName, const std::wstring& sTmpDir, const std::wstring& sXMLOptions);
bool ConvertDoctToDocx(const std::wstring& sSrcFileName, const std::wstring& sDstFileName, const std::wstring& sTmpDir, const std::wstring& sXMLOptions);

View File

@ -58,7 +58,7 @@ namespace DocWrapper {
{
//подбор перенесен в js
return;
for (int i = 0; i < fontTable->m_arrFonts.size(); ++i)
for (size_t i = 0; i < fontTable->m_arrFonts.size(); ++i)
addToFontMap(*fontTable->m_arrFonts[i]);
}
@ -80,24 +80,24 @@ namespace DocWrapper {
return fontName;
}
std::wstring FontProcessor::getFont(const NSCommon::nullable<OOX::Spreadsheet::CFontScheme>& oScheme, const NSCommon::nullable<ComplexTypes::Spreadsheet::String>& oRFont, const NSCommon::nullable<OOX::Spreadsheet::CCharset>& oCharset, const NSCommon::nullable<OOX::Spreadsheet::CFontFamily >& oFamily, OOX::CTheme* pTheme)
std::wstring FontProcessor::getFont(const NSCommon::nullable<OOX::Spreadsheet::CFontScheme>& oScheme, const NSCommon::nullable<ComplexTypes::Spreadsheet::String>& oRFont, const NSCommon::nullable<OOX::Spreadsheet::CCharset>& oCharset, const NSCommon::nullable<OOX::Spreadsheet::CFontFamily >& oFamily, PPTX::Theme* pTheme)
{
CFontSelectFormat oFontSelectFormat;
std::wstring sFontName;
if(NULL != pTheme && oScheme.IsInit() && oScheme->m_oFontScheme.IsInit())
{
//берем шрифт из темы
//берем шрифт из темы
const SimpleTypes::Spreadsheet::EFontScheme eFontScheme = oScheme->m_oFontScheme->GetValue();
if(SimpleTypes::Spreadsheet::fontschemeMajor == eFontScheme)
sFontName = pTheme->GetMajorFont();
sFontName = pTheme->themeElements.fontScheme.majorFont.latin.typeface;
else if(SimpleTypes::Spreadsheet::fontschemeMinor == eFontScheme)
sFontName = pTheme->GetMinorFont();
sFontName = pTheme->themeElements.fontScheme.minorFont.latin.typeface;
}
if(sFontName.empty() && oRFont.IsInit() && oRFont->m_sVal.IsInit())
sFontName = oRFont->ToString2();
if(sFontName.empty())
sFontName = std::wstring(gc_sNoNameFont);
//подбор перенесен в js
//подбор перенесен в js
return sFontName;
oFontSelectFormat.wsName = new std::wstring(sFontName);

View File

@ -30,26 +30,29 @@
*
*/
#pragma once
//#include "../stdafx.h"
#include <map>
#include "../../DesktopEditor/fontengine/ApplicationFonts.h"
//#include "DocWrapper/Base.h"
namespace NSCommon{
template<class Type> class nullable;
}
namespace ComplexTypes{
namespace Spreadsheet{
namespace ComplexTypes
{
namespace Spreadsheet
{
class String;
}
}
namespace PPTX
{
class Theme;
}
namespace OOX
{
class CFont;
class CFontTable;
class CTheme;
namespace Spreadsheet
{
class CFont;
@ -61,9 +64,10 @@ namespace OOX
}
}
namespace DocWrapper {
class FontProcessor {
namespace DocWrapper
{
class FontProcessor
{
CFontManager* m_pFontManager;
std::map<std::wstring, std::wstring> fontMap;
@ -76,7 +80,7 @@ namespace DocWrapper {
void setFontTable(OOX::CFontTable* fontTable);
std::wstring getFont(const std::wstring& name);
std::wstring getFont(const NSCommon::nullable<OOX::Spreadsheet::CFontScheme>& oScheme, const NSCommon::nullable<ComplexTypes::Spreadsheet::String>& oRFont, const NSCommon::nullable<OOX::Spreadsheet::CCharset>& oCharset, const NSCommon::nullable<OOX::Spreadsheet::CFontFamily >& oFamily, OOX::CTheme* pTheme);
std::wstring getFont(const NSCommon::nullable<OOX::Spreadsheet::CFontScheme>& oScheme, const NSCommon::nullable<ComplexTypes::Spreadsheet::String>& oRFont, const NSCommon::nullable<OOX::Spreadsheet::CCharset>& oCharset, const NSCommon::nullable<OOX::Spreadsheet::CFontFamily >& oFamily, PPTX::Theme* pTheme);
private:
void addToFontMap(OOX::CFont& font);
};

View File

@ -85,17 +85,17 @@ namespace BinXlsxRW{
}
bool CXlsxSerializer::loadFromFile(const std::wstring& sSrcFileName, const std::wstring& sDstPath, const std::wstring& sXMLOptions, const std::wstring& sMediaDir, const std::wstring& sEmbedDir)
{
NSBinPptxRW::CDrawingConverter oOfficeDrawingConverter;
oOfficeDrawingConverter.SetMediaDstPath(sMediaDir);
oOfficeDrawingConverter.SetEmbedDstPath(sEmbedDir);
NSBinPptxRW::CDrawingConverter oDrawingConverter;
oDrawingConverter.SetMediaDstPath(sMediaDir);
oDrawingConverter.SetEmbedDstPath(sEmbedDir);
//папка с бинарников
std::wstring strFileInDir = NSSystemPath::GetDirectoryName(sSrcFileName);
oOfficeDrawingConverter.SetSourceFileDir(strFileInDir, 2);
oDrawingConverter.SetSourceFileDir(strFileInDir, 2);
BinXlsxRW::BinaryFileReader oBinaryFileReader;
oBinaryFileReader.ReadFile(sSrcFileName, sDstPath, &oOfficeDrawingConverter, sXMLOptions);
oBinaryFileReader.ReadFile(sSrcFileName, sDstPath, &oDrawingConverter, sXMLOptions);
return true;
}
bool CXlsxSerializer::saveToFile(const std::wstring& sDstFileName, const std::wstring& sSrcPath, const std::wstring& sXMLOptions)
@ -139,105 +139,100 @@ namespace BinXlsxRW{
RELEASEOBJECT(pFontPicker);
return true;
}
bool CXlsxSerializer::loadChart(const std::wstring& sChartPath, NSBinPptxRW::CBinaryFileWriter& oBufferedStream, long& lDataSize)
bool CXlsxSerializer::loadChart(const std::wstring& sChartPath, NSBinPptxRW::CBinaryFileWriter* pWriter, long& lDataSize)
{
bool bRes = false;
//todo передать нормальный oRootPath
OOX::CPath oRootPath;
OOX::Spreadsheet::CChartSpace oChart(oRootPath, sChartPath);
if(NULL != m_pExternalDrawingConverter)
{
long nStartPos = oBufferedStream.GetPosition();
BinXlsxRW::BinaryCommonWriter oBcw(oBufferedStream);
std::wstring sOldRelsPath = m_pExternalDrawingConverter->GetRelsPath();
m_pExternalDrawingConverter->SetRelsPath(sChartPath);
BinXlsxRW::BinaryChartWriter oBinaryChartWriter(oBufferedStream, m_pExternalDrawingConverter);
oBinaryChartWriter.WriteCT_ChartSpace(oChart);
m_pExternalDrawingConverter->SetRelsPath(sOldRelsPath);
long nEndPos = oBufferedStream.GetPosition();
lDataSize = nEndPos - nStartPos;
bRes = true;
}
return bRes;
}
bool CXlsxSerializer::saveChart(NSBinPptxRW::CBinaryFileReader& oBufferedStream, long lLength, const std::wstring& sFilepath, const std::wstring& sContentTypePath, std::wstring** sContentTypeElement, const long& lChartNumber)
{
bool bRes = false;
*sContentTypeElement = NULL;
if(NULL != m_pExternalDrawingConverter)
{
m_pExternalDrawingConverter->SetDstContentRels();
//получаем sThemePath из bsFilename предполагая что папка theme находится на уровень выше bsFilename
std::wstring sThemePath;
std::wstring sEmbedingPath;
if (NULL == pWriter) return false;
if (NULL == m_pExternalDrawingConverter) return false;
int nIndex = (int)sFilepath.rfind(FILE_SEPARATOR_CHAR);
nIndex = (int)sFilepath.rfind(FILE_SEPARATOR_CHAR, nIndex - 1);
if(-1 != nIndex)
{
std::wstring sFilepathLeft = sFilepath.substr(0, nIndex + 1);
sThemePath = sFilepathLeft + L"theme";
sEmbedingPath = sFilepathLeft + L"embeddings";
}
OOX::CPath oRootPath;
OOX::Spreadsheet::CChartSpace oChart(oRootPath, sChartPath);
long nStartPos = pWriter->GetPosition();
BinXlsxRW::BinaryCommonWriter oBcw(*pWriter);
std::wstring sOldRelsPath = m_pExternalDrawingConverter->GetRelsPath();
m_pExternalDrawingConverter->SetRelsPath(sChartPath);
BinXlsxRW::BinaryChartWriter oBinaryChartWriter(*pWriter, m_pExternalDrawingConverter);
oBinaryChartWriter.WriteCT_ChartSpace(oChart);
m_pExternalDrawingConverter->SetRelsPath(sOldRelsPath);
long nEndPos = pWriter->GetPosition();
lDataSize = nEndPos - nStartPos;
return true;
}
bool CXlsxSerializer::saveChart(NSBinPptxRW::CBinaryFileReader* pReader, long lLength, const std::wstring& sFilepath, const long& lChartNumber)
{
if (NULL == pReader) return false;
if (NULL == m_pExternalDrawingConverter) return false;
bool bRes = false;
m_pExternalDrawingConverter->SetDstContentRels();
//получаем sThemePath из bsFilename предполагая что папка theme находится на уровень выше bsFilename
std::wstring sThemePath;
std::wstring sEmbedingPath;
std::wstring sContentTypePath;
int nIndex = (int)sFilepath.rfind(FILE_SEPARATOR_CHAR);
nIndex = (int)sFilepath.rfind(FILE_SEPARATOR_CHAR, nIndex - 1);
if(-1 != nIndex)
{
std::wstring sFilepathLeft = sFilepath.substr(0, nIndex + 1);
sThemePath = sFilepathLeft + L"theme";
sEmbedingPath = sFilepathLeft + L"embeddings";
}
if (pReader->m_nDocumentType == XMLWRITER_DOC_TYPE_DOCX) sContentTypePath = L"/word/charts/";
else if (pReader->m_nDocumentType == XMLWRITER_DOC_TYPE_XLSX) sContentTypePath = L"/xl/charts/";
else sContentTypePath = L"/ppt/charts/";
//todo theme path
BinXlsxRW::SaveParams oSaveParams(sThemePath);
OOX::Spreadsheet::CChartSpace oChartSpace;
BinXlsxRW::BinaryChartReader oBinaryChartReader(oBufferedStream, oSaveParams, m_pExternalDrawingConverter);
oBinaryChartReader.ReadCT_ChartSpace(lLength, &oChartSpace.m_oChartSpace);
BinXlsxRW::SaveParams oSaveParams(sThemePath, m_pExternalDrawingConverter->GetContentTypes());
OOX::Spreadsheet::CChartSpace oChartSpace;
BinXlsxRW::BinaryChartReader oBinaryChartReader(*pReader, oSaveParams, m_pExternalDrawingConverter);
oBinaryChartReader.ReadCT_ChartSpace(lLength, &oChartSpace.m_oChartSpace);
if(oChartSpace.isValid())
if(oChartSpace.isValid())
{
//save xlsx embedded for chart
if(pReader->m_nDocumentType != XMLWRITER_DOC_TYPE_XLSX && !sEmbedingPath.empty())
{
//todo не делать embeddings, если пишем xlsx
//save xlsx
if(!sEmbedingPath.empty())
{
std::wstring sXlsxFilename = L"Microsoft_Excel_Worksheet" + std::to_wstring(lChartNumber) + L".xlsx";
std::wstring sXlsxPath = sEmbedingPath + FILE_SEPARATOR_STR + sXlsxFilename;
writeChartXlsx(sXlsxPath, oChartSpace);
std::wstring sXlsxFilename = L"Microsoft_Excel_Worksheet" + std::to_wstring(lChartNumber) + L".xlsx";
std::wstring sXlsxPath = sEmbedingPath + FILE_SEPARATOR_STR + sXlsxFilename;
writeChartXlsx(sXlsxPath, oChartSpace);
std::wstring sChartsWorksheetRelsName = L"../embeddings/" + sXlsxFilename;
long rId;
std::wstring bstrChartsWorksheetRelType = OOX::Spreadsheet::FileTypes::ChartsWorksheet.RelationType();
m_pExternalDrawingConverter->WriteRels(bstrChartsWorksheetRelType, sChartsWorksheetRelsName, std::wstring(), &rId);
std::wstring sChartsWorksheetRelsName = L"../embeddings/" + sXlsxFilename;
long rId;
std::wstring bstrChartsWorksheetRelType = OOX::FileTypes::MicrosoftOfficeExcelWorksheet.RelationType();
m_pExternalDrawingConverter->WriteRels(bstrChartsWorksheetRelType, sChartsWorksheetRelsName, std::wstring(), &rId);
oChartSpace.m_oChartSpace.m_externalData = new OOX::Spreadsheet::CT_ExternalData();
oChartSpace.m_oChartSpace.m_externalData->m_id = new std::wstring();
oChartSpace.m_oChartSpace.m_externalData->m_id->append(L"rId");
oChartSpace.m_oChartSpace.m_externalData->m_id->append(std::to_wstring(rId));
oChartSpace.m_oChartSpace.m_externalData->m_autoUpdate = new OOX::Spreadsheet::CT_Boolean();
oChartSpace.m_oChartSpace.m_externalData->m_autoUpdate->m_val = new bool(false);
}
std::wstring strFilepath = sFilepath;
std::wstring strDir = NSSystemPath::GetDirectoryName(strFilepath);
std::wstring strFilename = NSSystemPath::GetFileName(strFilepath);
OOX::CPath pathRelsDir = strDir + FILE_SEPARATOR_STR + _T("_rels");
OOX::CSystemUtility::CreateDirectories(pathRelsDir.GetPath());
oChartSpace.write2(sFilepath);
OOX::CPath pathRelsFile = pathRelsDir + FILE_SEPARATOR_STR + strFilename + _T(".rels");
m_pExternalDrawingConverter->SaveDstContentRels(pathRelsFile.GetPath());
std::wstring sContentType(sContentTypePath);
sContentType += strFilename;
std::wstring sContent = L"<Override PartName=\"" + sContentType + L"\" ContentType=\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\"/>";
sContent += oSaveParams.sAdditionalContentTypes;
(*sContentTypeElement) = new std::wstring(sContent);
bRes = true;
oChartSpace.m_oChartSpace.m_externalData = new OOX::Spreadsheet::CT_ExternalData();
oChartSpace.m_oChartSpace.m_externalData->m_id = new std::wstring();
oChartSpace.m_oChartSpace.m_externalData->m_id->append(L"rId");
oChartSpace.m_oChartSpace.m_externalData->m_id->append(std::to_wstring(rId));
oChartSpace.m_oChartSpace.m_externalData->m_autoUpdate = new OOX::Spreadsheet::CT_Boolean();
oChartSpace.m_oChartSpace.m_externalData->m_autoUpdate->m_val = new bool(false);
}
std::wstring strFilepath = sFilepath;
std::wstring strDir = NSSystemPath::GetDirectoryName(strFilepath);
std::wstring strFilename = NSSystemPath::GetFileName(strFilepath);
OOX::CPath pathRelsDir = strDir + FILE_SEPARATOR_STR + _T("_rels");
OOX::CSystemUtility::CreateDirectories(pathRelsDir.GetPath());
oChartSpace.write2(sFilepath);
OOX::CPath pathRelsFile = pathRelsDir + FILE_SEPARATOR_STR + strFilename + _T(".rels");
m_pExternalDrawingConverter->SaveDstContentRels(pathRelsFile.GetPath());
pReader->m_pRels->m_pManager->m_pContentTypes->Registration(L"application/vnd.openxmlformats-officedocument.drawingml.chart+xml", sContentTypePath, strFilename);
bRes = true;
}
return bRes;
}
@ -255,28 +250,28 @@ namespace BinXlsxRW{
}
void CXlsxSerializer::writeChartXlsx(const std::wstring& sDstFile, const OOX::Spreadsheet::CChartSpace& oChart)
{
//анализируем chart
//анализируем chart
BinXlsxRW::ChartWriter helper;
helper.parseChart(oChart.m_oChartSpace.m_chart);
//создаем temp
//создаем temp
std::wstring sTempDir = NSSystemPath::GetDirectoryName(sDstFile) + FILE_SEPARATOR_STR + NSSystemPath::GetFileName(sDstFile) + L"_TEMP";
NSDirectory::CreateDirectory(sTempDir);
OOX::CPath oPath(sTempDir.c_str());
//шиблонные папки
//шиблонные папки
std::wstring sXmlOptions = _T("");
std::wstring sMediaPath;// will be filled by 'CreateXlsxFolders' method
std::wstring sEmbedPath; // will be filled by 'CreateXlsxFolders' method
CreateXlsxFolders (sXmlOptions, sTempDir, sMediaPath, sEmbedPath);
//заполняем Xlsx
//заполняем Xlsx
OOX::Spreadsheet::CXlsx oXlsx;
helper.toXlsx(oXlsx);
//write
std::wstring sAdditionalContentTypes;
oXlsx.Write(oPath, sAdditionalContentTypes);
//write
OOX::CContentTypes oContentTypes;
oXlsx.Write(oPath, oContentTypes);
//zip
COfficeUtils oOfficeUtils(NULL);
oOfficeUtils.CompressFileOrDirectory(sTempDir, sDstFile, -1);
//clean
oOfficeUtils.CompressFileOrDirectory(sTempDir, sDstFile, true);
//clean
NSDirectory::DeleteDirectory(sTempDir);
}
};

View File

@ -59,13 +59,13 @@ namespace BinXlsxRW {
CXlsxSerializer();
~CXlsxSerializer();
void CreateXlsxFolders (const std::wstring& sXmlOptions, const std::wstring& sDstPath, std::wstring& sMediaPath, std::wstring& sEmbedPath);
static void CreateXlsxFolders (const std::wstring& sXmlOptions, const std::wstring& sDstPath, std::wstring& sMediaPath, std::wstring& sEmbedPath);
bool loadFromFile (const std::wstring& sSrcFileName, const std::wstring& sDstPath, const std::wstring& sXMLOptions, const std::wstring& sMediaDir, const std::wstring& sEmbedPath);
bool saveToFile (const std::wstring& sSrcFileName, const std::wstring& sDstPath, const std::wstring& sXMLOptions);
bool loadChart (const std::wstring& sChartPath, NSBinPptxRW::CBinaryFileWriter& oBufferedStream, long& lDataSize);
bool saveChart (NSBinPptxRW::CBinaryFileReader& oBufferedStream, long lLength, const std::wstring& sFilename, const std::wstring& sContentTypePath, std::wstring** sContentTypeElement, const long& lChartNumber);
bool loadChart (const std::wstring& sChartPath, NSBinPptxRW::CBinaryFileWriter* pWriter, long& lDataSize);
bool saveChart (NSBinPptxRW::CBinaryFileReader* pReader, long lLength, const std::wstring& sFilename, const long& lChartNumber);
void setFontDir (const std::wstring& sFontDir);
void setEmbeddedFontsDir(const std::wstring& sEmbeddedFontsDir);

View File

@ -42,15 +42,15 @@ SOURCES += \
../../XlsxSerializerCom/Reader/CommonWriter.cpp \
../../XlsxSerializerCom/Reader/CSVReader.cpp \
../../XlsxSerializerCom/Writer/CSVWriter.cpp \
../../OfficeCryptReader/source/ECMACryptReader.cpp \
../../OfficeCryptReader/source/CryptTransform.cpp
../../OfficeCryptReader/source/ECMACryptFile.cpp \
../../OfficeCryptReader/source/CryptTransform.cpp \
../BinReader/Readers.cpp
HEADERS += ../DocWrapper/DocxSerializer.h \
../DocWrapper/FontProcessor.h \
../DocWrapper/XlsxSerializer.h \
../BinReader/ChartWriter.h \
../BinReader/CommentsWriter.h \
../BinReader/ContentTypesWriter.h \
../BinReader/DocumentRelsWriter.h \
../BinReader/DocumentWriter.h \
../BinReader/FileWriter.h \
@ -78,5 +78,5 @@ HEADERS += ../DocWrapper/DocxSerializer.h \
../../Common/FileDownloader/FileDownloader.h \
../BinReader/DefaultThemeWriter.h \
../DocWrapper/ChartWriter.h \
../../OfficeCryptReader/source/ECMACryptReader.h \
../../OfficeCryptReader/source/ECMACryptFile.h \
../../OfficeCryptReader/source/CryptTransform.h

View File

@ -34,7 +34,6 @@
17C1FEB11ACC42C4006B99B3 /* Common.h in Headers */ = {isa = PBXBuildFile; fileRef = 17E17F1F1AC4549B00BEA2EA /* Common.h */; };
17C1FEB21ACC42C4006B99B3 /* XlsxSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 17E17F131AC4546100BEA2EA /* XlsxSerializer.h */; };
17C1FEB31ACC42C4006B99B3 /* CSVReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 17E17F271AC4549B00BEA2EA /* CSVReader.h */; };
17C1FEB41ACC42C4006B99B3 /* ContentTypesWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 17E17EED1AC4544900BEA2EA /* ContentTypesWriter.h */; };
17C1FEB51ACC42C4006B99B3 /* HeaderFooterWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 17E17EF41AC4544900BEA2EA /* HeaderFooterWriter.h */; };
17C1FEB61ACC42C4006B99B3 /* webSettingsWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 17E17EFB1AC4544900BEA2EA /* webSettingsWriter.h */; };
17C1FEB71ACC42C4006B99B3 /* SettingWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 17E17EF91AC4544900BEA2EA /* SettingWriter.h */; };
@ -43,6 +42,7 @@
17C1FEBC1ACC42C4006B99B3 /* DocxSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 17E17F0F1AC4546100BEA2EA /* DocxSerializer.h */; };
17C1FEBD1ACC42C4006B99B3 /* FileWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 17E17EF21AC4544900BEA2EA /* FileWriter.h */; };
17C1FEBE1ACC42C4006B99B3 /* CSVWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 17E17F301AC4549B00BEA2EA /* CSVWriter.h */; };
690FE0851E9BBD68004B26D0 /* Readers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 690FE0841E9BBD68004B26D0 /* Readers.cpp */; };
69414A301CB51666003E771B /* ChartWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 69414A2E1CB51666003E771B /* ChartWriter.cpp */; };
69414A311CB51666003E771B /* ChartWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 69414A2F1CB51666003E771B /* ChartWriter.h */; };
6967917C1D9E8AEE002CA4BA /* BinEquationWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 696791781D9E8AEE002CA4BA /* BinEquationWriter.h */; };
@ -58,7 +58,6 @@
17C1FEC21ACC42C4006B99B3 /* libASCOfficeDocxFile2Lib_ios.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libASCOfficeDocxFile2Lib_ios.a; sourceTree = BUILT_PRODUCTS_DIR; };
17E17EEB1AC4544900BEA2EA /* ChartWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChartWriter.h; sourceTree = "<group>"; };
17E17EEC1AC4544900BEA2EA /* CommentsWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommentsWriter.h; sourceTree = "<group>"; };
17E17EED1AC4544900BEA2EA /* ContentTypesWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContentTypesWriter.h; sourceTree = "<group>"; };
17E17EF01AC4544900BEA2EA /* DocumentRelsWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentRelsWriter.h; sourceTree = "<group>"; };
17E17EF11AC4544900BEA2EA /* DocumentWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentWriter.h; sourceTree = "<group>"; };
17E17EF21AC4544900BEA2EA /* FileWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileWriter.h; sourceTree = "<group>"; };
@ -91,6 +90,7 @@
17E17F2E1AC4549B00BEA2EA /* BinaryReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BinaryReader.h; sourceTree = "<group>"; };
17E17F2F1AC4549B00BEA2EA /* CSVWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSVWriter.cpp; sourceTree = "<group>"; };
17E17F301AC4549B00BEA2EA /* CSVWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSVWriter.h; sourceTree = "<group>"; };
690FE0841E9BBD68004B26D0 /* Readers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Readers.cpp; sourceTree = "<group>"; };
69414A2E1CB51666003E771B /* ChartWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ChartWriter.cpp; sourceTree = "<group>"; };
69414A2F1CB51666003E771B /* ChartWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChartWriter.h; sourceTree = "<group>"; };
696791781D9E8AEE002CA4BA /* BinEquationWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BinEquationWriter.h; path = ../../BinWriter/BinEquationWriter.h; sourceTree = "<group>"; };
@ -145,7 +145,6 @@
children = (
17E17EEB1AC4544900BEA2EA /* ChartWriter.h */,
17E17EEC1AC4544900BEA2EA /* CommentsWriter.h */,
17E17EED1AC4544900BEA2EA /* ContentTypesWriter.h */,
17A765271B0F3DC30046BC0B /* DefaultThemeWriter.h */,
17E17EF01AC4544900BEA2EA /* DocumentRelsWriter.h */,
17E17EF11AC4544900BEA2EA /* DocumentWriter.h */,
@ -159,6 +158,7 @@
17E17EF91AC4544900BEA2EA /* SettingWriter.h */,
17E17EFA1AC4544900BEA2EA /* StylesWriter.h */,
17E17EFB1AC4544900BEA2EA /* webSettingsWriter.h */,
690FE0841E9BBD68004B26D0 /* Readers.cpp */,
);
name = BinReader;
path = ../../BinReader;
@ -277,7 +277,6 @@
17C1FEB31ACC42C4006B99B3 /* CSVReader.h in Headers */,
6967917D1D9E8AEE002CA4BA /* BinReaderWriterDefines.h in Headers */,
69414A311CB51666003E771B /* ChartWriter.h in Headers */,
17C1FEB41ACC42C4006B99B3 /* ContentTypesWriter.h in Headers */,
17C1FEB51ACC42C4006B99B3 /* HeaderFooterWriter.h in Headers */,
17C1FEB61ACC42C4006B99B3 /* webSettingsWriter.h in Headers */,
17C1FEB71ACC42C4006B99B3 /* SettingWriter.h in Headers */,
@ -350,6 +349,7 @@
69414A301CB51666003E771B /* ChartWriter.cpp in Sources */,
6967917E1D9E8AEE002CA4BA /* BinWriters.cpp in Sources */,
17C1FE9C1ACC42C4006B99B3 /* XlsxSerializer.cpp in Sources */,
690FE0851E9BBD68004B26D0 /* Readers.cpp in Sources */,
17C1FE9D1ACC42C4006B99B3 /* FontProcessor.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -378,6 +378,7 @@
MAC,
unix,
_IOS,
DONT_WRITE_EMBEDDED_FONTS,
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
HEADER_SEARCH_PATHS = (
@ -414,6 +415,7 @@
MAC,
unix,
_IOS,
DONT_WRITE_EMBEDDED_FONTS,
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
HEADER_SEARCH_PATHS = (

View File

@ -34,7 +34,6 @@
#include <stdio.h>
#include <tchar.h>
#include "../../OfficeUtils/src/OfficeUtils.h"
#include "../../DesktopEditor/common/Directory.h"
#include "../src/ConvertOO2OOX.h"
@ -55,7 +54,7 @@ int _tmain(int argc, _TCHAR* argv[])
HRESULT hr = S_OK;
//////////////////////////////////////////////////////////////////////////
std::wstring srcFileName = argv[1];
std::wstring dstPath = argc > 2 ? argv[2] : srcFileName + L"-my.pptx"; //xlsx pptx
std::wstring dstPath = argc > 2 ? argv[2] : srcFileName + L"-my.pptx"; //xlsx pptx docx
std::wstring outputDir = NSDirectory::GetFolderPath(dstPath);
@ -73,7 +72,7 @@ int _tmain(int argc, _TCHAR* argv[])
if (hr != S_OK) return hr;
if (S_OK != oCOfficeUtils.CompressFileOrDirectory(dstTempPath.c_str(), dstPath.c_str(), -1))
if (S_OK != oCOfficeUtils.CompressFileOrDirectory(dstTempPath.c_str(), dstPath.c_str(), true))
return hr;
NSDirectory::DeleteDirectory(dstTempPath);

View File

@ -64,6 +64,8 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="gdi32.lib Rpcrt4.lib"
ShowProgress="0"
Version=""
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
@ -329,22 +331,10 @@
</References>
<Files>
<Filter
Name="Source Files"
Name="Common"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="OdfFileTest.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\Common\3dParty\pole\pole.cpp"
>
@ -394,6 +384,18 @@
</FileConfiguration>
</File>
</Filter>
<File
RelativePath="OdfFileTest.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
</File>
</Files>
<Globals>
</Globals>

View File

@ -34,18 +34,15 @@
#include <boost/optional/optional_io.hpp>
#include <boost/optional.hpp>
namespace cpdoccore
/// внешнее объявление для Optional, используем boost::optional
template <class T>
struct optional
{
/// внешнее объявление для Optional, используем boost::optional
template <class T>
struct optional
{
typedef T Base;
typedef boost::optional<T> Type;
};
typedef T Base;
typedef boost::optional<T> Type;
};
#define _CP_OPT(V) optional<V>::Type
#define _CP_OPT(V) optional<V>::Type
}

View File

@ -24,7 +24,8 @@ DEFINES += UNICODE \
_USE_LIBXML2_READER_ \
_USE_XMLLITE_READER_ \
USE_LITE_READER \
LIBXML_READER_ENABLED
LIBXML_READER_ENABLED \
DONT_WRITE_EMBEDDED_FONTS
INCLUDEPATH += ../include
INCLUDEPATH += ../../DesktopEditor/freetype-2.5.2/include

View File

@ -46,7 +46,6 @@
#include "../odf/style_text_properties.h"
#include "../odf/style_table_properties.h"
#include "../odf/style_graphic_properties.h"
#include "../odf/datatypes/style_ref.h"
#include "docx_package.h"
#include "oox_rels.h"
@ -569,7 +568,8 @@ mc:Ignorable=\"w14 wp14\">";
strm << L"<w:abstractNum w:abstractNumId=\"" << abstractNumId << "\">";
numIds.push_back(abstractNumId);
for (int i = 0; i < (std::min)( content.size(), (size_t)9); i++)
for (size_t i = 0; i < (std::min)( content.size(), (size_t)9); i++)
{
start_text_list_style(inst->get_text_list_style()->get_style_name());
content[i]->docx_convert(*this);
@ -1195,7 +1195,7 @@ void docx_conversion_context::process_headers_footers()
// проходим по всем page layout
BOOST_FOREACH(const odf_reader::style_master_page* page, pageLayouts.master_pages())
{
const std::wstring & styleName = page->style_master_page_attlist_.style_name_.get_value_or( odf_types::style_ref(L"") ).style_name();
const std::wstring & styleName = page->style_master_page_attlist_.style_name_.get_value_or( L"" );
const std::wstring masterPageNameLayout =context.pageLayoutContainer().page_layout_name_by_style(styleName);
add_page_properties(masterPageNameLayout);
@ -1296,7 +1296,7 @@ void docx_conversion_context::start_text_changes (std::wstring id)
if (state.type == 2)
{
for (int i = 0 ; i < state.content.size(); i++)
for (size_t i = 0 ; i < state.content.size(); i++)
{
output_stream() << L"<w:del" << format_change << L" w:id=\"" << boost::lexical_cast<std::wstring>(current_id_changes++) << L"\">";

View File

@ -53,7 +53,6 @@ namespace cpdoccore {
namespace odf_types
{
class style_ref;
class length_or_percent;
}
namespace odf_reader

View File

@ -531,8 +531,8 @@ mso-position-vertical-relative:text;";
strStyle += L"height:" + boost::lexical_cast<std::wstring>(val.cy / 12700.) + L"pt;";
strStyle += L"z-index:" + boost::lexical_cast<std::wstring>(0xF000800 - val.id);
CP_XML_ATTR(L"id", L"Rect" + boost::lexical_cast<std::wstring>(val.id));
CP_XML_ATTR(L"o:spid", L"_x0000_s" + boost::lexical_cast<std::wstring>(1024 + val.id));
CP_XML_ATTR(L"id", L"Rect" + std::to_wstring(val.id));
CP_XML_ATTR(L"o:spid", L"_x0000_s" + std::to_wstring(1024 + val.id));
CP_XML_ATTR(L"style", strStyle);
CP_XML_ATTR(L"fillcolor", L"#4f81bd [3204]");
CP_XML_ATTR(L"strokecolor", L"#243f60 [1604]");

View File

@ -47,12 +47,12 @@ docx_content_types_file::docx_content_types_file()
content()->add_default(L"jpg", L"image/jpeg");
content()->add_default(L"png", L"image/png");
//
content()->add_override(L"/_rels/.rels", L"application/vnd.openxmlformats-package.relationships+xml");
content()->add_override(L"/word/_rels/document.xml.rels", L"application/vnd.openxmlformats-package.relationships+xml");
content()->add_override(L"/word/document.xml", L"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml");
content()->add_override(L"/word/settings.xml", L"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml");
content()->add_override(L"/word/styles.xml", L"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml");
content()->add_override(L"/word/fontTable.xml", L"application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml");
//content()->add_override(L"/word/_rels/document.xml.rels", L"application/vnd.openxmlformats-package.relationships+xml");
//content()->add_override(L"/_rels/.rels", L"application/vnd.openxmlformats-package.relationships+xml");
content()->add_override(L"/docProps/app.xml", L"application/vnd.openxmlformats-officedocument.extended-properties+xml");
content()->add_override(L"/docProps/core.xml", L"application/vnd.openxmlformats-package.core-properties+xml");
}

View File

@ -166,8 +166,7 @@ std::wstring mediaitems::detectImageFileExtension(std::wstring &fileName)
std::wstring mediaitems::add_or_find(const std::wstring & href, RelsType type, bool & isInternal, std::wstring & ref)
{
bool isMediaInternal = is_internal(href, odf_packet_);
bool isMediaInternal = true;
std::wstring sub_path = L"media/";
std::wstring inputFileName;
@ -175,10 +174,13 @@ std::wstring mediaitems::add_or_find(const std::wstring & href, RelsType type, b
{
sub_path = L"charts/";
}
if ( type == typeMsObject || type == typeOleObject)
else if ( type == typeMsObject || type == typeOleObject)
{
sub_path = L"embeddings/";
}
else
isMediaInternal = is_internal(href, odf_packet_);
int number=0;
if ( type == typeChart) number = count_charts + 1;

View File

@ -139,7 +139,7 @@ void oox_chart_series::setValues(int ind, std::vector<std::wstring> & values)
if (ind == 0) values_[ind].strRef_.present = true;
else values_[ind].numRef_.present = true;
for (int i = 0; i < values.size(); i++)
for (size_t i = 0; i < values.size(); i++)
{
boost::algorithm::trim(values[i]);
if (ind == 0)
@ -240,7 +240,7 @@ void oox_chart_series::oox_serialize_common(std::wostream & _Wostream)
{
CP_XML_ATTR(L"val", values_[i].numRef_.num_cache_count);
}
for (int j = 0; j < values_[i].numRef_.num_cache.size(); j++)
for (size_t j = 0; j < values_[i].numRef_.num_cache.size(); j++)
{
std::wstring & v = values_[i].numRef_.num_cache[j];
@ -275,7 +275,7 @@ void oox_chart_series::oox_serialize_common(std::wostream & _Wostream)
CP_XML_ATTR(L"val", values_[i].numRef_.num_cache_count);
}
for (int j = 0; j < values_[i].numRef_.num_cache.size(); j++)
for (size_t j = 0; j < values_[i].numRef_.num_cache.size(); j++)
{
std::wstring & v = values_[i].numRef_.num_cache[j];
@ -312,7 +312,7 @@ void oox_chart_series::oox_serialize_common(std::wostream & _Wostream)
{
CP_XML_ATTR(L"val", values_[i].strRef_.str_cache_count);
}
for (int j = 0; j < values_[i].strRef_.str_cache.size(); j++)
for (size_t j = 0; j < values_[i].strRef_.str_cache.size(); j++)
{
std::wstring & v = values_[i].strRef_.str_cache[j];
@ -336,7 +336,7 @@ void oox_chart_series::oox_serialize_common(std::wostream & _Wostream)
{
CP_XML_ATTR(L"val", values_[i].strRef_.str_cache_count);
}
for (int j = 0; j < values_[i].strRef_.str_cache.size(); j++)
for (size_t j = 0; j < values_[i].strRef_.str_cache.size(); j++)
{
std::wstring & v = values_[i].strRef_.str_cache[j];
CP_XML_NODE(L"c:pt")
@ -405,7 +405,7 @@ void oox_chart_series::oox_serialize_common(std::wostream & _Wostream)
}
bool bEmpty_dPt = true;
for (int i = 0 ; i < content_.points_.size(); i++)
for (size_t i = 0 ; i < content_.points_.size(); i++)
{
if (content_.points_[i].bEnabled)
{
@ -415,9 +415,9 @@ void oox_chart_series::oox_serialize_common(std::wostream & _Wostream)
}
int indPoint = 0;
for (int i = 0 ; !bEmpty_dPt && i < content_.points_.size(); i++)
for (size_t i = 0 ; !bEmpty_dPt && i < content_.points_.size(); i++)
{
for (int j = 0 ; j < content_.points_[i].repeated_; j++)
for (size_t j = 0 ; j < content_.points_[i].repeated_; j++)
{
CP_XML_NODE(L"c:dPt")
{

View File

@ -35,9 +35,49 @@
#include "oox_drawing.h"
#include <cpdoccore/xml/simple_xml_writer.h>
#include "../odf/svg_parser.h"
#include "../odf/datatypes/custom_shape_types_convert.h"
using namespace cpdoccore;
namespace svg_path
{
void oox_serialize(std::wostream & strm, std::vector<_polyline> & path)
{
CP_XML_WRITER(strm)
{
for (size_t i = 0; i < path.size(); i++)
{
oox_serialize(strm, path[i]);
}
}
}
void oox_serialize(std::wostream & strm, _polyline & val)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(val.command)
{
for (size_t i = 0; i < val.points.size(); i++)
{
oox_serialize(CP_XML_STREAM(), val.points[i]);
}
}
}
}
void oox_serialize(std::wostream & strm, _point & val)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"a:pt")
{
if (val.x)CP_XML_ATTR(L"x", (int)(val.x.get()));
if (val.y)CP_XML_ATTR(L"y", (int)(val.y.get()));
}
}
}
}
namespace cpdoccore {
static const std::wstring _ooxShapeType[]=
@ -53,41 +93,6 @@ static const std::wstring _ooxShapeType[]=
L"polygon",
};
void svg_path::oox_serialize(std::wostream & strm, std::vector<svg_path::_polyline> & path)
{
CP_XML_WRITER(strm)
{
BOOST_FOREACH(svg_path::_polyline & p, path)
{
oox_serialize(strm, p);
}
}
}
void svg_path::oox_serialize(std::wostream & strm, svg_path::_polyline const & val)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(val.command)
{
BOOST_FOREACH(svg_path::_point const & p, val.points)
{
oox_serialize(CP_XML_STREAM(), p);
}
}
}
}
void svg_path::oox_serialize(std::wostream & strm, svg_path::_point const & val)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"a:pt")
{
if (val.x)CP_XML_ATTR(L"x", (int)(val.x.get()));
if (val.y)CP_XML_ATTR(L"y", (int)(val.y.get()));
}
}
}
namespace oox {

View File

@ -40,6 +40,8 @@
#include "mediaitems.h"
#include "oox_drawing_fills.h"
#include "../odf/svg_parser.h"
#include "../../../Common/DocxFormat/Source/Base/Types_32.h"
namespace cpdoccore {
@ -83,13 +85,19 @@ namespace oox {
void serialize_shape (std::wostream & strm);
void serialize_xfrm (std::wostream & strm, const std::wstring & namespace_ = L"a", bool always_position = false);
void serialize_bodyPr (std::wostream & strm, const std::wstring & namespace_ = L"a");
};
};
typedef _CP_PTR(_oox_drawing) oox_drawing_ptr;
void oox_serialize_ln (std::wostream & strm, const std::vector<odf_reader::_property> & val, bool always_draw = false);
void oox_serialize_aLst (std::wostream & strm, const std::vector<odf_reader::_property> & val);
void oox_serialize_hlink (std::wostream & strm, const std::vector<_hlink_desc> & val);
}
}
}
namespace svg_path
{
void oox_serialize (std::wostream & strm, _point & val);
void oox_serialize (std::wostream & strm, _polyline & val);
void oox_serialize (std::wostream & strm, std::vector<_polyline> & path);
}

View File

@ -66,7 +66,7 @@ void oox_serialize_srgb(std::wostream & strm,std::wstring color,_CP_OPT(double)
{
CP_XML_NODE(L"a:srgbClr")
{
CP_XML_ATTR(L"val",color);
CP_XML_ATTR(L"val", color);
if (opacity)
{
CP_XML_NODE(L"a:alpha")
@ -101,11 +101,56 @@ void oox_serialize_solid_fill(std::wostream & strm, const _oox_fill & val)
{
CP_XML_NODE(L"a:solidFill")
{
oox_serialize_srgb(CP_XML_STREAM(),val.solid->color,val.opacity);
oox_serialize_srgb(CP_XML_STREAM(), val.solid->color, val.opacity);
}
}
}
void vml_serialize_solid_fill(std::wostream & strm, const _oox_fill & val)
{
if (!val.solid) return;
if (!val.opacity) return;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"v:fill")
{
if (val.opacity)
{
CP_XML_ATTR(L"opacity", (int)(*val.opacity));
}
}
}
}
void vml_serialize_bitmap_fill(std::wostream & strm, const _oox_fill & val)
{
if (!val.bitmap) return;
if (!val.bitmap->isInternal) return;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"v:fill")
{
CP_XML_ATTR(L"r:id", val.bitmap->rId );
if (val.opacity)
{
CP_XML_ATTR(L"opacity",(int)(*val.opacity));
}
if (val.bitmap->bTile)
{
CP_XML_ATTR(L"type", L"pattern");
}
else
{
CP_XML_ATTR(L"type", L"frame");
}
CP_XML_ATTR(L"recolor", L"t");
}
}
}
void oox_serialize_bitmap_fill(std::wostream & strm, const _oox_fill & val)
{
if (!val.bitmap) return;
@ -164,20 +209,69 @@ void oox_serialize_bitmap_fill(std::wostream & strm, const _oox_fill & val)
{
CP_XML_NODE(L"a:fillRect");
}
}
}
}
}
}
void vml_serialize_gradient_fill(std::wostream & strm, const _oox_fill & val)
{
if (!val.gradient) return;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"v:fill")
{
if (!val.gradient->colors.empty())
{
CP_XML_ATTR(L"color2", val.gradient->colors[val.gradient->colors.size() - 1].color_ref);
std::wstring colors_value;
for (size_t i = 0; i < val.gradient->colors.size(); i++)
{
colors_value += std::to_wstring(val.gradient->colors[i].pos) + L"% #" +
val.gradient->colors[i].color_ref + L",";
}
if (!colors_value.empty())
{
CP_XML_ATTR(L"colors", colors_value.substr(0, colors_value.length() - 1));
}
}
double angle =/*360 - */val.gradient->angle/* * 180./3.14159265358979323846*/;
CP_XML_ATTR(L"focus", L"100%");
switch(val.gradient->style)
{
case 0:
CP_XML_ATTR(L"type", L"gradient");
CP_XML_ATTR(L"method", L"linear");
CP_XML_ATTR(L"angle", angle);
break;
case 1:
//CP_XML_ATTR(L"type", L"gradientRadial");
//break;
case 2:
//CP_XML_ATTR(L"type", L"gradientCenter");
//break;
case 3:
//CP_XML_ATTR(L"type", L"gradientUnscaled");
//break;
CP_XML_ATTR(L"type", L"gradientRadial");
}
if (val.gradient->style > 0)
{
double focus_x = ((val.gradient->rect[2] - val.gradient->rect[0]) /2. + val.gradient->rect[0]) / 100.;
double focus_y = ((val.gradient->rect[3] - val.gradient->rect[1]) /2. + val.gradient->rect[1]) / 100.;
CP_XML_ATTR(L"focusposition", XmlUtils::DoubleToString(focus_x, L"%.2f") + L"," + XmlUtils::DoubleToString(focus_y, L"%.2f"));
}
}
}
}
void oox_serialize_gradient_fill(std::wostream & strm, const _oox_fill & val)
{
if (!val.gradient)
{
return;
}
if (!val.gradient) return;
CP_XML_WRITER(strm)
{
@ -233,6 +327,7 @@ void oox_serialize_gradient_fill(std::wostream & strm, const _oox_fill & val)
void oox_serialize_hatch_fill(std::wostream & strm, const _oox_fill & val)
{
if (!val.hatch)return;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"a:pattFill")
@ -253,7 +348,38 @@ void oox_serialize_hatch_fill(std::wostream & strm, const _oox_fill & val)
}
}
}
void oox_serialize_fill(std::wostream & strm, const _oox_fill & val)
void vml_serialize_background (std::wostream & strm, const _oox_fill & val, const std::wstring & color, int id)
{
if (val.type == 0) return;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"v:background")
{
CP_XML_ATTR(L"id", L"_x0000_s" + std::to_wstring(1024 + id));
CP_XML_ATTR(L"o:bwmode", L"white");
CP_XML_ATTR(L"fillcolor", L"#" + color);
CP_XML_ATTR(L"o:targetscreensize", L"1024,768");
switch (val.type)
{
case 1:
vml_serialize_solid_fill(CP_XML_STREAM(), val);
break;
case 2:
vml_serialize_bitmap_fill(CP_XML_STREAM(), val);
break;
case 3:
vml_serialize_gradient_fill(CP_XML_STREAM(), val);
break;
case 4:
//vml_serialize_hatch_fill(CP_XML_STREAM(), val);
break;
}
}
}
}
void oox_serialize_fill (std::wostream & strm, const _oox_fill & val)
{
switch (val.type)
{

View File

@ -143,9 +143,10 @@ namespace oox {
}
};
void oox_serialize_fill(std::wostream & strm, const _oox_fill & val);
void oox_serialize_srgb(std::wostream & strm,std::wstring color,_CP_OPT(double) opacity);
void oox_serialize_srgb(std::wostream & strm,std::wstring color,_CP_OPT(odf_types::percent) opacity);
void vml_serialize_background (std::wostream & strm, const _oox_fill & val, const std::wstring & color, int id);
void oox_serialize_fill (std::wostream & strm, const _oox_fill & val);
void oox_serialize_srgb (std::wostream & strm,std::wstring color,_CP_OPT(double) opacity);
void oox_serialize_srgb (std::wostream & strm,std::wstring color,_CP_OPT(odf_types::percent) opacity);
}
}

View File

@ -99,7 +99,7 @@ void pptx_conversion_context::process_layouts()
get_text_context().set_process_layouts(true);
//актуальные
for (int layout_index =0; layout_index < layouts.content.size(); layout_index++)
for (size_t layout_index =0; layout_index < layouts.content.size(); layout_index++)
{
start_layout(layout_index);
@ -116,23 +116,24 @@ void pptx_conversion_context::process_layouts()
if (master)
{
for (int i = 0; i < master->content_.size(); i++)
for (size_t i = 0; i < master->content_.size(); i++)
{
odf_reader::office_element_ptr elm = master->content_[i];
if (elm->get_type() == odf_reader::typeDrawFrame)
odf_reader::draw_frame* frame = dynamic_cast<odf_reader::draw_frame*>(master->content_[i].get());
if (frame)
{
odf_reader::draw_frame* frame = dynamic_cast<odf_reader::draw_frame *>(elm.get());
if ((frame) && (frame->common_presentation_attlist_.presentation_class_))
odf_types::common_presentation_attlist &common_presentation_attlist_= frame->common_draw_attlists_.shape_with_text_and_styles_.common_presentation_attlist_;
if (common_presentation_attlist_.presentation_class_)
{
odf_types::presentation_class::type type = frame->common_presentation_attlist_.presentation_class_->get_type();
odf_types::presentation_class::type type = common_presentation_attlist_.presentation_class_->get_type();
if (type==odf_types::presentation_class::footer ||
type==odf_types::presentation_class::date_time ||
type==odf_types::presentation_class::header ||
type==odf_types::presentation_class::page_number)
if (type == odf_types::presentation_class::footer ||
type == odf_types::presentation_class::date_time ||
type == odf_types::presentation_class::header ||
type == odf_types::presentation_class::page_number)
{
if (frame->idx_in_owner <0)frame->idx_in_owner = last_idx_placeHolder++;
if (frame->idx_in_owner <0)
frame->idx_in_owner = last_idx_placeHolder++;
frame->pptx_convert_placeHolder(*this);
}
@ -152,7 +153,7 @@ void pptx_conversion_context::process_master_pages()
get_text_context().set_process_layouts(true);
//берем только актуальные
for (int master_index =0; master_index < masters.content.size();master_index++)
for (size_t master_index =0; master_index < masters.content.size();master_index++)
{
start_master(master_index);
@ -210,7 +211,7 @@ void pptx_conversion_context::end_document()
{
unsigned int count = 1;
for (int i = 0; i < slideMasters_.size(); i++)
for (size_t i = 0; i < slideMasters_.size(); i++)
{
pptx_xml_slideMaster_ptr& slideM = slideMasters_[i];
@ -233,7 +234,7 @@ void pptx_conversion_context::end_document()
}
////////////////////////////////////////////////////////////////////////////////////////////////////
count=0;
for (int i = 0; i < slides_.size(); i++)
for (size_t i = 0; i < slides_.size(); i++)
{
pptx_xml_slide_ptr& slide = slides_[i];
@ -255,7 +256,7 @@ void pptx_conversion_context::end_document()
count++;
}
///////////////////////////////////////////////////////////////////////////////////////////
for (int i = 0; i < slideLayouts_.size(); i++)
for (size_t i = 0; i < slideLayouts_.size(); i++)
{
pptx_xml_slideLayout_ptr& slideL = slideLayouts_[i];
@ -271,9 +272,9 @@ void pptx_conversion_context::end_document()
odf_reader::odf_read_context & context = root()->odf_context();
odf_reader::page_layout_container & pageLayouts = context.pageLayoutContainer();
if ((pageLayouts.master_pages().size()>0) && (pageLayouts.master_pages()[0]->style_master_page_attlist_.style_name_))//default
if ((pageLayouts.master_pages().size() > 0) && (pageLayouts.master_pages()[0]->style_master_page_attlist_.style_name_))//default
{
const std::wstring masterStyleName = pageLayouts.master_pages()[0]->style_master_page_attlist_.style_name_->style_name();
const std::wstring masterStyleName = pageLayouts.master_pages()[0]->style_master_page_attlist_.style_name_.get();
const std::wstring pageProperties = root()->odf_context().pageLayoutContainer().page_layout_name_by_style(masterStyleName);
odf_reader::page_layout_instance *pages_layouts = root()->odf_context().pageLayoutContainer().page_layout_by_name(pageProperties);
@ -287,7 +288,7 @@ void pptx_conversion_context::end_document()
//добавляем диаграммы
count = 0;
for (int i = 0; i < charts_.size(); i++)
for (size_t i = 0; i < charts_.size(); i++)
{
count++;
package::chart_content_ptr content = package::chart_content::create();
@ -300,7 +301,7 @@ void pptx_conversion_context::end_document()
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//добавляем темы
for (int i=0; i < themes_.size();i++)
for (size_t i=0; i < themes_.size(); i++)
{
output_document_->get_ppt_files().add_theme(themes_[i]);
@ -500,7 +501,7 @@ bool pptx_conversion_context::start_master(int master_index)
process_theme(masters.content[master_index].master_name);//add default theme - одинаковые но под разными именами
current_master().add_theme(current_theme().id(), L"tId1");
for (long i=0;i<masters.content[master_index].layouts.size();i++)
for (size_t i = 0; i < masters.content[master_index].layouts.size(); i++)
{
current_master().add_layout(masters.content[master_index].layouts[i].Id, masters.content[master_index].layouts[i].rId, 0x80000000 + last_uniq_big_id++);
}

View File

@ -207,7 +207,7 @@ void xlsx_drawing_context::end_group()
group_rect.cy -= group_rect.y;
group_rect.cx -= group_rect.x;
for (int i = 0; i < impl_->groups_.back()->child_objects_.size(); i++)
for (size_t i = 0; i < impl_->groups_.back()->child_objects_.size(); i++)
{
_rect & r = impl_->groups_.back()->child_objects_[i].svg_rect_.get();
@ -615,7 +615,7 @@ void xlsx_drawing_context::process_objects(xlsx_table_metrics & table_metrics)
}
void xlsx_drawing_context::process_objects(std::vector<drawing_object_description> objects, xlsx_table_metrics & table_metrics, xlsx_drawings_ptr xlsx_drawings_)
{
for (int i = 0 ; i < objects.size(); i++)
for (size_t i = 0 ; i < objects.size(); i++)
{
drawing_object_description & obj = objects[i];

View File

@ -91,7 +91,7 @@ public:
int pos =target.find(L".");
if (pos < 0)
{
target = target + std::wstring(L".A1");
target = L"\"" + target + std::wstring(L"\".A1");
}
r.location = converter_.convert_ref(std::wstring(target.begin() + 1, target.end()));
r.type = L"Internal" ;

View File

@ -75,7 +75,7 @@ void xlsx_data_range::serialize_sort (std::wostream & _Wostream)
if (!byRow)
CP_XML_ATTR(L"columnSort", true);
for (int i = 0 ; i < bySort.size(); i++)
for (size_t i = 0 ; i < bySort.size(); i++)
{
bool in_range = true;
std::wstring ref1, ref2;

View File

@ -134,7 +134,7 @@ void xlsx_conversion_context::end_document()
{
std::wstringstream workbook_content;
for (int i = 0; i < sheets_.size(); i++)
for (size_t i = 0; i < sheets_.size(); i++)
{
xlsx_xml_worksheet_ptr& sheet = sheets_[i];
@ -191,7 +191,7 @@ void xlsx_conversion_context::end_document()
}
//добавляем диаграммы
for (int i = 0; i < charts_.size(); i++)
for (size_t i = 0; i < charts_.size(); i++)
{
package::chart_content_ptr content = package::chart_content::create();
@ -271,7 +271,7 @@ void xlsx_conversion_context::serialize_bookViews(std::wostream & strm)
{
if (sActiveTable)
{
for (int i = 0; i < sheets_.size(); i++)
for (size_t i = 0; i < sheets_.size(); i++)
{
if (sheets_[i]->name() == *sActiveTable)
{

View File

@ -44,7 +44,7 @@ const wchar_t * abstract_xml::name = L"abstract-xml";
std::wostream & abstract_xml::text_to_stream(std::wostream & _Wostream) const
{
for (int i = 0; i < xml_content_.size(); i++)
for (size_t i = 0; i < xml_content_.size(); i++)
{
xml_content_[i]->text_to_stream(_Wostream);
}
@ -53,7 +53,7 @@ std::wostream & abstract_xml::text_to_stream(std::wostream & _Wostream) const
std::wostream & abstract_xml::xml_to_stream(std::wostream & _Wostream) const
{
for (int i = 0; i < xml_content_.size(); i++)
for (size_t i = 0; i < xml_content_.size(); i++)
{
xml_content_[i]->xml_to_stream(_Wostream);
}

View File

@ -91,7 +91,7 @@ void calcext_conditional_formats::add_child_element( xml::sax * Reader, const st
}
void calcext_conditional_formats::xlsx_convert(oox::xlsx_conversion_context & Context)
{
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
content_[i]->xlsx_convert(Context);
}
@ -116,7 +116,7 @@ void calcext_conditional_format::xlsx_convert(oox::xlsx_conversion_context & Con
Context.start_conditional_format(*calcext_target_range_address_);
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
content_[i]->xlsx_convert(Context);
}
@ -149,7 +149,7 @@ void calcext_data_bar::xlsx_convert(oox::xlsx_conversion_context & Context)
Context.set_conditional_format_dataBar(calcext_data_bar_attr_.calcext_min_length_, calcext_data_bar_attr_.calcext_max_length_);
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
content_[i]->xlsx_convert(Context);
}
@ -170,7 +170,7 @@ void calcext_color_scale::add_child_element( xml::sax * Reader, const std::wstri
void calcext_color_scale::xlsx_convert(oox::xlsx_conversion_context & Context)
{
Context.start_conditional_format_rule(3);
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
content_[i]->xlsx_convert(Context);
}
@ -196,7 +196,7 @@ void calcext_icon_set::xlsx_convert(oox::xlsx_conversion_context & Context)
if (calcext_show_value_)
Context.set_conditional_format_showval(*calcext_show_value_);
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
content_[i]->xlsx_convert(Context);
}

View File

@ -86,8 +86,8 @@ class calcext_date_is_attr
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
_CP_OPT(odf_types::style_ref) calcext_style_;
_CP_OPT(std::wstring) calcext_date_;
_CP_OPT(std::wstring) calcext_style_;
_CP_OPT(std::wstring) calcext_date_;
};
//////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -79,24 +79,24 @@ text_format_properties_content calc_text_properties_content(const std::vector<co
}
//////////////
graphic_format_properties calc_graphic_properties_content(const std::vector<const style_graphic_properties*> & graphicProps)
graphic_format_properties calc_graphic_properties_content(const std::vector<const graphic_format_properties*> & graphicProps)
{
graphic_format_properties result;
BOOST_FOREACH(const style_graphic_properties* v, graphicProps)
BOOST_FOREACH(const graphic_format_properties* v, graphicProps)
{
if (v)
result.apply_from(v->content());
result.apply_from(v);
}
return result;
}
graphic_format_properties calc_graphic_properties_content(const style_instance * styleInstance)
{
std::vector<const style_graphic_properties*> graphicProps;
std::vector<const graphic_format_properties*> graphicProps;
while (styleInstance)
{
if (const style_content * content = styleInstance->content())
if (const style_graphic_properties * graphicProp = content->get_style_graphic_properties())
if (const graphic_format_properties * graphicProp = content->get_graphic_properties())
graphicProps.push_back(graphicProp);
styleInstance = styleInstance->parent();
@ -110,7 +110,8 @@ graphic_format_properties calc_graphic_properties_content(const std::vector<cons
graphic_format_properties result;
BOOST_FOREACH(const style_instance * inst, styleInstances)
{
result.apply_from(calc_graphic_properties_content(inst));
graphic_format_properties f = calc_graphic_properties_content(inst);
result.apply_from(&f);
}
return result;
}

View File

@ -39,6 +39,13 @@
namespace cpdoccore { namespace odf_types {
std::wostream & operator << (std::wostream & _Wostream, const clockvalue & _Val)
{
// 5ms = 5 milliseconds
_Wostream << _Val.get_value() << "ms"; // todoooo усложнить ..
return _Wostream;
}
static bool parseTime(const std::wstring & Time, double & Hours, double & Minutes, double & Seconds, int & Ms)
{
try
@ -115,7 +122,6 @@ clockvalue clockvalue::parse(const std::wstring & Str)
{
int v=0;
int ms=0;
double h=0,m=0,s =0;
bool res = parseTime(Str,h,m,s,ms);

View File

@ -57,6 +57,8 @@ private:
int value_;//in ms
};
std::wostream & operator << (std::wostream & _Wostream, const clockvalue & _Val);
}
APPLY_PARSE_XML_ATTRIBUTES(odf_types::clockvalue);

View File

@ -109,11 +109,11 @@ void common_draw_fill_attlist::add_attributes( const xml::attributes_wc_ptr & At
}
void common_draw_fill_attlist::serialize(CP_ATTR_NODE)
{
CP_XML_ATTR_OPT(L"draw:fill-color", draw_fill_color_);
CP_XML_ATTR_OPT(L"draw:fill", draw_fill_);
CP_XML_ATTR_OPT(L"draw:fill-color", draw_fill_color_);
CP_XML_ATTR_OPT(L"draw:fill", draw_fill_);
CP_XML_ATTR_OPT(L"draw:opacity", draw_opacity_);
CP_XML_ATTR_OPT(L"draw:image-opacity", draw_image_opacity_);
CP_XML_ATTR_OPT(L"draw:opacity", draw_opacity_);
CP_XML_ATTR_OPT(L"draw:image-opacity", draw_image_opacity_);
CP_XML_ATTR_OPT(L"draw:fill-image-name", draw_fill_image_name_);
CP_XML_ATTR_OPT(L"draw:fill-gradient-name", draw_fill_gradient_name_);
@ -624,9 +624,6 @@ void common_horizontal_pos_attlist::serialize(CP_ATTR_NODE)
CP_XML_ATTR_OPT(L"svg:x", svg_x_);
}
// common_num_format_attlist
//////////////////////////////////////////////////////////////////////////////////////////////////
void common_num_format_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"style:num-format", style_num_format_);
@ -643,9 +640,6 @@ void common_num_format_attlist::serialize(CP_ATTR_NODE)
CP_XML_ATTR_OPT(L"style:num-letter-sync", style_num_letter_sync_);
}
// common_num_format_prefix_suffix_attlist
//////////////////////////////////////////////////////////////////////////////////////////////////
void common_num_format_prefix_suffix_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"style:num-prefix", style_num_prefix_);
@ -661,205 +655,83 @@ void common_num_format_prefix_suffix_attlist::serialize(CP_ATTR_NODE)
CP_XML_ATTR_OPT(L"style:num-prefix", style_num_prefix_);
CP_XML_ATTR_OPT(L"style:num-suffix", style_num_suffix_);
}
/// common-draw-style-name-attlist
//////////////////////////////////////////////////////////////////////////////////////////////////
void common_draw_style_name_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
void common_shape_table_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"draw:style-name", draw_style_name_);
CP_APPLY_ATTR(L"draw:class-names", draw_class_names_);
CP_APPLY_ATTR(L"presentation:style-name", presentation_style_name_);
CP_APPLY_ATTR(L"presentation:class-names", presentation_class_names_);
CP_APPLY_ATTR(L"table:end-cell-address", table_end_cell_address_);
CP_APPLY_ATTR(L"table:end-x", table_end_x_);
CP_APPLY_ATTR(L"table:end-y", table_end_y_);
CP_APPLY_ATTR(L"table:table-background", table_table_background_);
}
void common_draw_style_name_attlist::apply_from(const common_draw_style_name_attlist & Other)
{
_CP_APPLY_PROP2(draw_style_name_);
_CP_APPLY_PROP2(draw_class_names_);
_CP_APPLY_PROP2(presentation_style_name_);
_CP_APPLY_PROP2(presentation_class_names_);
}
void common_draw_style_name_attlist::serialize(CP_ATTR_NODE)
{
CP_XML_ATTR_OPT(L"draw:style-name", draw_style_name_);
CP_XML_ATTR_OPT(L"draw:class-names", draw_class_names_);
CP_XML_ATTR_OPT(L"presentation:style-name", presentation_style_name_);
CP_XML_ATTR_OPT(L"presentation:class-names", presentation_class_names_);
}
/// common-draw-z-index-attlist
//////////////////////////////////////////////////////////////////////////////////////////////////
void common_draw_z_index_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"draw:z-index", draw_z_index_);
}
void common_draw_z_index_attlist::apply_from(const common_draw_z_index_attlist & Other)
{
_CP_APPLY_PROP2(draw_z_index_);
}
void common_draw_z_index_attlist::serialize(CP_ATTR_NODE)
{
CP_XML_ATTR_OPT(L"draw:z-index", draw_z_index_);
}
/// common-draw-id-attlist
//////////////////////////////////////////////////////////////////////////////////////////////////
void common_draw_id_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"draw:id", draw_id_);
}
void common_draw_id_attlist::apply_from(const common_draw_id_attlist & Other)
{
_CP_APPLY_PROP2(draw_id_);
}
void common_draw_id_attlist::serialize(CP_ATTR_NODE)
{
CP_XML_ATTR_OPT(L"draw:id", draw_id_);
}
// common-draw-layer-name-attlist
//////////////////////////////////////////////////////////////////////////////////////////////////
void common_draw_layer_name_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"draw:layer", draw_layer_);
}
void common_draw_layer_name_attlist::apply_from(const common_draw_layer_name_attlist & Other)
{
_CP_APPLY_PROP2(draw_layer_);
}
void common_draw_layer_name_attlist::serialize(CP_ATTR_NODE)
{
CP_XML_ATTR_OPT(L"draw:layer", draw_layer_);
}
// common-draw-transform-attlist
//////////////////////////////////////////////////////////////////////////////////////////////////
void common_draw_transform_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"draw:transform", draw_transform_);
}
void common_draw_transform_attlist::apply_from(const common_draw_transform_attlist & Other)
{
_CP_APPLY_PROP2(draw_transform_);
}
void common_draw_transform_attlist::serialize(CP_ATTR_NODE)
{
CP_XML_ATTR_OPT(L"draw:transform", draw_transform_);
}
// common-draw-name-attlist
//////////////////////////////////////////////////////////////////////////////////////////////////
void common_draw_name_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"draw:name", draw_name_);
}
void common_draw_name_attlist::apply_from(const common_draw_name_attlist & Other)
{
_CP_APPLY_PROP2(draw_name_);
}
void common_draw_name_attlist::serialize(CP_ATTR_NODE)
{
CP_XML_ATTR_OPT(L"draw:name", draw_name_);
}
/// common-text-spreadsheet-shape-attlist
//////////////////////////////////////////////////////////////////////////////////////////////////
void common_text_spreadsheet_shape_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"table:end-cell-address", table_end_cell_address_);
CP_APPLY_ATTR(L"table:end-x", table_end_x_);
CP_APPLY_ATTR(L"table:end-y", table_end_y_);
CP_APPLY_ATTR(L"table:table-background", table_table_background_);
common_text_anchor_attlist_.add_attributes(Attributes);
}
void common_text_spreadsheet_shape_attlist::apply_from(const common_text_spreadsheet_shape_attlist & Other)
void common_shape_table_attlist::apply_from(const common_shape_table_attlist & Other)
{
_CP_APPLY_PROP2(table_end_cell_address_);
_CP_APPLY_PROP2(table_end_x_);
_CP_APPLY_PROP2(table_end_y_);
_CP_APPLY_PROP2(table_table_background_);
common_text_anchor_attlist_.apply_from(Other.common_text_anchor_attlist_);
}
void common_text_spreadsheet_shape_attlist::serialize(CP_ATTR_NODE)
void common_shape_table_attlist::serialize(CP_ATTR_NODE)
{
CP_XML_ATTR_OPT(L"table:end-cell-address", table_end_cell_address_);
CP_XML_ATTR_OPT(L"table:end-x", table_end_x_);
CP_XML_ATTR_OPT(L"table:end-y", table_end_y_);
CP_XML_ATTR_OPT(L"table:table-background", table_table_background_);
common_text_anchor_attlist_.serialize(CP_GET_XML_NODE());
CP_XML_ATTR_OPT(L"table:end-cell-address", table_end_cell_address_);
CP_XML_ATTR_OPT(L"table:end-x", table_end_x_);
CP_XML_ATTR_OPT(L"table:end-y", table_end_y_);
CP_XML_ATTR_OPT(L"table:table-background", table_table_background_);
}
/// common-draw-shape-with-styles-attlist
//////////////////////////////////////////////////////////////////////////////////////////////////
void common_draw_shape_with_styles_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
common_draw_z_index_attlist_.add_attributes(Attributes);
common_draw_id_attlist_.add_attributes(Attributes);
common_draw_layer_name_attlist_.add_attributes(Attributes);
common_draw_style_name_attlist_.add_attributes(Attributes);
common_draw_transform_attlist_.add_attributes(Attributes);
common_draw_name_attlist_.add_attributes(Attributes);
common_text_spreadsheet_shape_attlist_.add_attributes(Attributes);
}
void common_draw_shape_with_styles_attlist::apply_from(const common_draw_shape_with_styles_attlist & Other)
{
common_draw_z_index_attlist_.apply_from( Other.common_draw_z_index_attlist_);
common_draw_id_attlist_.apply_from( Other.common_draw_id_attlist_);
common_draw_layer_name_attlist_.apply_from( Other.common_draw_layer_name_attlist_);
common_draw_style_name_attlist_.apply_from( Other.common_draw_style_name_attlist_);
common_draw_transform_attlist_.apply_from( Other.common_draw_transform_attlist_);
common_draw_name_attlist_.apply_from( Other.common_draw_name_attlist_);
common_text_spreadsheet_shape_attlist_.apply_from( Other.common_text_spreadsheet_shape_attlist_);
}
void common_draw_shape_with_styles_attlist::serialize(CP_ATTR_NODE)
{
common_draw_z_index_attlist_.serialize(CP_GET_XML_NODE());
common_draw_id_attlist_.serialize(CP_GET_XML_NODE());
common_draw_layer_name_attlist_.serialize(CP_GET_XML_NODE());
common_draw_style_name_attlist_.serialize(CP_GET_XML_NODE());
common_draw_transform_attlist_.serialize(CP_GET_XML_NODE());
common_draw_name_attlist_.serialize(CP_GET_XML_NODE());
common_text_spreadsheet_shape_attlist_.serialize(CP_GET_XML_NODE());
}
/// common-draw-text-style-name-attlist
//////////////////////////////////////////////////////////////////////////////////////////////////
void common_draw_text_style_name_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
void common_shape_draw_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"draw:style-name", draw_style_name_);
CP_APPLY_ATTR(L"draw:class-names", draw_class_names_);
CP_APPLY_ATTR(L"draw:z-index", draw_z_index_);
CP_APPLY_ATTR(L"draw:id", draw_id_);
CP_APPLY_ATTR(L"draw:layer", draw_layer_);
CP_APPLY_ATTR(L"draw:transform", draw_transform_);
CP_APPLY_ATTR(L"draw:name", draw_name_);
CP_APPLY_ATTR(L"draw:text-style-name", draw_text_style_name_);
}
void common_draw_text_style_name_attlist::apply_from(const common_draw_text_style_name_attlist & Other)
void common_shape_draw_attlist::apply_from(const common_shape_draw_attlist & Other)
{
_CP_APPLY_PROP2(draw_z_index_);
_CP_APPLY_PROP2(draw_id_);
_CP_APPLY_PROP2(draw_style_name_);
_CP_APPLY_PROP2(draw_class_names_);
_CP_APPLY_PROP2(draw_layer_);
_CP_APPLY_PROP2(draw_transform_);
_CP_APPLY_PROP2(draw_name_);
_CP_APPLY_PROP2(draw_text_style_name_);
}
void common_draw_text_style_name_attlist::serialize(CP_ATTR_NODE)
void common_shape_draw_attlist::serialize(CP_ATTR_NODE)
{
CP_XML_ATTR_OPT(L"draw:style-name", draw_style_name_);
CP_XML_ATTR_OPT(L"draw:class-names", draw_class_names_);
CP_XML_ATTR_OPT(L"draw:id", draw_id_);
CP_XML_ATTR_OPT(L"draw:z-index", draw_z_index_);
CP_XML_ATTR_OPT(L"draw:layer", draw_layer_);
CP_XML_ATTR_OPT(L"draw:transform", draw_transform_);
CP_XML_ATTR_OPT(L"draw:name", draw_name_);
CP_XML_ATTR_OPT(L"draw:text-style-name", draw_text_style_name_);
}
/// common-draw-shape-with-text-and-styles-attlist
void common_draw_shape_with_text_and_styles_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
common_draw_shape_with_styles_attlist_.add_attributes(Attributes);
common_draw_text_style_name_attlist_.add_attributes(Attributes);
common_shape_draw_attlist_.add_attributes (Attributes);
common_shape_table_attlist_.add_attributes (Attributes);
common_text_anchor_attlist_.add_attributes (Attributes);
common_presentation_attlist_.add_attributes (Attributes);
}
void common_draw_shape_with_text_and_styles_attlist::apply_from(const common_draw_shape_with_text_and_styles_attlist & Other)
{
common_draw_shape_with_styles_attlist_.apply_from(common_draw_shape_with_styles_attlist_);
common_draw_text_style_name_attlist_.apply_from(common_draw_text_style_name_attlist_);
common_shape_draw_attlist_.apply_from (Other.common_shape_draw_attlist_);
common_shape_table_attlist_.apply_from (Other.common_shape_table_attlist_);
common_text_anchor_attlist_.apply_from (Other.common_text_anchor_attlist_);
common_presentation_attlist_.apply_from (Other.common_presentation_attlist_);
}
void common_draw_shape_with_text_and_styles_attlist::serialize(CP_ATTR_NODE)
{
common_draw_shape_with_styles_attlist_.serialize(CP_GET_XML_NODE());
common_draw_text_style_name_attlist_.serialize(CP_GET_XML_NODE());
common_shape_draw_attlist_.serialize(CP_GET_XML_NODE());
common_shape_table_attlist_.serialize(CP_GET_XML_NODE());
common_text_anchor_attlist_.serialize(CP_GET_XML_NODE());
common_presentation_attlist_.serialize(CP_GET_XML_NODE());
}
/// common-draw-position-attlist
//////////////////////////////////////////////////////////////////////////////////////////////////
void common_draw_position_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"svg:x", svg_x_);
@ -876,72 +748,57 @@ void common_draw_position_attlist::serialize(CP_ATTR_NODE)
CP_XML_ATTR_OPT(L"svg:y", svg_y_);
}
/// presentation-shape-attlist
void presentation_shape_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"presentation:class", presentation_class_);
CP_APPLY_ATTR(L"presentation:placeholder", presentation_placeholder_);
CP_APPLY_ATTR(L"presentation:user-transformed", presentation_user_transformed_);
}
void presentation_shape_attlist::apply_from(const presentation_shape_attlist & Other)
{
_CP_APPLY_PROP2(presentation_class_);
_CP_APPLY_PROP2(presentation_placeholder_);
_CP_APPLY_PROP2(presentation_user_transformed_);
}
void presentation_shape_attlist::serialize(CP_ATTR_NODE)
{
CP_XML_ATTR_OPT(L"presentation:class", presentation_class_);
CP_XML_ATTR_OPT(L"presentation:placeholder", presentation_placeholder_);
CP_XML_ATTR_OPT(L"presentation:user-transformed", presentation_user_transformed_);
}
/// common-data-style-attlist
void common_data_style_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"style:name", style_name_);
CP_APPLY_ATTR(L"number:language", number_language_);
CP_APPLY_ATTR(L"number:country", number_country_);
CP_APPLY_ATTR(L"number:title", number_title_);
CP_APPLY_ATTR(L"number:volatile", number_volatile_);
CP_APPLY_ATTR(L"number:transliteration-format", number_transliteration_format_);
CP_APPLY_ATTR(L"number:transliteration-language", number_transliteration_language_);
CP_APPLY_ATTR(L"number:transliteration-country", number_transliteration_country_);
CP_APPLY_ATTR(L"number:transliteration-style", number_transliteration_style_);
CP_APPLY_ATTR(L"style:name", style_name_);
CP_APPLY_ATTR(L"number:language", number_language_);
CP_APPLY_ATTR(L"number:country", number_country_);
CP_APPLY_ATTR(L"number:title", number_title_);
CP_APPLY_ATTR(L"number:volatile", number_volatile_);
CP_APPLY_ATTR(L"number:transliteration-format", number_transliteration_format_);
CP_APPLY_ATTR(L"number:transliteration-language", number_transliteration_language_);
CP_APPLY_ATTR(L"number:transliteration-country", number_transliteration_country_);
CP_APPLY_ATTR(L"number:transliteration-style", number_transliteration_style_);
}
void common_data_style_attlist::serialize(CP_ATTR_NODE)
{
CP_XML_ATTR_OPT(L"style:name", style_name_);
CP_XML_ATTR_OPT(L"number:language", number_language_);
CP_XML_ATTR_OPT(L"number:country", number_country_);
CP_XML_ATTR_OPT(L"number:title", number_title_);
CP_XML_ATTR_OPT(L"number:volatile", number_volatile_);
CP_XML_ATTR_OPT(L"number:transliteration-format", number_transliteration_format_);
CP_XML_ATTR_OPT(L"style:name", style_name_);
CP_XML_ATTR_OPT(L"number:language", number_language_);
CP_XML_ATTR_OPT(L"number:country", number_country_);
CP_XML_ATTR_OPT(L"number:title", number_title_);
CP_XML_ATTR_OPT(L"number:volatile", number_volatile_);
CP_XML_ATTR_OPT(L"number:transliteration-format", number_transliteration_format_);
CP_XML_ATTR_OPT(L"number:transliteration-language", number_transliteration_language_);
CP_XML_ATTR_OPT(L"number:transliteration-country", number_transliteration_country_);
CP_XML_ATTR_OPT(L"number:transliteration-style", number_transliteration_style_);
CP_XML_ATTR_OPT(L"number:transliteration-country", number_transliteration_country_);
CP_XML_ATTR_OPT(L"number:transliteration-style", number_transliteration_style_);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
void common_presentation_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"presentation:class", presentation_class_);
CP_APPLY_ATTR(L"presentation:style-name", style_name_);
CP_APPLY_ATTR(L"presentation:placeholder", presentation_placeholder_);
CP_APPLY_ATTR(L"presentation:class", presentation_class_);
CP_APPLY_ATTR(L"presentation:class-names", presentation_class_names_);
CP_APPLY_ATTR(L"presentation:style-name", presentation_style_name_);
CP_APPLY_ATTR(L"presentation:placeholder", presentation_placeholder_);
CP_APPLY_ATTR(L"presentation:user-transformed", presentation_user_transformed_);
}
void common_presentation_attlist::apply_from(const common_presentation_attlist & Other)
{
_CP_APPLY_PROP(presentation_class_, Other.presentation_class_);
_CP_APPLY_PROP(style_name_, Other.style_name_);
_CP_APPLY_PROP(presentation_placeholder_, Other.presentation_placeholder_);
_CP_APPLY_PROP(presentation_class_names_, Other.presentation_class_names_);
_CP_APPLY_PROP(presentation_class_, Other.presentation_class_);
_CP_APPLY_PROP(presentation_style_name_, Other.presentation_style_name_);
_CP_APPLY_PROP(presentation_placeholder_, Other.presentation_placeholder_);
_CP_APPLY_PROP(presentation_user_transformed_, Other.presentation_user_transformed_);
}
void common_presentation_attlist::serialize(CP_ATTR_NODE)
{
CP_XML_ATTR_OPT(L"presentation:class", presentation_class_);
CP_XML_ATTR_OPT(L"presentation:style-name", style_name_);
CP_XML_ATTR_OPT(L"presentation:placeholder", presentation_placeholder_);
CP_XML_ATTR_OPT(L"presentation:class", presentation_class_);
CP_XML_ATTR_OPT(L"presentation:class-names", presentation_class_names_);
CP_XML_ATTR_OPT(L"presentation:style-name", presentation_style_name_);
CP_XML_ATTR_OPT(L"presentation:placeholder", presentation_placeholder_);
CP_XML_ATTR_OPT(L"presentation:user-transformed", presentation_user_transformed_);
}
//////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -51,7 +51,6 @@
#include "stylehorizontalrel.h"
#include "percentorscale.h"
#include "anchortype.h"
#include "style_ref.h"
#include "linewidth.h"
#include "presentationclass.h"
#include "xlink.h"
@ -71,6 +70,10 @@
if (Other.A) \
A = Other.A;
#define _CP_APPLY_PROP3(A) \
if (Other->A) \
A = Other->A;
namespace cpdoccore {
namespace odf_types {
@ -469,123 +472,37 @@ public:
};
// common-draw-style-name-attlist
class common_draw_style_name_attlist
class common_shape_table_attlist
{
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void apply_from(const common_draw_style_name_attlist & Other);
void serialize(CP_ATTR_NODE);
_CP_OPT(style_ref) draw_style_name_;
_CP_OPT(std::wstring) draw_class_names_;
_CP_OPT(style_ref) presentation_style_name_;
_CP_OPT(std::wstring) presentation_class_names_;
};
/// common-draw-z-index-attlist
class common_draw_z_index_attlist
{
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void apply_from(const common_draw_z_index_attlist & Other);
void serialize(CP_ATTR_NODE);
_CP_OPT(int) draw_z_index_;
};
/// common-draw-id-attlist
class common_draw_id_attlist
{
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void apply_from(const common_draw_id_attlist & Other);
void serialize(CP_ATTR_NODE);
_CP_OPT(std::wstring) draw_id_;
};
/// common-draw-layer-name-attlist
class common_draw_layer_name_attlist
{
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void apply_from(const common_draw_layer_name_attlist & Other);
void serialize(CP_ATTR_NODE);
_CP_OPT(std::wstring) draw_layer_;
};
/// common-draw-transform-attlist
class common_draw_transform_attlist
{
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void apply_from(const common_draw_transform_attlist & Other);
void serialize(CP_ATTR_NODE);
_CP_OPT(std::wstring) draw_transform_;
};
/// common-draw-name-attlist
class common_draw_name_attlist
{
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void apply_from(const common_draw_name_attlist & Other);
void serialize(CP_ATTR_NODE);
_CP_OPT(std::wstring) draw_name_;
};
/// common-text-spreadsheet-shape-attlist
class common_text_spreadsheet_shape_attlist
{
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void apply_from(const common_text_spreadsheet_shape_attlist & Other);
void serialize(CP_ATTR_NODE);
void add_attributes (const xml::attributes_wc_ptr & Attributes );
void apply_from (const common_shape_table_attlist & Other);
void serialize (CP_ATTR_NODE);
_CP_OPT(std::wstring) table_end_cell_address_;
_CP_OPT(length) table_end_x_;
_CP_OPT(length) table_end_y_;
_CP_OPT(Bool) table_table_background_;
common_text_anchor_attlist common_text_anchor_attlist_;
};
/// common-draw-shape-with-styles-attlist
class common_draw_shape_with_styles_attlist
class common_shape_draw_attlist
{
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void apply_from(const common_draw_shape_with_styles_attlist & Other);
void serialize(CP_ATTR_NODE);
common_draw_z_index_attlist common_draw_z_index_attlist_;
common_draw_id_attlist common_draw_id_attlist_;
common_draw_layer_name_attlist common_draw_layer_name_attlist_;
common_draw_style_name_attlist common_draw_style_name_attlist_;
common_draw_transform_attlist common_draw_transform_attlist_;
common_draw_name_attlist common_draw_name_attlist_;
common_text_spreadsheet_shape_attlist common_text_spreadsheet_shape_attlist_;
void add_attributes (const xml::attributes_wc_ptr & Attributes );
void apply_from (const common_shape_draw_attlist & Other);
void serialize (CP_ATTR_NODE);
_CP_OPT(std::wstring) draw_style_name_;
_CP_OPT(std::wstring) draw_text_style_name_;
_CP_OPT(std::wstring) draw_class_names_;
_CP_OPT(std::wstring) draw_name_;
_CP_OPT(std::wstring) draw_id_;
_CP_OPT(std::wstring) draw_layer_;
_CP_OPT(std::wstring) draw_transform_;
_CP_OPT(int) draw_z_index_;
};
/// common-draw-text-style-name-attlist
class common_draw_text_style_name_attlist
{
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void apply_from(const common_draw_text_style_name_attlist & Other);
void serialize(CP_ATTR_NODE);
_CP_OPT(style_ref) draw_text_style_name_;
};
/// common-draw-position-attlist
class common_draw_position_attlist
{
public:
@ -598,7 +515,20 @@ public:
};
/// common-draw-shape-with-text-and-styles-attlist
class common_presentation_attlist
{
public:
void add_attributes ( const xml::attributes_wc_ptr & Attributes );
void apply_from (const common_presentation_attlist & Other);
void serialize (CP_ATTR_NODE);
_CP_OPT(presentation_class) presentation_class_;
_CP_OPT(std::wstring) presentation_class_names_;
_CP_OPT(std::wstring) presentation_style_name_;
_CP_OPT(Bool) presentation_placeholder_;
_CP_OPT(Bool) presentation_user_transformed_;
};
class common_draw_shape_with_text_and_styles_attlist
{
public:
@ -606,44 +536,31 @@ public:
void apply_from(const common_draw_shape_with_text_and_styles_attlist & Other);
void serialize(CP_ATTR_NODE);
common_draw_shape_with_styles_attlist common_draw_shape_with_styles_attlist_;
common_draw_text_style_name_attlist common_draw_text_style_name_attlist_;
common_shape_draw_attlist common_shape_draw_attlist_;
common_shape_table_attlist common_shape_table_attlist_;
common_text_anchor_attlist common_text_anchor_attlist_;
common_presentation_attlist common_presentation_attlist_;
};
/// presentation-shape-attlist
class presentation_shape_attlist
{
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void apply_from(const presentation_shape_attlist & Other);
void serialize(CP_ATTR_NODE);
_CP_OPT(std::wstring) presentation_class_;
_CP_OPT(Bool) presentation_placeholder_;
_CP_OPT(Bool) presentation_user_transformed_;
};
/// common-data-style-attlist
class common_data_style_attlist
{
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void serialize(CP_ATTR_NODE);
_CP_OPT(style_ref) style_name_;
_CP_OPT(std::wstring) number_language_;
_CP_OPT(std::wstring) number_country_;
_CP_OPT(std::wstring) number_title_;
_CP_OPT(std::wstring) style_name_;
_CP_OPT(std::wstring) number_language_;
_CP_OPT(std::wstring) number_country_;
_CP_OPT(std::wstring) number_title_;
_CP_OPT(Bool) number_volatile_;
_CP_OPT(std::wstring) number_transliteration_format_;
_CP_OPT(std::wstring) number_transliteration_language_;
_CP_OPT(std::wstring) number_transliteration_country_;
_CP_OPT(std::wstring) number_transliteration_style_;
_CP_OPT(std::wstring) number_transliteration_format_;
_CP_OPT(std::wstring) number_transliteration_language_;
_CP_OPT(std::wstring) number_transliteration_country_;
_CP_OPT(std::wstring) number_transliteration_style_;
};
struct union_common_draw_attlists
{
common_draw_shape_with_text_and_styles_attlist shape_with_text_and_styles_;
@ -653,29 +570,12 @@ struct union_common_draw_attlists
void serialize(CP_ATTR_NODE);
};
// common-presentation-attlist
class common_presentation_attlist
{
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void apply_from(const common_presentation_attlist & Other);
void serialize(CP_ATTR_NODE);
_CP_OPT(presentation_class) presentation_class_;
_CP_OPT(std::wstring) style_name_;
_CP_OPT(Bool) presentation_placeholder_;
};
// common-anim-smil-attlist
class common_anim_smil_attlist
{
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void apply_from(const common_anim_smil_attlist & Other);
void serialize(CP_ATTR_NODE){}
void add_attributes ( const xml::attributes_wc_ptr & Attributes );
void apply_from (const common_anim_smil_attlist & Other);
void serialize (CP_ATTR_NODE){}
//_CP_OPT(std::wstring) smil_direction_;
//_CP_OPT(std::wstring) smil_subtype_;

View File

@ -37,6 +37,55 @@
namespace cpdoccore { namespace odf_types {
std::wostream & operator << (std::wostream & _Wostream, const smil_transition_type & _Val)
{
switch(_Val.get_type())
{
case smil_transition_type::barWipe : _Wostream << L"barwipe" ; break;
case smil_transition_type::boxWipe : _Wostream << L"boxwipe" ; break;
case smil_transition_type::fourBoxWipe : _Wostream << L"fourboxwipe" ; break;
case smil_transition_type::barnDoorWipe : _Wostream << L"barndoorwipe" ; break;
case smil_transition_type::diagonalWipe : _Wostream << L"diagonalwipe" ; break;
case smil_transition_type::bowTieWipe : _Wostream << L"bowtiewipe" ; break;
case smil_transition_type::miscDiagonalWipe : _Wostream << L"miscdiagonalwipe"; break;
case smil_transition_type::veeWipe : _Wostream << L"veewipe" ; break;
case smil_transition_type::barnVeeWipe : _Wostream << L"barnveewipe" ; break;
case smil_transition_type::zigZagWipe : _Wostream << L"zigzagwipe" ; break;
case smil_transition_type::barnZigZagWipe : _Wostream << L"barnzigzagwipe" ; break;
case smil_transition_type::irisWipe : _Wostream << L"iriswipe" ; break;
case smil_transition_type::triangleWipe : _Wostream << L"trianglewipe" ; break;
case smil_transition_type::arrowHeadWipe : _Wostream << L"arrowheadwipe" ; break;
case smil_transition_type::pentagonWipe : _Wostream << L"pentagonwipe" ; break;
case smil_transition_type::hexagonWipe : _Wostream << L"hexagonwipe" ; break;
case smil_transition_type::ellipseWipe : _Wostream << L"ellipsewipe" ; break;
case smil_transition_type::eyeWipe : _Wostream << L"eyewipe" ; break;
case smil_transition_type::roundRectWipe : _Wostream << L"roundrectwipe" ; break;
case smil_transition_type::starWipe : _Wostream << L"starwipe" ; break;
case smil_transition_type::miscShapeWipe : _Wostream << L"miscshapewipe" ; break;
case smil_transition_type::clockWipe : _Wostream << L"clockwipe" ; break;
case smil_transition_type::pinWheelWipe : _Wostream << L"pinwheelwipe" ; break;
case smil_transition_type::singleSweepWipe : _Wostream << L"singlesweepwipe" ; break;
case smil_transition_type::fanWipe : _Wostream << L"fanwipe" ; break;
case smil_transition_type::doubleFanWipe : _Wostream << L"doublefanwipe" ; break;
case smil_transition_type::doubleSweepWipe : _Wostream << L"doublesweepwipe" ; break;
case smil_transition_type::saloonDoorWipe : _Wostream << L"saloondoorwipe" ; break;
case smil_transition_type::windshieldWipe : _Wostream << L"windshieldwipe" ; break;
case smil_transition_type::snakeWipe : _Wostream << L"snakewipe" ; break;
case smil_transition_type::spiralWipe : _Wostream << L"spiralwipe" ; break;
case smil_transition_type::parallelSnakesWipe: _Wostream << L"parallelsnakeswipe"; break;
case smil_transition_type::boxSnakesWipe : _Wostream << L"boxsnakeswipe" ; break;
case smil_transition_type::waterfallWipe : _Wostream << L"waterfallwipe" ; break;
case smil_transition_type::pushWipe : _Wostream << L"pushwipe" ; break;
case smil_transition_type::slideWipe : _Wostream << L"slidewipe" ; break;
case smil_transition_type::fade : _Wostream << L"fade" ; break;
case smil_transition_type::checkerBoardWipe : _Wostream << L"checkerboardwipe"; break;
case smil_transition_type::blindsWipe : _Wostream << L"blindswipe" ; break;
case smil_transition_type::dissolve : _Wostream << L"dissolve" ; break;
case smil_transition_type::randomBarWipe : _Wostream << L"randombarwipe" ; break;
}
return _Wostream;
}
smil_transition_type smil_transition_type::parse(const std::wstring & Str)
{
std::wstring tmp = Str;

View File

@ -68,7 +68,8 @@ public:
PageLayout,
MasterPage,
HandoutMaster,
LayerSet
LayerSet,
PresentationPageLayout
};
style_family() : type_(Default) {}

View File

@ -216,10 +216,10 @@ int Compute_BorderWidth(const graphic_format_properties & graphicProperties, Bor
switch(borderSide)
{
case sideTop: borderValue = graphicProperties.common_border_attlist_.fo_border_top_; break;
case sideBottom: borderValue = graphicProperties.common_border_attlist_.fo_border_bottom_; break;
case sideLeft: borderValue = graphicProperties.common_border_attlist_.fo_border_left_; break;
case sideRight: borderValue = graphicProperties.common_border_attlist_.fo_border_right_; break;
case sideTop: borderValue = graphicProperties.common_border_attlist_.fo_border_top_; break;
case sideBottom: borderValue = graphicProperties.common_border_attlist_.fo_border_bottom_; break;
case sideLeft: borderValue = graphicProperties.common_border_attlist_.fo_border_left_; break;
case sideRight: borderValue = graphicProperties.common_border_attlist_.fo_border_right_; break;
}
if (!borderValue)
@ -281,14 +281,14 @@ void Compute_GradientFill(draw_gradient * image_style,oox::oox_gradient_fill_ptr
fill->style = 0;
point.pos = 0;
if (image_style->draw_start_color_)point.color_ref = image_style->draw_start_color_->get_hex_value();
if (image_style->draw_start_intensity_)point.opacity = image_style->draw_start_intensity_->get_value();
if (image_style->draw_start_color_) point.color_ref = image_style->draw_start_color_->get_hex_value();
if (image_style->draw_start_intensity_) point.opacity = image_style->draw_start_intensity_->get_value();
fill->colors.push_back(point);
point.pos = 100;
if (image_style->draw_end_color_)point.color_ref = image_style->draw_end_color_->get_hex_value();
if (image_style->draw_end_intensity_)point.opacity = image_style->draw_end_intensity_->get_value();
if (image_style->draw_end_color_) point.color_ref = image_style->draw_end_color_->get_hex_value();
if (image_style->draw_end_intensity_) point.opacity = image_style->draw_end_intensity_->get_value();
fill->colors.push_back(point);
}break;
@ -297,20 +297,20 @@ void Compute_GradientFill(draw_gradient * image_style,oox::oox_gradient_fill_ptr
fill->style = 0;
point.pos = 0;
if (image_style->draw_end_color_)point.color_ref = image_style->draw_end_color_->get_hex_value();
if (image_style->draw_end_intensity_)point.opacity = image_style->draw_end_intensity_->get_value();
if (image_style->draw_end_color_) point.color_ref = image_style->draw_end_color_->get_hex_value();
if (image_style->draw_end_intensity_) point.opacity = image_style->draw_end_intensity_->get_value();
fill->colors.push_back(point);
point.pos = 50;
if (image_style->draw_start_color_)point.color_ref = image_style->draw_start_color_->get_hex_value();
if (image_style->draw_start_intensity_)point.opacity = image_style->draw_start_intensity_->get_value();
if (image_style->draw_start_color_) point.color_ref = image_style->draw_start_color_->get_hex_value();
if (image_style->draw_start_intensity_) point.opacity = image_style->draw_start_intensity_->get_value();
fill->colors.push_back(point);
point.pos = 100;
if (image_style->draw_end_color_)point.color_ref = image_style->draw_end_color_->get_hex_value();
if (image_style->draw_end_intensity_)point.opacity = image_style->draw_end_intensity_->get_value();
if (image_style->draw_end_color_) point.color_ref = image_style->draw_end_color_->get_hex_value();
if (image_style->draw_end_intensity_) point.opacity = image_style->draw_end_intensity_->get_value();
fill->colors.push_back(point);
}break;
@ -319,41 +319,35 @@ void Compute_GradientFill(draw_gradient * image_style,oox::oox_gradient_fill_ptr
case gradient_style::square:
case gradient_style::rectangular:
{
if (style == gradient_style::radial || style == gradient_style::ellipsoid) fill->style = 2;
if (style == gradient_style::radial ||
style == gradient_style::ellipsoid) fill->style = 2;
if (style == gradient_style::square ) fill->style = 1;
if (style == gradient_style::rectangular) fill->style = 3;
point.pos = 0;
if (image_style->draw_end_color_)point.color_ref = image_style->draw_end_color_->get_hex_value();
if (image_style->draw_end_intensity_)point.opacity = image_style->draw_end_intensity_->get_value();
fill->colors.push_back(point);
point.pos = 100;
if (image_style->draw_start_color_)point.color_ref = image_style->draw_start_color_->get_hex_value();
if (image_style->draw_start_intensity_)point.opacity = image_style->draw_start_intensity_->get_value();
if (image_style->draw_start_color_) point.color_ref = image_style->draw_start_color_->get_hex_value();
if (image_style->draw_start_intensity_) point.opacity = image_style->draw_start_intensity_->get_value();
fill->colors.push_back(point);
if (image_style->draw_cx_)//хохма - у мс в конвертилке из open-office перепутаны l & r !!!
point.pos = 100;
if (image_style->draw_end_color_) point.color_ref = image_style->draw_end_color_->get_hex_value();
if (image_style->draw_end_intensity_) point.opacity = image_style->draw_end_intensity_->get_value();
fill->colors.push_back(point);
fill->rect[0] = fill->rect[1] = 0;
fill->rect[2] = fill->rect[3] = 100;
if (image_style->draw_cx_)
{
fill->rect[0]=image_style->draw_cx_->get_value();
fill->rect[2]=100-image_style->draw_cx_->get_value();
}
else
{
fill->rect[0]=0;
fill->rect[2]=100;
fill->rect[0] = 100 - image_style->draw_cx_->get_value();
fill->rect[2] = image_style->draw_cx_->get_value();
}
if (image_style->draw_cy_)
{
fill->rect[1]=image_style->draw_cy_->get_value();
fill->rect[3]=100-image_style->draw_cy_->get_value();
}
else
{
fill->rect[1]=0;
fill->rect[3]=100;
fill->rect[1] = 100 - image_style->draw_cy_->get_value();
fill->rect[3] = image_style->draw_cy_->get_value();
}
}break;
}
@ -427,8 +421,14 @@ void Compute_GraphicFill(const common_draw_fill_attlist & props, const office_el
{
switch(image->style_repeat_->get_type())
{
case style_repeat::Repeat : fill.bitmap->bTile = true; break;
case style_repeat::Stretch : fill.bitmap->bStretch = true; break;
case style_repeat::Repeat :
fill.bitmap->bTile = true;
fill.bitmap->bStretch = false;
break;
case style_repeat::Stretch :
fill.bitmap->bStretch = true;
fill.bitmap->bTile = false; //?? для background точно выключать
break;
}
}
if (image->draw_opacity_)
@ -445,8 +445,14 @@ void Compute_GraphicFill(const common_draw_fill_attlist & props, const office_el
{
switch(props.style_repeat_->get_type())
{
case style_repeat::Repeat : fill.bitmap->bTile = true; break;
case style_repeat::Stretch : fill.bitmap->bStretch = true; break;
case style_repeat::Repeat :
fill.bitmap->bTile = true;
fill.bitmap->bStretch = false;
break;
case style_repeat::Stretch :
fill.bitmap->bStretch = true;
fill.bitmap->bTile = false;
break;
}
}
else
@ -548,8 +554,8 @@ void draw_a::add_attributes( const xml::attributes_wc_ptr & Attributes )
CP_APPLY_ATTR(L"office:name" , office_name_ , std::wstring(L""));
CP_APPLY_ATTR(L"office:target-frame-name" , office_target_frame_name_);
CP_APPLY_ATTR(L"text:style-name" , text_style_name_ , style_ref(L""));
CP_APPLY_ATTR(L"text:visited-style-name" , text_visited_style_name_ , style_ref(L""));
CP_APPLY_ATTR(L"text:style-name" , text_style_name_ , std::wstring(L""));
CP_APPLY_ATTR(L"text:visited-style-name" , text_visited_style_name_ , std::wstring(L""));
}
@ -660,7 +666,7 @@ void xlsx_convert_transforms(std::wstring transformStr, oox::xlsx_conversion_con
boost::algorithm::split(transforms,transformStr, boost::algorithm::is_any_of(L")"), boost::algorithm::token_compress_on);
for (int i = 0; i < transforms.size(); i++)
for (size_t i = 0; i < transforms.size(); i++)
{
std::vector<std::wstring> transform;
boost::algorithm::split(transform, transforms[i], boost::algorithm::is_any_of(L"("), boost::algorithm::token_compress_on);

View File

@ -106,8 +106,8 @@ private:
std::wstring office_name_;
_CP_OPT(odf_types::target_frame_name) office_target_frame_name_;
odf_types::style_ref text_style_name_;
odf_types::style_ref text_visited_style_name_;
std::wstring text_style_name_;
std::wstring text_visited_style_name_;
};
CP_REGISTER_OFFICE_ELEMENT2(draw_a);

View File

@ -166,14 +166,10 @@ void draw_frame::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
idx_in_owner = -1;
common_presentation_attlist_.add_attributes(Attributes);
common_draw_attlists_.shape_with_text_and_styles_.add_attributes(Attributes);
common_draw_attlists_.position_.add_attributes(Attributes);
common_draw_attlists_.rel_size_.add_attributes(Attributes);
presentation_shape_attlist_.add_attributes(Attributes);
draw_frame_attlist_.add_attributes(Attributes);
}
@ -381,7 +377,7 @@ std::wstring draw_object::office_convert(odf_document * odfDocument, int type)
std::wstring temp_file = folderPath + FILE_SEPARATOR_STR + href_result;
COfficeUtils oCOfficeUtils(NULL);
oCOfficeUtils.CompressFileOrDirectory(objectOutPath.c_str(), temp_file.c_str(), -1);
oCOfficeUtils.CompressFileOrDirectory(objectOutPath.c_str(), temp_file.c_str(), true);
}
NSDirectory::DeleteDirectory(objectOutPath);

View File

@ -150,7 +150,7 @@ public:
static const ElementType type = typeDrawFrame;
CPDOCCORE_DEFINE_VISITABLE();
draw_frame() : oox_drawing_(NULL) {}
draw_frame() : oox_drawing_(NULL), idx_in_owner(-1) {}
virtual void docx_convert(oox::docx_conversion_context & Context);
virtual void xlsx_convert(oox::xlsx_conversion_context & Context);
@ -161,10 +161,8 @@ public:
int idx_in_owner ;
odf_types::common_presentation_attlist common_presentation_attlist_;
odf_types::union_common_draw_attlists common_draw_attlists_;
odf_types::presentation_shape_attlist presentation_shape_attlist_;
draw_frame_attlist draw_frame_attlist_;
// draw-text-box, draw-image, draw-object, draw-object-ole, draw-applet, draw-floating-frame, draw-plugin

View File

@ -180,11 +180,7 @@ int ComputeMarginX(const style_page_layout_properties * pagePropertiesNode,
const std::vector<odf_reader::_property> & additional)
{
const _CP_OPT(anchor_type) anchor = attlists_.shape_with_text_and_styles_.
common_draw_shape_with_styles_attlist_.
common_text_spreadsheet_shape_attlist_.
common_text_anchor_attlist_.
type_;
const _CP_OPT(anchor_type) anchor = attlists_.shape_with_text_and_styles_.common_text_anchor_attlist_.type_;
_CP_OPT(horizontal_rel) styleHorizontalRel = graphicProperties.common_horizontal_rel_attlist_.style_horizontal_rel_;
_CP_OPT(horizontal_pos) styleHorizontalPos = graphicProperties.common_horizontal_pos_attlist_.style_horizontal_pos_;
@ -575,16 +571,12 @@ int ComputeMarginY(const style_page_layout_properties_attlist & pageProperties,
// TODO : recursive result!!!
const _CP_OPT(anchor_type) anchor =
attlists_.shape_with_text_and_styles_.
common_draw_shape_with_styles_attlist_.
common_text_spreadsheet_shape_attlist_.
common_text_anchor_attlist_.
type_;
//todooo пока не ясно как привязать к определеной странице в документе ...
//const _CP_OPT(unsigned int) anchor_page_number =
// attlists_.shape_with_text_and_styles_.
// common_draw_shape_with_styles_attlist_.
// common_text_spreadsheet_shape_attlist_.
// common_text_anchor_attlist_.
// page_number_;
@ -592,7 +584,7 @@ int ComputeMarginY(const style_page_layout_properties_attlist & pageProperties,
_CP_OPT(vertical_pos) styleVerticallPos = graphicProperties.common_vertical_pos_attlist_.style_vertical_pos_;
_CP_OPT(double) dVal;
if (GetProperty(additional, L"svg:translate_y", dVal));
GetProperty(additional, L"svg:translate_y", dVal);
const _CP_OPT(length) translation = length(dVal ? *dVal : 0, length::pt);
const _CP_OPT(length) pageHeight = pageProperties.fo_page_height_;
@ -765,10 +757,8 @@ int ComputeMarginY(const style_page_layout_properties_attlist & pageProperties,
void common_draw_docx_convert(oox::docx_conversion_context & Context, const union_common_draw_attlists & attlists_, oox::_docx_drawing *drawing)
{
const _CP_OPT(style_ref) & styleRef = attlists_.shape_with_text_and_styles_.
common_draw_shape_with_styles_attlist_.common_draw_style_name_attlist_.draw_style_name_;
const std::wstring styleName = styleRef ? styleRef->style_name() : L"";
const std::wstring styleName = attlists_.shape_with_text_and_styles_.
common_shape_draw_attlist_.draw_style_name_.get_value_or(L"");
std::vector<const odf_reader::style_instance *> instances;
odf_reader::style_instance* styleInst = Context.root()->odf_context().styleContainer().style_by_name(styleName, odf_types::style_family::Graphic,Context.process_headers_footers_);
@ -813,12 +803,7 @@ void common_draw_docx_convert(oox::docx_conversion_context & Context, const unio
drawing->styleVerticalPos = graphicProperties.common_vertical_pos_attlist_.style_vertical_pos_;
drawing->styleVerticalRel = graphicProperties.common_vertical_rel_attlist_.style_vertical_rel_;
_CP_OPT(anchor_type) anchor =
attlists_.shape_with_text_and_styles_.
common_draw_shape_with_styles_attlist_.
common_text_spreadsheet_shape_attlist_.
common_text_anchor_attlist_.
type_;
_CP_OPT(anchor_type) anchor = attlists_.shape_with_text_and_styles_.common_text_anchor_attlist_.type_;
int level_drawing = Context.get_drawing_context().get_current_level();
@ -826,9 +811,9 @@ void common_draw_docx_convert(oox::docx_conversion_context & Context, const unio
{
drawing->isInline = true;
}
if (attlists_.shape_with_text_and_styles_.common_draw_shape_with_styles_attlist_.common_draw_transform_attlist_.draw_transform_)
if (attlists_.shape_with_text_and_styles_.common_shape_draw_attlist_.draw_transform_)
{
std::wstring transformStr = attlists_.shape_with_text_and_styles_.common_draw_shape_with_styles_attlist_.common_draw_transform_attlist_.draw_transform_.get();
std::wstring transformStr = attlists_.shape_with_text_and_styles_.common_shape_draw_attlist_.draw_transform_.get();
oox_convert_transforms(transformStr, drawing->additional);
}
if (!drawing->isInline)
@ -839,7 +824,7 @@ void common_draw_docx_convert(oox::docx_conversion_context & Context, const unio
drawing->relativeHeight = L"2";
drawing->behindDoc = L"0";
_CP_OPT(int) zIndex = attlists_.shape_with_text_and_styles_.common_draw_shape_with_styles_attlist_.common_draw_z_index_attlist_.draw_z_index_;
_CP_OPT(int) zIndex = attlists_.shape_with_text_and_styles_.common_shape_draw_attlist_.draw_z_index_;
if (zIndex)//порядок отрисовки объектов
{
@ -893,17 +878,17 @@ void common_draw_docx_convert(oox::docx_conversion_context & Context, const unio
Compute_GraphicFill(graphicProperties.common_draw_fill_attlist_, graphicProperties.style_background_image_, Context.root()->odf_context().drawStyles() ,drawing->fill, bTxbx);
if ((drawing->fill.bitmap) && (drawing->fill.bitmap->rId.length() < 1))
if ((drawing->fill.bitmap) && (drawing->fill.bitmap->rId.empty()))
{
std::wstring href = drawing->fill.bitmap->xlink_href_;
drawing->fill.bitmap->rId = Context.add_mediaitem(href, oox::typeImage, drawing->fill.bitmap->isInternal, href);
}
////////////////////////////////////////////////////
drawing->additional.push_back(odf_reader::_property(L"border_width_left", Compute_BorderWidth(graphicProperties, sideLeft)));
drawing->additional.push_back(odf_reader::_property(L"border_width_left", Compute_BorderWidth(graphicProperties, sideLeft)));
drawing->additional.push_back(odf_reader::_property(L"border_width_top", Compute_BorderWidth(graphicProperties, sideTop)));
drawing->additional.push_back(odf_reader::_property(L"border_width_right", Compute_BorderWidth(graphicProperties, sideRight)));
drawing->additional.push_back(odf_reader::_property(L"border_width_bottom", Compute_BorderWidth(graphicProperties, sideBottom)));
drawing->additional.push_back(odf_reader::_property(L"border_width_right", Compute_BorderWidth(graphicProperties, sideRight)));
drawing->additional.push_back(odf_reader::_property(L"border_width_bottom", Compute_BorderWidth(graphicProperties, sideBottom)));
if (graphicProperties.common_border_attlist_.fo_border_)
{
@ -1111,7 +1096,7 @@ void draw_image::docx_convert(oox::docx_conversion_context & Context)
Context.set_run_state (false);
Context.set_paragraph_state (false);
for (int i = 0; i < content_.size(); i++)
for (size_t i = 0; i < content_.size(); i++)
{
content_[i]->docx_convert(Context);
}
@ -1138,26 +1123,22 @@ void draw_image::docx_convert(oox::docx_conversion_context & Context)
drawing->fill.bitmap->rId = Context.add_mediaitem(href, oox::typeImage, drawing->fill.bitmap->isInternal,href);
drawing->fill.bitmap->bStretch = true;
const _CP_OPT(style_ref) & styleRef = frame->common_draw_attlists_.shape_with_text_and_styles_.
common_draw_shape_with_styles_attlist_.
common_draw_style_name_attlist_.
draw_style_name_;
const std::wstring styleName = styleRef ? styleRef->style_name() : L"";
const std::wstring styleName = frame->common_draw_attlists_.shape_with_text_and_styles_.
common_shape_draw_attlist_.draw_style_name_.get_value_or(L"");
odf_reader::style_instance* styleInst = Context.root()->odf_context().styleContainer().style_by_name(styleName, odf_types::style_family::Graphic,Context.process_headers_footers_);
odf_reader::style_graphic_properties *properties = NULL;
if (styleInst) properties = styleInst->content()->get_style_graphic_properties();
odf_reader::graphic_format_properties *properties = NULL;
if (styleInst) properties = styleInst->content()->get_graphic_properties();
////////////////
if (properties)
{
if (properties->content().fo_clip_ && drawing->fill.bitmap)
if (properties->fo_clip_ && drawing->fill.bitmap)
{
std::wstring strRectClip = properties->content().fo_clip_.get();
strRectClip = strRectClip.substr(5,strRectClip.length()-6);
std::wstring strRectClip = properties->fo_clip_.get();
strRectClip = strRectClip.substr(5, strRectClip.length() - 6);
std::wstring fileName = Context.root()->get_folder() + FILE_SEPARATOR_STR+ href;
std::wstring fileName = Context.root()->get_folder() + FILE_SEPARATOR_STR + href;
drawing->fill.bitmap->bCrop = parse_clipping(strRectClip, fileName, drawing->fill.bitmap->cropRect, NULL/*Context.applicationFonts_*/);
}
@ -1279,8 +1260,7 @@ void draw_g::docx_convert(oox::docx_conversion_context & Context)
const _CP_OPT(std::wstring) name =
common_draw_attlists_.shape_with_text_and_styles_.
common_draw_shape_with_styles_attlist_.
common_draw_name_attlist_.draw_name_;
common_shape_draw_attlist_.draw_name_;
Context.get_drawing_context().add_name_object(name.get_value_or(L"Group"));
@ -1380,8 +1360,7 @@ void draw_frame::docx_convert(oox::docx_conversion_context & Context)
const _CP_OPT(std::wstring) name =
common_draw_attlists_.shape_with_text_and_styles_.
common_draw_shape_with_styles_attlist_.
common_draw_name_attlist_.draw_name_;
common_shape_draw_attlist_.draw_name_;
Context.get_drawing_context().add_name_object(name.get_value_or(L"Object"));
@ -1393,7 +1372,7 @@ void draw_frame::docx_convert(oox::docx_conversion_context & Context)
common_draw_docx_convert(Context, common_draw_attlists_, drawing);
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
content_[i]->docx_convert(Context);
}

View File

@ -85,15 +85,12 @@ void draw_frame::pptx_convert(oox::pptx_conversion_context & Context)
{
Context.get_slide_context().start_frame();
common_draw_shape_with_styles_attlist common_draw_attlist_ = common_draw_attlists_.shape_with_text_and_styles_.common_draw_shape_with_styles_attlist_;
common_shape_draw_attlist &common_draw_attlist_ = common_draw_attlists_.shape_with_text_and_styles_.common_shape_draw_attlist_;
common_presentation_attlist &common_presentation_attlist_= common_draw_attlists_.shape_with_text_and_styles_.common_presentation_attlist_;
const int z_index = common_draw_attlist_.common_draw_z_index_attlist_.draw_z_index_.get_value_or(0);
const std::wstring name = common_draw_attlist_.common_draw_name_attlist_.draw_name_.get_value_or(L"");
const std::wstring textStyleName = common_draw_attlists_.shape_with_text_and_styles_.
common_draw_text_style_name_attlist_.
draw_text_style_name_.get_value_or(style_ref(L"")).style_name();
const int z_index = common_draw_attlist_.draw_z_index_.get_value_or(0);
const std::wstring name = common_draw_attlist_.draw_name_.get_value_or(L"");
const std::wstring textStyleName = common_draw_attlist_.draw_text_style_name_.get_value_or(L"");
//////////////////////////////////////////////////////////////////////////
const _CP_OPT(length) svg_widthVal = common_draw_attlists_.rel_size_.common_draw_size_attlist_.svg_width_;
@ -114,26 +111,26 @@ void draw_frame::pptx_convert(oox::pptx_conversion_context & Context)
Context.get_slide_context().set_rect(width_pt, height_pt, x_pt, y_pt);
}
///////////////////////////////////////////////////////////////////////////////////////
if (common_draw_attlist_.common_draw_transform_attlist_.draw_transform_)
if (common_draw_attlist_.draw_transform_)
{
std::wstring transformStr = common_draw_attlist_.common_draw_transform_attlist_.draw_transform_.get();
std::wstring transformStr = common_draw_attlist_.draw_transform_.get();
pptx_convert_transforms(transformStr,Context);
}
////////////////////////////////////////
std::wstring Anchor;
if (common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_cell_address_)
if (common_draw_attlists_.shape_with_text_and_styles_.common_shape_table_attlist_.table_end_cell_address_)
{
Anchor = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_cell_address_.get();
const double a_x_pt = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_x_.get_value_or(length(0)).get_value_unit(length::pt);
const double a_y_pt = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_y_.get_value_or(length(0)).get_value_unit(length::pt);
Anchor = common_draw_attlists_.shape_with_text_and_styles_.common_shape_table_attlist_.table_end_cell_address_.get();
const double a_x_pt = common_draw_attlists_.shape_with_text_and_styles_.common_shape_table_attlist_.table_end_x_.get_value_or(length(0)).get_value_unit(length::pt);
const double a_y_pt = common_draw_attlists_.shape_with_text_and_styles_.common_shape_table_attlist_.table_end_y_.get_value_or(length(0)).get_value_unit(length::pt);
Context.get_slide_context().set_anchor(Anchor,a_x_pt,a_y_pt);
}
//////////////////////////////////////////////
std::vector<const odf_reader::style_instance *> instances;
const std::wstring grStyleName = common_draw_attlist_.common_draw_style_name_attlist_.draw_style_name_.get_value_or(style_ref(L"")).style_name();
const std::wstring baseStyleName = common_draw_attlist_.common_draw_style_name_attlist_.presentation_style_name_.get_value_or(style_ref(L"")).style_name();
const std::wstring grStyleName = common_draw_attlist_.draw_style_name_.get_value_or(L"");
const std::wstring baseStyleName = common_presentation_attlist_.presentation_style_name_.get_value_or(L"");
odf_reader::style_instance* grStyleInst =
Context.root()->odf_context().styleContainer().style_by_name(grStyleName, odf_types::style_family::Graphic,Context.process_masters_);
@ -141,9 +138,9 @@ void draw_frame::pptx_convert(oox::pptx_conversion_context & Context)
odf_reader::style_instance* baseStyleInst =
Context.root()->odf_context().styleContainer().style_by_name(baseStyleName, odf_types::style_family::Presentation,Context.process_masters_);
if (baseStyleInst && ((!presentation_shape_attlist_.presentation_user_transformed_) ||
((presentation_shape_attlist_.presentation_user_transformed_) &&
(presentation_shape_attlist_.presentation_user_transformed_->get()== false))))//векторная фигура презентаций
if (baseStyleInst && ((!common_presentation_attlist_.presentation_user_transformed_) ||
((common_presentation_attlist_.presentation_user_transformed_) &&
(common_presentation_attlist_.presentation_user_transformed_->get()== false))))//векторная фигура презентаций
{
style_instance * defaultStyle = Context.root()->odf_context().styleContainer().style_default_by_type(odf_types::style_family::Presentation);
if (defaultStyle)instances.push_back(defaultStyle);
@ -181,7 +178,7 @@ void draw_frame::pptx_convert(oox::pptx_conversion_context & Context)
{
Context.get_slide_context().set_placeHolder_type(common_presentation_attlist_.presentation_class_->get_type_ms());
if (idx_in_owner >=0)
if (idx_in_owner >= 0)
Context.get_slide_context().set_placeHolder_idx(idx_in_owner);
}
@ -199,7 +196,7 @@ void draw_frame::pptx_convert(oox::pptx_conversion_context & Context)
////////////////////////////////////////////////
oox_drawing_ = oox_drawing_ptr(new oox::_pptx_drawing());
for (int i = 0; i < content_.size(); i++)
for (size_t i = 0; i < content_.size(); i++)
{
content_[i]->pptx_convert(Context);
}
@ -217,7 +214,7 @@ void draw_image::pptx_convert(oox::pptx_conversion_context & Context)
////////////////////////////////////в принципе достаточно общая часть ...
Context.get_text_context().start_object();
for (int i = 0; i < content_.size(); i++)
for (size_t i = 0; i < content_.size(); i++)
{
content_[i]->pptx_convert(Context);
}
@ -233,7 +230,7 @@ void draw_chart::pptx_convert(oox::pptx_conversion_context & Context)
const std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
Context.get_slide_context().set_chart(href);
for (int i = 0; i < content_.size(); i++)
for (size_t i = 0; i < content_.size(); i++)
{
content_[i]->pptx_convert(Context);
}
@ -244,7 +241,7 @@ void draw_text_box::pptx_convert(oox::pptx_conversion_context & Context)
Context.get_slide_context().set_text_box(); //rect с наваротами
Context.get_text_context().start_object();
for (int i = 0; i < content_.size(); i++)
for (size_t i = 0; i < content_.size(); i++)
{
content_[i]->pptx_convert(Context);
}

View File

@ -69,11 +69,10 @@ namespace odf_reader {
void draw_g::xlsx_convert(oox::xlsx_conversion_context & Context)
{
common_draw_shape_with_styles_attlist common_draw_attlist_ = common_draw_attlists_.shape_with_text_and_styles_.common_draw_shape_with_styles_attlist_;
common_draw_shape_with_text_and_styles_attlist common_draw_attlist_ = common_draw_attlists_.shape_with_text_and_styles_;
const int z_index = common_draw_attlist_.common_draw_z_index_attlist_.draw_z_index_.get_value_or(0);
const std::wstring name = common_draw_attlist_.common_draw_name_attlist_.draw_name_.get_value_or(L"");
const int z_index = common_draw_attlist_.common_shape_draw_attlist_.draw_z_index_.get_value_or(0);
const std::wstring name = common_draw_attlist_.common_shape_draw_attlist_.draw_name_.get_value_or(L"");
//////////////////////////////////////////////////////////////////////////
Context.get_drawing_context().start_group( name);
@ -93,18 +92,18 @@ void draw_g::xlsx_convert(oox::xlsx_conversion_context & Context)
//}
////////////////////////////////////////
if (common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_cell_address_)
if (common_draw_attlist_.common_shape_table_attlist_.table_end_cell_address_)
{
std::wstring Anchor = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_cell_address_.get();
std::wstring Anchor = common_draw_attlist_.common_shape_table_attlist_.table_end_cell_address_.get();
const double a_x_pt = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_x_.get_value_or(length(0)).get_value_unit(length::pt);
const double a_y_pt = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_y_.get_value_or(length(0)).get_value_unit(length::pt);
const double a_x_pt = common_draw_attlist_.common_shape_table_attlist_.table_end_x_.get_value_or(length(0)).get_value_unit(length::pt);
const double a_y_pt = common_draw_attlist_.common_shape_table_attlist_.table_end_y_.get_value_or(length(0)).get_value_unit(length::pt);
Context.get_drawing_context().set_anchor(Anchor, a_x_pt, a_y_pt, true);
}
////////////////////////////////////////////////
for (int i = 0; i < content_.size(); i++)
for (size_t i = 0; i < content_.size(); i++)
{
office_element_ptr const & elm = content_[i];
elm->xlsx_convert(Context);
@ -115,17 +114,12 @@ void draw_g::xlsx_convert(oox::xlsx_conversion_context & Context)
}
void draw_frame::xlsx_convert(oox::xlsx_conversion_context & Context)
{
common_draw_shape_with_styles_attlist common_draw_attlist_ = common_draw_attlists_.shape_with_text_and_styles_.common_draw_shape_with_styles_attlist_;
common_draw_shape_with_text_and_styles_attlist common_draw_attlist_ = common_draw_attlists_.shape_with_text_and_styles_;
const int z_index = common_draw_attlist_.common_draw_z_index_attlist_.draw_z_index_.get_value_or(0);
const std::wstring name = common_draw_attlist_.common_draw_name_attlist_.draw_name_.get_value_or(L"");
const std::wstring styleName = common_draw_attlist_.common_draw_style_name_attlist_.draw_style_name_.get_value_or(style_ref(L"")).style_name();
const std::wstring textStyleName = common_draw_attlists_.shape_with_text_and_styles_.
common_draw_text_style_name_attlist_.
draw_text_style_name_.get_value_or(style_ref(L"")).style_name();
const int z_index = common_draw_attlist_.common_shape_draw_attlist_.draw_z_index_.get_value_or(0);
const std::wstring name = common_draw_attlist_.common_shape_draw_attlist_.draw_name_.get_value_or(L"");
const std::wstring styleName = common_draw_attlist_.common_shape_draw_attlist_.draw_style_name_.get_value_or(L"");
const std::wstring textStyleName = common_draw_attlist_.common_shape_draw_attlist_.draw_text_style_name_.get_value_or(L"");
//////////////////////////////////////////////////////////////////////////
Context.get_drawing_context().start_drawing( name);
@ -145,19 +139,19 @@ void draw_frame::xlsx_convert(oox::xlsx_conversion_context & Context)
Context.get_drawing_context().set_rect(width_pt, height_pt, x_pt, y_pt);
}
///////////////////////////////////////////////////////////////////////////////////////
if (common_draw_attlist_.common_draw_transform_attlist_.draw_transform_)
if (common_draw_attlist_.common_shape_draw_attlist_.draw_transform_)
{
std::wstring transformStr = common_draw_attlist_.common_draw_transform_attlist_.draw_transform_.get();
std::wstring transformStr = common_draw_attlist_.common_shape_draw_attlist_.draw_transform_.get();
xlsx_convert_transforms(transformStr,Context);
}
////////////////////////////////////////
std::wstring Anchor;
if (common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_cell_address_)
if (common_draw_attlist_.common_shape_table_attlist_.table_end_cell_address_)
{
Anchor = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_cell_address_.get();
Anchor = common_draw_attlist_.common_shape_table_attlist_.table_end_cell_address_.get();
const double a_x_pt = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_x_.get_value_or(length(0)).get_value_unit(length::pt);
const double a_y_pt = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_y_.get_value_or(length(0)).get_value_unit(length::pt);
const double a_x_pt = common_draw_attlist_.common_shape_table_attlist_.table_end_x_.get_value_or(length(0)).get_value_unit(length::pt);
const double a_y_pt = common_draw_attlist_.common_shape_table_attlist_.table_end_y_.get_value_or(length(0)).get_value_unit(length::pt);
Context.get_drawing_context().set_anchor(Anchor, a_x_pt, a_y_pt);
}
@ -178,10 +172,10 @@ void draw_frame::xlsx_convert(oox::xlsx_conversion_context & Context)
////////////////////////////////////////////////////////////////////
properties.apply_to(Context.get_drawing_context().get_properties());
Context.get_drawing_context().set_property(odf_reader::_property(L"border_width_left", Compute_BorderWidth(properties, sideLeft)));
Context.get_drawing_context().set_property(odf_reader::_property(L"border_width_top", Compute_BorderWidth(properties, sideTop)));
Context.get_drawing_context().set_property(odf_reader::_property(L"border_width_right",Compute_BorderWidth(properties, sideRight)));
Context.get_drawing_context().set_property(odf_reader::_property(L"border_width_bottom", Compute_BorderWidth(properties, sideBottom)));
Context.get_drawing_context().set_property(odf_reader::_property(L"border_width_left", Compute_BorderWidth(properties, sideLeft)));
Context.get_drawing_context().set_property(odf_reader::_property(L"border_width_top", Compute_BorderWidth(properties, sideTop)));
Context.get_drawing_context().set_property(odf_reader::_property(L"border_width_right", Compute_BorderWidth(properties, sideRight)));
Context.get_drawing_context().set_property(odf_reader::_property(L"border_width_bottom", Compute_BorderWidth(properties, sideBottom)));
if (properties.fo_clip_)
{
@ -196,7 +190,7 @@ void draw_frame::xlsx_convert(oox::xlsx_conversion_context & Context)
oox_drawing_ = oox_drawing_ptr(new oox::_xlsx_drawing());
////////////////////////////////////////////////
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
office_element_ptr const & elm = content_[i];
elm->xlsx_convert(Context);
@ -215,7 +209,7 @@ void draw_image::xlsx_convert(oox::xlsx_conversion_context & Context)
////////////////////////////////////в принципе достаточно общая часть ...
Context.get_text_context().start_drawing_content();//... если в объекте есть текст он привяжется к объекту - иначе к ячейке
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
content_[i]->xlsx_convert(Context);
}
@ -232,7 +226,7 @@ void draw_chart::xlsx_convert(oox::xlsx_conversion_context & Context)
const std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
Context.get_drawing_context().set_chart(href);
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
content_[i]->xlsx_convert(Context);
}
@ -243,7 +237,7 @@ void draw_text_box::xlsx_convert(oox::xlsx_conversion_context & Context)
Context.get_text_context().start_drawing_content();
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
content_[i]->xlsx_convert(Context);
}

View File

@ -47,11 +47,12 @@
#include "serialize_elements.h"
#include "style_graphic_properties.h"
#include "odfcontext.h"
#include "datatypes/length.h"
#include "datatypes/borderstyle.h"
#include "odfcontext.h"
#include "../odf/svg_parser.h"
#include "../docx/oox_drawing.h"
namespace cpdoccore {
@ -78,7 +79,6 @@ void draw_shape::add_attributes( const xml::attributes_wc_ptr & Attributes )
common_draw_attlists_.shape_with_text_and_styles_.add_attributes(Attributes);
common_draw_attlists_.position_.add_attributes(Attributes);
common_draw_attlists_.rel_size_.add_attributes(Attributes);
common_presentation_attlist_.add_attributes(Attributes);
draw_shape_attlist_.add_attributes(Attributes);
@ -235,14 +235,16 @@ void draw_path::reset_svg_path()
}
else
{
std::vector<svg_path::_polyline> o_Polyline_pt;
std::vector<svg_path::_polyline> o_Polyline_cm;
std::vector<::svg_path::_polyline> o_Polyline_pt;
std::vector<::svg_path::_polyline> o_Polyline_cm;
bool res = svg_path::parseSvgD(o_Polyline_cm,draw_path_attlist_.svg_d_.get(),false);
bool res = ::svg_path::parseSvgD(o_Polyline_cm, draw_path_attlist_.svg_d_.get(), false);
BOOST_FOREACH(svg_path::_polyline & poly, o_Polyline_cm)
for (size_t i = 0; i < o_Polyline_cm.size(); i++)
{
for (long i=0;i<poly.points.size();i++)
::svg_path::_polyline & poly = o_Polyline_cm[i];
for (size_t i = 0; i < poly.points.size(); i++)
{
if (poly.points[i].x)
{
@ -259,7 +261,7 @@ void draw_path::reset_svg_path()
{
//сформируем xml-oox сдесь ... а то придется плодить массивы в drawing .. хоть и не красиво..
std::wstringstream output_;
svg_path::oox_serialize(output_, o_Polyline_pt);
::svg_path::oox_serialize(output_, o_Polyline_pt);
additional_.push_back(odf_reader::_property(L"custom_path",output_.str()));
}
}
@ -295,14 +297,16 @@ void draw_polygon::reset_polygon_path()
}
else
{
std::vector<svg_path::_polyline> o_Polyline_pt;
std::vector<svg_path::_polyline> o_Polyline_cm;
std::vector<::svg_path::_polyline> o_Polyline_pt;
std::vector<::svg_path::_polyline> o_Polyline_cm;
bool res = svg_path::parsePolygon(o_Polyline_cm,draw_polygon_attlist_.draw_points_.get(),false, true);
bool res = ::svg_path::parsePolygon(o_Polyline_cm, draw_polygon_attlist_.draw_points_.get(),false, true);
BOOST_FOREACH(svg_path::_polyline & poly, o_Polyline_cm)
for (size_t ind = 0 ; ind < o_Polyline_cm.size(); ind++)
{
for (long i=0;i<poly.points.size();i++)
::svg_path::_polyline & poly = o_Polyline_cm[ind];
for (size_t i = 0; i < poly.points.size(); i++)
{
if (poly.points[i].x)
{
@ -319,7 +323,7 @@ void draw_polygon::reset_polygon_path()
{
//сформируем xml-oox сдесь ... а то придется плодить массивы в drawing .. хоть и не красиво..
std::wstringstream output_;
svg_path::oox_serialize(output_, o_Polyline_pt);
::svg_path::oox_serialize(output_, o_Polyline_pt);
additional_.push_back(odf_reader::_property(L"custom_path",output_.str()));
}
}
@ -351,28 +355,30 @@ void draw_polyline::reset_polyline_path()
}
else
{
std::vector<svg_path::_polyline> o_Polyline_pt;
std::vector<svg_path::_polyline> o_Polyline_cm;
std::vector<::svg_path::_polyline> o_Polyline_pt;
std::vector<::svg_path::_polyline> o_Polyline_cm;
bool res = svg_path::parsePolygon(o_Polyline_cm, draw_polyline_attlist_.draw_points_.get(), false, true);
bool res = ::svg_path::parsePolygon(o_Polyline_cm, draw_polyline_attlist_.draw_points_.get(), false, true);
_CP_OPT(double) start_x, start_y;
BOOST_FOREACH(svg_path::_polyline & poly, o_Polyline_cm)
for (size_t ind = 0 ; ind < o_Polyline_cm.size(); ind++)
{
for (long i=0;i<poly.points.size();i++)
::svg_path::_polyline & poly = o_Polyline_cm[ind];
for (size_t i = 0; i < poly.points.size(); i++)
{
if (poly.points[i].x)
{
if (!start_x)//вообщето это не верно .. но из за разных точек осей поворота фигура может "улететь"
start_x = length(poly.points[i].x.get()/1000.,length::cm).get_value_unit(length::emu);
poly.points[i].x = length(poly.points[i].x.get()/1000.,length::cm).get_value_unit(length::emu);// - *start_x;
start_x = length(poly.points[i].x.get()/1000., length::cm).get_value_unit(length::emu);
poly.points[i].x = length(poly.points[i].x.get()/1000., length::cm).get_value_unit(length::emu);// - *start_x;
}
if (poly.points[i].y)
{
if (!start_y)
start_y = length(poly.points[i].y.get()/1000.,length::cm).get_value_unit(length::emu);
poly.points[i].y = length(poly.points[i].y.get()/1000.,length::cm).get_value_unit(length::emu);// - *start_y;
start_y = length(poly.points[i].y.get()/1000., length::cm).get_value_unit(length::emu);
poly.points[i].y = length(poly.points[i].y.get()/1000., length::cm).get_value_unit(length::emu);// - *start_y;
}
}
o_Polyline_pt.push_back(poly);
@ -381,8 +387,9 @@ void draw_polyline::reset_polyline_path()
{
//сформируем xml-oox сдесь ... а то придется плодить массивы в drawing .. хоть и не красиво..
std::wstringstream output_;
svg_path::oox_serialize(output_, o_Polyline_pt);
additional_.push_back(odf_reader::_property(L"custom_path",output_.str()));
::svg_path::oox_serialize(output_, o_Polyline_pt);
additional_.push_back(odf_reader::_property(L"custom_path", output_.str()));
}
}
}
@ -592,9 +599,9 @@ void draw_caption::add_attributes( const xml::attributes_wc_ptr & Attributes )
/// draw-connector-attlist
void draw_connector_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"svg:d", svg_d_);
CP_APPLY_ATTR(L"svg:viewBox", svg_viewbox_);
CP_APPLY_ATTR(L"draw:type",draw_type_);
CP_APPLY_ATTR(L"svg:d", svg_d_);
CP_APPLY_ATTR(L"svg:viewBox", svg_viewbox_);
CP_APPLY_ATTR(L"draw:type", draw_type_);
}
// draw:connector
@ -618,35 +625,37 @@ void draw_connector::reset_svg_path()
}
else
{
std::vector<svg_path::_polyline> o_Polyline_pt;
std::vector<svg_path::_polyline> o_Polyline_cm;
std::vector<::svg_path::_polyline> o_Polyline_pt;
std::vector<::svg_path::_polyline> o_Polyline_cm;
bool res = svg_path::parseSvgD(o_Polyline_cm,draw_connector_attlist_.svg_d_.get(),false);
bool res = ::svg_path::parseSvgD(o_Polyline_cm, draw_connector_attlist_.svg_d_.get(), false);
double x1=common_draw_attlists_.position_.svg_x_.get_value_or(length(0)).get_value_unit(length::emu);
double y1=common_draw_attlists_.position_.svg_y_.get_value_or(length(0)).get_value_unit(length::emu);
BOOST_FOREACH(svg_path::_polyline & poly, o_Polyline_cm)
for (size_t ind = 0 ; ind < o_Polyline_cm.size(); ind++)
{
for (long i=0;i<poly.points.size();i++)
::svg_path::_polyline & poly = o_Polyline_cm[ind];
for (size_t i = 0; i < poly.points.size();i++)
{
if (poly.points[i].x)
{
poly.points[i].x = length(poly.points[i].x.get()/1000.,length::cm).get_value_unit(length::emu) - x1;
poly.points[i].x = length(poly.points[i].x.get()/1000., length::cm).get_value_unit(length::emu) - x1;
}
if (poly.points[i].y)
{
poly.points[i].y = length(poly.points[i].y.get()/1000.,length::cm).get_value_unit(length::emu) - y1;
poly.points[i].y = length(poly.points[i].y.get()/1000., length::cm).get_value_unit(length::emu) - y1;
}
}
o_Polyline_pt.push_back(poly);
}
if (o_Polyline_pt.size()>0)
if (o_Polyline_pt.size() > 0)
{
sub_type_ = 6;
//сформируем xml-oox сдесь ... а то придется плодить массивы в drawing .. хоть и не красиво..
std::wstringstream output_;
svg_path::oox_serialize(output_, o_Polyline_pt);
::svg_path::oox_serialize(output_, o_Polyline_pt);
additional_.push_back(odf_reader::_property(L"custom_path",output_.str()));
}
}

View File

@ -40,8 +40,6 @@
#include "datatypes/common_attlists.h"
#include "../docx/xlsxconversioncontext.h"
#include "svg_parser.h"
namespace cpdoccore
{
@ -65,7 +63,7 @@ public:
static const ElementType type = typeDrawShape;
static const xml::NodeType xml_type = xml::typeElement;
draw_shape() : bad_shape_(false), word_art_(false) {}
draw_shape() : bad_shape_(false), word_art_(false), idx_in_owner(-1) {}
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);
@ -77,12 +75,12 @@ public:
void common_xlsx_convert(oox::xlsx_conversion_context & Context);
void common_docx_convert(oox::docx_conversion_context & Context) ;
void common_pptx_convert(oox::pptx_conversion_context & Context) ;
odf_types::common_xlink_attlist common_xlink_attlist_;
odf_types::common_presentation_attlist common_presentation_attlist_;
odf_types::union_common_draw_attlists common_draw_attlists_;
draw_shape_attlist draw_shape_attlist_;
_CP_OPT(std::wstring) draw_id_;//используется для анимашек
odf_types::common_xlink_attlist common_xlink_attlist_;
_CP_OPT(std::wstring) draw_id_; //используется для анимашек
office_element_ptr_array content_;
@ -93,8 +91,7 @@ public:
bool word_art_;
int sub_type_;
std::vector<odf_reader::_property> additional_;
int idx_in_owner;
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -45,7 +45,6 @@
#include <cpdoccore/odf/odf_document.h>
#include "serialize_elements.h"
#include "../docx/xlsx_utils.h"
#include "style_graphic_properties.h"
#include "odfcontext.h"
@ -53,6 +52,9 @@
#include "datatypes/length.h"
#include "datatypes/borderstyle.h"
#include "../docx/xlsx_utils.h"
#include "../docx/oox_drawing.h"
namespace cpdoccore {
using namespace odf_types;
@ -65,8 +67,7 @@ void draw_shape::common_docx_convert(oox::docx_conversion_context & Context)
const _CP_OPT(std::wstring) name =
common_draw_attlists_.shape_with_text_and_styles_.
common_draw_shape_with_styles_attlist_.
common_draw_name_attlist_.draw_name_;
common_shape_draw_attlist_.draw_name_;
Context.get_drawing_context().add_name_object(name.get_value_or(L"Shape"));
@ -260,13 +261,13 @@ void draw_enhanced_geometry::docx_convert(oox::docx_conversion_context & Context
if (draw_enhanced_geometry_attlist_.draw_enhanced_path_)
{
std::vector<svg_path::_polyline> o_Polyline;
std::vector<::svg_path::_polyline> o_Polyline;
bool res = false;
try
{
res = svg_path::parseSvgD(o_Polyline, draw_enhanced_geometry_attlist_.draw_enhanced_path_.get(), true);
res = ::svg_path::parseSvgD(o_Polyline, draw_enhanced_geometry_attlist_.draw_enhanced_path_.get(), true);
}
catch(...)
{
@ -277,7 +278,8 @@ void draw_enhanced_geometry::docx_convert(oox::docx_conversion_context & Context
{
//сформируем xml-oox сдесь ... а то придется плодить массивы в drawing .. хоть и не красиво..
std::wstringstream output_;
svg_path::oox_serialize(output_, o_Polyline);
::svg_path::oox_serialize(output_, o_Polyline);
shape->additional_.push_back(odf_reader::_property(L"custom_path", output_.str()));
set_shape = true;

View File

@ -53,7 +53,8 @@
#include "odfcontext.h"
#include "calcs_styles.h"
#include "svg_parser.h"
#include "../docx/oox_drawing.h"
namespace cpdoccore {
@ -64,14 +65,12 @@ namespace odf_reader {
void draw_shape::common_pptx_convert(oox::pptx_conversion_context & Context)
{
common_draw_shape_with_styles_attlist common_draw_attlist_ = common_draw_attlists_.shape_with_text_and_styles_.common_draw_shape_with_styles_attlist_;
common_shape_draw_attlist &common_draw_attlist_ = common_draw_attlists_.shape_with_text_and_styles_.common_shape_draw_attlist_;
common_presentation_attlist &common_presentation_attlist_= common_draw_attlists_.shape_with_text_and_styles_.common_presentation_attlist_;
const int z_index = common_draw_attlist_.common_draw_z_index_attlist_.draw_z_index_.get_value_or(0);
const std::wstring name = common_draw_attlist_.common_draw_name_attlist_.draw_name_.get_value_or(L"");
const std::wstring textStyleName = common_draw_attlists_.shape_with_text_and_styles_.
common_draw_text_style_name_attlist_.draw_text_style_name_.get_value_or(style_ref(L"")).style_name();
const int z_index = common_draw_attlist_.draw_z_index_.get_value_or(0);
const std::wstring name = common_draw_attlist_.draw_name_.get_value_or(L"");
const std::wstring textStyleName = common_draw_attlist_.draw_text_style_name_.get_value_or(L"");
///////////////////////////////////////////
Context.get_slide_context().set_name(name);
@ -90,27 +89,27 @@ void draw_shape::common_pptx_convert(oox::pptx_conversion_context & Context)
Context.get_slide_context().set_rect(width_pt, height_pt, x_pt, y_pt);
}
////////////////////////////////////////////////////////////
if (common_draw_attlist_.common_draw_transform_attlist_.draw_transform_)
if (common_draw_attlist_.draw_transform_)
{
std::wstring transformStr = common_draw_attlist_.common_draw_transform_attlist_.draw_transform_.get();
std::wstring transformStr = common_draw_attlist_.draw_transform_.get();
pptx_convert_transforms(transformStr,Context);
//oox_convert_transforms(transformStr, additional_);
}
////////////////////////////////////////
std::wstring Anchor;
if (common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_cell_address_)
if (common_draw_attlists_.shape_with_text_and_styles_.common_shape_table_attlist_.table_end_cell_address_)
{
Anchor = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_cell_address_.get();
const double a_x_pt = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_x_.get_value_or(length(0)).get_value_unit(length::pt);
const double a_y_pt = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_y_.get_value_or(length(0)).get_value_unit(length::pt);
Anchor = common_draw_attlists_.shape_with_text_and_styles_.common_shape_table_attlist_.table_end_cell_address_.get();
const double a_x_pt = common_draw_attlists_.shape_with_text_and_styles_.common_shape_table_attlist_.table_end_x_.get_value_or(length(0)).get_value_unit(length::pt);
const double a_y_pt = common_draw_attlists_.shape_with_text_and_styles_.common_shape_table_attlist_.table_end_y_.get_value_or(length(0)).get_value_unit(length::pt);
Context.get_slide_context().set_anchor(Anchor,a_x_pt,a_y_pt);
}
/////////////////////////////////////////////////////////////////////////////////
std::vector<const odf_reader::style_instance *> instances;
const std::wstring grStyleName = common_draw_attlist_.common_draw_style_name_attlist_.draw_style_name_.get_value_or(style_ref(L"")).style_name();
const std::wstring baseStyleName = common_draw_attlist_.common_draw_style_name_attlist_.presentation_style_name_.get_value_or(style_ref(L"")).style_name();
const std::wstring grStyleName = common_draw_attlist_.draw_style_name_.get_value_or(L"");
const std::wstring baseStyleName = common_draw_attlists_.shape_with_text_and_styles_.common_presentation_attlist_.presentation_style_name_.get_value_or(L"");
odf_reader::style_instance* grStyleInst =
Context.root()->odf_context().styleContainer().style_by_name(grStyleName, odf_types::style_family::Graphic,Context.process_masters_);
@ -153,6 +152,14 @@ void draw_shape::common_pptx_convert(oox::pptx_conversion_context & Context)
Compute_GraphicFill(properties.common_draw_fill_attlist_, properties.style_background_image_,
Context.root()->odf_context().drawStyles() ,fill);
Context.get_slide_context().set_fill(fill);
if (common_presentation_attlist_.presentation_class_)
{
Context.get_slide_context().set_placeHolder_type(common_presentation_attlist_.presentation_class_->get_type_ms());
if (idx_in_owner >= 0)
Context.get_slide_context().set_placeHolder_idx(idx_in_owner);
}
////////////////////////////////////////////////////////////////////////////////////
Context.get_text_context().start_object();
BOOST_FOREACH(office_element_ptr const & elm, content_)
@ -243,7 +250,7 @@ void draw_custom_shape::pptx_convert(oox::pptx_conversion_context & Context)
}
void draw_caption::pptx_convert(oox::pptx_conversion_context & Context)
{
//const std::wstring style = common_draw_text_style_name_attlist_.draw_text_style_name_.get_value_or(style_ref(L"")).style_name();
//const std::wstring style = common_shape_draw_attlist_.draw_text_style_name_.get_value_or(L"");
Context.get_slide_context().start_shape(sub_type_);//rect с наваротами-атрибутами .. а-ля TextBox
@ -320,13 +327,13 @@ void draw_enhanced_geometry::pptx_convert(oox::pptx_conversion_context & Context
if (draw_enhanced_geometry_attlist_.draw_enhanced_path_)
{
std::vector<svg_path::_polyline> o_Polyline;
std::vector<::svg_path::_polyline> o_Polyline;
bool res = false;
try
{
res = svg_path::parseSvgD(o_Polyline, draw_enhanced_geometry_attlist_.draw_enhanced_path_.get(), true);
res = ::svg_path::parseSvgD(o_Polyline, draw_enhanced_geometry_attlist_.draw_enhanced_path_.get(), true);
}
catch(...)
{
@ -337,7 +344,7 @@ void draw_enhanced_geometry::pptx_convert(oox::pptx_conversion_context & Context
{
//сформируем xml-oox сдесь ... а то придется плодить массивы в drawing .. хоть и не красиво..
std::wstringstream output_;
svg_path::oox_serialize(output_, o_Polyline);
::svg_path::oox_serialize(output_, o_Polyline);
Context.get_slide_context().set_property(odf_reader::_property(L"custom_path", output_.str()));
set_shape = true;

View File

@ -45,15 +45,16 @@
#include <cpdoccore/odf/odf_document.h>
#include "serialize_elements.h"
#include "../docx/xlsx_utils.h"
#include "style_graphic_properties.h"
#include "odfcontext.h"
#include "calcs_styles.h"
#include "svg_parser.h"
#include "datatypes/length.h"
#include "datatypes/borderstyle.h"
#include "../docx/xlsx_utils.h"
#include "../docx/oox_drawing.h"
namespace cpdoccore {
using namespace odf_types;
@ -64,16 +65,12 @@ namespace odf_reader {
void draw_shape::common_xlsx_convert(oox::xlsx_conversion_context & Context)
{
common_draw_shape_with_styles_attlist common_draw_attlist_ = common_draw_attlists_.shape_with_text_and_styles_.common_draw_shape_with_styles_attlist_;
common_draw_shape_with_text_and_styles_attlist common_draw_attlist_ = common_draw_attlists_.shape_with_text_and_styles_;
const int z_index = common_draw_attlist_.common_draw_z_index_attlist_.draw_z_index_.get_value_or(0);
const std::wstring name = common_draw_attlist_.common_draw_name_attlist_.draw_name_.get_value_or(L"");
const std::wstring styleName = common_draw_attlist_.common_draw_style_name_attlist_.draw_style_name_.get_value_or(style_ref(L"")).style_name();
const std::wstring textStyleName = common_draw_attlists_.shape_with_text_and_styles_.
common_draw_text_style_name_attlist_.draw_text_style_name_.get_value_or(style_ref(L"")).style_name();
const int z_index = common_draw_attlist_.common_shape_draw_attlist_.draw_z_index_.get_value_or(0);
const std::wstring name = common_draw_attlist_.common_shape_draw_attlist_.draw_name_.get_value_or(L"");
const std::wstring styleName = common_draw_attlist_.common_shape_draw_attlist_.draw_style_name_.get_value_or(L"");
const std::wstring textStyleName = common_draw_attlist_.common_shape_draw_attlist_.draw_text_style_name_.get_value_or(L"");
///////////////////////////////////////////
Context.get_drawing_context().start_drawing(name);
@ -92,19 +89,19 @@ void draw_shape::common_xlsx_convert(oox::xlsx_conversion_context & Context)
Context.get_drawing_context().set_rect(width_pt, height_pt, x_pt, y_pt);
}
////////////////////////////////////////////////////////////
if (common_draw_attlist_.common_draw_transform_attlist_.draw_transform_)
if (common_draw_attlist_.common_shape_draw_attlist_.draw_transform_)
{
std::wstring transformStr = common_draw_attlist_.common_draw_transform_attlist_.draw_transform_.get();
std::wstring transformStr = common_draw_attlist_.common_shape_draw_attlist_.draw_transform_.get();
xlsx_convert_transforms(transformStr,Context);
//oox_convert_transforms(transformStr, additional_);
}
////////////////////////////////////////
std::wstring Anchor;
if (common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_cell_address_)
if (common_draw_attlist_.common_shape_table_attlist_.table_end_cell_address_)
{
Anchor = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_cell_address_.get();
const double a_x_pt = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_x_.get_value_or(length(0)).get_value_unit(length::pt);
const double a_y_pt = common_draw_attlist_.common_text_spreadsheet_shape_attlist_.table_end_y_.get_value_or(length(0)).get_value_unit(length::pt);
Anchor = common_draw_attlist_.common_shape_table_attlist_.table_end_cell_address_.get();
const double a_x_pt = common_draw_attlist_.common_shape_table_attlist_.table_end_x_.get_value_or(length(0)).get_value_unit(length::pt);
const double a_y_pt = common_draw_attlist_.common_shape_table_attlist_.table_end_y_.get_value_or(length(0)).get_value_unit(length::pt);
Context.get_drawing_context().set_anchor(Anchor, a_x_pt, a_y_pt);
}
@ -246,7 +243,7 @@ void draw_custom_shape::xlsx_convert(oox::xlsx_conversion_context & Context)
}
void draw_caption::xlsx_convert(oox::xlsx_conversion_context & Context)
{
//const std::wstring style = common_draw_text_style_name_attlist_.draw_text_style_name_.get_value_or(style_ref(L"")).style_name();
//const std::wstring style = common_shape_draw_attlist_.draw_text_style_name_.get_value_or(L"");
Context.get_drawing_context().start_shape(1);//rect с наваротами-атрибутами .. а-ля TextBox
@ -274,13 +271,13 @@ void draw_enhanced_geometry::xlsx_convert(oox::xlsx_conversion_context & Context
if (draw_enhanced_geometry_attlist_.draw_enhanced_path_)
{
std::vector<svg_path::_polyline> o_Polyline;
std::vector<::svg_path::_polyline> o_Polyline;
bool res = false;
try
{
res = svg_path::parseSvgD(o_Polyline, draw_enhanced_geometry_attlist_.draw_enhanced_path_.get(), true);
res = ::svg_path::parseSvgD(o_Polyline, draw_enhanced_geometry_attlist_.draw_enhanced_path_.get(), true);
}
catch(...)
{
@ -291,7 +288,7 @@ void draw_enhanced_geometry::xlsx_convert(oox::xlsx_conversion_context & Context
{
//сформируем xml-oox сдесь ... а то придется плодить массивы в drawing .. хоть и не красиво..
std::wstringstream output_;
svg_path::oox_serialize(output_, o_Polyline);
::svg_path::oox_serialize(output_, o_Polyline);
Context.get_drawing_context().set_property(odf_reader::_property(L"custom_path", output_.str()));
if (draw_enhanced_geometry_attlist_.drawooo_sub_view_size_)

View File

@ -99,7 +99,7 @@ void math_semantics::add_child_element( xml::sax * Reader, const std::wstring &
void math_semantics::oox_convert(oox::math_context & Context)
{
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
office_math_element* math_element = dynamic_cast<office_math_element*>(content_[i].get());
math_element->oox_convert(Context);

View File

@ -193,7 +193,7 @@ void math_msqrt::oox_convert(oox::math_context & Context)
strm << L"<m:deg/>";
strm << L"<m:e>";
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
office_math_element* math_element = dynamic_cast<office_math_element*>(content_[i].get());
math_element->oox_convert(Context);
@ -297,7 +297,7 @@ void math_mstyle::oox_convert(oox::math_context & Context)
}
}
for (int i = 0; i < content_.size(); i++)
for (size_t i = 0; i < content_.size(); i++)
{
office_math_element* math_element = dynamic_cast<office_math_element*>(content_[i].get());
math_element->oox_convert(Context);

View File

@ -64,7 +64,7 @@ void math_mtable::oox_convert(oox::math_context & Context)
std::wostream & strm = Context.output_stream();
strm << L"<m:m>";
for (int i = 0; i < content_.size(); i++)
for (size_t i = 0; i < content_.size(); i++)
{
office_math_element* math_element = dynamic_cast<office_math_element*>(content_[i].get());
math_element->oox_convert(Context);
@ -92,7 +92,7 @@ void math_mtr::oox_convert(oox::math_context & Context)
std::wostream & strm = Context.output_stream();
strm << L"<m:mr>";
for (int i = 0; i < content_.size(); i++)
for (size_t i = 0; i < content_.size(); i++)
{
//strm << L"<m:e>"; // EqArray записался в числитель вместо знаменателя.docx - дублирование
office_math_element* math_element = dynamic_cast<office_math_element*>(content_[i].get());
@ -142,7 +142,7 @@ void math_mtd::oox_convert(oox::math_context & Context)
std::wostream & strm = Context.output_stream();
strm << L"<m:e>";
for (int i = 0; i < content_.size(); i++)
for (size_t i = 0; i < content_.size(); i++)
{
office_math_element* math_element = dynamic_cast<office_math_element*>(content_[i].get());
math_element->oox_convert(Context);

View File

@ -54,17 +54,12 @@ namespace odf_reader {
std::wstring number_style_base::get_style_name() const
{
if (common_data_style_attlist_.style_name_)
return common_data_style_attlist_.style_name_->style_name();
else
return L"";
return common_data_style_attlist_.style_name_.get_value_or(L"");
}
void number_style_base::oox_convert_impl(oox::num_format_context & Context)
{
std::wstring style_name = L"";
if (common_data_style_attlist_.style_name_)
style_name = common_data_style_attlist_.style_name_->style_name();
std::wstring style_name = common_data_style_attlist_.style_name_.get_value_or(L"");
Context.start_format(style_name);
@ -103,7 +98,7 @@ void number_style_base::oox_convert(oox::num_format_context & Context)
{
if (const style_map * styleMap = dynamic_cast<const style_map *>(elm.get()))
{
const std::wstring applyStyleName = styleMap->style_apply_style_name_.style_name();
const std::wstring applyStyleName = styleMap->style_apply_style_name_;
const std::wstring condition = styleMap->style_condition_;
if (office_element_ptr num_style = Context.odf_context_.numberStyles().find_by_style_name(applyStyleName))

View File

@ -187,8 +187,10 @@ void odf_document::Impl::parse_fonts()
break;
}
BOOST_FOREACH(office_element_ptr & elm, fontFaceDecls->style_font_face_)
{
for (size_t i = 0; i < fontFaceDecls->style_font_face_.size(); i++)
{
office_element_ptr & elm = fontFaceDecls->style_font_face_[i];
style_font_face* fontFace = dynamic_cast<style_font_face*>( elm.get() );
if (!fontFace)
{
@ -243,8 +245,10 @@ void odf_document::Impl::parse_manifests()
if (!document)return;
int res =-1;
BOOST_FOREACH(office_element_ptr & elm, document->manifests_)
{
for (size_t i = 0; i < document->manifests_.size(); i++)
{
office_element_ptr & elm = document->manifests_[i];
manifest_entry * entry = dynamic_cast<manifest_entry *>(elm.get());
if (!entry)continue;
@ -281,15 +285,18 @@ void odf_document::Impl::parse_settings()
office_settings * settings = dynamic_cast<office_settings*>(document->office_settings_.get());
if (!settings) return;
BOOST_FOREACH(office_element_ptr & elm, settings->content_)
{
for (size_t i = 0; i < settings->content_.size(); i++)
{
office_element_ptr & elm = settings->content_[i];
settings_config_item_set * item_set = dynamic_cast<settings_config_item_set *>(elm.get());
if (!item_set)continue;
if (item_set->config_name_ == L"ooo:configuration-settings")
{
BOOST_FOREACH(office_element_ptr & elm_sett, item_set->content_)
{
for (size_t j = 0; j < item_set->content_.size(); j++)
{
office_element_ptr & elm_sett = item_set->content_[j];
settings_config_item * sett = dynamic_cast<settings_config_item *>(elm_sett.get());
if (!sett)continue;
@ -298,8 +305,10 @@ void odf_document::Impl::parse_settings()
}
else if (item_set->config_name_ == L"ooo:view-settings")
{
BOOST_FOREACH(office_element_ptr & elm_sett, item_set->content_)
{
for (size_t j = 0; j < item_set->content_.size(); j++)
{
office_element_ptr & elm_sett = item_set->content_[j];
settings_config_item * sett = dynamic_cast<settings_config_item *>(elm_sett.get());
if (sett)
context_->Settings().add_view(sett->config_name_, sett->content_);
@ -308,13 +317,13 @@ void odf_document::Impl::parse_settings()
settings_config_item_map_indexed *map_sett = dynamic_cast<settings_config_item_map_indexed *>(elm_sett.get());
if ((map_sett) && (map_sett->config_name_ == L"Views"))
{
for (int i = 0; i < map_sett->content_.size(); i++)
for (size_t i = 0; i < map_sett->content_.size(); i++)
{
settings_config_item_map_entry *entry = dynamic_cast<settings_config_item_map_entry *>(map_sett->content_[i].get());
if (!entry) continue;
context_->Settings().start_view();
for (int j = 0; j < entry->content_.size(); j++)
for (size_t j = 0; j < entry->content_.size(); j++)
{
settings_config_item * sett = dynamic_cast<settings_config_item *>(entry->content_[j].get());
if (sett)
@ -323,14 +332,14 @@ void odf_document::Impl::parse_settings()
settings_config_item_map_named *map_v = dynamic_cast<settings_config_item_map_named *>(entry->content_[j].get());
if (map_v)
{
for (int n = 0; n < map_v->content_.size(); n++)
for (size_t n = 0; n < map_v->content_.size(); n++)
{
settings_config_item_map_entry *entry_v = dynamic_cast<settings_config_item_map_entry *>(map_v->content_[n].get());
if (!entry_v) continue;
context_->Settings().start_table_view(entry_v->config_name_);
for (int k = 0; k < entry_v->content_.size(); k++)
for (size_t k = 0; k < entry_v->content_.size(); k++)
{
sett = dynamic_cast<settings_config_item *>(entry_v->content_[k].get());
if (sett)
@ -378,9 +387,11 @@ void odf_document::Impl::parse_styles()
}
// parse page layout
BOOST_FOREACH(office_element_ptr & elm, automaticStyles->style_page_layout_)
{
style_page_layout * pageLayout = dynamic_cast<style_page_layout *>(elm.get());
for (size_t i = 0; i < automaticStyles->style_page_layout_.size(); i++)
{
office_element_ptr & elm = automaticStyles->style_page_layout_[i];
style_page_layout * pageLayout = dynamic_cast<style_page_layout *>(elm.get());
if (!pageLayout)
{
_CP_LOG << L"[warning] error reading page layout\n";
@ -390,9 +401,11 @@ void odf_document::Impl::parse_styles()
context_->pageLayoutContainer().add_page_layout(pageLayout);
} // end parse page layout
BOOST_FOREACH(office_element_ptr & elm, automaticStyles->styles_.style_style_)
{
style * styleInst = dynamic_cast<style*>(elm.get());
for (size_t i = 0; i < automaticStyles->styles_.style_style_.size(); i++)
{
office_element_ptr & elm = automaticStyles->styles_.style_style_[i];
style * styleInst = dynamic_cast<style*>(elm.get());
if (!styleInst)
{
_CP_LOG << L"[warning] error reading style\n";
@ -412,9 +425,11 @@ void odf_document::Impl::parse_styles()
);
}
// list styles
BOOST_FOREACH(office_element_ptr & elm, automaticStyles->styles_.text_list_style_)
{
text_list_style * listStyle = dynamic_cast<text_list_style *>(elm.get());
for (size_t i = 0; i < automaticStyles->styles_.text_list_style_.size(); i++)
{
office_element_ptr & elm = automaticStyles->styles_.text_list_style_[i];
text_list_style * listStyle = dynamic_cast<text_list_style *>(elm.get());
if (!listStyle)
{
_CP_LOG << L"[warning] error list style\n";
@ -436,17 +451,19 @@ void odf_document::Impl::parse_styles()
break;
}
BOOST_FOREACH(office_element_ptr & elm, masterStyles->style_master_page_)
{
style_master_page * masterPage = dynamic_cast<style_master_page *>(elm.get());
for (size_t i = 0; i < masterStyles->style_master_page_.size(); i++)
{
office_element_ptr & elm = masterStyles->style_master_page_[i];
style_master_page * masterPage = dynamic_cast<style_master_page *>(elm.get());
if (!masterPage)
{
_CP_LOG << L"[warning] error reading master page\n";
continue;
}
const std::wstring styleName = masterPage->style_master_page_attlist_.style_name_.get_value_or(style_ref(L"")).style_name();
const std::wstring pageLayoutName = masterPage->style_master_page_attlist_.style_page_layout_name_.get_value_or(style_ref(L"")).style_name();
const std::wstring styleName = masterPage->style_master_page_attlist_.style_name_.get_value_or(L"");
const std::wstring pageLayoutName = masterPage->style_master_page_attlist_.style_page_layout_name_.get_value_or(L"");
context_->pageLayoutContainer().add_master_page(styleName, pageLayoutName, masterPage);
}
@ -464,9 +481,11 @@ void odf_document::Impl::parse_styles()
}
// default styles
BOOST_FOREACH(office_element_ptr & elm, docStyles->style_default_style_)
{
default_style * styleInst = dynamic_cast<default_style *>(elm.get());
for (size_t i = 0; i < docStyles->style_default_style_.size(); i++)
{
office_element_ptr & elm = docStyles->style_default_style_[i];
default_style * styleInst = dynamic_cast<default_style *>(elm.get());
if (!styleInst)
{
_CP_LOG << L"[warning] error reading default style\n";
@ -483,9 +502,11 @@ void odf_document::Impl::parse_styles()
L"",
L"");
}
BOOST_FOREACH(office_element_ptr & elm, docStyles->style_presentation_page_layout_)
{
style_presentation_page_layout * pageLayout = dynamic_cast<style_presentation_page_layout *>(elm.get());
for (size_t i = 0; i < docStyles->style_presentation_page_layout_.size(); i++)
{
office_element_ptr & elm = docStyles->style_presentation_page_layout_[i];
style_presentation_page_layout * pageLayout = dynamic_cast<style_presentation_page_layout *>(elm.get());
if (!pageLayout)
continue;
@ -494,9 +515,11 @@ void odf_document::Impl::parse_styles()
}
// common styles
BOOST_FOREACH(office_element_ptr & elm, docStyles->styles_.style_style_)
{
style * styleInst = dynamic_cast<style*>(elm.get());
for (size_t i = 0; i < docStyles->styles_.style_style_.size(); i++)
{
office_element_ptr & elm = docStyles->styles_.style_style_[i];
style * styleInst = dynamic_cast<style*>(elm.get());
if (!styleInst)
{
_CP_LOG << L"[warning] error reading style\n";
@ -519,8 +542,10 @@ void odf_document::Impl::parse_styles()
}
// list styles
BOOST_FOREACH(office_element_ptr & elm, docStyles->styles_.text_list_style_)
{
for (size_t i = 0; i < docStyles->styles_.text_list_style_.size(); i++)
{
office_element_ptr & elm = docStyles->styles_.text_list_style_[i];
text_list_style * listStyle = dynamic_cast<text_list_style *>(elm.get());
if (!listStyle)
{
@ -531,9 +556,11 @@ void odf_document::Impl::parse_styles()
context_->listStyleContainer().add_list_style(listStyle);
}
BOOST_FOREACH(const office_element_ptr & elm, docStyles->text_notes_configuration_)
{
const text_notes_configuration * conf = dynamic_cast<const text_notes_configuration *>(elm.get());
for (size_t i = 0; i < docStyles->text_notes_configuration_.size(); i++)
{
office_element_ptr & elm = docStyles->text_notes_configuration_[i];
const text_notes_configuration * conf = dynamic_cast<const text_notes_configuration *>(elm.get());
if (!conf)
continue;
@ -542,53 +569,65 @@ void odf_document::Impl::parse_styles()
}
BOOST_FOREACH(const office_element_ptr & elm, docStyles->styles_.number_styles_)
{
const number_style_base * style = dynamic_cast<const number_style_base *>(elm.get());
for (size_t i = 0; i < docStyles->styles_.number_styles_.size(); i++)
{
office_element_ptr & elm = docStyles->styles_.number_styles_[i];
const number_style_base * style = dynamic_cast<const number_style_base *>(elm.get());
if (!style)
continue;
context_->numberStyles().add(style->get_style_name(), elm);
}
BOOST_FOREACH(const office_element_ptr & elm, docStyles->draw_styles_.draw_gradient_)
{
draw_gradient * style = dynamic_cast<draw_gradient *>(elm.get());
for (size_t i = 0; i < docStyles->draw_styles_.draw_gradient_.size(); i++)
{
office_element_ptr & elm = docStyles->draw_styles_.draw_gradient_[i];
draw_gradient * style = dynamic_cast<draw_gradient *>(elm.get());
if (!style)
continue;
context_->drawStyles().add(L"gradient:" + style->get_style_name(), elm);
}
BOOST_FOREACH(const office_element_ptr & elm, docStyles->draw_styles_.draw_fill_image_)
{
draw_fill_image * style = dynamic_cast<draw_fill_image *>(elm.get());
for (size_t i = 0; i < docStyles->draw_styles_.draw_fill_image_.size(); i++)
{
office_element_ptr & elm = docStyles->draw_styles_.draw_fill_image_[i];
draw_fill_image * style = dynamic_cast<draw_fill_image *>(elm.get());
if (!style)
continue;
context_->drawStyles().add(L"bitmap:" + style->get_style_name(), elm);
}
BOOST_FOREACH(const office_element_ptr & elm, docStyles->draw_styles_.draw_opacity_)
{
draw_opacity * style = dynamic_cast<draw_opacity *>(elm.get());
for (size_t i = 0; i < docStyles->draw_styles_.draw_opacity_.size(); i++)
{
office_element_ptr & elm = docStyles->draw_styles_.draw_opacity_[i];
draw_opacity * style = dynamic_cast<draw_opacity *>(elm.get());
if (!style)
continue;
context_->drawStyles().add(L"opacity:" + style->get_style_name(), elm);
}
BOOST_FOREACH(const office_element_ptr & elm, docStyles->draw_styles_.draw_hatch_)
{
draw_hatch * style = dynamic_cast<draw_hatch *>(elm.get());
for (size_t i = 0; i < docStyles->draw_styles_.draw_hatch_.size(); i++)
{
office_element_ptr & elm = docStyles->draw_styles_.draw_hatch_[i];
draw_hatch * style = dynamic_cast<draw_hatch *>(elm.get());
if (!style)
continue;
context_->drawStyles().add(L"hatch:" + style->get_style_name(), elm);
}
BOOST_FOREACH(const office_element_ptr & elm, docStyles->templates_.table_templates_)
{
for (size_t i = 0; i < docStyles->templates_.table_templates_.size(); i++)
{
office_element_ptr & elm = docStyles->templates_.table_templates_[i];
table_table_template * style = dynamic_cast<table_table_template *>(elm.get());
if (!style)
@ -626,9 +665,11 @@ void odf_document::Impl::parse_styles()
break;
}
BOOST_FOREACH(office_element_ptr & elm, automaticStyles->styles_.style_style_)
{
style * styleInst = dynamic_cast<style*>(elm.get());
for (size_t i = 0; i < automaticStyles->styles_.style_style_.size(); i++)
{
office_element_ptr & elm = automaticStyles->styles_.style_style_[i];
style * styleInst = dynamic_cast<style*>(elm.get());
if (!styleInst)
{
_CP_LOG << L"[warning] error reading style\n";
@ -650,9 +691,11 @@ void odf_document::Impl::parse_styles()
);
}
BOOST_FOREACH(office_element_ptr & elm, automaticStyles->styles_.text_list_style_)
{
text_list_style * listStyle = dynamic_cast<text_list_style *>(elm.get());
for (size_t i = 0; i < automaticStyles->styles_.text_list_style_.size(); i++)
{
office_element_ptr & elm = automaticStyles->styles_.text_list_style_[i];
text_list_style * listStyle = dynamic_cast<text_list_style *>(elm.get());
if (!listStyle)
{
_CP_LOG << L"[warning] error reading list style\n";
@ -662,9 +705,11 @@ void odf_document::Impl::parse_styles()
context_->listStyleContainer().add_list_style(listStyle);
}
BOOST_FOREACH(const office_element_ptr & elm, automaticStyles->styles_.number_styles_)
{
const number_style_base * style = dynamic_cast<const number_style_base *>(elm.get());
for (size_t i = 0; i < automaticStyles->styles_.number_styles_.size(); i++)
{
office_element_ptr & elm = automaticStyles->styles_.number_styles_[i];
const number_style_base * style = dynamic_cast<const number_style_base *>(elm.get());
if (!style) continue;

View File

@ -223,8 +223,9 @@ void styles_container::add_master_page_name(const std::wstring & StyleName, cons
std::pair<int,std::wstring> presentation_layouts_instance::add_or_find(const std::wstring & layout_name,const std::wstring & master_name)
{
bool find = false;
int index =0;
for (index=0;index<content.size();index++)
size_t index =0;
for (index = 0; index < content.size(); index++)
{
if (content[index].layout_name == layout_name && content[index].master_name == master_name)
{
@ -250,8 +251,8 @@ std::pair<int,std::wstring> presentation_layouts_instance::add_or_find(const std
std::pair<int,std::wstring> presentation_masters_instance::add_or_find(const std::wstring & master_name)
{
bool find = false;
int index =0;
for (index=0;index<content.size();index++)
size_t index =0;
for (index = 0; index < content.size(); index++)
{
if (content[index].master_name == master_name)
{
@ -276,8 +277,8 @@ std::pair<int,std::wstring> presentation_masters_instance::add_or_find(const std
void presentation_masters_instance::add_layout_to(const std::wstring & master_name, presentation_layouts_instance::_layout & layout)
{
bool find = false;
int index =0;
for (index=0;index<content.size();index++)
size_t index = 0;
for (index = 0; index < content.size(); index++)
{
if (content[index].master_name == master_name)
{
@ -352,7 +353,9 @@ void page_layout_instance::docx_convert_serialize(std::wostream & strm, oox::doc
}
void page_layout_instance::pptx_convert(oox::pptx_conversion_context & Context)
{
properties()->pptx_convert(Context);
style_page_layout_properties * props = properties();
if (props)
props->pptx_convert(Context);
}
void page_layout_container::add_page_layout(const style_page_layout * StylePageLayout)

View File

@ -203,7 +203,7 @@ void office_annotation::xlsx_convert(oox::xlsx_conversion_context & Context)
/// Обрабатываем стиль draw
std::vector<const odf_reader::style_instance *> instances;
style_instance* styleInst = Context.root()->odf_context().styleContainer().style_by_name(
office_annotation_attr_.draw_style_name_.get_value_or(style_ref(L"")).style_name(), odf_types::style_family::Graphic,false/*Context.process_headers_footers_*/);
office_annotation_attr_.draw_style_name_.get_value_or(L""), odf_types::style_family::Graphic, false/*Context.process_headers_footers_*/);
if (styleInst)
{
style_instance * defaultStyle = Context.root()->odf_context().styleContainer().style_default_by_type(odf_types::style_family::Graphic);
@ -215,7 +215,7 @@ void office_annotation::xlsx_convert(oox::xlsx_conversion_context & Context)
graphicProperties.apply_to(Context.get_comments_context().get_draw_properties());
const std::wstring textStyleName = office_annotation_attr_.draw_text_style_name_.get_value_or(style_ref(L"")).style_name();
const std::wstring textStyleName = office_annotation_attr_.draw_text_style_name_.get_value_or(L"");
std::wstring ref = Context.current_cell_address();
Context.get_comments_context().end_comment(ref,Context.current_table_column(), Context.current_table_row());
@ -280,7 +280,7 @@ void officeooo_annotation::pptx_convert(oox::pptx_conversion_context & Context)
/// Обрабатываем стиль draw
std::vector<const odf_reader::style_instance *> instances;
style_instance* styleInst = Context.root()->odf_context().styleContainer().style_by_name(
office_annotation_attr_.draw_style_name_.get_value_or(style_ref(L"")).style_name(), odf_types::style_family::Graphic,false/*Context.process_headers_footers_*/);
office_annotation_attr_.draw_style_name_.get_value_or(L""), odf_types::style_family::Graphic,false/*Context.process_headers_footers_*/);
if (styleInst)
{
style_instance * defaultStyle = Context.root()->odf_context().styleContainer().style_default_by_type(odf_types::style_family::Graphic);
@ -292,7 +292,7 @@ void officeooo_annotation::pptx_convert(oox::pptx_conversion_context & Context)
graphicProperties.apply_to(Context.get_comments_context().get_draw_properties());
const std::wstring textStyleName = office_annotation_attr_.draw_text_style_name_.get_value_or(style_ref(L"")).style_name();
const std::wstring textStyleName = office_annotation_attr_.draw_text_style_name_.get_value_or(L"");
Context.get_comments_context().end_comment();
}

View File

@ -37,8 +37,6 @@
#include "office_elements.h"
#include "office_elements_create.h"
#include "datatypes/style_ref.h"
namespace cpdoccore {
namespace odf_reader {
@ -59,8 +57,8 @@ public:
_CP_OPT(bool) display_;
_CP_OPT(odf_types::style_ref) draw_text_style_name_;
_CP_OPT(odf_types::style_ref) draw_style_name_;
_CP_OPT(std::wstring) draw_text_style_name_;
_CP_OPT(std::wstring) draw_style_name_;
};
// dc:date

View File

@ -41,7 +41,9 @@
#include <cpdoccore/xml/attributes.h>
#include <cpdoccore/odf/odf_document.h>
#include "odfcontext.h"
#include "draw_common.h"
namespace cpdoccore {
@ -96,7 +98,7 @@ void office_body::docx_convert(oox::docx_conversion_context & Context)
std::vector<style_master_page*> & masterPages = Context.root()->odf_context().pageLayoutContainer().master_pages();
if (!masterPages.empty())
{
Context.set_master_page_name(masterPages[0]->style_master_page_attlist_.style_name_.get_value_or(style_ref(L"Standard")).style_name() );
Context.set_master_page_name(masterPages[0]->style_master_page_attlist_.style_name_.get_value_or(L"Standard"));
}
const page_layout_instance * layout = Context.root()->odf_context().pageLayoutContainer().page_layout_first();
@ -111,14 +113,29 @@ void office_body::docx_convert(oox::docx_conversion_context & Context)
Context.add_page_properties(L""); //
Context.add_page_properties(L"");
}
//backcolor (for all pages)
//background (for all pages)
if (page_layout_instance * firtsPageLayout = Context.root()->odf_context().pageLayoutContainer().page_layout_by_name(Context.get_page_properties()))
{
if (style_page_layout_properties * prop = firtsPageLayout->properties())
{
if (prop->docx_back_serialize(Context.output_stream(), Context))
oox::_oox_fill fill;
Compute_GraphicFill(prop->style_page_layout_properties_attlist_.common_draw_fill_attlist_,
prop->style_page_layout_properties_elements_.style_background_image_,
Context.root()->odf_context().drawStyles(), fill);
if (prop->style_page_layout_properties_attlist_.common_background_color_attlist_.fo_background_color_ || fill.type != 0)
{
Context.set_settings_property(odf_reader::_property(L"displayBackgroundShape",true));
if ((fill.bitmap) && (fill.bitmap->rId.empty()))
{
std::wstring href = fill.bitmap->xlink_href_;
fill.bitmap->rId = Context.add_mediaitem(href, oox::typeImage, fill.bitmap->isInternal, href);
}
int id = Context.get_drawing_context().get_current_shape_id();
if (prop->docx_background_serialize(Context.output_stream(), Context, fill, id))
{
Context.set_settings_property(odf_reader::_property(L"displayBackgroundShape", true));
}
}
}
}

View File

@ -57,7 +57,7 @@ class document_context;
class office_element;
typedef shared_ptr<office_element>::Type office_element_ptr;
typedef weak_ptr<office_element>::Type office_element_weak_ptr;
typedef std::vector<office_element_ptr> office_element_ptr_array;
typedef std::vector<office_element_ptr> office_element_ptr_array;
class office_element : public xml::element<wchar_t>,
public common::read_doc_element,

View File

@ -340,7 +340,7 @@ std::wostream & span::text_to_stream(std::wostream & _Wostream) const
void span::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"text:style-name", text_style_name_, style_ref(L""));
CP_APPLY_ATTR(L"text:style-name", text_style_name_, std::wstring(L""));
const std::wstring classNames = Attributes->get_val< std::wstring >(L"text:class-names").get_value_or(L"");
std::vector< std::wstring > classNamesArray;
@ -351,7 +351,7 @@ void span::add_attributes( const xml::attributes_wc_ptr & Attributes )
BOOST_FOREACH(const std::wstring & name, classNamesArray)
{
text_class_names_.push_back( style_ref(name) );
text_class_names_.push_back( name );
}
}
}
@ -374,10 +374,10 @@ void span::docx_convert(oox::docx_conversion_context & Context)
std::wostream & _Wostream = Context.output_stream();
if (!text_style_name_.style_name().empty()/* && !drawing*/)
if (!text_style_name_.empty()/* && !drawing*/)
{
if (style_instance * styleInst
= Context.root()->odf_context().styleContainer().style_by_name(text_style_name_.style_name(), style_family::Text,Context.process_headers_footers_)
= Context.root()->odf_context().styleContainer().style_by_name(text_style_name_, style_family::Text,Context.process_headers_footers_)
)
{
if (styleInst->is_automatic())
@ -418,7 +418,7 @@ void span::docx_convert(oox::docx_conversion_context & Context)
void span::xlsx_convert(oox::xlsx_conversion_context & Context)
{
Context.start_span(text_style_name_.style_name());
Context.start_span(text_style_name_);
BOOST_FOREACH(const office_element_ptr & elm, content_)
{
elm->xlsx_convert(Context);
@ -427,10 +427,10 @@ void span::xlsx_convert(oox::xlsx_conversion_context & Context)
}
void span::pptx_convert(oox::pptx_conversion_context & Context)
{
if (style_instance * styleInst = Context.root()->odf_context().styleContainer().style_by_name(text_style_name_.style_name(), style_family::Text,false))
if (style_instance * styleInst = Context.root()->odf_context().styleContainer().style_by_name(text_style_name_, style_family::Text,false))
Context.get_text_context().get_styles_context().start_process_style(styleInst);
Context.get_text_context().start_span(text_style_name_.style_name());
Context.get_text_context().start_span(text_style_name_);
BOOST_FOREACH(const office_element_ptr & elm, content_)
{
elm->pptx_convert(Context);
@ -456,10 +456,10 @@ void a::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
common_xlink_attlist_.add_attributes(Attributes);
CP_APPLY_ATTR(L"office:name", office_name_, std::wstring(L""));
CP_APPLY_ATTR(L"office:target-frame-name", office_target_frame_name_);
CP_APPLY_ATTR(L"text:style-name", text_style_name_, style_ref(L""));
CP_APPLY_ATTR(L"text:visited-style-name", text_visited_style_name_, style_ref(L""));
CP_APPLY_ATTR(L"office:name", office_name_, std::wstring(L""));
CP_APPLY_ATTR(L"office:target-frame-name", office_target_frame_name_);
CP_APPLY_ATTR(L"text:style-name", text_style_name_, std::wstring(L""));
CP_APPLY_ATTR(L"text:visited-style-name", text_visited_style_name_,std::wstring(L""));
}
void a::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
@ -491,8 +491,8 @@ void a::docx_convert(oox::docx_conversion_context & Context)
style_instance * styleInst = NULL;
if (!text_style_name_.style_name().empty())
styleInst = Context.root()->odf_context().styleContainer().style_by_name(text_style_name_.style_name(), style_family::Text,Context.process_headers_footers_);
if (!text_style_name_.empty())
styleInst = Context.root()->odf_context().styleContainer().style_by_name(text_style_name_, style_family::Text,Context.process_headers_footers_);
else
styleInst = Context.root()->odf_context().styleContainer().hyperlink_style();
@ -540,7 +540,7 @@ void a::docx_convert(oox::docx_conversion_context & Context)
void a::xlsx_convert(oox::xlsx_conversion_context & Context)
{
Context.start_hyperlink(text_style_name_.style_name());
Context.start_hyperlink(text_style_name_);
BOOST_FOREACH(const office_element_ptr & elm, content_)
{
elm->xlsx_convert(Context);
@ -675,7 +675,7 @@ std::wostream & ruby::text_to_stream(std::wostream & _Wostream) const
void ruby::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
text_style_name_ = style_ref( Attributes->get_val< std::wstring >(L"text:style-name").get_value_or(L"") );
text_style_name_ = Attributes->get_val< std::wstring >(L"text:style-name").get_value_or(L"") ;
}
void ruby::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)

View File

@ -40,7 +40,6 @@
#include "paragraph_content.h"
#include "office_elements_create.h"
#include "datatypes/style_ref.h"
#include "datatypes/targetframename.h"
#include "datatypes/noteclass.h"
@ -380,8 +379,8 @@ public:
office_element_ptr_array content_;
odf_types::style_ref text_style_name_;
odf_types::style_ref_array text_class_names_;
std::wstring text_style_name_;
std::vector<std::wstring> text_class_names_;
private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
@ -421,10 +420,10 @@ private:
std::wstring office_name_;
_CP_OPT(odf_types::target_frame_name) office_target_frame_name_;
odf_types::style_ref text_style_name_;
odf_types::style_ref text_visited_style_name_;
std::wstring text_style_name_;
std::wstring text_visited_style_name_;
office_element_ptr_array content_;
office_element_ptr_array content_;
};
CP_REGISTER_OFFICE_ELEMENT2(a);
@ -481,9 +480,9 @@ private:
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
virtual void add_text(const std::wstring & Text);
odf_types::style_ref text_style_name_;
office_element_ptr text_ruby_base_;
office_element_ptr text_ruby_text_;
std::wstring text_style_name_;
office_element_ptr text_ruby_base_;
office_element_ptr text_ruby_text_;
};

View File

@ -87,7 +87,7 @@ std::wostream & ruby_text::text_to_stream(std::wostream & _Wostream) const
void ruby_text::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
text_style_name_ = odf_types::style_ref( Attributes->get_val< std::wstring >(L"text:style-name").get_value_or(L"") );
text_style_name_ = Attributes->get_val< std::wstring >(L"text:style-name").get_value_or(L"");
}
void ruby_text::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)

View File

@ -142,85 +142,104 @@ void graphic_format_properties::apply_to(std::vector<_property> & properties)
if (fo_wrap_option_)
properties.push_back(_property(L"text-wrap", (int)fo_wrap_option_->get_type()));
}
void graphic_format_properties::apply_from(const graphic_format_properties & Other)
void graphic_format_properties::apply_from(const graphic_format_properties * Other)
{
_CP_APPLY_PROP2(draw_stroke_);
_CP_APPLY_PROP2(draw_stroke_dash_);
_CP_APPLY_PROP2(draw_marker_start_);
_CP_APPLY_PROP2(draw_marker_end_);
_CP_APPLY_PROP2(draw_textarea_horizontal_align_);
_CP_APPLY_PROP2(draw_textarea_vertical_align_);
_CP_APPLY_PROP2(draw_auto_grow_height_);
_CP_APPLY_PROP2(draw_auto_grow_width_);
_CP_APPLY_PROP2(draw_fit_to_size_);
_CP_APPLY_PROP2(draw_fit_to_contour_);
_CP_APPLY_PROP2(svg_stroke_color_);
_CP_APPLY_PROP2(svg_stroke_width_);
_CP_APPLY_PROP2(svg_stroke_opacity_);
_CP_APPLY_PROP2(fo_min_width_);
_CP_APPLY_PROP2(fo_min_height_);
_CP_APPLY_PROP2(fo_max_width_);
_CP_APPLY_PROP2(fo_max_height_);
_CP_APPLY_PROP2(fo_wrap_option_);
if (Other == NULL) return;
_CP_APPLY_PROP2(style_print_content_);
_CP_APPLY_PROP2(style_protect_);
_CP_APPLY_PROP2(style_editable_);
_CP_APPLY_PROP2(style_wrap_);
_CP_APPLY_PROP2(style_wrap_dynamic_treshold_);
_CP_APPLY_PROP2(style_number_wrapped_paragraphs_);
_CP_APPLY_PROP2(style_wrap_contour_);
_CP_APPLY_PROP2(style_wrap_contour_mode_);
_CP_APPLY_PROP2(style_run_through_);
_CP_APPLY_PROP2(style_flow_with_text_);
_CP_APPLY_PROP2(style_overflow_behavior_);
_CP_APPLY_PROP2(style_mirror_);
_CP_APPLY_PROP2(fo_clip_);
_CP_APPLY_PROP2(draw_wrap_influence_on_position_);
_CP_APPLY_PROP3(draw_stroke_);
_CP_APPLY_PROP3(draw_stroke_dash_);
_CP_APPLY_PROP3(draw_marker_start_);
_CP_APPLY_PROP3(draw_marker_end_);
_CP_APPLY_PROP3(draw_textarea_horizontal_align_);
_CP_APPLY_PROP3(draw_textarea_vertical_align_);
_CP_APPLY_PROP3(draw_auto_grow_height_);
_CP_APPLY_PROP3(draw_auto_grow_width_);
_CP_APPLY_PROP3(draw_fit_to_size_);
_CP_APPLY_PROP3(draw_fit_to_contour_);
_CP_APPLY_PROP3(svg_stroke_color_);
_CP_APPLY_PROP3(svg_stroke_width_);
_CP_APPLY_PROP3(svg_stroke_opacity_);
_CP_APPLY_PROP3(fo_min_width_);
_CP_APPLY_PROP3(fo_min_height_);
_CP_APPLY_PROP3(fo_max_width_);
_CP_APPLY_PROP3(fo_max_height_);
_CP_APPLY_PROP3(fo_wrap_option_);
common_draw_fill_attlist_.apply_from(Other.common_draw_fill_attlist_);
common_draw_rel_size_attlist_.apply_from(Other.common_draw_rel_size_attlist_);
common_horizontal_margin_attlist_.apply_from(Other.common_horizontal_margin_attlist_);
common_vertical_margin_attlist_.apply_from(Other.common_vertical_margin_attlist_);
common_margin_attlist_.apply_from(Other.common_margin_attlist_);
common_horizontal_pos_attlist_.apply_from(Other.common_horizontal_pos_attlist_);
common_horizontal_rel_attlist_.apply_from(Other.common_horizontal_rel_attlist_);
common_vertical_pos_attlist_.apply_from(Other.common_vertical_pos_attlist_);
common_vertical_rel_attlist_.apply_from(Other.common_vertical_rel_attlist_);
common_text_anchor_attlist_.apply_from(Other.common_text_anchor_attlist_);
common_border_attlist_.apply_from(Other.common_border_attlist_);
common_border_line_width_attlist_.apply_from(Other.common_border_line_width_attlist_);
common_padding_attlist_.apply_from(Other.common_padding_attlist_);
common_shadow_attlist_.apply_from(Other.common_shadow_attlist_);
common_background_color_attlist_.apply_from(Other.common_background_color_attlist_);
_CP_APPLY_PROP3(style_print_content_);
_CP_APPLY_PROP3(style_protect_);
_CP_APPLY_PROP3(style_editable_);
_CP_APPLY_PROP3(style_wrap_);
_CP_APPLY_PROP3(style_wrap_dynamic_treshold_);
_CP_APPLY_PROP3(style_number_wrapped_paragraphs_);
_CP_APPLY_PROP3(style_wrap_contour_);
_CP_APPLY_PROP3(style_wrap_contour_mode_);
_CP_APPLY_PROP3(style_run_through_);
_CP_APPLY_PROP3(style_flow_with_text_);
_CP_APPLY_PROP3(style_overflow_behavior_);
_CP_APPLY_PROP3(style_mirror_);
_CP_APPLY_PROP3(fo_clip_);
_CP_APPLY_PROP3(draw_wrap_influence_on_position_);
common_draw_fill_attlist_.apply_from (Other->common_draw_fill_attlist_);
common_draw_rel_size_attlist_.apply_from (Other->common_draw_rel_size_attlist_);
common_horizontal_margin_attlist_.apply_from(Other->common_horizontal_margin_attlist_);
common_vertical_margin_attlist_.apply_from (Other->common_vertical_margin_attlist_);
common_margin_attlist_.apply_from (Other->common_margin_attlist_);
common_horizontal_pos_attlist_.apply_from (Other->common_horizontal_pos_attlist_);
common_horizontal_rel_attlist_.apply_from (Other->common_horizontal_rel_attlist_);
common_vertical_pos_attlist_.apply_from (Other->common_vertical_pos_attlist_);
common_vertical_rel_attlist_.apply_from (Other->common_vertical_rel_attlist_);
common_text_anchor_attlist_.apply_from (Other->common_text_anchor_attlist_);
common_border_attlist_.apply_from (Other->common_border_attlist_);
common_border_line_width_attlist_.apply_from(Other->common_border_line_width_attlist_);
common_padding_attlist_.apply_from (Other->common_padding_attlist_);
common_shadow_attlist_.apply_from (Other->common_shadow_attlist_);
common_background_color_attlist_.apply_from (Other->common_background_color_attlist_);
_CP_APPLY_PROP(style_background_image_, Other.style_background_image_);
_CP_APPLY_PROP(style_background_image_, Other->style_background_image_);
}
// style:graphic-properties
//////////////////////////////////////////////////////////////////////////////////////////////////
const wchar_t * style_graphic_properties::ns = L"style";
const wchar_t * style_graphic_properties::name = L"graphic-properties";
void style_graphic_properties::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
graphic_format_properties_.add_attributes(Attributes);
content_.add_attributes(Attributes);
}
void style_graphic_properties::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
{
if (L"style" == Ns && L"background-image" == Name)
{
CP_CREATE_ELEMENT(graphic_format_properties_.style_background_image_);
CP_CREATE_ELEMENT(content_.style_background_image_);
}
//if (CP_CHECK_NAME(L"text", L"list-style")
// styles_.add_child_element(Reader, Ns, Name, getContext()); он тут и не нужен по сути... описание есть и в другом сместе
}
//////////////////////////////////////////////////////////////////////////////////////////////////
const wchar_t * loext_graphic_properties::ns = L"loext";
const wchar_t * loext_graphic_properties::name = L"graphic-properties";
void loext_graphic_properties::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
content_.add_attributes(Attributes);
}
void loext_graphic_properties::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
{
if (L"style" == Ns && L"background-image" == Name)
{
CP_CREATE_ELEMENT(content_.style_background_image_);
}
//if (CP_CHECK_NAME(L"text", L"list-style")
// styles_.add_child_element(Reader, Ns, Name, getContext()); он тут и не нужен по сути... описание есть и в другом сместе
}
}
}

View File

@ -68,16 +68,15 @@ class graphic_format_properties
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void apply_from(const graphic_format_properties & Other);
void apply_from(const graphic_format_properties * Other);
void apply_to(std::vector<_property> & properties);
public:
_CP_OPT(odf_types::length_or_percent) fo_min_width_;
_CP_OPT(odf_types::length_or_percent) fo_min_height_;
_CP_OPT(odf_types::length_or_percent) fo_min_width_;
_CP_OPT(odf_types::length_or_percent) fo_min_height_;
_CP_OPT(odf_types::length_or_percent) fo_max_width_;
_CP_OPT(odf_types::length_or_percent) fo_max_height_;
_CP_OPT(odf_types::length_or_percent) fo_max_width_;
_CP_OPT(odf_types::length_or_percent) fo_max_height_;
///////////////////////////////
_CP_OPT(odf_types::color) svg_stroke_color_;
@ -138,7 +137,6 @@ public:
};
/// style:graphic-properties
class style_graphic_properties : public office_element_impl<style_graphic_properties>
{
public:
@ -149,20 +147,34 @@ public:
CPDOCCORE_DEFINE_VISITABLE();
const graphic_format_properties & content() const { return graphic_format_properties_; }
graphic_format_properties 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);
private:
graphic_format_properties graphic_format_properties_;
};
CP_REGISTER_OFFICE_ELEMENT2(style_graphic_properties);
class loext_graphic_properties : public office_element_impl<style_graphic_properties>
{
public:
static const wchar_t * ns;
static const wchar_t * name;
static const xml::NodeType xml_type = xml::typeElement;
static const ElementType type = typeStyleGraphicPropertis;
CPDOCCORE_DEFINE_VISITABLE();
graphic_format_properties 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);
};
CP_REGISTER_OFFICE_ELEMENT2(loext_graphic_properties);
}
}

View File

@ -52,10 +52,10 @@ const wchar_t * style_map::name = L"map";
void style_map::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"style:condition", style_condition_, std::wstring(L""));
CP_APPLY_ATTR(L"style:name", style_name_, style_ref(L""));
CP_APPLY_ATTR(L"style:base-cell-address", style_base_cell_address_, std::wstring(L""));
CP_APPLY_ATTR(L"style:apply-style-name", style_apply_style_name_, style_ref(L""));
CP_APPLY_ATTR(L"style:condition", style_condition_, std::wstring(L""));
CP_APPLY_ATTR(L"style:name", style_name_, std::wstring(L""));
CP_APPLY_ATTR(L"style:base-cell-address", style_base_cell_address_, std::wstring(L""));
CP_APPLY_ATTR(L"style:apply-style-name", style_apply_style_name_, std::wstring(L""));
}
void style_map::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)

View File

@ -39,7 +39,6 @@
#include "office_elements.h"
#include "office_elements_create.h"
#include "datatypes/style_ref.h"
namespace cpdoccore {
namespace odf_reader {
@ -59,10 +58,10 @@ private:
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
public:
std::wstring style_condition_;
odf_types::style_ref style_name_;
std::wstring style_base_cell_address_;
odf_types::style_ref style_apply_style_name_;
std::wstring style_condition_;
std::wstring style_name_;
std::wstring style_base_cell_address_;
std::wstring style_apply_style_name_;
};

View File

@ -58,7 +58,6 @@
#include "datatypes/linestyle.h"
#include "datatypes/linetype.h"
#include "datatypes/styleleadercolor.h"
#include "datatypes/style_ref.h"
#include "datatypes/dropcaplength.h"
#include "datatypes/fobreak.h"
#include "datatypes/styleposition.h"
@ -98,17 +97,17 @@ private:
virtual void add_text(const std::wstring & Text);
private:
odf_types::length style_position_;
_CP_OPT(odf_types::style_type) style_type_;
_CP_OPT(wchar_t) style_char_;
odf_types::length style_position_;
_CP_OPT(odf_types::style_type) style_type_;
_CP_OPT(wchar_t) style_char_;
_CP_OPT(odf_types::line_type) style_leader_type_;
_CP_OPT(odf_types::line_style) style_leader_style_;
_CP_OPT(odf_types::line_width) style_leader_width_;
_CP_OPT(odf_types::style_leader_color) style_leader_color_;
_CP_OPT(odf_types::line_type) style_leader_type_;
_CP_OPT(odf_types::line_style) style_leader_style_;
_CP_OPT(odf_types::line_width) style_leader_width_;
_CP_OPT(odf_types::style_leader_color) style_leader_color_;
_CP_OPT( std::wstring ) style_leader_text_;
_CP_OPT( odf_types::style_ref ) style_leader_text_style_;
_CP_OPT( std::wstring ) style_leader_text_;
_CP_OPT( std::wstring ) style_leader_text_style_;
};
@ -143,7 +142,6 @@ private:
CP_REGISTER_OFFICE_ELEMENT2(style_tab_stops);
// style_drop_cap
class style_drop_cap : public office_element_impl<style_drop_cap>
{
public:
@ -157,10 +155,10 @@ public:
public:
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
odf_types::drop_cap_length style_length_;
unsigned int style_lines_;
_CP_OPT(odf_types::length) style_distance_;
_CP_OPT(odf_types::style_ref) style_style_name_;
odf_types::drop_cap_length style_length_;
unsigned int style_lines_;
_CP_OPT(odf_types::length) style_distance_;
_CP_OPT(std::wstring) style_style_name_;
private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
@ -172,7 +170,6 @@ private:
CP_REGISTER_OFFICE_ELEMENT2(style_drop_cap);
/// style:background-image
class style_background_image : public office_element_impl<style_background_image>
{
public:
@ -215,85 +212,32 @@ public:
void xlsx_convert(std::wostream & strm, bool in_draw);
// 15.5.1 fo:line-height
_CP_OPT(odf_types::line_width) fo_line_height_; // +
// 15.5.2 style:line-height-at-least
_CP_OPT(odf_types::length) style_line_height_at_least_; // +
// 15.5.3 style:line-spacing
_CP_OPT(odf_types::length) style_line_height_at_least_; // +
_CP_OPT(odf_types::length) style_line_spacing_; // +
// 15.5.4 style:font-independent-line-spacing
_CP_OPT(bool) style_font_independent_line_spacing_; // ???
// 15.5.5 fo:text-align
_CP_OPT(odf_types::text_align) fo_text_align_; // +
// 15.5.6 fo:text-align-last
_CP_OPT(odf_types::text_align) fo_text_align_last_;
// 15.5.7 style:justify-single-word
_CP_OPT(bool) style_justify_single_word_;
// 15.5.8 fo:keep-together
_CP_OPT(odf_types::keep_together) fo_keep_together_; // +
// 15.5.9 fo:widows
_CP_OPT(unsigned int) fo_widows_; // +
// 15.5.10 fo:orphans
_CP_OPT(unsigned int) fo_orphans_;
// 15.5.11 <style:tab-stops>
office_element_ptr style_tab_stops_; // +
// 15.5.12 style:tab-stop-distance
_CP_OPT(odf_types::length) style_tab_stop_distance_;
// 15.5.13 fo:hyphenation-keep
_CP_OPT(odf_types::hyphenation_keep) fo_hyphenation_keep_;
// 15.5.14 fo:hyphenation-ladder-count
_CP_OPT(odf_types::integer_or_nolimit) fo_hyphenation_ladder_count_;
// 15.5.15 <style:drop-cap>
office_element_ptr style_drop_cap_;
// 15.5.16 style:register-true
_CP_OPT(bool) style_register_true_;
// 15.5.17 fo:margin-left
_CP_OPT(odf_types::length_or_percent) fo_margin_left_; // +
// fo:margin-right
_CP_OPT(odf_types::length_or_percent) fo_margin_right_; // +
// 15.5.18 fo:text-indent
_CP_OPT(odf_types::length_or_percent) fo_text_indent_; // +
// 15.5.19 style:auto-text-indent
_CP_OPT(bool) style_auto_text_indent_; // ???
// 15.5.20 fo:margin-top
_CP_OPT(odf_types::length_or_percent) fo_margin_top_; // +
// fo:margin-bottom
_CP_OPT(odf_types::length_or_percent) fo_margin_bottom_; // +
// 15.5.21 fo:margin
_CP_OPT(odf_types::length_or_percent) fo_margin_;
// 15.5.22 fo:break-before
_CP_OPT(odf_types::fo_break) fo_break_before_; // +
// fo:break-after
_CP_OPT(odf_types::fo_break) fo_break_after_;
// 15.5.23 fo:background-color
_CP_OPT(odf_types::background_color) fo_background_color_;
// 15.5.24 <style:background-image>
office_element_ptr style_background_image_;
_CP_OPT(odf_types::border_style) fo_border_; // +
@ -302,7 +246,6 @@ public:
_CP_OPT(odf_types::border_style) fo_border_left_; // +
_CP_OPT(odf_types::border_style) fo_border_right_; // +
// 15.5.26
_CP_OPT( odf_types::border_widths ) style_border_line_width_; // +
_CP_OPT( odf_types::border_widths ) style_border_line_width_top_; // +
@ -328,14 +271,11 @@ public:
_CP_OPT(bool) style_snap_to_layout_grid_;
_CP_OPT(unsigned int) style_page_number_;
// 15.5.40 style:background-transparency
_CP_OPT(odf_types::percent) style_background_transparency_;
//
_CP_OPT(bool) style_join_border_;
};
// style_paragraph_properties
class style_paragraph_properties : public office_element_impl<style_paragraph_properties>
{
public:

View File

@ -918,10 +918,9 @@ void text_format_properties_content::docx_convert(oox::docx_conversion_context &
if (shape->word_art_)
{//взять из графических ствойст цвет текста ..
const _CP_OPT(style_ref) & styleRef = shape->common_draw_attlists_.shape_with_text_and_styles_.
common_draw_shape_with_styles_attlist_.common_draw_style_name_attlist_.draw_style_name_;
const std::wstring styleName = styleRef ? styleRef->style_name() : L"";
const std::wstring styleName = shape->common_draw_attlists_.shape_with_text_and_styles_.
common_shape_draw_attlist_.draw_style_name_.get_value_or(L"");
std::vector<const odf_reader::style_instance *> instances;
odf_reader::style_instance* styleInst = Context.root()->odf_context().styleContainer().style_by_name(styleName, odf_types::style_family::Graphic,Context.process_headers_footers_);

View File

@ -40,7 +40,6 @@
#include "office_elements_create.h"
#include "datatypes/style_ref.h"
#include "datatypes/fontvariant.h"
#include "datatypes/texttransform.h"
#include "datatypes/color.h"
@ -106,7 +105,7 @@ public:
_CP_OPT(odf_types::line_width) style_text_line_through_width_;
_CP_OPT(odf_types::color) style_text_line_through_color_;
_CP_OPT(std::wstring) style_text_line_through_text_;
_CP_OPT(odf_types::style_ref) style_text_line_through_text_style_;
_CP_OPT(std::wstring) style_text_line_through_text_style_;
_CP_OPT(odf_types::text_position) style_text_position_;
_CP_OPT(std::wstring) style_font_name_;
_CP_OPT(std::wstring) style_font_name_asian_;

View File

@ -54,7 +54,6 @@
#include "serialize_elements.h"
#include "odfcontext.h"
#include "draw_common.h"
namespace cpdoccore {
@ -159,9 +158,15 @@ style_paragraph_properties * style_content::get_style_paragraph_properties() con
return dynamic_cast<style_paragraph_properties *>(style_paragraph_properties_.get());
}
style_graphic_properties * style_content::get_style_graphic_properties() const
graphic_format_properties * style_content::get_graphic_properties() const
{
return dynamic_cast<style_graphic_properties *>(style_graphic_properties_.get());
style_graphic_properties *style_ = dynamic_cast<style_graphic_properties *>(style_graphic_properties_.get());
loext_graphic_properties *loext_ = dynamic_cast<loext_graphic_properties *>(style_graphic_properties_.get());
if (style_) return &style_->content_;
if (loext_) return &loext_->content_;
return NULL;
}
style_table_properties * style_content::get_style_table_properties() const
{
@ -265,7 +270,7 @@ void style_content::add_child_element( xml::sax * Reader, const std::wstring & N
{
CP_CREATE_ELEMENT_SIMPLE(style_section_properties_);
}
else if CP_CHECK_NAME(L"style", L"graphic-properties")
else if (CP_CHECK_NAME(L"style", L"graphic-properties") || CP_CHECK_NAME(L"loext", L"graphic-properties"))
{
CP_CREATE_ELEMENT_SIMPLE(style_graphic_properties_);
}
@ -904,12 +909,12 @@ void style_page_layout::add_child_element( xml::sax * Reader, const std::wstring
// style-page-layout-properties-attlist
void style_page_layout_properties_attlist::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"fo:page-width", fo_page_width_);
CP_APPLY_ATTR(L"fo:page-height", fo_page_height_);
CP_APPLY_ATTR(L"fo:page-width", fo_page_width_);
CP_APPLY_ATTR(L"fo:page-height", fo_page_height_);
common_num_format_attlist_.add_attributes(Attributes);
common_num_format_prefix_suffix_attlist_.add_attributes(Attributes);
CP_APPLY_ATTR(L"style:paper-tray-name", style_paper_tray_name_);
CP_APPLY_ATTR(L"style:print-orientation", style_print_orientation_);
CP_APPLY_ATTR(L"style:paper-tray-name", style_paper_tray_name_);
CP_APPLY_ATTR(L"style:print-orientation", style_print_orientation_);
common_horizontal_margin_attlist_.add_attributes(Attributes);
common_vertical_margin_attlist_.add_attributes(Attributes);
@ -919,7 +924,8 @@ void style_page_layout_properties_attlist::add_attributes( const xml::attributes
common_padding_attlist_.add_attributes(Attributes);
common_shadow_attlist_.add_attributes(Attributes);
common_background_color_attlist_.add_attributes(Attributes);
common_draw_fill_attlist_.add_attributes(Attributes);
CP_APPLY_ATTR(L"style:register-truth-ref-style-name", style_register_truth_ref_style_name_);
CP_APPLY_ATTR(L"style:print", style_print_);
CP_APPLY_ATTR(L"style:print-page-order", style_print_page_order_);
@ -1260,18 +1266,26 @@ void style_page_layout_properties::add_child_element( xml::sax * Reader, const s
{
style_page_layout_properties_elements_.add_child_element(Reader, Ns, Name, getContext());
}
bool style_page_layout_properties::docx_back_serialize(std::wostream & strm, oox::docx_conversion_context & Context)
{
if (!style_page_layout_properties_attlist_.common_background_color_attlist_.fo_background_color_)return false;
if (style_page_layout_properties_attlist_.common_background_color_attlist_.fo_background_color_->get_type() == background_color::Transparent) return true;
bool style_page_layout_properties::docx_background_serialize(std::wostream & strm, oox::docx_conversion_context & Context, oox::_oox_fill & fill, int id)
{
if (style_page_layout_properties_attlist_.common_background_color_attlist_.fo_background_color_ &&
style_page_layout_properties_attlist_.common_background_color_attlist_.fo_background_color_->get_type() == background_color::Transparent)
return true; //??
//прозрачный фон
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"w:background")
{
std::wstring color = style_page_layout_properties_attlist_.common_background_color_attlist_.fo_background_color_->get_color().get_hex_value();
CP_XML_ATTR(L"w:color",color);
std::wstring color = L"ffffff";
if (style_page_layout_properties_attlist_.common_background_color_attlist_.fo_background_color_)
color = style_page_layout_properties_attlist_.common_background_color_attlist_.fo_background_color_->get_color().get_hex_value();
CP_XML_ATTR(L"w:color", color);
oox::vml_serialize_background(CP_XML_STREAM(), fill, color, id);
}
}
return true;
@ -1403,26 +1417,40 @@ int style_master_page::find_placeHolderIndex(presentation_class::type placeHolde
{
int idx = -1;
int i=0;
int size = content_.size();
while(true)
for (size_t i = 0; i < content_.size(); i++)
{
if (i>=size)break;
if (content_[i]->get_type() == odf_reader::typeDrawFrame)
{
draw_frame* frame = dynamic_cast<draw_frame *>(content_[i].get());
if (frame->idx_in_owner<0)frame->idx_in_owner = last_idx++;
if ((frame) && (frame->common_presentation_attlist_.presentation_class_) &&
(frame->common_presentation_attlist_.presentation_class_->get_type()== placeHolder))
if (frame)
{
idx = frame->idx_in_owner;
break;
odf_types::common_presentation_attlist &common_presentation_attlist_ = frame->common_draw_attlists_.shape_with_text_and_styles_.common_presentation_attlist_;
if (frame->idx_in_owner < 0)
frame->idx_in_owner = last_idx++;
if ((common_presentation_attlist_.presentation_class_) &&
(common_presentation_attlist_.presentation_class_->get_type()== placeHolder))
{
idx = frame->idx_in_owner;
break;
}
}
draw_shape* shape = dynamic_cast<draw_shape *>(content_[i].get());
if (shape)
{
odf_types::common_presentation_attlist &common_presentation_attlist_ = shape->common_draw_attlists_.shape_with_text_and_styles_.common_presentation_attlist_;
if (shape->idx_in_owner < 0)
shape->idx_in_owner = last_idx++;
if ((common_presentation_attlist_.presentation_class_) &&
(common_presentation_attlist_.presentation_class_->get_type()== placeHolder))
{
idx = shape->idx_in_owner;
break;
}
}
}
i++;
}
return idx;
}
@ -1556,7 +1584,7 @@ void header_footer_impl::docx_convert(oox::docx_conversion_context & Context)
if (content_.header_footer_content_.tracked_changes_)
content_.header_footer_content_.tracked_changes_->docx_convert(Context);
for (int i=0; i < content_.header_footer_content_.content_.size(); i++)
for (size_t i = 0; i < content_.header_footer_content_.content_.size(); i++)
{
content_.header_footer_content_.content_[i]->docx_convert(Context);
}

View File

@ -46,7 +46,6 @@
#include "office_elements_create.h"
#include "datatypes/stylefamily.h"
#include "datatypes/style_ref.h"
#include "datatypes/textalign.h"
#include "datatypes/lengthorpercent.h"
#include "datatypes/styleverticalrel.h"
@ -71,9 +70,10 @@
namespace cpdoccore { namespace odf_reader {
class graphic_format_properties;
class style_text_properties;
class style_paragraph_properties;
class style_graphic_properties;
class style_section_properties;
class style_table_cell_properties;
class style_table_row_properties;
@ -90,15 +90,16 @@ public:
void docx_convert(oox::docx_conversion_context & Context, bool in_styles = false);
void xlsx_convert(oox::xlsx_conversion_context & Context);
style_text_properties * get_style_text_properties() const;
style_paragraph_properties * get_style_paragraph_properties() const;
style_graphic_properties * get_style_graphic_properties() const;
style_table_properties * get_style_table_properties() const;
style_section_properties * get_style_section_properties() const;
style_table_cell_properties * get_style_table_cell_properties() const;
style_table_row_properties * get_style_table_row_properties() const;
graphic_format_properties * get_graphic_properties() const;
style_text_properties * get_style_text_properties() const;
style_paragraph_properties * get_style_paragraph_properties() const;
style_table_properties * get_style_table_properties() const;
style_section_properties * get_style_section_properties() const;
style_table_cell_properties * get_style_table_cell_properties() const;
style_table_row_properties * get_style_table_row_properties() const;
style_table_column_properties * get_style_table_column_properties() const;
style_chart_properties * get_style_chart_properties() const;
style_chart_properties * get_style_chart_properties() const;
style_drawing_page_properties* get_style_drawing_page_properties() const;
private:
@ -411,9 +412,9 @@ public:
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
office_element_ptr_array style_master_page_; // разметки тем
office_element_ptr_array style_master_page_; // разметки тем
office_element_ptr style_handout_master_; // разметки для принтера - .. второстепенно
office_element_ptr draw_layer_set_; // необязательно .. так как слои все равно не поддерживаются в мс.
office_element_ptr draw_layer_set_; // необязательно .. так как слои все равно не поддерживаются в мс.
// то есть не будут объекты объеденены по признаку слоя
// зы. не путать с обычной группировкой
@ -433,12 +434,12 @@ class style_master_page_attlist
public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
_CP_OPT(odf_types::style_ref) style_name_;
_CP_OPT(std::wstring) style_display_name_;
_CP_OPT(odf_types::style_ref) style_page_layout_name_;
_CP_OPT(std::wstring) style_name_;
_CP_OPT(std::wstring) style_display_name_;
_CP_OPT(std::wstring) style_page_layout_name_;
_CP_OPT(std::wstring) draw_style_name_;
_CP_OPT(odf_types::style_ref) style_next_style_name_;
_CP_OPT(std::wstring) draw_style_name_;
_CP_OPT(std::wstring) style_next_style_name_;
};
// style:master-page
@ -892,54 +893,26 @@ public:
odf_types::common_padding_attlist common_padding_attlist_;
odf_types::common_shadow_attlist common_shadow_attlist_;
// 15.2.10
odf_types::common_background_color_attlist common_background_color_attlist_;
// 15.2.12
_CP_OPT(odf_types::style_ref) style_register_truth_ref_style_name_;
// 15.2.13 TODO
_CP_OPT(std::wstring) style_print_;
// 15.2.14
_CP_OPT(odf_types::direction) style_print_page_order_;
// 15.2.15 TODO
_CP_OPT(std::wstring) style_first_page_number_;
// 15.2.16
_CP_OPT(odf_types::percent) style_scale_to_;
_CP_OPT(unsigned int) style_scale_to_pages_;
// 15.2.17
_CP_OPT(odf_types::table_centering) style_table_centering_;
// 15.2.18
_CP_OPT(odf_types::length) style_footnote_max_height_;
// 15.2.19
odf_types::common_writing_mode_attlist common_writing_mode_attlist_;
// 15.2.21
_CP_OPT(odf_types::layout_grid_mode) style_layout_grid_mode_;
// 15.2.22
_CP_OPT(odf_types::length) style_layout_grid_base_height_;
// 15.2.23
_CP_OPT(odf_types::length) style_layout_grid_ruby_height_;
// 15.2.24
_CP_OPT(unsigned int) style_layout_grid_lines_;
// 15.2.25
_CP_OPT(odf_types::color) style_layout_grid_color_;
// 15.2.26
_CP_OPT(bool) style_layout_grid_ruby_below_;
// 15.2.27
_CP_OPT(bool) style_layout_grid_print_;
// 15.2.28
_CP_OPT(bool) style_layout_grid_display_;
odf_types::common_background_color_attlist common_background_color_attlist_;
odf_types::common_draw_fill_attlist common_draw_fill_attlist_;
_CP_OPT(std::wstring) style_register_truth_ref_style_name_;
_CP_OPT(std::wstring) style_print_;
_CP_OPT(odf_types::direction) style_print_page_order_;
_CP_OPT(std::wstring) style_first_page_number_;
_CP_OPT(odf_types::percent) style_scale_to_;
_CP_OPT(unsigned int) style_scale_to_pages_;
_CP_OPT(odf_types::table_centering) style_table_centering_;
_CP_OPT(odf_types::length) style_footnote_max_height_;
odf_types::common_writing_mode_attlist common_writing_mode_attlist_;
_CP_OPT(odf_types::layout_grid_mode) style_layout_grid_mode_;
_CP_OPT(odf_types::length) style_layout_grid_base_height_;
_CP_OPT(odf_types::length) style_layout_grid_ruby_height_;
_CP_OPT(unsigned int) style_layout_grid_lines_;
_CP_OPT(odf_types::color) style_layout_grid_color_;
_CP_OPT(bool) style_layout_grid_ruby_below_;
_CP_OPT(bool) style_layout_grid_print_;
_CP_OPT(bool) style_layout_grid_display_;
};
@ -992,7 +965,7 @@ public:
};
// style:page-layout-properties
// style:page-layout-properties
class style_page_layout_properties : public office_element_impl<style_page_layout_properties>
{
public:
@ -1005,7 +978,7 @@ public:
void docx_convert_serialize(std::wostream & strm, oox::docx_conversion_context & Context);
void pptx_convert(oox::pptx_conversion_context & Context);
bool docx_back_serialize(std::wostream & strm, oox::docx_conversion_context & Context);
bool docx_background_serialize(std::wostream & strm, oox::docx_conversion_context & Context, oox::_oox_fill & fill, int id);
style_page_layout_properties() { }
@ -1020,7 +993,7 @@ private:
CP_REGISTER_OFFICE_ELEMENT2(style_page_layout_properties);
// text:notes-configuration
// text:notes-configuration
class text_notes_configuration : public office_element_impl<text_notes_configuration>
{
public:

View File

@ -43,7 +43,6 @@
#include "office_elements_create.h"
#include "datatypes/common_attlists.h"
#include "datatypes/style_ref.h"
namespace cpdoccore { namespace odf_reader {
@ -94,7 +93,7 @@ public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
private:
optional<odf_types::style_ref>::Type text_style_name_;
_CP_OPT(std::wstring) text_style_name_;
odf_types::common_num_format_attlist common_num_format_attlist_;
odf_types::common_num_format_prefix_suffix_attlist common_num_format_prefix_suffix_attlist_;
@ -218,10 +217,10 @@ public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
private:
_CP_OPT(odf_types::style_ref) text_style_name_;
optional<wchar_t>::Type text_bullet_char_;
_CP_OPT(std::wstring) text_style_name_;
_CP_OPT(wchar_t) text_bullet_char_;
odf_types::common_num_format_prefix_suffix_attlist common_num_format_prefix_suffix_attlist_;
optional<odf_types::percent>::Type text_bullet_relative_size_;
_CP_OPT(odf_types::percent) text_bullet_relative_size_;
friend class text_list_level_style_bullet;

View File

@ -35,8 +35,6 @@
#include <boost/algorithm/string.hpp>
#include <boost/lexical_cast.hpp>
namespace cpdoccore
{
namespace svg_path
{
void skipSpaces(int& io_rPos, const std::wstring& rStr, const int nLen)
@ -69,7 +67,7 @@ namespace svg_path
return isOnNumberChar(rStr[nPos],bSignAllowed);
}
bool getDoubleChar(double& o_fRetval,int & io_rPos, const std::wstring& rStr)
bool getDoubleChar(double& o_fRetval,int & io_rPos, const std::wstring& rStr)
{
wchar_t aChar( rStr[io_rPos] );
std::wstring sNumberString;
@ -121,7 +119,7 @@ namespace svg_path
return false;
}
bool importDoubleAndSpaces( double& o_fRetval, int& io_rPos, const std::wstring& rStr, const int nLen )
bool importDoubleAndSpaces( double& o_fRetval, int& io_rPos, const std::wstring& rStr, const int nLen )
{
if( !getDoubleChar(o_fRetval, io_rPos, rStr) )
return false;
@ -131,7 +129,7 @@ namespace svg_path
return true;
}
bool importFlagAndSpaces(int& o_nRetval, int& io_rPos, const std::wstring& rStr, const int nLen)
bool importFlagAndSpaces(int& o_nRetval, int& io_rPos, const std::wstring& rStr, const int nLen)
{
wchar_t aChar( rStr[io_rPos] );
@ -181,7 +179,6 @@ namespace svg_path
return bUseRelativeCoordinates ? cLowerCaseCommand : cUpperCaseCommand;
}
bool parseSvgD(std::vector<_polyline> & Polyline, const std::wstring & rSvgDStatement, bool bWrongPositionAfterZ)
{
Polyline.clear();
@ -808,6 +805,152 @@ namespace svg_path
}
}
bool parseVml(std::vector<_polyline> & Polyline, const std::wstring & rSvgDStatement)
{
Polyline.clear();
const int nLen(rSvgDStatement.length());
int nPos(0);
bool bIsClosed(false);
double nLastX( 0.0 );
double nLastY( 0.0 );
double nLastControlX( 0.0 );
double nLastControlY( 0.0 );
_polyline aCurrPoly;
skipSpaces(nPos, rSvgDStatement, nLen);
while(nPos < nLen)
{
bool bRelative (false);
bool bMoveTo (false);
const wchar_t aCurrChar(rSvgDStatement[nPos]);
aCurrPoly.command.clear();
switch(aCurrChar)
{
case 'x' :
{
nPos++;
bIsClosed = true;
} break;
case 'm' :
case 't' :
{
bMoveTo = true;
}
case 'l' :
case 'r' :
{
if('t' == aCurrChar || 'r' == aCurrChar)
{
bRelative = true;
}
if(aCurrPoly.points.size() > 0)
{
if(bIsClosed)
{
}
Polyline.push_back(aCurrPoly);
bIsClosed = false;
if(bMoveTo) aCurrPoly.command = L"m";
else aCurrPoly.command = L"l";
aCurrPoly.points.clear();
}
nPos++;
skipSpaces(nPos, rSvgDStatement, nLen);
aCurrPoly.command.clear();
while(nPos < nLen && isOnNumberChar(rSvgDStatement, nPos))
{
double nX, nY;
if(!importDoubleAndSpaces(nX, nPos, rSvgDStatement, nLen)) return false;
if(!importDoubleAndSpaces(nY, nPos, rSvgDStatement, nLen)) return false;
if(bRelative)
{
nX += nLastX;
nY += nLastY;
}
nLastX = nX;
nLastY = nY;
if(bMoveTo) aCurrPoly.command = L"m";
else aCurrPoly.command = L"l";
aCurrPoly.points.push_back(_point(nX, nY));
Polyline.push_back(aCurrPoly);
aCurrPoly.points.clear();
}
}break;
case 'v' :
bRelative = true;
case 'c' :
{
nPos++;
skipSpaces(nPos, rSvgDStatement, nLen);
while(nPos < nLen && isOnNumberChar(rSvgDStatement, nPos))
{
double nX, nY;
double nX1, nY1;
double nX2, nY2;
if(!importDoubleAndSpaces(nX1, nPos, rSvgDStatement, nLen)) return false;
if(!importDoubleAndSpaces(nY1, nPos, rSvgDStatement, nLen)) return false;
if(!importDoubleAndSpaces(nX2, nPos, rSvgDStatement, nLen)) return false;
if(!importDoubleAndSpaces(nY2, nPos, rSvgDStatement, nLen)) return false;
if(!importDoubleAndSpaces(nX, nPos, rSvgDStatement, nLen)) return false;
if(!importDoubleAndSpaces(nY, nPos, rSvgDStatement, nLen)) return false;
if(bRelative)
{
nX1 += nLastX;
nY1 += nLastY;
nX2 += nLastX;
nY2 += nLastY;
nX += nLastX;
nY += nLastY;
}
aCurrPoly.command = L"c";
aCurrPoly.points.push_back(_point(nX1, nY1));
aCurrPoly.points.push_back(_point(nX2, nY2));
aCurrPoly.points.push_back(_point(nX, nY));
Polyline.push_back(aCurrPoly);
aCurrPoly.points.clear();
nLastX = nX;
nLastY = nY;
nLastControlX = nX2;
nLastControlY = nY2;
}
}break;
default:
{
++nPos;
break;
}
}
}
return true;
}
}

View File

@ -39,10 +39,7 @@
#include <boost/foreach.hpp>
#include <boost/regex.hpp>
#include <cpdoccore/CPOptional.h>
namespace cpdoccore
{
#include "../../include/cpdoccore/CPOptional.h"
namespace svg_path
{
@ -60,23 +57,10 @@ namespace svg_path
std::vector<_point> points; //будем бить строку пути по количеству точек в буковках
};
//m - 1 point
//c - 3 point
//s - 2 point
//l - 1 point
//z - finish
//h - 0.5 point :)
//v - 0.5 point
//q - 2 point
//t - 1 point
//a - [[[[
void oox_serialize(std::wostream & _Wostream, _point const & val);
void oox_serialize(std::wostream & _Wostream, _polyline const & val);
void oox_serialize(std::wostream & _Wostream, std::vector<svg_path::_polyline> & path);
bool parseSvgD(std::vector<_polyline> & Polyline, const std::wstring & rSvgDStatement, bool bWrongPositionAfterZ);
bool parsePolygon(std::vector<_polyline> & Polyline, const std::wstring & rPolygonStatement, bool bWrongPositionAfterZ, bool closed);
}
bool parseVml(std::vector<_polyline> & Polyline, const std::wstring & path);
bool parseSvgD(std::vector<_polyline> & Polyline, const std::wstring & path, bool bWrongPositionAfterZ);
bool parsePolygon(std::vector<_polyline> & Polyline, const std::wstring & path, bool bWrongPositionAfterZ, bool closed);
}

View File

@ -640,14 +640,14 @@ const wchar_t * table_shapes::name = L"shapes";
void table_shapes::docx_convert(oox::docx_conversion_context & Context)
{
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
content_[i]->docx_convert(Context);
}
}
void table_shapes::pptx_convert(oox::pptx_conversion_context & Context)
{
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
content_[i]->pptx_convert(Context);
}
@ -655,7 +655,7 @@ void table_shapes::pptx_convert(oox::pptx_conversion_context & Context)
void table_shapes::xlsx_convert(oox::xlsx_conversion_context & Context)
{
for (int i = 0 ; i < content_.size(); i++)
for (size_t i = 0 ; i < content_.size(); i++)
{
content_[i]->xlsx_convert(Context);
}

View File

@ -60,7 +60,7 @@ void table_database_ranges::add_child_element( xml::sax * Reader, const std::wst
void table_database_ranges::xlsx_convert(oox::xlsx_conversion_context & Context)
{
for (int i = 0; i < content_.size(); i++)
for (size_t i = 0; i < content_.size(); i++)
{
content_[i]->xlsx_convert(Context);
}
@ -101,7 +101,7 @@ void table_database_range::xlsx_convert(oox::xlsx_conversion_context & Context)
if (table_contains_header_)
Context.get_table_context().set_database_header(table_contains_header_->get());
for (int i = 0; i < content_.size(); i++)
for (size_t i = 0; i < content_.size(); i++)
{
content_[i]->xlsx_convert(Context);
}
@ -124,7 +124,7 @@ void table_sort::add_child_element( xml::sax * Reader, const std::wstring & Ns,
void table_sort::xlsx_convert(oox::xlsx_conversion_context & Context)
{
for (int i = 0; i < table_sort_by_.size(); i++)
for (size_t i = 0; i < table_sort_by_.size(); i++)
{
table_sort_by * sort_by = dynamic_cast<table_sort_by*>(table_sort_by_[i].get());

View File

@ -38,8 +38,6 @@
#include "office_elements.h"
#include "office_elements_create.h"
#include "datatypes/style_ref.h"
namespace cpdoccore {
namespace odf_reader {

View File

@ -199,13 +199,14 @@ void table_table::pptx_convert(oox::pptx_conversion_context & Context)
if ((inst) && (inst->content()))
{
//table_properties
if (inst->content()->get_style_graphic_properties())
if (inst->content()->get_graphic_properties())
{
const graphic_format_properties & style_graphic = inst->content()->get_style_graphic_properties()->content();
oox::_oox_fill fill;
Compute_GraphicFill(style_graphic.common_draw_fill_attlist_, style_graphic.style_background_image_,
Context.root()->odf_context().drawStyles() ,fill);
graphic_format_properties * graphic_props = inst->content()->get_graphic_properties();
if (graphic_props)
Compute_GraphicFill(graphic_props->common_draw_fill_attlist_, graphic_props->style_background_image_,
Context.root()->odf_context().drawStyles(), fill);
if (fill.bitmap)
{
@ -231,9 +232,9 @@ void table_table::pptx_convert(oox::pptx_conversion_context & Context)
////////////////////////////////////////////////////////////////////////
std::wstring table_content_ = Context.get_table_context().tableData().str();
if (table_content_.length()>0)
if (!table_content_.empty())
{
Context.get_slide_context().set_property(_property(L"table-content",table_content_));
Context.get_slide_context().set_property(_property(L"table-content", table_content_));
}
Context.get_slide_context().end_table();
}

Some files were not shown because too many files have changed in this diff Show More