Compare commits

..

83 Commits

Author SHA1 Message Date
16bdbafa75 fix for build 2017-09-08 10:40:25 +03:00
089871d3ae . 2017-09-07 19:35:58 +03:00
a43639587f Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop
* 'develop' of https://github.com/ONLYOFFICE/core:
  fix cfb
  fix cryptopp
2017-09-07 18:08:40 +03:00
46d022388d up 2017-09-07 18:08:28 +03:00
0366bcb341 fix cfb 2017-09-07 12:36:36 +03:00
ab3add9577 fix cryptopp 2017-09-07 11:39:50 +03:00
54939bca61 revert project 2017-09-07 10:27:18 +03:00
6bdfa26c7e up 2017-09-06 18:27:38 +03:00
a5bae64959 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop
* 'develop' of https://github.com/ONLYOFFICE/core:
  .
  x2t version up
  XlsFormat pivots .. fix after testing
  ppsm
  dotm2docx_dir, xltm2xlsx_dir, potm2pptx_dir in params.xml
  .
  getIsNoBase64 true by default
  docm->docx with params.xml
  XlsFormat - support macros x2t  - oom->oox
  fix derypt file
  .
  fix bug after testing
  fix bugs after testing
  variations for oox formats
2017-09-06 16:00:07 +03:00
4d04a0d649 up 2017-09-06 15:59:57 +03:00
fb7af5b902 update crypto++ to 5.6.5 2017-09-06 15:59:48 +03:00
77172fb39c Merge remote-tracking branch 'origin/release/v5.0.0' into develop 2017-09-06 14:34:25 +03:00
78ecdc676c . 2017-09-05 18:27:29 +03:00
bbccdf009b x2t version up 2017-09-05 14:52:58 +03:00
4b26066377 XlsFormat pivots .. fix after testing 2017-09-05 13:59:00 +03:00
8742163d51 ppsm 2017-09-05 13:48:57 +03:00
212753f831 dotm2docx_dir, xltm2xlsx_dir, potm2pptx_dir in params.xml 2017-09-01 15:58:10 +03:00
903236d890 . 2017-09-01 15:35:38 +03:00
15bd732b22 getIsNoBase64 true by default 2017-09-01 14:51:27 +03:00
3e86bf7644 docm->docx with params.xml 2017-09-01 14:45:40 +03:00
d6cd7c30f5 XlsFormat - support macros
x2t  - oom->oox
2017-09-01 13:29:13 +03:00
89b384abfe fix derypt file 2017-09-01 10:52:35 +03:00
f54baf3aa8 . 2017-08-31 18:50:01 +03:00
b2184f7167 fix bug after testing 2017-08-31 16:27:11 +03:00
3a10eabfe9 fix bugs after testing 2017-08-31 15:33:49 +03:00
f9e80f3602 variations for oox formats 2017-08-31 15:09:17 +03:00
80b1e5e886 . 2017-08-25 19:42:58 +03:00
d1a7800f36 restore commit DocBuilder 2017-08-25 17:22:36 +03:00
e223ffd0db Merge remote-tracking branch 'origin/release/v5.0.0' into develop 2017-08-25 17:14:15 +03:00
b140f4b521 fix revert up (from release) 2017-08-25 17:11:59 +03:00
2d570818be fix docx under office 2007 2017-08-25 12:07:18 +03:00
1462f08825 Added multithread flag 2017-08-24 19:37:22 +03:00
92fb4ac40b . 2017-08-24 19:21:00 +03:00
2bf55b7c8b Merge pull request #38 from ONLYOFFICE/release/v5.0.0
Release/v5.0.0
2017-08-24 19:01:31 +03:00
cf2159cd54 Merge commit '50f47caea96d96f16cbb301b4283beabc29798d1' into develop 2017-08-24 17:59:14 +03:00
decfeec7a1 Merge branch 'release/v5.0.0' of https://github.com/ONLYOFFICE/core into release/v5.0.0 2017-08-24 17:52:28 +03:00
50f47caea9 fix write video/audio in oox 2017-08-24 17:51:43 +03:00
89cd81ecfd Added 'deploy' target 2017-08-24 17:25:23 +03:00
8df6286e80 Merge remote-tracking branch 'origin/release/v5.0.0' into develop 2017-08-24 16:23:10 +03:00
e947c91a7b . 2017-08-24 16:22:03 +03:00
ef53ac4c63 RtfFormatReader - fix styles (change equals id & name) 2017-08-24 16:05:47 +03:00
f50dd716ad . 2017-08-24 14:37:52 +03:00
54d0260ea2 Merge remote-tracking branch 'origin/release/v5.0.0' into develop
# Conflicts:
#	XlsxSerializerCom/Writer/BinaryReader.h
2017-08-24 13:40:13 +03:00
2577365e08 RtfFormatWriter - small refactoring + fix users file 2017-08-24 13:34:08 +03:00
792a722063 Revert "up"
This reverts commit a7a78a09c1.
2017-08-24 12:09:29 +03:00
00df026108 fix open docx by office2007 2017-08-23 19:05:21 +03:00
56a4e80c83 XlsFormat - tabletyled pivot tables 2017-08-23 13:23:49 +03:00
a7a78a09c1 up 2017-08-23 11:29:42 +03:00
6f93eeae69 disable base64 on save to T format 2017-08-23 10:11:05 +03:00
be45d169d7 small refactoring writing vba in doct, xlst 2017-08-22 12:50:01 +03:00
0fc749f839 Merge remote-tracking branch 'origin/release/v5.0.0' into develop 2017-08-21 19:14:46 +03:00
03267ba2ec fix users file 2017-08-21 19:10:24 +03:00
b0adc188a2 fix users files 2017-08-21 18:23:08 +03:00
048fbc4b18 fix users file 2017-08-21 16:37:33 +03:00
c0a061f2cb Merge remote-tracking branch 'origin/release/v5.0.0' into develop 2017-08-21 12:10:37 +03:00
0296a6ef33 fix bug #35681 2017-08-21 12:09:32 +03:00
dcee112745 Merge branch 'release/v5.0.0' of https://github.com/ONLYOFFICE/core into release/v5.0.0 2017-08-21 11:27:30 +03:00
65709f9cc2 fix bug #35660 2017-08-21 11:26:18 +03:00
bf5c41b9a0 fix bug #35680 2017-08-21 11:22:08 +03:00
66b45dba7c fix users file 2017-08-18 17:31:36 +03:00
65e7372cf7 Merge remote-tracking branch 'origin/release/v5.0.0' into develop 2017-08-18 16:07:56 +03:00
2ce5708599 Odf, xls, doc - fix users files 2017-08-18 15:51:55 +03:00
1ea27ad7f8 Added multithread flag 2017-08-18 15:45:06 +03:00
48d94d24eb cache xlsx file to support pivot in xls, ods...; don't send jwt signature; and save in doctrenderer; 2017-08-18 14:49:56 +03:00
f5c569ab2a DocFormatReader ... 2017-08-18 12:01:45 +03:00
2e61fcfdd9 read/write pptm 2017-08-17 20:18:57 +03:00
3df883cbe8 return errors 2017-08-17 09:38:03 +03:00
0ed3f740b7 read/write docm 2017-08-16 18:05:59 +03:00
af2e76aea6 OdfFormatWriter - fix convert notes 2017-08-16 16:21:19 +03:00
6593230d48 . 2017-08-15 19:56:00 +03:00
e02c72b564 x2t version up. read/write xlsm. 2017-08-15 17:23:17 +03:00
c2964f92af . 2017-08-15 16:10:34 +03:00
15fb3a4f4e Revert "."
This reverts commit cff1836571.
2017-08-15 16:09:09 +03:00
cff1836571 . 2017-08-15 16:08:40 +03:00
cb57db3c8a . 2017-08-15 16:05:27 +03:00
d22fb105b6 OoxFormat - vbaProject, ... 2017-08-15 15:18:28 +03:00
89aba918bc OoxFormat - read/write vbaProject in binary 2017-08-14 19:24:21 +03:00
47c1e6f637 Merge branch 'develop' of github.com:ONLYOFFICE/core into develop 2017-08-14 16:36:45 +03:00
f5284c967b . 2017-08-14 16:32:41 +03:00
d465e29a0f v4.4.3 2017-08-14 16:30:52 +03:00
f43ef621cb OoxFormat - add vba & activeX controls 2017-08-14 16:26:30 +03:00
2f9a8eb77f OdfFormatReader - pilots converting .. 2017-08-11 09:47:20 +03:00
89ce79dafc v4.4.2 2017-07-24 15:25:00 +03:00
606 changed files with 117883 additions and 131619 deletions

3
.gitignore vendored
View File

@ -45,3 +45,6 @@ OfficeUtils/win32/OfficeUtilsLib/OfficeUtilsLib/ReadMe.txt
*.tlb
*.idb
**/.hg
*.zip
*.tar.gz
**/*.build/

View File

@ -75,6 +75,8 @@ namespace DocFileFormat
while ( ( cp - m_document->FIB->m_RgLw97.ccpText ) < (*m_document->IndividualFootnotesPlex)[id + 1] )
{
int cpStart = cp;
int fc = m_document->FindFileCharPos(cp);
if (fc < 0) break;
@ -93,6 +95,8 @@ namespace DocFileFormat
//this PAPX is for a normal paragraph
cp = writeParagraph( cp );
}
while (cp <= cpStart) //conv_fQioC665ib4ngHkDGY4__docx.doc
cp++;
}
m_pXmlWriter->WriteNodeEnd( L"w:footnote");

View File

@ -124,11 +124,14 @@ namespace DocFileFormat
TableInfo tai(papx);
if (tai.fInTable)
{
int cpStart = cp;
//this PAPX is for a table
//cp = writeTable( cp, tai.iTap );
Table table( this, cp, ( ( tai.iTap > 0 ) ? ( 1 ) : ( 0 ) ) );
table.Convert(this);
cp = table.GetCPEnd();
while (cp <= cpStart) //conv_eznHsm8em2unSv6_2QE__docx.doc
cp++;
}
else
{

View File

@ -483,26 +483,27 @@ namespace DocFileFormat
delete storageOut;
return false;
}
DecryptStream( 0, "/", storageIn, storageOut, Decryptor);
std::list<std::string> listStream = storageIn->entries();
//std::list<std::string> listStream = storageIn->entries();
for (std::list<std::string>::iterator it = listStream.begin(); it != listStream.end(); it++)
{
if (storageIn->isDirectory(*it))
{
std::list<std::string> list_entry = storageIn->GetAllStreams(*it);
for (std::list<std::string>::iterator it2 = list_entry.begin(); it2 != list_entry.end(); it2++)
{
DecryptStream(Decryptor, *it2, storageIn, storageOut);
}
}
else
{
DecryptStream(Decryptor, *it, storageIn, storageOut);
}
//for (std::list<std::string>::iterator it = listStream.begin(); it != listStream.end(); it++)
//{
// if (storageIn->isDirectory(*it))
// {
// std::list<std::string> list_entry = storageIn->GetAllStreams(*it);
//
// for (std::list<std::string>::iterator it2 = list_entry.begin(); it2 != list_entry.end(); it2++)
// {
// DecryptStream(Decryptor, *it2, storageIn, storageOut);
// }
// }
// else
// {
// DecryptStream(Decryptor, *it, storageIn, storageOut);
// }
}
//}
storageOut->close();
delete storageOut;
@ -525,34 +526,28 @@ namespace DocFileFormat
}
return true;
}
bool WordDocument::CopyStream (std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut)
void WordDocument::DecryptStream( int level, std::string path, POLE::Storage * storageIn, POLE::Storage * storageOut, CRYPT::Decryptor* Decryptor)
{
POLE::Stream *stream = new POLE::Stream(storageIn, streamName);
if (!stream) return false;
stream->seek(0);
int sz_stream = stream->size();
POLE::Stream *streamNew = new POLE::Stream(storageOut, streamName, true, sz_stream);
if (!streamNew) return false;
unsigned char* data_stream = new unsigned char[sz_stream];
stream->read(data_stream, sz_stream);
streamNew->write(data_stream, sz_stream);
RELEASEARRAYOBJECTS(data_stream);
streamNew->flush();
delete streamNew;
delete stream;
return true;
std::list<std::string> entries;
entries = storageIn->entries( path );
std::list<std::string>::iterator it;
for( it = entries.begin(); it != entries.end(); ++it )
{
std::string name = *it;
std::string fullname = path + name;
if( storageIn->isDirectory( fullname ) )
{
DecryptStream( level + 1, fullname + "/", storageIn, storageOut, Decryptor );
}
else
{
DecryptStream(fullname, storageIn, storageOut, Decryptor );
}
}
}
bool WordDocument::DecryptStream(CRYPT::Decryptor* Decryptor, std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut)
bool WordDocument::DecryptStream(std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut, CRYPT::Decryptor* Decryptor)
{
POLE::Stream *stream = new POLE::Stream(storageIn, streamName);
if (!stream) return false;
@ -567,9 +562,9 @@ namespace DocFileFormat
stream->read(data_stream, size_stream);
unsigned char* data_store = NULL;
int size_data_store = 0;
int size_data_store = 0;
if ("WordDocument" == streamName)
if ( std::wstring::npos != streamName.find("WordDocument") )
{
size_data_store = 68;
data_store = new unsigned char[size_data_store];

View File

@ -102,9 +102,10 @@ namespace DocFileFormat
private:
bool DecryptOfficeFile (CRYPT::Decryptor* Decryptor);
bool DecryptStream (CRYPT::Decryptor* Decryptor, std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut);
bool CopyStream (std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut);
bool DecryptStream (std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut, CRYPT::Decryptor* Decryptor);
void DecryptStream (int level, std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut, CRYPT::Decryptor* Decryptor);
inline StructuredStorageReader* GetStorage() const
{
return m_pStorage;

View File

@ -107,7 +107,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="C:\_WORK\trunk\ServerComponents\Common\DocxFormat\Source\XML\libxml2\XML\include"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="_DEBUG;_LIB;USE_LITE_READER;_USE_XMLLITE_READER_;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED"
MinimalRebuild="true"
BasicRuntimeChecks="3"

View File

@ -2,34 +2,38 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DocFormatLib", "..\DocFormatLib\Win32\DocFormatLib.vcproj", "{C5371405-338F-4B70-83BD-2A5CDF64F383}"
ProjectSection(ProjectDependencies) = postProject
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C} = {C27E9A9F-3A17-4482-9C5F-BF15C01E747C}
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D} = {77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "graphics", "..\..\DesktopEditor\graphics\graphics_vs2005.vcproj", "{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}"
ProjectSection(ProjectDependencies) = postProject
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B} = {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD} = {617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}
{BC52A07C-A797-423D-8C4F-8678805BBB36} = {BC52A07C-A797-423D-8C4F-8678805BBB36}
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
{BC52A07C-A797-423D-8C4F-8678805BBB36} = {BC52A07C-A797-423D-8C4F-8678805BBB36}
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD} = {617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B} = {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OfficeUtilsLib", "..\..\OfficeUtils\win32\OfficeUtilsLib.vcproj", "{F8274B05-168E-4D6E-B843-AA7510725363}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "raster", "..\..\DesktopEditor\raster\raster_vs2005.vcproj", "{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}"
ProjectSection(ProjectDependencies) = postProject
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1} = {EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}
{BC52A07C-A797-423D-8C4F-8678805BBB36} = {BC52A07C-A797-423D-8C4F-8678805BBB36}
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1} = {EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cximage", "..\..\DesktopEditor\cximage\CxImage\cximage_vs2005.vcproj", "{BC52A07C-A797-423D-8C4F-8678805BBB36}"
ProjectSection(ProjectDependencies) = postProject
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7} = {43A0E60E-5C4A-4C09-A29B-7683F503BBD7}
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239} = {764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}
{DF861D33-9BC1-418C-82B1-581F590FE169} = {DF861D33-9BC1-418C-82B1-581F590FE169}
{0588563C-F05C-428C-B21A-DD74756628B3} = {0588563C-F05C-428C-B21A-DD74756628B3}
{40A69F40-063E-43FD-8543-455495D8733E} = {40A69F40-063E-43FD-8543-455495D8733E}
{9A037A69-D1DF-4505-AB2A-6CB3641C476E} = {9A037A69-D1DF-4505-AB2A-6CB3641C476E}
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D} = {FFDA5DA1-BB65-4695-B678-BE59B4A1355D}
{818753F2-DBB9-4D3B-898A-A604309BE470} = {818753F2-DBB9-4D3B-898A-A604309BE470}
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D} = {FFDA5DA1-BB65-4695-B678-BE59B4A1355D}
{9A037A69-D1DF-4505-AB2A-6CB3641C476E} = {9A037A69-D1DF-4505-AB2A-6CB3641C476E}
{40A69F40-063E-43FD-8543-455495D8733E} = {40A69F40-063E-43FD-8543-455495D8733E}
{0588563C-F05C-428C-B21A-DD74756628B3} = {0588563C-F05C-428C-B21A-DD74756628B3}
{DF861D33-9BC1-418C-82B1-581F590FE169} = {DF861D33-9BC1-418C-82B1-581F590FE169}
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239} = {764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7} = {43A0E60E-5C4A-4C09-A29B-7683F503BBD7}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jasper", "..\..\DesktopEditor\cximage\jasper\jasper_vs2005.vcproj", "{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}"
@ -54,17 +58,16 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XlsFormat", "..\..\ASCOffic
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DocFormatTest", "DocFormatTest.vcproj", "{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}"
ProjectSection(ProjectDependencies) = postProject
{C5371405-338F-4B70-83BD-2A5CDF64F383} = {C5371405-338F-4B70-83BD-2A5CDF64F383}
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2} = {37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C} = {C27E9A9F-3A17-4482-9C5F-BF15C01E747C}
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF} = {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}
{F8274B05-168E-4D6E-B843-AA7510725363} = {F8274B05-168E-4D6E-B843-AA7510725363}
{A100103A-353E-45E8-A9B8-90B87CC5C0B0} = {A100103A-353E-45E8-A9B8-90B87CC5C0B0}
{BC52A07C-A797-423D-8C4F-8678805BBB36} = {BC52A07C-A797-423D-8C4F-8678805BBB36}
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D} = {77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}
{36636678-AE25-4BE6-9A34-2561D1BCF302} = {36636678-AE25-4BE6-9A34-2561D1BCF302}
{21663823-DE45-479B-91D0-B4FEF4916EF0} = {21663823-DE45-479B-91D0-B4FEF4916EF0}
{36636678-AE25-4BE6-9A34-2561D1BCF302} = {36636678-AE25-4BE6-9A34-2561D1BCF302}
{BC52A07C-A797-423D-8C4F-8678805BBB36} = {BC52A07C-A797-423D-8C4F-8678805BBB36}
{A100103A-353E-45E8-A9B8-90B87CC5C0B0} = {A100103A-353E-45E8-A9B8-90B87CC5C0B0}
{F8274B05-168E-4D6E-B843-AA7510725363} = {F8274B05-168E-4D6E-B843-AA7510725363}
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF} = {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C} = {C27E9A9F-3A17-4482-9C5F-BF15C01E747C}
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2} = {37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}
{C5371405-338F-4B70-83BD-2A5CDF64F383} = {C5371405-338F-4B70-83BD-2A5CDF64F383}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DocxFormat", "..\..\Common\DocxFormat\Projects\DocxFormat2005.vcproj", "{A100103A-353E-45E8-A9B8-90B87CC5C0B0}"

View File

@ -44,7 +44,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..\..\..\Common\OfficeDrawing;&quot;..\..\..\..\..\DesktopEditor\freetype-2.5.2\include&quot;;..\..\..\..\..\Common\OfficeDrawing\Shapes"
AdditionalIncludeDirectories="../../DesktopEditor/xml/build/vs2005;../../DesktopEditor/xml/libxml2/include"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;USE_ATL_CSTRINGS;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED;USE_LITE_READER;_USE_XMLLITE_READER_;DONT_WRITE_EMBEDDED_FONTS"
MinimalRebuild="false"
BasicRuntimeChecks="3"

View File

@ -40,11 +40,11 @@ namespace Writers
class DocumentWriter : public ContentWriter
{
XmlUtils::CStringWriter m_oWriter;
HeaderFooterWriter& m_oHeaderFooterWriter;
HeaderFooterWriter& m_oHeaderFooterWriter;
public:
std::wstring m_sDir;
public:
DocumentWriter( std::wstring sDir, HeaderFooterWriter& oHeaderFooterWriter):m_sDir(sDir), m_oHeaderFooterWriter(oHeaderFooterWriter)
std::wstring m_sDir;
DocumentWriter( std::wstring sDir, HeaderFooterWriter& oHeaderFooterWriter):m_sDir(sDir), m_oHeaderFooterWriter(oHeaderFooterWriter)
{
}
void Write()
@ -54,7 +54,22 @@ namespace Writers
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\">")));
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:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" \
xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" \
xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessingShape\" \
mc:Ignorable=\"w14 wp14\">")));
oFile.WriteStringUTF8(m_oBackground.GetData());

View File

@ -31,7 +31,9 @@
*/
#ifndef FILE_WRITER
#define FILE_WRITER
#include "../../DesktopEditor/common/Path.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Media/VbaProject.h"
#include "NumberingWriter.h"
#include "fontTableWriter.h"
@ -75,6 +77,8 @@ namespace Writers
DocumentRelsWriter m_oDocumentRelsWriter;
WebSettingsWriter m_oWebSettingsWriter;
DefaultThemeWriter m_oTheme;
smart_ptr<OOX::VbaProject> m_pVbaProject;
NSBinPptxRW::CDrawingConverter* m_pDrawingConverter;
bool m_bSaveChartAsImg;

View File

@ -34,6 +34,14 @@
namespace BinDocxRW {
int Binary_VbaProjectTableReader::Read()
{
m_oFileWriter.m_pVbaProject = new OOX::VbaProject();
m_oFileWriter.m_pVbaProject->fromPPTY(&m_oBufferedStream);
return c_oSerConstants::ReadOk;
}
//-------------------------------------------------------------------------------------
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)
{
}
@ -93,9 +101,9 @@ int Binary_HdrFtrTableReader::ReadHdrFtrItem(BYTE type, long length, void* poRes
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");
OOX::CPath fileRelsPath = m_oFileWriter.m_oDocumentWriter.m_sDir + FILE_SEPARATOR_STR + L"word" +
FILE_SEPARATOR_STR + L"_rels"+
FILE_SEPARATOR_STR + poHdrFtrItem->m_sFilename + L".rels";
m_oFileWriter.m_pDrawingConverter->SaveDstContentRels(fileRelsPath.GetPath());
}

View File

@ -273,6 +273,20 @@ private:
return res;
}
};
class Binary_VbaProjectTableReader : public Binary_CommonReader<Binary_VbaProjectTableReader>
{
Writers::FileWriter& m_oFileWriter;
public:
Binary_VbaProjectTableReader (NSBinPptxRW::CBinaryFileReader& poBufferedStream, Writers::FileWriter& oFileWriter)
: Binary_CommonReader(poBufferedStream), m_oFileWriter(oFileWriter)
{
}
int Read ();
};
class Binary_HdrFtrTableReader : public Binary_CommonReader<Binary_HdrFtrTableReader>
{
Writers::FileWriter& m_oFileWriter;
@ -282,12 +296,12 @@ class Binary_HdrFtrTableReader : public Binary_CommonReader<Binary_HdrFtrTableRe
int nCurHeaderType;
public:
Writers::HeaderFooterWriter& m_oHeaderFooterWriter;
public:
Binary_HdrFtrTableReader(NSBinPptxRW::CBinaryFileReader& poBufferedStream, Writers::FileWriter& oFileWriter, CComments* pComments);
int Read();
int ReadHdrFtrContent(BYTE type, long length, void* poResult);
int ReadHdrFtrFEO(BYTE type, long length, void* poResult);
int ReadHdrFtrItem(BYTE type, long length, void* poResult);
int ReadHdrFtrContent (BYTE type, long length, void* poResult);
int ReadHdrFtrFEO (BYTE type, long length, void* poResult);
int ReadHdrFtrItem (BYTE type, long length, void* poResult);
int ReadHdrFtrItemContent(BYTE type, long length, void* poResult);
};
class Binary_rPrReader : public Binary_CommonReader<Binary_rPrReader>
@ -551,7 +565,7 @@ public:
std::wstring strXml;
HRESULT hRes = m_oFileWriter.m_pDrawingConverter->GetRecordXml(nCurPos, length, XMLWRITER_RECORD_TYPE_TEXT_FILL, XMLWRITER_DOC_TYPE_WORDART, strXml);
if (S_OK == hRes)
orPr->Fill = _T("<w14:textFill>") + strXml + _T("</w14:textFill>");
orPr->Fill = L"<w14:textFill>" + strXml + L"</w14:textFill>";
m_oBufferedStream.Seek(nCurPos + length);
}
}
@ -560,35 +574,35 @@ public:
{
TrackRevision oDel;
oBinary_CommonReader2.ReadTrackRevision(length, &oDel);
orPr->Del = oDel.ToString(_T("w:del"));
orPr->Del = oDel.ToString(L"w:del");
}
break;
case c_oSerProp_rPrType::Ins:
{
TrackRevision oIns;
oBinary_CommonReader2.ReadTrackRevision(length, &oIns);
orPr->Ins = oIns.ToString(_T("w:ins"));
orPr->Ins = oIns.ToString(L"w:ins");
}
break;
case c_oSerProp_rPrType::MoveFrom:
{
TrackRevision oMoveFrom;
oBinary_CommonReader2.ReadTrackRevision(length, &oMoveFrom);
orPr->MoveFrom = oMoveFrom.ToString(_T("w:moveFrom"));
orPr->MoveFrom = oMoveFrom.ToString(L"w:moveFrom");
}
break;
case c_oSerProp_rPrType::MoveTo:
{
TrackRevision oMoveTo;
oBinary_CommonReader2.ReadTrackRevision(length, &oMoveTo);
orPr->MoveTo = oMoveTo.ToString(_T("w:moveTo"));
orPr->MoveTo = oMoveTo.ToString(L"w:moveTo");
}
break;
case c_oSerProp_rPrType::rPrChange:
{
TrackRevision oRPrChange;
res = Read1(length, &Binary_rPrReader::ReadrPrChange, this, &oRPrChange);
orPr->rPrChange = oRPrChange.ToString(_T("w:rPrChange"));
orPr->rPrChange = oRPrChange.ToString(L"w:rPrChange");
}
break;
default:
@ -647,9 +661,9 @@ public:
{
BYTE contextualSpacing = m_oBufferedStream.GetUChar();
if(0 != contextualSpacing)
pCStringWriter->WriteString(std::wstring(_T("<w:contextualSpacing w:val=\"true\"/>")));
pCStringWriter->WriteString(std::wstring(L"<w:contextualSpacing w:val=\"true\"/>"));
else if(false == bDoNotWriteNullProp)
pCStringWriter->WriteString(std::wstring(_T("<w:contextualSpacing w:val=\"false\"/>")));
pCStringWriter->WriteString(std::wstring(L"<w:contextualSpacing w:val=\"false\"/>"));
}break;
case c_oSerProp_pPrType::Ind:
{
@ -657,9 +671,9 @@ public:
res = Read2(length, &Binary_pPrReader::ReadInd, this, &oTempWriter);
if(oTempWriter.GetCurSize() > 0)
{
pCStringWriter->WriteString(std::wstring(_T("<w:ind")));
pCStringWriter->WriteString(std::wstring(L"<w:ind"));
pCStringWriter->Write(oTempWriter);
pCStringWriter->WriteString(std::wstring(_T("/>")));
pCStringWriter->WriteString(std::wstring(L"/>"));
}
break;
}
@ -668,35 +682,35 @@ public:
BYTE jc = m_oBufferedStream.GetUChar();
switch(jc)
{
case align_Right: pCStringWriter->WriteString(std::wstring(_T("<w:jc w:val=\"right\" />")));break;
case align_Left: pCStringWriter->WriteString(std::wstring(_T("<w:jc w:val=\"left\" />")));break;
case align_Center: pCStringWriter->WriteString(std::wstring(_T("<w:jc w:val=\"center\" />")));break;
case align_Justify: pCStringWriter->WriteString(std::wstring(_T("<w:jc w:val=\"both\" />")));break;
case align_Right: pCStringWriter->WriteString(std::wstring(L"<w:jc w:val=\"right\" />"));break;
case align_Left: pCStringWriter->WriteString(std::wstring(L"<w:jc w:val=\"left\" />"));break;
case align_Center: pCStringWriter->WriteString(std::wstring(L"<w:jc w:val=\"center\" />"));break;
case align_Justify: pCStringWriter->WriteString(std::wstring(L"<w:jc w:val=\"both\" />"));break;
}
}break;
case c_oSerProp_pPrType::KeepLines:
{
BYTE KeepLines = m_oBufferedStream.GetUChar();
if(0 != KeepLines)
pCStringWriter->WriteString(std::wstring(_T("<w:keepLines/>")));
pCStringWriter->WriteString(std::wstring(L"<w:keepLines/>"));
else if(false == bDoNotWriteNullProp)
pCStringWriter->WriteString(std::wstring(_T("<w:keepLines w:val=\"false\"/>")));
pCStringWriter->WriteString(std::wstring(L"<w:keepLines w:val=\"false\"/>"));
}break;
case c_oSerProp_pPrType::KeepNext:
{
BYTE KeepNext = m_oBufferedStream.GetUChar();
if(0 != KeepNext)
pCStringWriter->WriteString(std::wstring(_T("<w:keepNext/>")));
pCStringWriter->WriteString(std::wstring(L"<w:keepNext/>"));
else if(false == bDoNotWriteNullProp)
pCStringWriter->WriteString(std::wstring(_T("<w:keepNext w:val=\"false\"/>")));
pCStringWriter->WriteString(std::wstring(L"<w:keepNext w:val=\"false\"/>"));
}break;
case c_oSerProp_pPrType::PageBreakBefore:
{
BYTE pageBreakBefore = m_oBufferedStream.GetUChar();
if(0 != pageBreakBefore)
pCStringWriter->WriteString(std::wstring(_T("<w:pageBreakBefore/>")));
pCStringWriter->WriteString(std::wstring(L"<w:pageBreakBefore/>"));
else if(false == bDoNotWriteNullProp)
pCStringWriter->WriteString(std::wstring(_T("<w:pageBreakBefore w:val=\"false\"/>")));
pCStringWriter->WriteString(std::wstring(L"<w:pageBreakBefore w:val=\"false\"/>"));
break;
}
case c_oSerProp_pPrType::Spacing:
@ -705,7 +719,7 @@ public:
res = Read2(length, &Binary_pPrReader::ReadSpacing, this, &oSpacing);
if(oSpacing.bLine || oSpacing.bAfter || oSpacing.bAfterAuto || oSpacing.bBefore || oSpacing.bBeforeAuto)
{
pCStringWriter->WriteString(std::wstring(_T("<w:spacing")));
pCStringWriter->WriteString(std::wstring(L"<w:spacing"));
BYTE bLineRule = linerule_Auto;
//проверяется bLine, а не bLineRule чтобы всегда писать LineRule, если есть w:line
if(oSpacing.bLine)
@ -745,9 +759,9 @@ public:
if(oSpacing.bAfterAuto)
{
if(true == oSpacing.AfterAuto)
pCStringWriter->WriteString(std::wstring(_T(" w:afterAutospacing=\"1\"")));
pCStringWriter->WriteString(std::wstring(L" w:afterAutospacing=\"1\""));
else
pCStringWriter->WriteString(std::wstring(_T(" w:afterAutospacing=\"0\"")));
pCStringWriter->WriteString(std::wstring(L" w:afterAutospacing=\"0\""));
}
if(oSpacing.bBefore)
{
@ -758,11 +772,11 @@ public:
if(oSpacing.bBeforeAuto)
{
if(true == oSpacing.BeforeAuto)
pCStringWriter->WriteString(std::wstring(_T(" w:beforeAutospacing=\"1\"")));
pCStringWriter->WriteString(std::wstring(L" w:beforeAutospacing=\"1\""));
else
pCStringWriter->WriteString(std::wstring(_T(" w:beforeAutospacing=\"0\"")));
pCStringWriter->WriteString(std::wstring(L" w:beforeAutospacing=\"0\""));
}
pCStringWriter->WriteString(std::wstring(_T("/>")));
pCStringWriter->WriteString(std::wstring(L"/>"));
}
break;
}
@ -776,7 +790,7 @@ public:
}
else
{
std::wstring sShd(_T("<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"auto\"/>"));
std::wstring sShd(L"<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"auto\"/>");
pCStringWriter->WriteString(sShd);
}
break;
@ -787,10 +801,10 @@ public:
if(0 != WidowControl)
{
if(false == bDoNotWriteNullProp)
pCStringWriter->WriteString(std::wstring(_T("<w:widowControl/>")));
pCStringWriter->WriteString(std::wstring(L"<w:widowControl/>"));
}
else
pCStringWriter->WriteString(std::wstring(_T("<w:widowControl w:val=\"off\" />")));
pCStringWriter->WriteString(std::wstring(L"<w:widowControl w:val=\"off\" />"));
break;
}
case c_oSerProp_pPrType::Tab:
@ -800,7 +814,7 @@ public:
size_t nLen = oTabs.m_aTabs.size();
if(nLen > 0)
{
pCStringWriter->WriteString(std::wstring(_T("<w:tabs>")));
pCStringWriter->WriteString(std::wstring(L"<w:tabs>"));
for(size_t i = 0; i < nLen; ++i)
{
Tab& oTab = oTabs.m_aTabs[i];
@ -808,14 +822,14 @@ public:
std::wstring sVal;
switch(oTab.Val)
{
case g_tabtype_right: sVal=_T("right"); break;
case g_tabtype_center: sVal=_T("center"); break;
case g_tabtype_clear: sVal=_T("clear"); break;
default: sVal=_T("left"); break;
case g_tabtype_right: sVal = L"right"; break;
case g_tabtype_center: sVal = L"center"; break;
case g_tabtype_clear: sVal = L"clear"; break;
default: sVal = L"left"; break;
}
pCStringWriter->WriteString(L"<w:tab w:val=\"" + sVal + L"\" w:pos=\"" + std::to_wstring(nTab) + L"\"/>");
}
pCStringWriter->WriteString(std::wstring(_T("</w:tabs>")));
pCStringWriter->WriteString(std::wstring(L"</w:tabs>"));
}
}break;
case c_oSerProp_pPrType::ParaStyle:
@ -826,9 +840,9 @@ public:
}break;
case c_oSerProp_pPrType::numPr:
{
pCStringWriter->WriteString(std::wstring(_T("<w:numPr>")));
pCStringWriter->WriteString(std::wstring(L"<w:numPr>"));
res = Read2(length, &Binary_pPrReader::ReadNumPr, this, poResult);
pCStringWriter->WriteString(std::wstring(_T("</w:numPr>")));
pCStringWriter->WriteString(std::wstring(L"</w:numPr>"));
}break;
case c_oSerProp_pPrType::pPr_rPr:
{
@ -2917,7 +2931,8 @@ class Binary_OtherTableReader : public Binary_CommonReader<Binary_OtherTableRead
Writers::FileWriter& m_oFileWriter;
std::wstring m_sFileInDir;
public:
Binary_OtherTableReader(std::wstring sFileInDir, NSBinPptxRW::CBinaryFileReader& poBufferedStream, Writers::FileWriter& oFileWriter):m_sFileInDir(sFileInDir),Binary_CommonReader(poBufferedStream),m_oFileWriter(oFileWriter)
Binary_OtherTableReader(std::wstring sFileInDir, NSBinPptxRW::CBinaryFileReader& poBufferedStream, Writers::FileWriter& oFileWriter)
: m_sFileInDir(sFileInDir), Binary_CommonReader(poBufferedStream), m_oFileWriter(oFileWriter)
{
}
int Read()
@ -7022,13 +7037,13 @@ public:
{
if(false == m_oFileWriter.m_bSaveChartAsImg)
{
OOX::CPath pathChartsDir = m_oFileWriter.m_oChartWriter.m_sDir + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR +_T("charts");
OOX::CPath pathChartsDir = m_oFileWriter.m_oChartWriter.m_sDir + FILE_SEPARATOR_STR + L"word" + FILE_SEPARATOR_STR + L"charts";
OOX::CSystemUtility::CreateDirectories(pathChartsDir.GetPath());
OOX::CPath pathChartsRelsDir = pathChartsDir.GetPath() + FILE_SEPARATOR_STR + _T("_rels");
OOX::CPath pathChartsRelsDir = pathChartsDir.GetPath() + FILE_SEPARATOR_STR + L"_rels";
OOX::CSystemUtility::CreateDirectories(pathChartsRelsDir.GetPath());
OOX::CPath pathChartsWorksheetDir = m_oFileWriter.m_oChartWriter.m_sDir + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR +_T("embeddings");
OOX::CPath pathChartsWorksheetDir = m_oFileWriter.m_oChartWriter.m_sDir + FILE_SEPARATOR_STR + L"word" + FILE_SEPARATOR_STR + L"embeddings";
OOX::CSystemUtility::CreateDirectories(pathChartsWorksheetDir.GetPath());
int nativeDocumentType = m_oFileWriter.m_pDrawingConverter->m_pImageManager->m_nDocumentType;
@ -7922,9 +7937,9 @@ public:
int res = ReadTable(&Binary_NotesTableReader::ReadNotes, 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 + sFilename + _T(".rels");
OOX::CPath fileRelsPath = m_oFileWriter.m_oDocumentWriter.m_sDir + FILE_SEPARATOR_STR + L"word" +
FILE_SEPARATOR_STR + L"_rels"+
FILE_SEPARATOR_STR + sFilename + L".rels";
m_oFileWriter.m_pDrawingConverter->SaveDstContentRels(fileRelsPath.GetPath());
return res;
@ -7961,33 +7976,33 @@ public:
XmlUtils::CStringWriter& writer = pBinary_DocumentTableReader->m_oDocumentWriter.m_oContent;
if(m_bIsFootnote)
{
writer.WriteString(_T("<w:footnote"));
writer.WriteString(L"<w:footnote");
}
else
{
writer.WriteString(_T("<w:endnote"));
writer.WriteString(L"<w:endnote");
}
if(m_oType.IsInit())
{
writer.WriteString(_T(" w:type=\""));
writer.WriteString(L" w:type=\"");
writer.WriteString(m_oType->ToString());
writer.WriteString(_T("\""));
writer.WriteString(L"\"");
}
if(m_oId.IsInit())
{
writer.WriteString(_T(" w:id=\""));
writer.WriteString(L" w:id=\"");
writer.WriteString(m_oId->ToString());
writer.WriteString(_T("\""));
writer.WriteString(L"\"");
}
writer.WriteString(_T(">"));
writer.WriteString(L">");
res = Read1(length, &Binary_NotesTableReader::ReadNoteContent, this, poResult);
if(m_bIsFootnote)
{
writer.WriteString(_T("</w:footnote>"));
writer.WriteString(L"</w:footnote>");
}
else
{
writer.WriteString(_T("</w:endnote>"));
writer.WriteString(L"</w:endnote>");
}
}
else
@ -8087,8 +8102,8 @@ public:
}
else
{
m_oFileWriter.m_oSettingWriter.AddSetting(_T("<w:defaultTabStop w:val=\"708\"/>"));
std::wstring sClrMap(_T("<w:clrSchemeMapping w:bg1=\"light1\" w:t1=\"dark1\" w:bg2=\"light2\" w:t2=\"dark2\" w:accent1=\"accent1\" w:accent2=\"accent2\" w:accent3=\"accent3\" w:accent4=\"accent4\" w:accent5=\"accent5\" w:accent6=\"accent6\" w:hyperlink=\"hyperlink\" w:followedHyperlink=\"followedHyperlink\"/>"));
m_oFileWriter.m_oSettingWriter.AddSetting(L"<w:defaultTabStop w:val=\"708\"/>");
std::wstring sClrMap(L"<w:clrSchemeMapping w:bg1=\"light1\" w:t1=\"dark1\" w:bg2=\"light2\" w:t2=\"dark2\" w:accent1=\"accent1\" w:accent2=\"accent2\" w:accent3=\"accent3\" w:accent4=\"accent4\" w:accent5=\"accent5\" w:accent6=\"accent6\" w:hyperlink=\"hyperlink\" w:followedHyperlink=\"followedHyperlink\"/>");
m_oFileWriter.m_oSettingWriter.AddSetting(sClrMap);
m_oFileWriter.m_pDrawingConverter->LoadClrMap(sClrMap);
}
@ -8140,9 +8155,12 @@ public:
case c_oSerTableTypes::Endnotes:
res = Binary_NotesTableReader(m_oBufferedStream, m_oFileWriter, m_oFileWriter.m_pComments, false).Read();
break;
case c_oSerTableTypes::VbaProject:
res = Binary_VbaProjectTableReader(m_oBufferedStream, m_oFileWriter).Read();
break;
//Comments должны читаться раньше чем c_oSerTableTypes::Document
//case c_oSerTableTypes::Comments:
//case c_oSerTableTypes::Comments
// res = oBinary_CommentsTableReader.Read();
// break;
//case c_oSerTableTypes::Other:
@ -8165,7 +8183,18 @@ public:
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");
if (m_oFileWriter.m_pVbaProject.IsInit())
{
//m_oFileWriter.m_pVbaProject->write();
m_oFileWriter.m_pDrawingConverter->WriteRels(L"http://schemas.microsoft.com/office/2006/relationships/vbaProject", L"vbaProject.bin", L"", &stamdartRId);
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.ms-word.document.macroEnabled.main+xml", L"/word", L"document.xml");
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.ms-office.vbaProject", L"/word", L"vbaProject.bin");
}
else
{
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");
@ -8175,19 +8204,19 @@ public:
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->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering", L"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->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes", L"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->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes", L"endnotes.xml", std::wstring(), &rId);
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml", L"/word", L"endnotes.xml");
}
for(size_t i = 0; i < m_oFileWriter.m_oHeaderFooterWriter.m_aHeaders.size(); ++i)
@ -8196,7 +8225,7 @@ public:
if(false == pHeader->IsEmpty())
{
long rId;
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/header")), pHeader->m_sFilename, std::wstring(), &rId);
m_oFileWriter.m_pDrawingConverter->WriteRels(L"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);
@ -8208,7 +8237,7 @@ public:
if(false == pFooter->IsEmpty())
{
long rId;
m_oFileWriter.m_pDrawingConverter->WriteRels(std::wstring(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer")), pFooter->m_sFilename, std::wstring(), &rId);
m_oFileWriter.m_pDrawingConverter->WriteRels(L"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);
@ -8216,9 +8245,9 @@ public:
}
res = Binary_DocumentTableReader(m_oBufferedStream, m_oFileWriter, m_oFileWriter.m_oDocumentWriter, &oBinary_CommentsTableReader.m_oComments).Read();
OOX::CPath fileRelsPath = m_oFileWriter.m_oDocumentWriter.m_sDir + FILE_SEPARATOR_STR + _T("word")
+ FILE_SEPARATOR_STR + _T("_rels")
+ FILE_SEPARATOR_STR + _T("document.xml.rels");
OOX::CPath fileRelsPath = m_oFileWriter.m_oDocumentWriter.m_sDir + FILE_SEPARATOR_STR + L"word"
+ FILE_SEPARATOR_STR + L"_rels"
+ FILE_SEPARATOR_STR + L"document.xml.rels";
CComments& oComments= oBinary_CommentsTableReader.m_oComments;
Writers::CommentsWriter& oCommentsWriter = m_oFileWriter.m_oCommentsWriter;
@ -8232,19 +8261,19 @@ public:
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->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments", L"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->WriteRels(L"http://schemas.microsoft.com/office/2011/relationships/commentsExtended", L"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->WriteRels(L"http://schemas.microsoft.com/office/2011/relationships/people", L"people.xml", std::wstring(), &rId);
m_oFileWriter.m_pDrawingConverter->Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.people+xml", L"/word", L"people.xml");
}

View File

@ -142,19 +142,20 @@ extern int g_nCurFormatVersion;
};}
namespace c_oSerTableTypes{enum c_oSerTableTypes
{
Signature = 0,
Info = 1,
Media = 2,
Numbering = 3,
HdrFtr = 4,
Style = 5,
Document = 6,
Other = 7,
Comments = 8,
Settings = 9,
Footnotes = 10,
Endnotes = 11,
Background
Signature = 0,
Info = 1,
Media = 2,
Numbering = 3,
HdrFtr = 4,
Style = 5,
Document = 6,
Other = 7,
Comments = 8,
Settings = 9,
Footnotes = 10,
Endnotes = 11,
Background = 12,
VbaProject = 13
};}
namespace c_oSerSigTypes{enum c_oSerSigTypes
{
@ -203,10 +204,10 @@ extern int g_nCurFormatVersion;
};}
namespace c_oSerOtherTableTypes{enum c_oSerOtherTableTypes
{
ImageMap = 0,
ImageMap_Src = 1,
EmbeddedFonts = 2,
DocxTheme = 3
ImageMap = 0,
ImageMap_Src = 1,
EmbeddedFonts = 2,
DocxTheme = 3
};}
namespace c_oSerFontsTypes{enum c_oSerFontsTypes
{
@ -521,6 +522,10 @@ extern int g_nCurFormatVersion;
endnoteReference = 27,
arPr = 28
};}
namespace c_oSerVbaProjectTypes{enum c_oSerVbaProjectType
{
Name = 0
};}
namespace c_oSerBackgroundType{enum c_oSerBackgroundType
{
Color = 0,

View File

@ -82,11 +82,11 @@ namespace BinDocxRW
int m_nType;
public:
std::wstring m_sFld;
public: FldStruct(std::wstring sFld, int nType):m_sFld(sFld),m_nType(nType){}
public: int GetType()
{
return m_nType;
}
FldStruct(std::wstring sFld, int nType):m_sFld(sFld),m_nType(nType){}
int GetType()
{
return m_nType;
}
};
class BinaryCommonWriter
{
@ -3025,7 +3025,14 @@ namespace BinDocxRW
std::wstring& sShapeType = aShapeTypes[i];
pOfficeDrawingConverter->AddShapeType(sShapeType);
}
pOfficeDrawingConverter->SetRels(oldRels);
pOfficeDrawingConverter->SetRels(oldRels);
}
void WriteVbaProject(OOX::VbaProject& oVbaProject)
{
m_oBcw.m_oStream.StartRecord(0);
oVbaProject.toPPTY(&m_oBcw.m_oStream);
m_oBcw.m_oStream.EndRecord();
}
void Write(std::vector<OOX::WritingElement*>& aElems)
{
@ -7866,9 +7873,8 @@ namespace BinDocxRW
//Write DocumentTable
ParamsDocumentWriter oParamsDocumentWriter(poDocument);
m_oParamsWriter.m_pCurRels = oParamsDocumentWriter.m_pRels;
//DocumentTable всегда пишем последней, чтобы сначала заполнить все вспомогательные структуры, а при заполении документа, вызывать методы типа Style_Add...
nCurPos = this->WriteTableStart(BinDocxRW::c_oSerTableTypes::Document);
BinDocxRW::BinaryDocumentTableWriter oBinaryDocumentTableWriter(m_oParamsWriter, oParamsDocumentWriter, &m_oParamsWriter.m_mapIgnoreComments, &oBinaryHeaderFooterTableWriter);
oBinaryDocumentTableWriter.prepareOfficeDrawingConverter(m_oParamsWriter.m_pOfficeDrawingConverter, oParamsDocumentWriter.m_pRels, poDocument->m_arrShapeTypes);
@ -7876,7 +7882,15 @@ namespace BinDocxRW
oBinaryDocumentTableWriter.pBackground = poDocument->m_oBackground.GetPointer();
oBinaryDocumentTableWriter.m_bWriteSectPr = true;
//Write Vba
if(NULL != oDocx.m_pVbaProject)
{
nCurPos = this->WriteTableStart(BinDocxRW::c_oSerTableTypes::VbaProject);
oBinaryDocumentTableWriter.WriteVbaProject(*oDocx.m_pVbaProject);
this->WriteTableEnd(nCurPos);
}
// Write content
nCurPos = this->WriteTableStart(BinDocxRW::c_oSerTableTypes::Document);
oBinaryDocumentTableWriter.Write(poDocument->m_arrItems);
this->WriteTableEnd(nCurPos);

View File

@ -93,6 +93,8 @@ bool BinDocxRW::CDocxSerializer::saveToFile(const std::wstring& sSrcFileName, co
oDrawingConverter.SetFontDir(m_sFontDir);
oDrawingConverter.SetFontPicker(pFontPicker);
oDrawingConverter.SetMainDocument(this);
oDrawingConverter.SetDstPath(pathMain.GetDirectory() + FILE_SEPARATOR_STR + L"word");
oDrawingConverter.SetMediaDstPath(pathMedia.GetPath());
m_pParamsWriter = new ParamsWriter(&oBufferedStream, &fp, &oDrawingConverter, pEmbeddedFontsManager);
@ -264,6 +266,8 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const std::wstring& sSrcFileName,
if (NULL != pData)
{
oDrawingConverter.SetMainDocument(this);
oDrawingConverter.SetDstPath(sDstPath + FILE_SEPARATOR_STR + L"word");
oDrawingConverter.SetMediaDstPath(sMediaPath);
oDrawingConverter.SetEmbedDstPath(sEmbedPath);
@ -273,7 +277,7 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const std::wstring& sSrcFileName,
std::wstring strFileInDir = NSSystemPath::GetDirectoryName(sSrcFileName);
std::wstring sFileInDir = strFileInDir.c_str();
oDrawingConverter.SetSourceFileDir(sFileInDir);
oDrawingConverter.SetSrcPath(sFileInDir);
BinaryFileReader oBinaryFileReader(sFileInDir, oBufferedStream, *m_pCurFileWriter);
oBinaryFileReader.ReadFile();
@ -292,7 +296,7 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const std::wstring& sSrcFileName,
if (pApp)
{
pApp->SetApplication(_T("OnlyOffice"));
pApp->SetAppVersion(_T("4.3000"));
pApp->SetAppVersion(_T("5.0"));
pApp->SetDocSecurity(0);
pApp->SetScaleCrop(false);
pApp->SetLinksUpToDate(false);

View File

@ -86,15 +86,16 @@ 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)
{
std::wstring strFileInDir = NSSystemPath::GetDirectoryName(sSrcFileName);
NSBinPptxRW::CDrawingConverter oDrawingConverter;
oDrawingConverter.SetDstPath(sDstPath + FILE_SEPARATOR_STR + L"xl");
oDrawingConverter.SetSrcPath(strFileInDir, 2);
oDrawingConverter.SetMediaDstPath(sMediaDir);
oDrawingConverter.SetEmbedDstPath(sEmbedDir);
std::wstring strFileInDir = NSSystemPath::GetDirectoryName(sSrcFileName);
oDrawingConverter.SetSourceFileDir(strFileInDir, 2);
BinXlsxRW::BinaryFileReader oBinaryFileReader;
oBinaryFileReader.ReadFile(sSrcFileName, sDstPath, &oDrawingConverter, sXMLOptions);
return true;

View File

@ -314,7 +314,7 @@
17E17ED41AC453F800BEA2EA /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0710;
LastUpgradeCheck = 0830;
ORGANIZATIONNAME = "Ascensio System SIA";
};
buildConfigurationList = 17E17ED71AC453F800BEA2EA /* Build configuration list for PBXProject "ASCOfficeDocxFile2Lib" */;
@ -446,8 +446,10 @@
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
@ -455,6 +457,7 @@
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
@ -488,8 +491,10 @@
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
@ -497,6 +502,7 @@
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;

View File

@ -43,6 +43,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../DesktopEditor/xml/build/vs2005;../../DesktopEditor/xml/libxml2/include"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_UNICODE;UNICODE"
MinimalRebuild="true"
BasicRuntimeChecks="3"

View File

@ -32,6 +32,7 @@
#pragma once
#include <string>
#include <vector>
#include "../include/cpdoccore/CPScopedPtr.h"
namespace cpdoccore {
@ -58,6 +59,8 @@ public:
//Sheet2.C3:Sheet2.C19 -> Sheet2!C3:C19
std::wstring convert_chart_distance(std::wstring const & expr);
void split_distance_by(const std::wstring& expr, const std::wstring& by, std::vector<std::wstring>& out);
std::wstring convert_ref(std::wstring const & expr);
@ -91,7 +94,7 @@ public:
std::wstring convert_named_ref (std::wstring const & expr);
std::wstring convert_named_formula(std::wstring const & expr);
std::wstring get_base_cell_formula();
std::wstring get_table_name();
//Sheet2!C3:C19 -> Sheet2.C3:Sheet2.C19
std::wstring convert_chart_distance(std::wstring const & expr);

View File

@ -32,7 +32,6 @@
#include "formulasconvert.h"
#include <boost/regex.hpp>
#include <boost/foreach.hpp>
#include <boost/algorithm/string.hpp>
#include"../../Common/DocxFormat/Source/XML/Utils.h"
@ -46,6 +45,9 @@ namespace formulasconvert {
std::wstring convert(const std::wstring& expr);
std::wstring convert_chart_distance(const std::wstring& expr);
void split_distance_by(const std::wstring& expr, const std::wstring& by, std::vector<std::wstring>& out);
void replace_cells_range(std::wstring& expr, bool withTableName);
bool check_formula(std::wstring& expr);
void replace_semicolons(std::wstring& expr);
@ -189,7 +191,7 @@ namespace formulasconvert {
if (convert_with_TableName)
{
return (sheet1 + L"!") + c1 + (c2.empty() ? L"" : (L":" + c3) );
return (sheet1 + L"!") + c1 + (c3.empty() ? L"" : (L":" + c3) );
}
else
{
@ -389,25 +391,24 @@ namespace formulasconvert {
std::wstring forbidden_formulas[] =
{
L"NULLFORMULA"
/*
L"BETADIST",
L"CEILING",
L"FLOOR",
L"RANK",
L"ROUND",
L"ROUNDDOWN",
L"ROUNDUP",
L"SUBTOTAL",
L"FORMULA",
L"ISREF"*/
L"NULLFORMULA"
//L"BETADIST",
//L"CEILING",
//L"FLOOR",
//L"RANK",
//L"ROUND",
//L"ROUNDDOWN",
//L"ROUNDUP",
//L"SUBTOTAL",
//L"FORMULA",
//L"ISREF"
};
bool is_forbidden(const std::wstring & formula)
{
BOOST_FOREACH(const std::wstring & s, forbidden_formulas)
for (size_t i = 0; i < 1/*forbidden_formulas.size()*/; i++)
{
if (boost::algorithm::contains(formula, s))
if (boost::algorithm::contains(formula, forbidden_formulas[i]))
return true;
}
return false;
@ -490,10 +491,30 @@ namespace formulasconvert {
return workstr;
}
void odf2oox_converter::Impl::split_distance_by(const std::wstring& expr, const std::wstring& by, std::vector<std::wstring>& out)
{
std::wstring workstr = expr;
boost::wregex complexRef(L"('(?!\\s\\'){0,1}.*?')");// поиск того что в апострофах и замена там
workstr = boost::regex_replace(
expr,
complexRef,
&replace_point_space,
boost::match_default | boost::format_all);
boost::algorithm::split(out, workstr, boost::algorithm::is_any_of(by), boost::algorithm::token_compress_on);
for (size_t i = 0; i < out.size(); i++)
{
XmlUtils::replace_all( out[i], L"PROBEL", L" ");
XmlUtils::replace_all( out[i], L"TOCHKA", L".");
}
}
//Sheet2.C3:Sheet2.C19 Sheet2.L29:Sheet2.L36
//в
//Sheet2!C3:C19,Sheet2!L27:L34
std::wstring odf2oox_converter::Impl::convert_chart_distance(const std::wstring& expr)
{
if (is_forbidden(expr))
@ -515,25 +536,27 @@ namespace formulasconvert {
boost::algorithm::split(distance_inp, workstr, boost::algorithm::is_any_of(L" "), boost::algorithm::token_compress_on);
BOOST_FOREACH(std::wstring &d,distance_inp)
for (size_t i = 0; i < distance_inp.size(); i++)
{
std::wstring sheet;
std::vector<std::wstring> range;
std::vector<std::wstring> cells;
boost::algorithm::split(range,d, boost::algorithm::is_any_of(L":"), boost::algorithm::token_compress_on);
boost::algorithm::split(range, distance_inp[i], boost::algorithm::is_any_of(L":"), boost::algorithm::token_compress_on);
BOOST_FOREACH(std::wstring &c,range)
for (size_t j = 0; j < range.size(); j++)
{
const std::string::size_type colon = c.find('.');
cells.push_back(c.substr(colon+1));
if (sheet.size()<1)
sheet=c.substr(0, colon);
const std::string::size_type colon = range[j].find('.');
cells.push_back(range[j].substr(colon + 1));
if (sheet.size() < 1)
{
sheet = range[j].substr(0, colon);
}
}
std::wstring cells_out;
BOOST_FOREACH(std::wstring &c,cells)
for (size_t j = 0; j < cells.size(); j++)
{
cells_out.append(c);
cells_out.append(cells[j]);
cells_out.append(L":");
}
int res1 = sheet.find(L"-");
@ -544,19 +567,19 @@ namespace formulasconvert {
sheet = L"'" + sheet + L"'";
}
distance_out.push_back(sheet+L"!" + cells_out.substr(0, cells_out.size()-1));
distance_out.push_back(sheet + L"!" + cells_out.substr(0, cells_out.size()-1));
}
std::wstring result;
BOOST_FOREACH(std::wstring &d, distance_out)
for (size_t i = 0; i < distance_out.size(); i++)
{
result.append(d);
result.append(distance_out[i]);
result.append(L",");
}
XmlUtils::replace_all( result, L"PROBEL" , L" ");
XmlUtils::replace_all( result, L"TOCHKA" , L".");
XmlUtils::replace_all( result, L"TOCHKA", L".");
return result.substr(0, result.size()-1);// минус последняя лишняя запятая
return result.substr(0, result.size() - 1);// минус последняя лишняя запятая
}
odf2oox_converter::odf2oox_converter(): impl_(new odf2oox_converter::Impl)
{
@ -579,6 +602,10 @@ namespace formulasconvert {
{
return impl_->convert_chart_distance(expr);
}
void odf2oox_converter::split_distance_by(const std::wstring& expr, const std::wstring& by, std::vector<std::wstring>& out)
{
return impl_->split_distance_by(expr, by, out);
}
std::wstring odf2oox_converter::convert_named_ref(const std::wstring& expr, bool withTableName, std::wstring separator)
{
boost::wregex complexRef(L"('(?!\\s\\'){0,1}.*?')");// поиск того что в апострофах и замена там
@ -602,6 +629,13 @@ namespace formulasconvert {
XmlUtils::replace_all( workstr, L"PROBEL" , L" ");
XmlUtils::replace_all( workstr, L"APOSTROF" , L"'");
XmlUtils::replace_all( workstr, L"TOCHKA" , L".");
if (impl_->table_name_.empty() == false)
{
XmlUtils::replace_all( impl_->table_name_, L"PROBEL" , L" ");
XmlUtils::replace_all( impl_->table_name_, L"APOSTROF" , L"'");
XmlUtils::replace_all( impl_->table_name_, L"TOCHKA" , L".");
}
return workstr;
}
std::wstring odf2oox_converter::convert_named_expr(const std::wstring& expr, bool withTableName)
@ -641,6 +675,13 @@ namespace formulasconvert {
XmlUtils::replace_all( workstr, L"PROBEL" , L" ");
XmlUtils::replace_all( workstr, L"APOSTROF" , L"'");
XmlUtils::replace_all( workstr, L"TOCHKA" , L".");
if (impl_->table_name_.empty() == false)
{
XmlUtils::replace_all( impl_->table_name_, L"PROBEL" , L" ");
XmlUtils::replace_all( impl_->table_name_, L"APOSTROF" , L"'");
XmlUtils::replace_all( impl_->table_name_, L"TOCHKA" , L".");
}
}
return workstr;
}

View File

@ -65,11 +65,11 @@ public:
static bool isFindBaseCell_;
static std::wstring base_cell_formula_;
static std::wstring table_name_;
};
bool oox2odf_converter::Impl::isFindBaseCell_ = false;
std::wstring oox2odf_converter::Impl::base_cell_formula_ = L"";
std::wstring oox2odf_converter::Impl::table_name_ = L"";
void oox2odf_converter::Impl::replace_cells_range(std::wstring& expr)
{
@ -117,9 +117,9 @@ std::wstring oox2odf_converter::Impl::replace_cells_range_formater1(boost::wsmat
{
XmlUtils::replace_all( sheet, L"!", L"");
if (isFindBaseCell_ && base_cell_formula_.empty() && !sheet.empty())
if (isFindBaseCell_ && table_name_.empty() && !sheet.empty())
{
base_cell_formula_ = sheet + L".$A$1";
table_name_ = sheet + L".$A$1";
}
if (!sheet.empty() && (std::wstring::npos != c1.find(L"$"))) sheet = L"$" + sheet;
@ -161,7 +161,7 @@ std::wstring oox2odf_converter::Impl::replace_cells_range_formater2(boost::wsmat
void oox2odf_converter::Impl::replace_named_formula(std::wstring & expr)
{
base_cell_formula_.clear();
table_name_.clear();
isFindBaseCell_ = true;
expr = convert_formula(expr);
@ -171,7 +171,7 @@ void oox2odf_converter::Impl::replace_named_formula(std::wstring & expr)
// Лист1!$A$1 -> $Лист1.$A$1
void oox2odf_converter::Impl::replace_named_ref(std::wstring & expr)
{
base_cell_formula_.clear();
table_name_.clear();
isFindBaseCell_ = true;
std::wstring workstr = expr, out;
@ -207,6 +207,15 @@ void oox2odf_converter::Impl::replace_named_ref(std::wstring & expr)
if (!out.empty()) expr = out.substr(0, out.length() - 1);
isFindBaseCell_ = false;
if (table_name_.empty() == false)
{
XmlUtils::replace_all( table_name_, L"SCOBCAIN", L"(");
XmlUtils::replace_all( table_name_, L"SCOBCAOUT", L")");
XmlUtils::replace_all( table_name_, L"PROBEL", L" ");
XmlUtils::replace_all( table_name_, L"APOSTROF", L"'");
XmlUtils::replace_all( table_name_, L"KAVYCHKA", L"\"");
}
}
@ -471,6 +480,21 @@ std::wstring oox2odf_converter::Impl::convert_formula(const std::wstring & expr)
XmlUtils::replace_all( res, L"PROBEL", L" ");
if (table_name_.empty() == false)
{
XmlUtils::replace_all( table_name_, L"SCOBCAIN", L"(");
XmlUtils::replace_all( table_name_, L"SCOBCAOUT", L")");
XmlUtils::replace_all( table_name_, L"KVADRATIN", L"[");
XmlUtils::replace_all( table_name_, L"KVADRATOUT", L"]");
XmlUtils::replace_all( table_name_, L"APOSTROF", L"'");
XmlUtils::replace_all( table_name_, L"KAVYCHKA", L"\"");
XmlUtils::replace_all( table_name_, L"PROBEL", L" ");
}
return std::wstring(L"of:=") + res;
}
@ -614,9 +638,9 @@ std::wstring oox2odf_converter::convert_named_formula(const std::wstring& expr)
impl_->replace_named_formula(workstr);
return workstr;
}
std::wstring oox2odf_converter::get_base_cell_formula()
std::wstring oox2odf_converter::get_table_name()
{
return impl_->base_cell_formula_;
return impl_->table_name_;
}

View File

@ -74,6 +74,8 @@ xlsx_document::xlsx_document()
void xlsx_document::write(const std::wstring & RootPath)
{
_CP_LOG << L"[info][xlsx] process writing" << std::endl;
xl_files_.write (RootPath);
docProps_files_.write (RootPath);
rels_files_.write (RootPath);

View File

@ -40,120 +40,70 @@ namespace oox {
class xlsx_pivots_context::Impl
{
public:
struct _pivot_cache
struct _pivot_xml
{
std::wstring definitionsData_;
std::wstring recordsData_;
};
struct _pivot_view
{
std::wstring data_;
int indexCache_;
};
struct _pivot_field
{
std::wstring view_;
std::wstring cache_;
std::wstring definitionsData_; //cacheData
std::wstring recordsData_; //cacheRecorda
std::wstring viewData_; //tableView
};
Impl() {}
std::vector<_pivot_cache> caches_;
std::vector<_pivot_view> views_;
std::vector<_pivot_xml> pivot_xmls_;
std::wstring connections_;
std::vector<_pivot_field> fields_;
std::wstringstream view_;
std::wstringstream cache_;
struct _field
{
std::wstring name;
int type = -1;
int function = -1;
std::wstring user_function;
std::vector<int> subtotals;
std::vector<std::wstring> caches;
};
struct _desc
{
void clear()
{
name.clear();
location_ref.clear();
source_ref.clear();
fields.clear();
row_fields.clear();
page_fields.clear();
col_fields.clear();
data_fields.clear();
}
std::wstring name;
std::wstring name;
std::wstring location_ref;
std::wstring source_ref;
std::wstring source_table_name;
std::vector<_field> fields;
std::vector<int> row_fields;
std::vector<int> page_fields;
std::vector<int> col_fields;
std::vector<int> data_fields;
}current_;
void serialize_view(std::wostream & strm);
void serialize_cache(std::wostream & strm);
};
xlsx_pivots_context::xlsx_pivots_context() : impl_(new xlsx_pivots_context::Impl())
{
}
void xlsx_pivots_context::add_cache(std::wstring definitions, std::wstring records)
void xlsx_pivots_context::Impl::serialize_view(std::wostream & strm)
{
Impl::_pivot_cache c = {definitions, records};
impl_->caches_.push_back(c);
}
int xlsx_pivots_context::get_cache_count()
{
return (int)impl_->caches_.size();
}
bool xlsx_pivots_context::is_connections()
{
return !impl_->connections_.empty();
}
void xlsx_pivots_context::dump_rels_cache(int index, rels & Rels)
{
if (impl_->caches_[index].recordsData_.empty() == false)
{
Rels.add(relationship(L"rId1",
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheRecords",
L"pivotCacheRecords" + std::to_wstring(index + 1) + L".xml", L""));
}
}
void xlsx_pivots_context::dump_rels_view(int index, rels & Rels)
{
if (impl_->views_[index].indexCache_ >= 0)
{
Rels.add(relationship(L"rId1",
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition",
L"../pivotCache/pivotCacheDefinition" + std::to_wstring(impl_->views_[index].indexCache_ + 1) + L".xml", L""));
}
}
void xlsx_pivots_context::write_cache_definitions_to(int index, std::wostream & strm)
{
strm << impl_->caches_[index].definitionsData_;
}
void xlsx_pivots_context::write_connections_to(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"connections")
{
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
CP_XML_STREAM() << impl_->connections_;
}
}
}
void xlsx_pivots_context::write_cache_records_to(int index, std::wostream & strm)
{
strm << impl_->caches_[index].recordsData_;
}
void xlsx_pivots_context::write_table_view_to(int index, std::wostream & strm)
{
strm << impl_->views_[index].data_;
}
void xlsx_pivots_context::start_table()
{
impl_->current_.clear();
impl_->fields_.clear();
}
int xlsx_pivots_context::end_table()
{
std::wstringstream strm;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"pivotTableDefinition")
{
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
CP_XML_ATTR(L"name", impl_->current_.name);
//CP_XML_ATTR(L"cacheId", view->iCache);
CP_XML_ATTR(L"name", current_.name);
CP_XML_ATTR(L"cacheId", pivot_xmls_.size());
//CP_XML_ATTR(L"dataOnRows", view->sxaxis4Data.bRw);
//CP_XML_ATTR(L"applyNumberFormats", view->fAtrNum);
//CP_XML_ATTR(L"applyBorderFormats", view->fAtrBdr);
@ -177,7 +127,7 @@ int xlsx_pivots_context::end_table()
CP_XML_NODE(L"location")
{
//CP_XML_ATTR(L"ref", view->ref.toString());
CP_XML_ATTR(L"ref", current_.location_ref);
//CP_XML_ATTR(L"firstHeaderRow", view->rwFirstHead - view->ref.rowFirst );
//CP_XML_ATTR(L"firstDataRow", view->rwFirstData - view->ref.rowFirst);
//CP_XML_ATTR(L"firstDataCol", view->colFirstData - view->ref.columnFirst);
@ -186,41 +136,307 @@ int xlsx_pivots_context::end_table()
}
CP_XML_NODE(L"pivotFields")
{
CP_XML_ATTR(L"count", impl_->fields_.size());
for (size_t i = 0; i < impl_->fields_.size(); i++)
CP_XML_ATTR(L"count", current_.fields.size());
for (size_t i = 0; i < current_.fields.size(); i++)
{
CP_XML_STREAM() << impl_->fields_[i].view_;
CP_XML_NODE(L"pivotField")
{
switch(current_.fields[i].type)
{
case 0: CP_XML_ATTR(L"axis", L"axisCol"); break;
case 1: break;// data,
case 2: break;// hidden,
case 3: CP_XML_ATTR(L"axis", L"axisPage"); break;
case 4: CP_XML_ATTR(L"axis", L"axisRow"); break;
}
CP_XML_ATTR(L"defaultSubtotal", 0);
//compact="0" outline="0" subtotalTop="0" showAll="0" includeNewItemsInFilter="1" sortType="ascending"
CP_XML_NODE(L"items")
{
CP_XML_ATTR(L"count", current_.fields[i].caches.size());
for (size_t j = 0; j < current_.fields[i].caches.size(); j++)
{
CP_XML_NODE(L"item")
{
CP_XML_ATTR(L"x", j);
}
}
}
}
//CP_XML_STREAM() << fields_[i].view_;
}
}
CP_XML_NODE(L"rowFields")
{
CP_XML_ATTR(L"count", current_.row_fields.size());
for (size_t i = 0; i < current_.row_fields.size(); i++)
{
CP_XML_NODE(L"field")
{
CP_XML_ATTR(L"x", current_.row_fields[i]);
}
}
}
CP_XML_NODE(L"colFields")
{
CP_XML_ATTR(L"count", current_.col_fields.size());
for (size_t i = 0; i < current_.col_fields.size(); i++)
{
CP_XML_NODE(L"field")
{
CP_XML_ATTR(L"x", current_.col_fields[i]);
}
}
}
CP_XML_NODE(L"pageFields")
{
CP_XML_ATTR(L"count", current_.page_fields.size());
for (size_t i = 0; i < current_.page_fields.size(); i++)
{
CP_XML_NODE(L"pageField")
{
CP_XML_ATTR(L"fld", current_.page_fields[i]);
CP_XML_ATTR(L"item", 0);
CP_XML_ATTR(L"hier", -1);
}
}
}
CP_XML_NODE(L"dataFields")
{
CP_XML_ATTR(L"count", current_.data_fields.size());
for (size_t i = 0; i < current_.data_fields.size(); i++)
{
CP_XML_NODE(L"dataField")
{
CP_XML_ATTR(L"fld", current_.data_fields[i]);
CP_XML_ATTR(L"baseField", 0);
//CP_XML_ATTR(L"baseItem", -1);
//CP_XML_ATTR(L"name", L"");
}
}
}
}
}
Impl::_pivot_view v = {strm.str(), impl_->views_.size() + 1};
impl_->views_.push_back(v);
}
return impl_->views_.size();
void xlsx_pivots_context::Impl::serialize_cache(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"pivotCacheDefinition")
{
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
//{ records file
// CP_XML_ATTR(L"r:id", L"rId1" );
//}
CP_XML_ATTR(L"enableRefresh", 1);
//CP_XML_ATTR(L"refreshedBy", db->rgb.value());
//CP_XML_ATTR(L"refreshedDate", db_ex->numDate.data.value);
CP_XML_ATTR(L"recordCount", 0);
//createdVersion="1"
//refreshedVersion="2"
//upgradeOnRefresh="1">
if (true)
{
CP_XML_NODE(L"cacheSource")
{
CP_XML_ATTR(L"type", L"worksheet");
CP_XML_NODE(L"worksheetSource")
{
CP_XML_ATTR(L"ref", current_.source_ref);
CP_XML_ATTR(L"sheet", current_.source_table_name);
}
}
}
if (current_.fields.empty() == false)
{
CP_XML_NODE(L"cacheFields")
{
CP_XML_ATTR(L"count", current_.fields.size());
for (size_t i = 0; i < current_.fields.size(); i++)
{
CP_XML_NODE(L"cacheField")
{
CP_XML_ATTR(L"name", current_.fields[i].name);
CP_XML_ATTR(L"numFmtId", 0);
if (current_.fields[i].caches.empty() == false)
{
CP_XML_NODE(L"sharedItems")
{
CP_XML_ATTR(L"count", current_.fields[i].caches.size());
//CP_XML_ATTR(L"containsSemiMixedTypes", );
CP_XML_ATTR(L"containsNonDate", 1);
CP_XML_ATTR(L"containsDate", 0);
CP_XML_ATTR(L"containsBlank", 0);
//CP_XML_ATTR(L"containsString", );
for (size_t j = 0; j < current_.fields[i].caches.size(); j++)
{
std::wstring node_name = L"s";
//switch(current_.fields[i].caches[j].type)
//{
//}
CP_XML_NODE(node_name)
{
CP_XML_ATTR(L"v", current_.fields[i].caches[j]);
}
}
}
}
}
}
}
}
//if (pivot_cache->m_arSXFORMULA.empty() == false)
//{
// CP_XML_NODE(L"calculatedItems")
// {
// CP_XML_ATTR(L"count", pivot_cache->m_arSXFORMULA.size());
// for (size_t i = 0; i < pivot_cache->m_arSXFORMULA.size(); i++)
// {
// pivot_cache->m_arSXFORMULA[i]->serialize(CP_XML_STREAM());
// }
// }
//}
}
}
}
int xlsx_pivots_context::get_count()
{
return (int)impl_->pivot_xmls_.size();
}
bool xlsx_pivots_context::is_connections()
{
return !impl_->connections_.empty();
}
void xlsx_pivots_context::dump_rels_cache(int index, rels & Rels)
{
if (impl_->pivot_xmls_[index].recordsData_.empty() == false)
{
Rels.add(relationship(L"rId1",
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheRecords",
L"pivotCacheRecords" + std::to_wstring(index + 1) + L".xml", L""));
}
}
void xlsx_pivots_context::dump_rels_view(int index, rels & Rels)
{
Rels.add(relationship(L"rId1",
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition",
L"../pivotCache/pivotCacheDefinition" + std::to_wstring(index + 1) + L".xml", L""));
}
void xlsx_pivots_context::write_cache_definitions_to(int index, std::wostream & strm)
{
strm << impl_->pivot_xmls_[index].definitionsData_;
}
void xlsx_pivots_context::write_connections_to(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"connections")
{
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
CP_XML_STREAM() << impl_->connections_;
}
}
}
void xlsx_pivots_context::write_cache_records_to(int index, std::wostream & strm)
{
strm << impl_->pivot_xmls_[index].recordsData_;
}
void xlsx_pivots_context::write_table_view_to(int index, std::wostream & strm)
{
strm << impl_->pivot_xmls_[index].viewData_;
}
void xlsx_pivots_context::start_table()
{
impl_->current_.clear();
}
int xlsx_pivots_context::end_table()
{
std::wstringstream view_strm;
std::wstringstream cache_strm;
std::wstringstream rec_strm;
impl_->serialize_view(view_strm);
impl_->serialize_cache(cache_strm);
Impl::_pivot_xml v = {cache_strm.str(), rec_strm.str(), view_strm.str()};
impl_->pivot_xmls_.push_back(v);
return impl_->pivot_xmls_.size();
}
void xlsx_pivots_context::set_view_name(std::wstring name)
{
impl_->current_.name = name;
}
void xlsx_pivots_context::set_view_target_range(std::wstring ref)
{
impl_->current_.location_ref = ref;
}
void xlsx_pivots_context::start_field()
{
Impl::_field f;
impl_->current_.fields.push_back(f);
}
void xlsx_pivots_context::set_field_name(std::wstring name)
{
impl_->current_.fields.back().name = name;
}
void xlsx_pivots_context::set_field_type(int type)
{
impl_->current_.fields.back().type = type;
switch(type)
{
case 0: impl_->current_.col_fields.push_back(impl_->current_.fields.size() - 1); break;// column,
case 1: impl_->current_.data_fields.push_back(impl_->current_.fields.size() - 1); break;// data,
case 2: break;// hidden,
case 3: impl_->current_.page_fields.push_back(impl_->current_.fields.size() - 1); break;// page,
case 4: impl_->current_.row_fields.push_back(impl_->current_.fields.size() - 1); break;// row
}
}
void xlsx_pivots_context::set_field_function(int type)
{
impl_->current_.fields.back().function = type;
}
void xlsx_pivots_context::set_field_user_function(std::wstring f)
{
impl_->current_.fields.back().user_function = f;
}
void xlsx_pivots_context::add_field_subtotal(int function_type)
{
impl_->current_.fields.back().subtotals.push_back(function_type);
}
void xlsx_pivots_context::add_field_cache(int index, std::wstring value)
{
while (index > impl_->current_.fields.back().caches.size())
{
impl_->current_.fields.back().caches.push_back(L"");
}
impl_->current_.fields.back().caches.push_back(value);
}
void xlsx_pivots_context::end_field()
{
std::wstringstream strm;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"pivotField")
{
}
}
Impl::_pivot_field f = {strm.str(), L""};
impl_->fields_.push_back(f);
}
void xlsx_pivots_context::set_source_range(std::wstring table_name, std::wstring ref)
{
impl_->current_.source_table_name = table_name;
impl_->current_.source_ref = ref;
}
void xlsx_pivots_context::add_connections(std::wstring connections)
@ -230,25 +446,10 @@ void xlsx_pivots_context::add_connections(std::wstring connections)
impl_->connections_ = connections;
}
int xlsx_pivots_context::get_view_count()
{
return (int)impl_->views_.size();
}
xlsx_pivots_context::~xlsx_pivots_context()
{
}
std::wostream & xlsx_pivots_context::stream_view()
{
return impl_->view_;
}
std::wostream & xlsx_pivots_context::stream_cache()
{
return impl_->cache_;
}
}
}

View File

@ -50,14 +50,20 @@ public:
int end_table();
void start_field();
void set_field_name(std::wstring name);
void set_field_type(int type);
void set_field_function(int type);
void set_field_user_function(std::wstring f);
void add_field_subtotal(int function_type);
void add_field_cache(int index, std::wstring value);
void end_field();
int get_view_count();//equal in libre
int get_cache_count();
int get_count();
void set_view_name(std::wstring name);
void set_view_target_range(std::wstring ref);
void add_cache(std::wstring definitions, std::wstring records);
void set_source_range(std::wstring table_name, std::wstring ref);
void write_cache_definitions_to (int index, std::wostream & strm);
void write_cache_records_to (int index, std::wostream & strm);
@ -71,9 +77,6 @@ public:
void add_connections(std::wstring connections);
bool is_connections();
std::wostream & stream_view();
std::wostream & stream_cache();
private:
class Impl;
_CP_PTR(Impl) impl_;

View File

@ -160,7 +160,10 @@ void xlsx_table_state::set_table_row_group(int count, bool collapsed, int level)
group_row_.collapsed = collapsed;
group_row_.level = level;
}
void xlsx_table_state::add_empty_row(int count)
{
current_table_row_ += count;
}
void xlsx_table_state::start_row(const std::wstring & StyleName, const std::wstring & defaultCellStyleName)
{
empty_row_ = true;

View File

@ -89,6 +89,8 @@ public:
void non_empty_row ();
bool is_empty_row () const;
void end_row ();
void add_empty_row(int count);
std::wstring current_row_style () const;
std::wstring default_row_cell_style () const;

View File

@ -148,9 +148,9 @@ void xlsx_table_context::start_table(std::wstring tableName, std::wstring tableS
void xlsx_table_context::end_table()
{
xlsx_table_states_.pop_back();
//xlsx_table_states_.pop_back();
}
void xlsx_table_context::start_cell(const std::wstring & formula, size_t columnsSpanned, size_t rowsSpanned)
{
state()->start_cell(columnsSpanned, rowsSpanned);

View File

@ -232,7 +232,7 @@ void xlsx_conversion_context::end_document()
get_xlsx_defined_names().xlsx_serialize(CP_XML_STREAM());
int pivot_cache_count = xlsx_pivots_context_.get_cache_count();
int pivot_cache_count = xlsx_pivots_context_.get_count();
if (pivot_cache_count > 0)
{
CP_XML_NODE(L"pivotCaches")
@ -259,7 +259,7 @@ void xlsx_conversion_context::end_document()
}
}
}
int pivot_view_count = xlsx_pivots_context_.get_view_count();
int pivot_view_count = xlsx_pivots_context_.get_count();
if (pivot_view_count > 0)
{
for (int i = 0; i < pivot_view_count; i++)
@ -363,17 +363,33 @@ oox_chart_context & xlsx_conversion_context::current_chart()
throw std::runtime_error("internal error");
}
}
xlsx_xml_worksheet & xlsx_conversion_context::current_sheet()
xlsx_xml_worksheet & xlsx_conversion_context::current_sheet(int index)
{
if (!sheets_.empty())
{
return *sheets_.back().get();
if (index < 0) return *sheets_.back().get();
else return *sheets_[index].get();
}
else
{
throw std::runtime_error("internal error");
}
}
int xlsx_conversion_context::find_sheet_by_name(std::wstring tableName)
{
if (tableName.empty()) return -1;
if (0 == tableName.find(L"'"))
{
tableName = tableName.substr(1, tableName.length() - 2);
}
for (size_t i = 0; i < sheets_.size(); i++)
{
if (sheets_[i]->name() == tableName)
return i;
}
return -1;
}
void xlsx_conversion_context::create_new_sheet(std::wstring const & name)
{
sheets_.push_back(xlsx_xml_worksheet::create(name));

View File

@ -102,7 +102,10 @@ public:
bool start_table (std::wstring tableName, std::wstring tableStyleName);
void end_table ();
void start_table_column (unsigned int repeated, const std::wstring & defaultCellStyleName, int & cMin, int & cMax);
int find_sheet_by_name(std::wstring tableName);
xlsx_xml_worksheet & current_sheet(int index = -1);
void start_table_column (unsigned int repeated, const std::wstring & defaultCellStyleName, int & cMin, int & cMax);
void table_column_last_width (double w);
double table_column_last_width ();
void end_table_column ();
@ -162,7 +165,6 @@ public:
xlsx_table_context & get_table_context() { return xlsx_table_context_; }
const xlsx_table_context & get_table_context() const { return xlsx_table_context_; }
xlsx_style_manager & get_style_manager() { return xlsx_style_; }
xlsx_xml_worksheet & current_sheet();
oox_chart_context & current_chart();
math_context & get_math_context() { return math_context_; }

View File

@ -1274,16 +1274,27 @@ void style_page_layout_properties::xlsx_serialize(std::wostream & strm, oox::xls
{
if (horizontal_margins.fo_margin_left_ && horizontal_margins.fo_margin_left_->get_type() == odf_types::length_or_percent::Length)
CP_XML_ATTR(L"left" , horizontal_margins.fo_margin_left_->get_length().get_value_unit(odf_types::length::inch));
else CP_XML_ATTR(L"left", 0);
if (horizontal_margins.fo_margin_right_ && horizontal_margins.fo_margin_right_->get_type() == odf_types::length_or_percent::Length)
CP_XML_ATTR(L"right" , horizontal_margins.fo_margin_right_->get_length().get_value_unit(odf_types::length::inch));
else CP_XML_ATTR(L"right", 0);
if (vertical_margins.fo_margin_top_ && vertical_margins.fo_margin_top_->get_type() == odf_types::length_or_percent::Length)
CP_XML_ATTR(L"top" , vertical_margins.fo_margin_top_->get_length().get_value_unit(odf_types::length::inch));
else CP_XML_ATTR(L"top", 1.025);
if (vertical_margins.fo_margin_bottom_ && vertical_margins.fo_margin_bottom_->get_type() == odf_types::length_or_percent::Length)
CP_XML_ATTR(L"bottom" , vertical_margins.fo_margin_bottom_->get_length().get_value_unit(odf_types::length::inch));
else CP_XML_ATTR(L"bottom", 1.025);
CP_XML_ATTR(L"header" , vertical_margins.fo_margin_top_->get_length().get_value_unit(odf_types::length::inch));
CP_XML_ATTR(L"footer" , vertical_margins.fo_margin_bottom_->get_length().get_value_unit(odf_types::length::inch));
if (vertical_margins.fo_margin_top_)
CP_XML_ATTR(L"header" , vertical_margins.fo_margin_top_->get_length().get_value_unit(odf_types::length::inch));
else CP_XML_ATTR(L"header", 0.7875);
if (vertical_margins.fo_margin_bottom_)
CP_XML_ATTR(L"footer" , vertical_margins.fo_margin_bottom_->get_length().get_value_unit(odf_types::length::inch));
else CP_XML_ATTR(L"footer", 0.7875);
}
}
if (attlist_.fo_page_width_ || attlist_.fo_page_height_ || attlist_.style_print_orientation_)

View File

@ -356,7 +356,6 @@ void table_columns_and_groups::add_child_element( xml::sax * Reader, const std::
*/
}
// table-table-cell-content
//////////////////////////////////////////////////////////////////////////////////////////////////
std::wostream & table_table_cell_content::text_to_stream(std::wostream & _Wostream) const
@ -393,9 +392,14 @@ void table_table_cell::add_child_element( xml::sax * Reader, const std::wstring
void table_table_cell::add_text(const std::wstring & Text)
{
}
bool table_table_cell::empty()
{
if (!content_.elements_.empty()) return false;
if (attlist_.table_formula_) return false;
return true;
}
// table:covered-table-cell
// table-covered-table-cell
//////////////////////////////////////////////////////////////////////////////////////////////////
const wchar_t * table_covered_table_cell::ns = L"table";
const wchar_t * table_covered_table_cell::name = L"covered-table-cell";
@ -412,13 +416,19 @@ void table_covered_table_cell::add_attributes( const xml::attributes_wc_ptr & At
void table_covered_table_cell::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
{
empty_ = false;
content_.add_child_element(Reader, Ns, Name, getContext());
}
void table_covered_table_cell::add_text(const std::wstring & Text)
{
}
bool table_covered_table_cell::empty()
{
if (!content_.elements_.empty()) return false;
if (attlist_.table_formula_) return false;
return true;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
// table:table-row
@ -445,7 +455,38 @@ void table_table_row::add_child_element( xml::sax * Reader, const std::wstring &
else
CP_NOT_APPLICABLE_ELM();
}
bool table_table_row::empty()
{
if (content_.empty() && !attlist_.table_style_name_ && !attlist_.table_default_cell_style_name_) return true;
return false;
}
bool table_table_row::empty_content_cells()
{
bool res = true;
for (size_t i = 0 ; i < content_.size(); i++)
{
table_table_cell *cell = dynamic_cast<table_table_cell*>(content_[i].get());
table_covered_table_cell *cover_cell = dynamic_cast<table_covered_table_cell*>(content_[i].get());
if (!cell && !cover_cell)
{
res = false;
break;
}
if (cell && cell->empty() == false)
{
res = false;
break;
}
if (cover_cell && cover_cell->empty() == false)
{
res = false;
break;
}
}
return res;
}
// table:table-rows
//////////////////////////////////////////////////////////////////////////////////////////////////
const wchar_t * table_table_rows::ns = L"table";

View File

@ -361,6 +361,9 @@ private:
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
public:
bool empty();
bool empty_content_cells();
table_table_row_attlist attlist_;
office_element_ptr_array content_; // table-table-cell or table-covered-table-cell
@ -408,6 +411,7 @@ private:
public:
bool last_cell_;
bool empty();
table_table_cell_attlist attlist_;
table_table_cell_attlist_extra attlist_extra_;
@ -427,7 +431,7 @@ public:
CPDOCCORE_DEFINE_VISITABLE();
table_covered_table_cell() : last_cell_(false), empty_(true) {}
table_covered_table_cell() : last_cell_(false){}
virtual void docx_convert(oox::docx_conversion_context & Context) ;
virtual void pptx_convert(oox::pptx_conversion_context & Context) ;
@ -443,7 +447,7 @@ private:
public:
bool last_cell_;
bool empty_;
bool empty();
table_table_cell_attlist attlist_;
table_table_cell_content content_;

View File

@ -54,6 +54,7 @@ void table_data_pilot_tables::add_child_element( xml::sax * Reader, const std::w
}
void table_data_pilot_tables::xlsx_convert(oox::xlsx_conversion_context & Context)
{
return;
for (size_t i = 0; i < content_.size(); i++)
{
content_[i]->xlsx_convert(Context);
@ -89,8 +90,12 @@ void table_data_pilot_table::xlsx_convert(oox::xlsx_conversion_context & Context
{
if (!source_) return;
int table_index = -1;
Context.get_pivots_context().start_table();
source_->xlsx_convert(Context);
if (table_name_) Context.get_pivots_context().set_view_name(*table_name_);
if (table_target_range_address_)
{
@ -99,14 +104,12 @@ void table_data_pilot_table::xlsx_convert(oox::xlsx_conversion_context & Context
std::wstring ref = formulas_converter.convert_named_ref(*table_target_range_address_, false);
std::wstring table_name = formulas_converter.get_table_name();
//Context.get_table_context()
table_index = Context.find_sheet_by_name(table_name);
//Context.get_pivots_context()->set_view_target_range(ref);
//Context.get_pivots_context()->set_view_target_table(table_index);
Context.get_pivots_context().set_view_target_range(ref);
//Context.get_pivots_context().set_view_target_table(table_index);
}
source_->xlsx_convert(Context);
for (size_t i = 0; i < fields_.size(); i++)
{
fields_[i]->xlsx_convert(Context);
@ -116,7 +119,7 @@ void table_data_pilot_table::xlsx_convert(oox::xlsx_conversion_context & Context
if (index_view > 0)
{
Context.current_sheet().sheet_rels().add(oox::relationship(L"pvId" + std::to_wstring(index_view),
Context.current_sheet(table_index).sheet_rels().add(oox::relationship(L"pvId" + std::to_wstring(index_view),
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotTable",
L"../pivotTables/pivotTable" + std::to_wstring(index_view) + L".xml"));
}
@ -138,16 +141,37 @@ void table_data_pilot_field::add_attributes( const xml::attributes_wc_ptr & Attr
void table_data_pilot_field::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
{
CP_CREATE_ELEMENT (content_);
if (L"table" == Ns && L"data-pilot-field-reference" == Name)
CP_CREATE_ELEMENT (reference_);
else if (L"table" == Ns && L"data-pilot-level" == Name)
CP_CREATE_ELEMENT (level_);
else if (L"table" == Ns && L"data-pilot-groups" == Name)
CP_CREATE_ELEMENT (groups_);
}
void table_data_pilot_field::xlsx_convert(oox::xlsx_conversion_context & Context)
{
Context.get_pivots_context().start_field();
Context.get_pivots_context().set_field_name(table_source_field_name_.get_value_or(L""));
Context.get_pivots_context().set_field_type(table_orientation_.get_value_or(table_orientation::hidden).get_type());
for (size_t i = 0; i < content_.size(); i++)
if (table_function_)
{
content_[i]->xlsx_convert(Context);
}
table_function::type type = table_function_->get_type();
if (type == table_function::String)
{
Context.get_pivots_context().set_field_user_function(table_function_->get_string());
}
else
{
Context.get_pivots_context().set_field_function(type);
}
}
if (reference_) reference_->xlsx_convert(Context);
if (groups_) groups_->xlsx_convert(Context);
if (level_) level_->xlsx_convert(Context);
Context.get_pivots_context().end_field();
}
@ -217,7 +241,7 @@ const wchar_t * table_source_cell_range::name = L"source-cell-range";
void table_source_cell_range::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"table:cellrange-address", table_cellrange_address_);
CP_APPLY_ATTR(L"table:cell-range-address", table_cell_range_address_);
}
void table_source_cell_range::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
@ -226,9 +250,14 @@ void table_source_cell_range::add_child_element( xml::sax * Reader, const std::w
}
void table_source_cell_range::xlsx_convert(oox::xlsx_conversion_context & Context)
{
for (size_t i = 0; i < content_.size(); i++)
{
content_[i]->xlsx_convert(Context);
if (table_cell_range_address_)
{
formulasconvert::odf2oox_converter formulas_converter;
std::wstring ref = formulas_converter.convert_named_ref(*table_cell_range_address_, false);
std::wstring table_name = formulas_converter.get_table_name();
Context.get_pivots_context().set_source_range(table_name, ref);
}
}
//-------------------------------------------------------------------------------------------------
@ -257,15 +286,36 @@ void table_data_pilot_level::add_attributes( const xml::attributes_wc_ptr & Attr
}
void table_data_pilot_level::add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name)
{
CP_CREATE_ELEMENT (content_);
if (L"table" == Ns && L"data-pilot-members" == Name)
CP_CREATE_ELEMENT (members_);
else if (L"table" == Ns && L"data-pilot-subtotals" == Name)
CP_CREATE_ELEMENT (subtotals_);
else if (L"table" == Ns && L"data-pilot-display-info" == Name)
CP_CREATE_ELEMENT ( display_info_);
else if (L"table" == Ns && L"data-pilot-layout-info" == Name)
CP_CREATE_ELEMENT ( layout_info_);
else if (L"table" == Ns && L"data-pilot-sort-info" == Name)
CP_CREATE_ELEMENT (sort_info_);
}
void table_data_pilot_level::xlsx_convert(oox::xlsx_conversion_context & Context)
{
for (size_t i = 0; i < content_.size(); i++)
{
content_[i]->xlsx_convert(Context);
table_data_pilot_members* members = dynamic_cast<table_data_pilot_members*>(members_.get());
table_data_pilot_subtotals* subtotals = dynamic_cast<table_data_pilot_subtotals*>(subtotals_.get());
for (size_t i = 0; members && i < members->content_.size(); i++)
{
table_data_pilot_member* member = dynamic_cast<table_data_pilot_member*>(members->content_[i].get());
if (member)
Context.get_pivots_context().add_field_cache(i, member->table_name_.get_value_or(L""));
}
for (size_t i = 0; subtotals && i < subtotals->content_.size(); i++)
{
table_data_pilot_subtotal* subtotal = dynamic_cast<table_data_pilot_subtotal*>(subtotals->content_[i].get());
if (subtotal)
{
Context.get_pivots_context().add_field_subtotal(subtotal->table_function_.get_value_or(table_function::Auto).get_type());
}
}
}
//-------------------------------------------------------------------------------------------------
const wchar_t * table_data_pilot_groups::ns = L"table";

View File

@ -65,8 +65,8 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes ){}
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
office_element_ptr_array content_;
public:
office_element_ptr_array content_;
};
CP_REGISTER_OFFICE_ELEMENT2(table_data_pilot_tables);
@ -87,6 +87,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
public:
_CP_OPT(std::wstring) table_name_;
_CP_OPT(std::wstring) table_target_range_address_;
_CP_OPT(std::wstring) table_application_data_;
@ -119,6 +120,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
public:
_CP_OPT(std::wstring) table_source_field_name_;
_CP_OPT(odf_types::table_orientation) table_orientation_;
_CP_OPT(int) table_used_hierarchy_;
@ -127,7 +129,9 @@ private:
_CP_OPT(std::wstring) table_selected_page_;
_CP_OPT(odf_types::Bool) table_is_data_layout_field_;
office_element_ptr_array content_;
office_element_ptr reference_;
office_element_ptr level_;
office_element_ptr groups_;
};
CP_REGISTER_OFFICE_ELEMENT2(table_data_pilot_field);
@ -147,6 +151,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
public:
_CP_OPT(std::wstring) table_field_name_;
_CP_OPT(std::wstring) table_member_name_;
_CP_OPT(odf_types::member_type) table_member_type_;
@ -171,6 +176,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
public:
_CP_OPT(std::wstring) table_database_name_;
_CP_OPT(std::wstring) table_database_table_name_;
};
@ -193,6 +199,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
public:
_CP_OPT(std::wstring) table_database_name_;
_CP_OPT(std::wstring) table_query_name_;
};
@ -215,6 +222,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
public:
_CP_OPT(std::wstring) table_database_name_;
_CP_OPT(odf_types::Bool)table_parse_sql_statement_;
_CP_OPT(std::wstring) table_sql_statement_;
@ -238,8 +246,9 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
_CP_OPT(std::wstring) table_cellrange_address_;
office_element_ptr_array content_;
public:
_CP_OPT(std::wstring) table_cell_range_address_;
office_element_ptr_array content_; //filters
};
CP_REGISTER_OFFICE_ELEMENT2(table_source_cell_range);
@ -260,6 +269,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
public:
_CP_OPT(std::wstring) table_name_;
_CP_OPT(std::wstring) table_object_name_;
_CP_OPT(std::wstring) table_password_;
@ -285,8 +295,14 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
public:
_CP_OPT(odf_types::Bool) table_show_empty_;
office_element_ptr_array content_;
office_element_ptr members_;
office_element_ptr subtotals_;
office_element_ptr display_info_;
office_element_ptr layout_info_;
office_element_ptr sort_info_;
};
CP_REGISTER_OFFICE_ELEMENT2(table_data_pilot_level);
//-------------------------------------------------------------------------------------
@ -306,6 +322,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
public:
_CP_OPT(std::wstring) table_date_end_;
_CP_OPT(std::wstring) table_date_start_;
_CP_OPT(std::wstring) table_start; //double 18.2 or auto.
@ -334,6 +351,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
public:
_CP_OPT(std::wstring) table_name_;
office_element_ptr_array content_;
};
@ -356,7 +374,8 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes ){}
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
office_element_ptr_array content_;
public:
office_element_ptr_array content_;
};
CP_REGISTER_OFFICE_ELEMENT2(table_data_pilot_members);
@ -377,8 +396,9 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
_CP_OPT(odf_types::Bool) table_display_;
public:
_CP_OPT(std::wstring) table_name_;
_CP_OPT(odf_types::Bool) table_display_;
_CP_OPT(odf_types::Bool) table_show_details_;
};
CP_REGISTER_OFFICE_ELEMENT2(table_data_pilot_member);
@ -399,6 +419,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
public:
_CP_OPT(std::wstring) table_name_;
};
CP_REGISTER_OFFICE_ELEMENT2(table_data_pilot_group_member);
@ -419,6 +440,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes ){}
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
public:
office_element_ptr_array content_;
};
@ -440,6 +462,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
public:
_CP_OPT(odf_types::table_function) table_function_;
};
@ -461,6 +484,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
public:
_CP_OPT(odf_types::Bool) table_add_empty_lines_;
_CP_OPT(std::wstring) table_layout_mode_; //tabular-layout, outlinesubtotals-top or outline-subtotals-bottom.
};
@ -482,6 +506,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
public:
_CP_OPT(std::wstring) table_data_field_;
_CP_OPT(odf_types::table_order) table_order_;
_CP_OPT(std::wstring) table_sort_mode_; //data, none, manual or name.
@ -504,6 +529,7 @@ private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
public:
_CP_OPT(std::wstring) table_data_field_;
_CP_OPT(std::wstring) table_display_member_mode_; //from-top or from-bottom.
_CP_OPT(odf_types::Bool) table_enabled_;
@ -512,6 +538,5 @@ private:
CP_REGISTER_OFFICE_ELEMENT2(table_data_pilot_display_info);
//-------------------------------------------------------------------------------------
}
}

View File

@ -78,6 +78,17 @@ int table_table_cell_content::xlsx_convert(oox::xlsx_conversion_context & Contex
void table_table_row::xlsx_convert(oox::xlsx_conversion_context & Context)
{
if (attlist_.table_number_rows_repeated_ > 1 && empty())
{
Context.get_table_context().state()->add_empty_row(attlist_.table_number_rows_repeated_);
return;
}
if (attlist_.table_number_rows_repeated_ > 0xf000 && empty_content_cells())
{
Context.get_table_context().state()->add_empty_row(attlist_.table_number_rows_repeated_);
return; //conv_hSX8n3lVbhALjt0aafg__xlsx.ods, conv_MA2CauoNfX_7ejKS5eg__xlsx.ods
}
std::wostream & strm = Context.current_sheet().sheetData();
///обработка чтилей для роу -
size_t Default_Cell_style_in_row_ = 0;
@ -253,26 +264,20 @@ void table_rows::xlsx_convert(oox::xlsx_conversion_context & Context)
table_table_rows_->xlsx_convert(Context);
else
{
if (table_table_row_.size() > 1)
while (table_table_row_.size() > 1)
{
//check 2 last rows for repeate > 65000 & 1024
table_table_row* row_last = dynamic_cast<table_table_row*>(table_table_row_[table_table_row_.size() - 1].get());
table_table_row* row_last_1 = dynamic_cast<table_table_row*>(table_table_row_[table_table_row_.size() - 2].get());
if (row_last->attlist_.table_number_rows_repeated_ > 1000 &&
row_last_1->attlist_.table_number_rows_repeated_ > 1000 ||
row_last_1->attlist_.table_number_rows_repeated_ > 0xf000)
{
std::wstring style = row_last->attlist_.table_style_name_.get_value_or(L"");
std::wstring style_1 = row_last->attlist_.table_style_name_.get_value_or(L"");
std::wstring style = row_last->attlist_.table_style_name_.get_value_or(L"");
std::wstring style_1 = row_last->attlist_.table_style_name_.get_value_or(L"");
if (style == style_1)//check for empty also ????
{
row_last_1->attlist_.table_number_rows_repeated_ = 1024;
table_table_row_.pop_back();
}
}
if (style != style_1)break;
if (row_last_1->empty_content_cells() == false) break;
if (row_last->empty_content_cells() == false) break;
row_last_1->attlist_.table_number_rows_repeated_ += row_last->attlist_.table_number_rows_repeated_;
table_table_row_.pop_back();
}
for (size_t i = 0; i < table_table_row_.size(); i++)
{

View File

@ -43,7 +43,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../include;&quot;../../DesktopEditor/freetype-2.5.2/include&quot;"
AdditionalIncludeDirectories="../include;&quot;../../DesktopEditor/freetype-2.5.2/include&quot;;../../DesktopEditor/xml/libxml2/include"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;USE_LITE_READER;_USE_XMLLITE_READER_;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED"
MinimalRebuild="true"
BasicRuntimeChecks="3"

View File

@ -43,7 +43,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=""
AdditionalIncludeDirectories="../../DesktopEditor/xml/libxml2/include;../../DesktopEditor/xml/build/vs2005"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;USE_LITE_READER;_USE_XMLLITE_READER_;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED"
MinimalRebuild="true"
BasicRuntimeChecks="3"

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="windows-1251"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Version="8,00"
Name="OdfFileWriterTest"
ProjectGUID="{FBA8446A-150F-4A10-B4DA-1022048D6473}"
RootNamespace="ASCOfficeOdfFileWTest"
@ -43,6 +43,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../DesktopEditor/xml/libxml2/include;../../DesktopEditor/xml/build/vs2005"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;USE_LITE_READER;_USE_XMLLITE_READER_;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED;__WORDSIZE=32;DONT_WRITE_EMBEDDED_FONTS"
MinimalRebuild="true"
BasicRuntimeChecks="3"

View File

@ -113,7 +113,7 @@ void calcext_conditional_format::serialize(std::wostream & _Wostream)
{
CP_XML_ATTR_OPT(L"calcext:target-range-address",calcext_target_range_address_);
for (size_t i = content_.size() - 1; i >= 0; i--)
for (int i = (int)content_.size() - 1; i >= 0; i--)
{
content_[i]->serialize(CP_XML_STREAM());
}
@ -269,4 +269,4 @@ void calcext_date_is::serialize(std::wostream & _Wostream)
}
}
}
}
}

View File

@ -54,8 +54,9 @@ static int style_family_counts_[26]={};//согласно количеству
void calc_paragraph_properties_content(std::vector<style_paragraph_properties*> & parProps, paragraph_format_properties * result)
{
if (result == NULL)return;
if (parProps.empty()) return;
for (size_t i = parProps.size() - 1; i >= 0; i--)
for (int i = (int)parProps.size() - 1; i >= 0; i--)
{
if (parProps[i])
result->apply_from(parProps[i]->content_);
@ -444,4 +445,4 @@ void odf_style_context::calc_paragraph_properties(std::wstring style_name, style
}
}
}

View File

@ -138,7 +138,7 @@ void ods_table_context::add_defined_range(const std::wstring & name, const std::
XmlUtils::replace_all( odf_range, L"[", L"");
XmlUtils::replace_all( odf_range, L"]", L"");
std::wstring odf_base_cell = formulas_converter.get_base_cell_formula();
std::wstring odf_base_cell = formulas_converter.get_table_name() + L".$A$1";
named_range->table_name_ = name;
named_range->table_cell_range_address_ = odf_range;
@ -182,7 +182,7 @@ void ods_table_context::add_defined_expression(const std::wstring & name, const
formulasconvert::oox2odf_converter formulas_converter;
std::wstring odf_value = formulas_converter.convert_named_formula(value);
std::wstring odf_base_cell = formulas_converter.get_base_cell_formula();
std::wstring odf_base_cell = formulas_converter.get_table_name() + L".$A$1";
named_expression->table_name_ = name;
named_expression->table_expression_ = odf_value;

View File

@ -1345,6 +1345,10 @@ void PptxConverter::convert_slide(PPTX::Logic::CSld *oox_slide, PPTX::Logic::TxS
{
if (pShape->nvSpPr.nvPr.ph.is_init())
{
if (type == Notes || type == NotesMaster)
{
pShape->nvSpPr.nvPr.ph->idx.reset();
}
if (bFillUp)
pShape->FillLevelUp();

View File

@ -43,7 +43,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../ASCOfficeOdfFile/include;../../../ASCOfficeOdfFile/src/odf/datatypes;&quot;../../../DesktopEditor/freetype-2.5.2/include&quot;"
AdditionalIncludeDirectories="../../../ASCOfficeOdfFile/include;../../../ASCOfficeOdfFile/src/odf/datatypes;../../../DesktopEditor/xml/libxml2/include"
PreprocessorDefinitions="_DEBUG;_LIB;DONT_WRITE_EMBEDDED_FONTS"
MinimalRebuild="true"
BasicRuntimeChecks="3"

View File

@ -55,7 +55,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="&quot;../../../DesktopEditor/freetype-2.5.2/include&quot;"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="_DEBUG;_LIB;_USE_MATH_DEFINES;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED;USE_LITE_READER;_USE_XMLLITE_READER_;PPTX_DEF;PPT_DEF;ENABLE_PPT_TO_PPTX_CONVERT;AVS_USE_CONVERT_PPTX_TOCUSTOM_VML;DONT_WRITE_EMBEDDED_FONTS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@ -134,7 +134,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="&quot;../../../DesktopEditor/freetype-2.5.2/include&quot;"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="_DEBUG;_LIB;_USE_MATH_DEFINES;PPTX_DEF;PPT_DEF;ENABLE_PPT_TO_PPTX_CONVERT;PPT_FORMAT;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED;USE_LITE_READER;_USE_XMLLITE_READER_;_PRESENTATION_WRITER_;_SVG_CONVERT_TO_IMAGE_"
MinimalRebuild="true"
BasicRuntimeChecks="3"

View File

@ -44,7 +44,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\Common\OfficeDrawing;&quot;..\..\DesktopEditor\freetype-2.5.2\include&quot;;..\..\Common\OfficeDrawing\Shapes"
AdditionalIncludeDirectories="../../DesktopEditor/xml/build/vs2005;../../DesktopEditor/xml/libxml2/include"
PreprocessorDefinitions="_DEBUG;_CONSOLE;USE_ATL_CSTRINGS;_USE_MATH_DEFINES;PPTX_DEF;PPT_DEF;ENABLE_PPT_TO_PPTX_CONVERT;PPT_FORMAT;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED;USE_LITE_READER;_USE_XMLLITE_READER_;_PRESENTATION_WRITER_;_SVG_CONVERT_TO_IMAGE_;DONT_WRITE_EMBEDDED_FONTS"
MinimalRebuild="false"
BasicRuntimeChecks="3"

View File

@ -913,20 +913,29 @@ HRESULT CDrawingConverter::SetMainDocument(BinDocxRW::CDocxSerializer* pDocument
return S_OK;
}
HRESULT CDrawingConverter::SetMediaDstPath(const std::wstring& bsMediaPath)
void CDrawingConverter::SetSrcPath(const std::wstring& sPath, int nDocType)
{
m_pBinaryWriter->m_pCommon->m_pImageManager->m_strDstMedia = (std::wstring)bsMediaPath;
m_pImageManager->SetDstMedia(m_pBinaryWriter->m_pCommon->m_pImageManager->m_strDstMedia);
m_pReader->m_pRels->m_pManager = m_pImageManager;
m_pReader->m_strFolder = sPath;
NSDirectory::CreateDirectory(bsMediaPath);
return S_OK;
m_pImageManager->m_nDocumentType = nDocType;
}
HRESULT CDrawingConverter::SetEmbedDstPath(const std::wstring& bsEmbedPath)
void CDrawingConverter::SetDstPath(const std::wstring& sPath)
{
m_pImageManager->SetDstEmbed(bsEmbedPath);
m_pImageManager->SetDstFolder(sPath);
}
void CDrawingConverter::SetMediaDstPath(const std::wstring& sPath)
{
m_pBinaryWriter->m_pCommon->m_pImageManager->m_strDstMedia = sPath;
m_pImageManager->SetDstMedia(sPath);
NSDirectory::CreateDirectory(bsEmbedPath);
return S_OK;
NSDirectory::CreateDirectory(sPath);
}
void CDrawingConverter::SetEmbedDstPath(const std::wstring& sPath)
{
m_pImageManager->SetDstEmbed(sPath);
NSDirectory::CreateDirectory(sPath);
}
HRESULT CDrawingConverter::AddShapeType(const std::wstring& bsXml)
{
@ -2228,8 +2237,7 @@ void CDrawingConverter::doc_LoadShape(PPTX::Logic::SpTreeElem *elem, XmlUtils::C
std::wstring strPos = arSplit[i].substr(0, p);
std::wstring strColor = arSplit[i].substr(p + 1);
double pos;
pos = _wtof(strPos.c_str());
double pos = strPos.empty() ? 0 : _wtof(strPos.c_str());
NSPresentationEditor::CColor color = NS_DWC_Common::getColorFromString(strColor);
PPTX::Logic::UniColor *oColor = new PPTX::Logic::UniColor();
@ -5275,14 +5283,6 @@ OOX::CContentTypes* CDrawingConverter::GetContentTypes()
//return m_pReader->mm_strContentTypes;
}
void CDrawingConverter::SetSourceFileDir(std::wstring path, int nDocType)
{
m_pReader->m_pRels->m_pManager = m_pImageManager;
m_pReader->m_strFolder = path;
m_pImageManager->m_nDocumentType = nDocType;
}
void CDrawingConverter::Clear()
{
for (std::map<std::wstring, CShape*>::iterator pPair = m_mapShapeTypes.begin(); pPair != m_mapShapeTypes.end(); ++pPair)

View File

@ -215,8 +215,12 @@ namespace NSBinPptxRW
smart_ptr<OOX::IFileContainer> GetRels();
HRESULT SetMainDocument (BinDocxRW::CDocxSerializer* pDocument);
HRESULT SetMediaDstPath (const std::wstring& sMediaPath);
HRESULT SetEmbedDstPath (const std::wstring& sEmbedPath);
void SetSrcPath (const std::wstring& sPath, int nDocType = 1/*XMLWRITER_DOC_TYPE_DOCX*/);
void SetDstPath (const std::wstring& sPath);
void SetMediaDstPath (const std::wstring& sMediaPath);
void SetEmbedDstPath (const std::wstring& sEmbedPath);
HRESULT AddShapeType (const std::wstring& sXml);
HRESULT AddObject (const std::wstring& sXml, std::wstring** pMainProps);
@ -255,8 +259,6 @@ namespace NSBinPptxRW
void SetDocumentChartsCount (int val);
int GetDocumentChartsCount ();
void SetSourceFileDir (std::wstring path, int nDocType = 1/*XMLWRITER_DOC_TYPE_DOCX*/);
OOX::CContentTypes* GetContentTypes();
protected:
nullable<PPTX::Logic::Xfrm> m_oxfrm_override;

View File

@ -36,8 +36,10 @@
#include "../../Common/DocxFormat/Source/DocxFormat/WritingElement.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Media/OleObject.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Media/Audio.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Media/ActiveX.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Media/Video.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Media/Audio.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Media/VbaProject.h"
#include "../../Common/Base64.h"
@ -123,6 +125,19 @@ namespace NSBinPptxRW
m_lIndexNextImage = 0;
m_lIndexCounter = 0;
}
void CImageManager2::SetDstFolder(const std::wstring& strDst)
{
m_strDstFolder = strDst;
m_strDstMedia = m_strDstFolder + FILE_SEPARATOR_STR + _T("media");
m_strDstEmbed = m_strDstFolder + FILE_SEPARATOR_STR + _T("embeddings");
NSDirectory::CreateDirectory(m_strDstMedia);
NSDirectory::CreateDirectory(m_strDstEmbed);
}
std::wstring CImageManager2::GetDstFolder()
{
return m_strDstFolder;
}
void CImageManager2::SetDstMedia(const std::wstring& strDst)
{
m_strDstMedia = strDst;
@ -1220,7 +1235,7 @@ namespace NSBinPptxRW
m_pWriter->WriteString(strRels);
}
void CRelsGenerator::EndPresentationRels(const bool& bIsCommentsAuthors = false, const bool& bIsNotesMaster)
void CRelsGenerator::EndPresentationRels(bool bIsCommentsAuthors, bool bIsNotesMaster, bool bIsVbaProject)
{
if (bIsNotesMaster)
{
@ -1245,6 +1260,12 @@ namespace NSBinPptxRW
L"\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors\" Target=\"commentAuthors.xml\"/>";
m_pWriter->WriteString(strRels4);
}
if (bIsVbaProject)
{
std::wstring strRels4 = L"<Relationship Id=\"rId" + std::to_wstring(m_lNextRelsID++) +
L"\" Type=\"http://schemas.microsoft.com/office/2006/relationships/vbaProject\" Target=\"vbaProject.bin\"/>";
m_pWriter->WriteString(strRels4);
}
}
int CRelsGenerator::GetNextId()
{

View File

@ -178,8 +178,10 @@ namespace NSBinPptxRW
std::map<std::wstring, _imageManager2Info> m_mapImages;
_INT32 m_lIndexNextImage;
_INT32 m_lIndexCounter;
std::wstring m_strDstMedia;
std::wstring m_strDstEmbed;
std::wstring m_strDstFolder;
public:
int m_nDocumentType;
OOX::CContentTypes* m_pContentTypes;
@ -194,6 +196,9 @@ namespace NSBinPptxRW
void SetDstEmbed(const std::wstring& strDst);
std::wstring GetDstEmbed();
void SetDstFolder(const std::wstring& strDst);
std::wstring GetDstFolder();
int IsDisplayedImage(const std::wstring& strInput);
_imageManager2Info GenerateImage(const std::wstring& strInput, NSCommon::smart_ptr<OOX::File> & additionalFile, const std::wstring& oleData, std::wstring strBase64Image);
@ -419,8 +424,8 @@ namespace NSBinPptxRW
int WriteChart (int nChartNumber, _INT32 lDocType);
int WriteRels (const std::wstring& bsType, const std::wstring& bsTarget, const std::wstring& bsTargetMode);
int WriteHyperlink (const std::wstring& strLink, const bool& bIsActionInit);
void EndPresentationRels (const bool& bIsCommentsAuthors, const bool& bIsNotesMaster = false);
void EndPresentationRels (bool bIsCommentsAuthors = false, bool bIsNotesMaster = false, bool bIsVbaProject = false );
int GetNextId ();
void CloseRels ();

View File

@ -588,7 +588,7 @@ namespace NSPresentationEditor
#else
std::wstring ConvertPPTtoPPTX(CPPTShape* pPPTShape, const NSGuidesVML::CFormParam& pCoef, bool bIsNamespace = false)
{
if (pPPTShape->m_eType == PPTShapes::sptCRect)
if (pPPTShape->m_eType == PPTShapes::sptCRect || pPPTShape->m_eType == PPTShapes::sptCFrame)
{
if (bIsNamespace)
{
@ -604,7 +604,14 @@ namespace NSPresentationEditor
}
return _T("<a:prstGeom prst=\"line\"><a:avLst/></a:prstGeom>");
}
else if (pPPTShape->m_eType == PPTShapes::sptCEllipse)
{
if (bIsNamespace)
{
return _T("<a:prstGeom xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" prst=\"line\"><a:avLst/></a:prstGeom>");
}
return _T("<a:prstGeom prst=\"ellipse\"><a:avLst/></a:prstGeom>");
}
std::wstring strXmlPPTX = bIsNamespace ? _T("<a:custGeom xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">") : _T("<a:custGeom>");
CFormulaConverter pFormulaConverter;

View File

@ -31,7 +31,7 @@
*/
#pragma once
#include "Path.h"
#include "../../../Common/DocxFormat/Source/Common/SimpleTypes_Base.h"
#include "../../../../../Common/DocxFormat/Source/Common/SimpleTypes_Base.h"
namespace NSPresentationEditor
{

View File

@ -2122,6 +2122,8 @@ namespace NSGuidesVML
for (size_t nIndex = 0; nIndex < oArray.size(); ++nIndex)
{
if (oPath.m_arParts.size() <= nIndex)
break;
const CPartPath& oPart = oPath.m_arParts[nIndex];
m_lWidth = oPart.width;
m_lHeight = oPart.height;

View File

@ -100,7 +100,9 @@ namespace NSBinPptxRW
m_oImageManager.Clear();
OOX::CPath pathMedia = pathPPT / _T("media");
m_oImageManager.SetDstFolder(pathPPT.GetPath());
OOX::CPath pathMedia = pathPPT / _T("media");
NSDirectory::CreateDirectory(pathMedia.GetPath());
m_oImageManager.SetDstMedia(pathMedia.GetPath());
@ -809,7 +811,8 @@ namespace NSBinPptxRW
m_oPresentation.notesMasterIdLst[0].rid = (size_t)nCurrentRels;
++nCurrentRels;
}
m_oReader.m_pRels->EndPresentationRels(m_oPresentation.commentAuthors.is_init(), bNotesMasterPresent);
m_oReader.m_pRels->EndPresentationRels(m_oPresentation.commentAuthors.is_init(), bNotesMasterPresent, m_oPresentation.m_pVbaProject.is_init());
m_oReader.m_pRels->CloseRels();
oXmlWriter.ClearNoAttack();
@ -840,7 +843,16 @@ namespace NSBinPptxRW
// content types
OOX::CContentTypes *pContentTypes = m_oImageManager.m_pContentTypes;
pContentTypes->Registration(L"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml", L"/ppt", L"presentation.xml");
pContentTypes->Registration(m_oPresentation.type().OverrideType(),
m_oPresentation.type().DefaultDirectory(),
m_oPresentation.type().DefaultFileName());
if (m_oPresentation.m_pVbaProject.IsInit())
{
pContentTypes->Registration(m_oPresentation.m_pVbaProject->type().OverrideType(),
m_oPresentation.type().DefaultDirectory() / m_oPresentation.m_pVbaProject->type().DefaultDirectory(),
m_oPresentation.m_pVbaProject->type().DefaultFileName());
}
pContentTypes->Registration(L"application/vnd.openxmlformats-officedocument.presentationml.presProps+xml", L"/ppt", L"presProps.xml");
pContentTypes->Registration(L"application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml", L"/ppt", L"viewProps.xml");
pContentTypes->Registration(L"application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml", L"/ppt", L"tableStyles.xml");

View File

@ -31,10 +31,7 @@
*/
#include "FileFactory.h"
#include "../../Common/DocxFormat/Source/DocxFormat/File.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Rels.h"
#include "../../Common/DocxFormat/Source/DocxFormat/FileTypes.h"
#include "FileMap.h"
#include "FileTypes.h"
#include "App.h"
@ -54,6 +51,8 @@
#include "NotesMaster.h"
#include "LegacyDiagramText.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Rels.h"
#include "../../Common/DocxFormat/Source/DocxFormat/FileTypes.h"
#include "../../Common/DocxFormat/Source/XlsxFormat/Chart/Chart.h"
#include "../../Common/DocxFormat/Source/DocxFormat/VmlDrawing.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Diagram/DiagramData.h"
@ -62,13 +61,14 @@
#include "../../Common/DocxFormat/Source/DocxFormat/Media/Audio.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Media/Video.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Media/OleObject.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Media/ActiveX.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Media/VbaProject.h"
#include "../../Common/DocxFormat/Source/DocxFormat/External/HyperLink.h"
#include "../../Common/DocxFormat/Source/DocxFormat/External/ExternalImage.h"
#include "../../Common/DocxFormat/Source/DocxFormat/External/ExternalAudio.h"
#include "../../Common/DocxFormat/Source/DocxFormat/External/ExternalVideo.h"
#include "../../Common/DocxFormat/Source/DocxFormat/UnknowTypeFile.h"
#include "FileMap.h"
//
namespace PPTX
@ -84,7 +84,8 @@ namespace PPTX
return smart_ptr<OOX::File>(new PPTX::App(filename, map));
else if (relation.Type() == OOX::FileTypes::Core)
return smart_ptr<OOX::File>(new PPTX::Core(filename, map));
else if (relation.Type() == OOX::Presentation::FileTypes::Presentation)
else if (relation.Type() == OOX::Presentation::FileTypes::Presentation ||
relation.Type() == OOX::Presentation::FileTypes::PresentationMacro)
return smart_ptr<OOX::File>(new PPTX::Presentation(filename, map));
else if (relation.Type() == OOX::FileTypes::Theme)
return smart_ptr<OOX::File>(new PPTX::Theme(filename, map));
@ -141,6 +142,8 @@ namespace PPTX
return smart_ptr<OOX::File>(new OOX::OleObject(filename));
else if (relation.Type() == OOX::FileTypes::MicrosoftOfficeUnknown) //ms package
return smart_ptr<OOX::File>(new OOX::OleObject( filename, true ));
else if (relation.Type() == OOX::FileTypes::VbaProject)
return smart_ptr<OOX::File>(new OOX::VbaProject( filename, filename ));
return smart_ptr<OOX::File>(new OOX::UnknowTypeFile());
}

View File

@ -30,6 +30,10 @@
*
*/
#pragma once
#ifndef PPTX_FILEFACTORY_PPTX_INCLUDE_H_
#define PPTX_FILEFACTORY_PPTX_INCLUDE_H_
#include "../../Common/DocxFormat/Source/DocxFormat/File.h"
namespace OOX {namespace Rels {class CRelationShip;}}
@ -44,3 +48,4 @@ namespace PPTX
static const smart_ptr<OOX::File> CreateFilePPTX(const OOX::CPath& path, OOX::Rels::CRelationShip& relation, FileMap& map);
};
} // namespace PPTX
#endif // PPTX_FILEFACTORY_PPTX_INCLUDE_H_

View File

@ -44,6 +44,9 @@ namespace Presentation
const FileType Presentation (L"ppt", L"presentation.xml",
_T("application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml"),
_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"));
const FileType PresentationMacro(L"ppt", L"presentation.xml",
_T("application/vnd.ms-powerpoint.presentation.macroEnabled.main+xml"),
_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"));
const FileType Slide (L"slides", L"slide.xml",
_T("application/vnd.openxmlformats-officedocument.presentationml.slide+xml"),
_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide"));

View File

@ -75,6 +75,12 @@ namespace PPTX
if (_presentation.is_init())
{
_presentation->commentAuthors = _presentation->Get(OOX::Presentation::FileTypes::CommentAuthors).smart_dynamic_cast<PPTX::Authors>();
if (_presentation->IsExist(OOX::FileTypes::VbaProject))
{
_presentation->m_bMacroEnabled = true;
_presentation->m_pVbaProject = _presentation->Get(OOX::FileTypes::VbaProject).smart_dynamic_cast<OOX::VbaProject>();
}
}
for (std::map<std::wstring, smart_ptr<OOX::File>>::const_iterator pPair = map.m_map.begin(); pPair != map.m_map.end(); ++pPair)

View File

@ -32,7 +32,6 @@
#pragma once
#include "../../../../Common/DocxFormat/Source/DocxFormat/File.h"
#include "../../../../Common/DocxFormat/Source/SystemUtility/File.h"
#include "../../../../Common/DocxFormat/Source/Base/Types_32.h"
#include "Logic/TextParagraphPr.h"

View File

@ -121,7 +121,7 @@ namespace PPTX
oAttr.Write(_T("noSelect"), noSelect);
std::wstring namespaceLocks = L"a";
if (m_namespace == L"wp") namespaceLocks = L"wp";
//if (m_namespace == L"wp") namespaceLocks = L"wp";
return XmlUtils::CreateNode(m_namespace + L":cNvGraphicFramePr", oAttr.m_strValue.empty() ? L"" : XmlUtils::CreateNode(namespaceLocks + L":graphicFrameLocks", oAttr));
}
@ -134,7 +134,7 @@ namespace PPTX
if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_XLSX) namespace_ = L"xdr";
if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX)
{
namespaceLock_ = L"wp";
namespaceLock_ = L"a";
namespace_ = L"wp";
}

View File

@ -44,6 +44,7 @@
#include "../../../Common/DocxFormat/Source/DocxFormat/Media/Audio.h"
#include "../../../Common/DocxFormat/Source/DocxFormat/Media/Video.h"
#include "../../../Common/DocxFormat/Source/DocxFormat/Media/OleObject.h"
#include "../../../Common/DocxFormat/Source/DocxFormat/Media/ActiveX.h"
#include "../../../Common/DocxFormat/Source/MathEquation/MathEquation.h"
@ -159,31 +160,38 @@ namespace PPTX
COfficeFileFormatChecker office_checker;
office_checker.isOOXFormatFile(oox_file.GetPath());
//if ( std::wstring::npos != sProgID.find(L"Word.Document"))
if (office_checker.nFileType == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX)
if (office_checker.nFileType == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX ||
office_checker.nFileType == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCM )
{
pWriter->StartRecord(1);
pWriter->WriteBYTE(1);
pWriter->EndRecord();
DocWrapper::FontProcessor fp;
NSBinPptxRW::CDrawingConverter oDrawingConverter;
DocWrapper::FontProcessor oFontProcessor;
NSBinPptxRW::CDrawingConverter oDrawingConverter;
BinDocxRW::CDocxSerializer oDocxSerializer;
NSBinPptxRW::CBinaryFileWriter* old_writer = oDrawingConverter.m_pBinaryWriter;
NSCommon::smart_ptr<OOX::IFileContainer> old_rels = *pWriter->m_pCurrentContainer;
BinDocxRW::CDocxSerializer* old_serial = pWriter->m_pMainDocument;
oDrawingConverter.m_pBinaryWriter = pWriter;
oDocxSerializer.m_pParamsWriter = new BinDocxRW::ParamsWriter(pWriter, &oFontProcessor, &oDrawingConverter, NULL);
BinDocxRW::ParamsWriter oParamsWriter(pWriter, &fp, &oDrawingConverter, NULL);
BinDocxRW::BinaryFileWriter oBinaryFileWriter(oParamsWriter);
pWriter->m_pMainDocument = &oDocxSerializer;
BinDocxRW::BinaryFileWriter oBinaryFileWriter(*oDocxSerializer.m_pParamsWriter);
pWriter->StartRecord(2);
oBinaryFileWriter.intoBindoc(oox_unpacked.GetPath());
pWriter->EndRecord();
oDrawingConverter.m_pBinaryWriter = old_writer;
*pWriter->m_pCurrentContainer = old_rels;
*pWriter->m_pCurrentContainer = old_rels;
pWriter->m_pMainDocument = old_serial;
}
else if (office_checker.nFileType == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX)
else if (office_checker.nFileType == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX ||
office_checker.nFileType == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSM)
//if ( std::wstring::npos != sProgID.find(L"Excel.Sheet")) //"ET.Xlsx.6" !!!
{
pWriter->StartRecord(1);
@ -340,8 +348,11 @@ namespace PPTX
pReader->m_pRels = new NSBinPptxRW::CRelsGenerator();
oDrawingConverter.SetMainDocument(&oDocxSerializer);
oDrawingConverter.SetSourceFileDir(pReader->m_strFolder, 1);
oDrawingConverter.SetMediaDstPath(sMediaPath);
oDrawingConverter.SetDstPath(sDstEmbeddedTemp + FILE_SEPARATOR_STR + L"word");
oDrawingConverter.SetSrcPath(pReader->m_strFolder, 1);
oDrawingConverter.SetMediaDstPath(sMediaPath);
oDrawingConverter.SetEmbedDstPath(sEmbedPath);
std::wstring sDocxFilename = L"Microsoft_Word_Document" + std::to_wstring( id ) + L".docx";
@ -367,7 +378,7 @@ namespace PPTX
if (pApp)
{
pApp->SetApplication(_T("OnlyOffice"));
pApp->SetAppVersion(_T("4.3000"));
pApp->SetAppVersion(_T("5.0"));
pApp->SetDocSecurity(0);
pApp->SetScaleCrop(false);
pApp->SetLinksUpToDate(false);
@ -428,8 +439,10 @@ namespace PPTX
oDrawingConverter.m_pReader = pReader;
pReader->m_pRels = new NSBinPptxRW::CRelsGenerator();
oDrawingConverter.SetSourceFileDir(pReader->m_strFolder, 2);
oDrawingConverter.SetMediaDstPath(sMediaPath);
oDrawingConverter.SetDstPath(sDstEmbeddedTemp + FILE_SEPARATOR_STR + L"xl");
oDrawingConverter.SetSrcPath(pReader->m_strFolder, 2);
oDrawingConverter.SetMediaDstPath(sMediaPath);
oDrawingConverter.SetEmbedDstPath(sEmbedPath);
std::wstring sXlsxFilename = L"Microsoft_Excel_Worksheet" + std::to_wstring( id ) + L".xlsx";
@ -894,23 +907,28 @@ namespace PPTX
}
if (!blipFill.blip->mediaRid.empty())
{
PPTX::Logic::Ext ext;
PPTX::Logic::Ext ext;
ext.link = OOX::RId(blipFill.blip->mediaRid);
nvPicPr.nvPr.extLst.push_back(ext);
int nRId = -1;
std::wstring strMediaRelsPath;
if (pReader->m_nDocumentType == XMLWRITER_DOC_TYPE_DOCX) strMediaRelsPath = L"media/";
else strMediaRelsPath = L"../media/";
smart_ptr<OOX::Media> mediaFile = blipFill.additionalFile.smart_dynamic_cast<OOX::Media>();
strMediaRelsPath += mediaFile->filename().GetFilename();
int nRId = -1;
if (blipFill.additionalFile.is<OOX::Audio>())
{
nvPicPr.nvPr.media.Media = new PPTX::Logic::MediaFile(L"audioFile");
nRId = pReader->m_pRels->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/audio",
L"NULL", L"External");
nRId = pReader->m_pRels->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/audio", strMediaRelsPath, L"");
}
if (blipFill.additionalFile.is<OOX::Video>())
{
nvPicPr.nvPr.media.Media = new PPTX::Logic::MediaFile(L"videoFile");
nRId = pReader->m_pRels->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video",
L"NULL", L"External");
nRId = pReader->m_pRels->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video", strMediaRelsPath, L"");
}
if (nvPicPr.nvPr.media.Media.IsInit() && nRId > 0)

View File

@ -42,6 +42,8 @@
#include "../../../Common/DocxFormat/Source/DocxFormat/Media/Audio.h"
#include "../../../Common/DocxFormat/Source/DocxFormat/Media/Video.h"
#include "../../../Common/DocxFormat/Source/DocxFormat/Media/ActiveX.h"
namespace PPTX
{
namespace Logic

View File

@ -50,6 +50,8 @@
#include "Logic/ExtP.h"
#include "Theme/ClrScheme.h"
#include "../../Common/DocxFormat/Source/DocxFormat/Media/VbaProject.h"
namespace PPTX
{
class Presentation : public WrapperFile, public PPTX::FileContainer
@ -57,16 +59,16 @@ namespace PPTX
public:
Presentation()
{
m_bMacroEnabled = false;
}
Presentation(const OOX::CPath& filename, FileMap& map)
{
m_bMacroEnabled = false;
read(filename, map);
}
virtual ~Presentation()
{
}
public:
virtual void read(const OOX::CPath& filename, FileMap& map)
{
//FileContainer::read(filename, map);
@ -182,6 +184,7 @@ namespace PPTX
}
}
}
//smartTags (Smart Tags)
Normalize();
}
@ -222,6 +225,15 @@ namespace PPTX
pWriter->WriteRecord2(6, commentAuthors);
pWriter->WriteRecord2(7, sectionLst);
if (m_pVbaProject.IsInit())
{
pWriter->StartRecord(8);
{
m_pVbaProject->toPPTY(pWriter);
}
pWriter->EndRecord();
}
pWriter->EndRecord();
}
virtual void fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader)
@ -318,22 +330,28 @@ namespace PPTX
default:
return;
}
}
break;
}
}
}break;
case 6:
{
commentAuthors = new PPTX::Authors();
commentAuthors->fromPPTY(pReader);
break;
}
commentAuthors->fromPPTY(pReader);
}break;
case 7:
{
sectionLst = new nsPresentation::SectionLst();
sectionLst->fromPPTY(pReader);
break;
}
sectionLst->fromPPTY(pReader);
}break;
case 8:
{
m_pVbaProject = new OOX::VbaProject();
m_pVbaProject->fromPPTY(pReader);
smart_ptr<OOX::File> file = m_pVbaProject.smart_dynamic_cast<OOX::File>();
FileContainer::Add(file);
m_bMacroEnabled = true;
}break;
default:
{
pReader->Seek(_end_pos);
@ -397,10 +415,10 @@ namespace PPTX
pWriter->EndNode(L"p:presentation");
}
public:
virtual const OOX::FileType type() const
{
return OOX::Presentation::FileTypes::Presentation;
if (m_bMacroEnabled) return OOX::Presentation::FileTypes::PresentationMacro;
else return OOX::Presentation::FileTypes::Presentation;
}
virtual const OOX::CPath DefaultDirectory() const
{
@ -411,7 +429,6 @@ namespace PPTX
return type().DefaultFileName();
}
public:
//Childs
//custDataLst (Customer Data List)
//property<std::list<Presentation::CustShow> > custShowLst (List of Custom Shows)
@ -446,11 +463,14 @@ namespace PPTX
smart_ptr<PPTX::Authors> commentAuthors;
private:
Logic::ClrMap m_clrMap;
nsTheme::ClrScheme m_clrScheme;
Logic::ClrMap m_clrMap;
nsTheme::ClrScheme m_clrScheme;
public:
void SetClrMap(Logic::ClrMap map) {m_clrMap = map;};
void SetClrScheme(nsTheme::ClrScheme scheme) {m_clrScheme = scheme;};
bool m_bMacroEnabled;
smart_ptr<OOX::VbaProject> m_pVbaProject;
void SetClrMap(Logic::ClrMap map) {m_clrMap = map;}
void SetClrScheme(nsTheme::ClrScheme scheme) {m_clrScheme = scheme;}
DWORD GetRGBAFromMap(const std::wstring& str)const
{

View File

@ -363,7 +363,7 @@ namespace PPTX
}
if (IsExist(OOX::FileTypes::VmlDrawing))
{
Vml = FileContainer::Get(OOX::FileTypes::VmlDrawing).smart_dynamic_cast<OOX::CVmlDrawing>();//boost::shared_dynamic_cast<PPTX::VmlDrawing, PPTX::File>(FileContainer::get(OOX::Presentation::FileTypes::VmlDrawing));
Vml = FileContainer::Get(OOX::FileTypes::VmlDrawing).smart_dynamic_cast<OOX::CVmlDrawing>();
}
}
}

View File

@ -1922,7 +1922,7 @@
17063B5B1AC5708E0056A3F1 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0730;
LastUpgradeCheck = 0830;
ORGANIZATIONNAME = "Ascensio System SIA";
};
buildConfigurationList = 17063B5E1AC5708E0056A3F1 /* Build configuration list for PBXProject "PPTXFormatLib" */;
@ -2009,8 +2009,10 @@
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
@ -2018,6 +2020,7 @@
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
@ -2051,8 +2054,10 @@
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
@ -2060,6 +2065,7 @@
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;

View File

@ -44,7 +44,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\Common\ASCDocxFormat\Source\Utility;..\..\Common\ASCDocxFormat\Source\XML;..\..\Common\ASCDocxFormat\Source\;.\;..\..\Common\DocxFormat\Source\XML\libxml2\XML\include;&quot;../../DesktopEditor/freetype-2.5.2/include&quot;"
AdditionalIncludeDirectories="&quot;../../DesktopEditor/freetype-2.5.2/include&quot;;../../DesktopEditor/xml/build/vs2005"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_USE_MATH_DEFINES;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED;USE_LITE_READER;_USE_XMLLITE_READER_;PPTX_DEF;PPT_DEF;ENABLE_PPT_TO_PPTX_CONVERT;AVS_USE_CONVERT_PPTX_TOCUSTOM_VML;DONT_WRITE_EMBEDDED_FONTS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@ -112,7 +112,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\Common\DocxFormat\Source\XML\libxml2\XML\include;&quot;..\..\DesktopEditor\freetype-2.5.2\include&quot;"
AdditionalIncludeDirectories="&quot;..\..\DesktopEditor\freetype-2.5.2\include&quot;"
PreprocessorDefinitions="_DEBUG;_LIB;_USE_MATH_DEFINES;NODOCX;PPTX_DEF;PPT_DEF;ENABLE_PPT_TO_PPTX_CONVERT;_AVS_PPT_SHAPE_INCLUDE_;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED;USE_LITE_READER;BUILD_CONFIG_FULL_VERSION;DONT_WRITE_EMBEDDED_FONTS"
MinimalRebuild="true"
BasicRuntimeChecks="3"

View File

@ -44,13 +44,13 @@ int OOXGraphicReader::Parse( ReaderParameter oParam , RtfShapePtr & pOutput)
{
if (m_ooxGraphic->element.getType() == OOX::et_p_ShapeTree)
{
OOXShapeReader shapeReader(m_ooxGraphic->element.GetElem().operator->());
return (shapeReader.Parse(oParam, pOutput) ? 1 : 0);
OOXShapeGroupReader groupReader(dynamic_cast<PPTX::Logic::SpTree*>(m_ooxGraphic->element.GetElem().operator->()));
return (groupReader.Parse(oParam, pOutput) ? 1 : 0);
}
else
{
OOXShapeGroupReader groupReader(dynamic_cast<PPTX::Logic::SpTree*>(m_ooxGraphic->element.GetElem().operator->()));
return (groupReader.Parse(oParam, pOutput) ? 1 : 0);
OOXShapeReader shapeReader(m_ooxGraphic->element.GetElem().operator->());
return (shapeReader.Parse(oParam, pOutput) ? 1 : 0);
}
}
if (m_ooxGraphic->olePic.IsInit())

View File

@ -33,9 +33,9 @@
#include "OOXMathReader.h"
#include "OOXParagraphReader.h"
#include "../../../Common/DocxFormat/Source/DocxFormat/Math/OMath.h"
#include "../../../Common/DocxFormat/Source/DocxFormat/Math/oMathContent.h"
#include "../../../Common/DocxFormat/Source/DocxFormat/Math/oMathBottomNodes.h"
#include "../../../../Common/DocxFormat/Source/DocxFormat/Math/OMath.h"
#include "../../../../Common/DocxFormat/Source/DocxFormat/Math/oMathContent.h"
#include "../../../../Common/DocxFormat/Source/DocxFormat/Math/oMathBottomNodes.h"
bool OOXMathReader::ParseElement(ReaderParameter oParam , OOX::WritingElement * ooxMath, RtfMathPtr & rtfMath)
{

View File

@ -35,7 +35,7 @@
#include "../RtfMath.h"
#include "../../../Common/DocxFormat/Source/DocxFormat/WritingElement.h"
#include "../../../../Common/DocxFormat/Source/DocxFormat/WritingElement.h"
class OOXMathReader
{

View File

@ -1003,7 +1003,7 @@ bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagrap
oNewProperty = oParam.oRtf->m_oDefaultCharProp;
//применяем внешний стиль
//oNewProperty.Merge( oOutputParagraph.m_oProperty.m_oCharProperty );
oNewProperty.Merge( oOutputParagraph.m_oProperty.m_oCharProperty );
oNewProperty.Merge( m_oCharProperty );
if( NULL != poStyle && TYPE_RTF_PROPERTY_STYLE_CHAR == poStyle->GetType() )

View File

@ -49,6 +49,15 @@ public:
pOutput->m_eAnchorTypeShape = RtfShape::st_anchor;
if ( m_ooxAnchor->m_oDocPr.IsInit() )
{
pOutput->m_nID = m_ooxAnchor->m_oDocPr->id + 1025;
pOutput->m_sName = m_ooxAnchor->m_oDocPr->name;
if (m_ooxAnchor->m_oDocPr->descr.IsInit())
pOutput->m_sDescription = m_ooxAnchor->m_oDocPr->descr.get();
}
pOutput->m_bAllowOverlap = m_ooxAnchor->m_oAllowOverlap.IsInit() ? m_ooxAnchor->m_oAllowOverlap->ToBool() : false;
pOutput->m_nZOrderRelative = m_ooxAnchor->m_oBehindDoc.IsInit() ? m_ooxAnchor->m_oBehindDoc->ToBool() : false;
pOutput->m_bHidden = m_ooxAnchor->m_oHidden.IsInit() ? m_ooxAnchor->m_oHidden->ToBool() : false;

View File

@ -77,6 +77,15 @@ public:
}
}
}
if ( m_ooxInline->m_oDocPr.IsInit() )
{
pOutput->m_nID = m_ooxInline->m_oDocPr->id + 1025;
pOutput->m_sName = m_ooxInline->m_oDocPr->name;
if (m_ooxInline->m_oDocPr->descr.IsInit())
pOutput->m_sDescription = m_ooxInline->m_oDocPr->descr.get();
}
OOXGraphicReader oGraphicReader(&m_ooxInline->m_oGraphic);

View File

@ -32,12 +32,12 @@
#include "OOXShapeReader.h"
#include "OOXTextItemReader.h"
#include "../../../ASCOfficePPTXFile/Editor/Drawing/Shapes/Shape.h"
#include "../../../ASCOfficePPTXFile/PPTXFormat/Logic/SpTree.h"
#include "../../../ASCOfficePPTXFile/PPTXFormat/Logic/Shape.h"
#include "../../../ASCOfficePPTXFile/PPTXFormat/Logic/Colors/SchemeClr.h"
#include "../../../../ASCOfficePPTXFile/Editor/Drawing/Shapes/Shape.h"
#include "../../../../ASCOfficePPTXFile/PPTXFormat/Logic/SpTree.h"
#include "../../../../ASCOfficePPTXFile/PPTXFormat/Logic/Shape.h"
#include "../../../../ASCOfficePPTXFile/PPTXFormat/Logic/Colors/SchemeClr.h"
#include "../../../ASCOfficeOdfFile/src/odf/svg_parser.h"
#include "../../../../ASCOfficeOdfFile/src/odf/svg_parser.h"
#include <boost/algorithm/string.hpp>
#ifndef RGB
@ -749,32 +749,44 @@ bool OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L
if( PROP_DEF != nCropedWidthGoal )
{
//делаем crop
double nCropLeft = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->l.get()) / 100. ;
//pOutput->m_oPicture->m_nCropL = nCropLeft * pOutput->m_oPicture->m_nWidthGoal * pOutput->m_oPicture->m_nScaleX / 100;
pOutput->m_oPicture->m_nCropL = (int)(nCropLeft * pOutput->m_oPicture->m_nWidthGoal);
pOutput->m_nCropFromLeft = (int)(nCropLeft* 65536);
nCropedWidthGoal -= pOutput->m_oPicture->m_nCropL;
if (oox_bitmap_fill->srcRect->l.IsInit())
{
double nCropLeft = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->l.get()) / 100. ;
//pOutput->m_oPicture->m_nCropL = nCropLeft * pOutput->m_oPicture->m_nWidthGoal * pOutput->m_oPicture->m_nScaleX / 100;
pOutput->m_oPicture->m_nCropL = (int)(nCropLeft * pOutput->m_oPicture->m_nWidthGoal);
pOutput->m_nCropFromLeft = (int)(nCropLeft* 65536);
nCropedWidthGoal -= pOutput->m_oPicture->m_nCropL;
}
double nCropRight = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->r.get()) / 100. ;
//pOutput->m_oPicture->m_nCropR = nCropRight * pOutput->m_oPicture->m_nWidthGoal * pOutput->m_oPicture->m_nScaleX / 100;
pOutput->m_oPicture->m_nCropR = (int)(nCropRight * pOutput->m_oPicture->m_nWidthGoal);
pOutput->m_nCropFromRight = (int)(nCropRight * 65536);
nCropedWidthGoal -= pOutput->m_oPicture->m_nCropR;
if (oox_bitmap_fill->srcRect->r.IsInit())
{
double nCropRight = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->r.get()) / 100. ;
//pOutput->m_oPicture->m_nCropR = nCropRight * pOutput->m_oPicture->m_nWidthGoal * pOutput->m_oPicture->m_nScaleX / 100;
pOutput->m_oPicture->m_nCropR = (int)(nCropRight * pOutput->m_oPicture->m_nWidthGoal);
pOutput->m_nCropFromRight = (int)(nCropRight * 65536);
nCropedWidthGoal -= pOutput->m_oPicture->m_nCropR;
}
}
int nCropedHeightGoal = pOutput->m_oPicture->m_nHeightGoal;
if( PROP_DEF != nCropedHeightGoal )
{
double nCropTop = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->t.get()) / 100. ;
//pOutput->m_oPicture->m_nCropT = nCropTop * pOutput->m_oPicture->m_nHeightGoal * pOutput->m_oPicture->m_dScaleY / 100;
pOutput->m_oPicture->m_nCropT = (int)(nCropTop * pOutput->m_oPicture->m_nHeightGoal);
pOutput->m_nCropFromTop = (int)(nCropTop * 65536);
nCropedHeightGoal -= pOutput->m_oPicture->m_nCropT;
if (oox_bitmap_fill->srcRect->t.IsInit())
{
double nCropTop = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->t.get()) / 100. ;
//pOutput->m_oPicture->m_nCropT = nCropTop * pOutput->m_oPicture->m_nHeightGoal * pOutput->m_oPicture->m_dScaleY / 100;
pOutput->m_oPicture->m_nCropT = (int)(nCropTop * pOutput->m_oPicture->m_nHeightGoal);
pOutput->m_nCropFromTop = (int)(nCropTop * 65536);
nCropedHeightGoal -= pOutput->m_oPicture->m_nCropT;
}
double nCropBottom = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->b.get()) / 100. ;
//pOutput->m_oPicture->m_nCropT = nCropTop * pOutput->m_oPicture->m_nHeightGoal * pOutput->m_oPicture->m_dScaleY / 100;
pOutput->m_oPicture->m_nCropB = (int)(nCropBottom * pOutput->m_oPicture->m_nHeightGoal);
pOutput->m_nCropFromBottom = (int)(nCropBottom * 65536);
nCropedHeightGoal -= pOutput->m_oPicture->m_nCropB;
if (oox_bitmap_fill->srcRect->b.IsInit())
{
double nCropBottom = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->b.get()) / 100. ;
//pOutput->m_oPicture->m_nCropT = nCropTop * pOutput->m_oPicture->m_nHeightGoal * pOutput->m_oPicture->m_dScaleY / 100;
pOutput->m_oPicture->m_nCropB = (int)(nCropBottom * pOutput->m_oPicture->m_nHeightGoal);
pOutput->m_nCropFromBottom = (int)(nCropBottom * 65536);
nCropedHeightGoal -= pOutput->m_oPicture->m_nCropB;
}
}
//устанавливаем scale
if( PROP_DEF != pOutput->m_nLeft && PROP_DEF != pOutput->m_nRight && PROP_DEF != nCropedWidthGoal && 0 != nCropedWidthGoal )
@ -916,7 +928,7 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L
}
if (oox_line_prop->w.IsInit())
{
pOutput->m_nLineWidth = oox_line_prop->w.get() * 12700;
pOutput->m_nLineWidth = oox_line_prop->w.get();
}
if (oox_line_prop->headEnd.IsInit())
{
@ -1006,22 +1018,50 @@ void OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::
// //Parse(theme->m_oThemeElements.m_oFmtScheme.m_oEffectStyleLst.m_arrEffectStyle[fmt_index].m_oSp3D.GetPointer(), &color);
//}
}
//-----------------------------------------------------------------------------------------------------------------------------
bool OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput)
void OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::Xfrm *xfrm)
{
if (!m_vmlElement && !m_arrElement && !m_ooxShape) return false;
if (!xfrm) return;
if (m_vmlElement || m_arrElement) return ParseVml(oParam , pOutput);
double rot = xfrm->rot.IsInit() ? xfrm->rot.get() / 60000. : 0;
if (rot > 0.01)
pOutput->m_nRotation = rot * 65535;
if (xfrm->flipH.get_value_or(false)) pOutput->m_bFlipH = 1;
if (xfrm->flipV.get_value_or(false)) pOutput->m_bFlipV = 1;
if (pOutput->m_bInGroup)
{
if (xfrm->offX.IsInit() && xfrm->offY.IsInit())
{
pOutput->m_nRelLeft = (int)xfrm->offX.get();
pOutput->m_nRelTop = (int)xfrm->offY.get();
}
else
{
pOutput->m_nRelLeft = 0;
pOutput->m_nRelTop = 0;
}
if (xfrm->extX.IsInit() && xfrm->extY.IsInit())
{
pOutput->m_nRelRight = (int)pOutput->m_nRelLeft + xfrm->offX.get();
pOutput->m_nRelBottom = (int)pOutput->m_nRelTop + xfrm->offY.get();
}
else
{
pOutput->m_nRelRight = 0;
pOutput->m_nRelBottom = 0;
}
pOutput->m_nRelRotation = pOutput->m_nRotation;
}
}
bool OOXShapeReader::ParseShape( ReaderParameter oParam, RtfShapePtr& pOutput)
{
PPTX::Logic::Shape * ooxShape = dynamic_cast<PPTX::Logic::Shape*> (m_ooxShape);
//PPTX::Logic::CxnSp* cxnShape = dynamic_cast<PPTX::Logic::CxnSp*> (m_ooxShape);
//PPTX::Logic::Pic * ooxPic = dynamic_cast<PPTX::Logic::Pic*> (m_ooxShape);
if (ooxShape == NULL) return false;
if (!ooxShape) return false;
if (ooxShape->oTextBoxBodyPr.IsInit())
{
if (ooxShape->oTextBoxBodyPr->fromWordArt.get_value_or(false))
@ -1051,7 +1091,9 @@ bool OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput)
if (ooxShape->spPr.Geometry.getType() == OOX::et_a_prstGeom)
{
PPTX::Logic::PrstGeom& geometry = ooxShape->spPr.Geometry.as<PPTX::Logic::PrstGeom>();
SimpleTypes::EShapeType type = (SimpleTypes::EShapeType)geometry.prst.GetBYTECode();
SimpleTypes::CShapeType<> prst_type(geometry.prst.get());
SimpleTypes::EShapeType type = prst_type.GetValue();
pOutput->m_nShapeType = OOX::PrstGeom2VmlShapeType(type);
if (pOutput->m_nShapeType == SimpleTypes::Vml::sptNotPrimitive)
@ -1087,40 +1129,9 @@ bool OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput)
pOutput->m_nGeoRight = 100000;
pOutput->m_nGeoBottom = 100000;
}
if (ooxShape->spPr.xfrm.IsInit())
{
double rot = ooxShape->spPr.xfrm->rot.get() / 60000.;
if (rot > 0.01)
pOutput->m_nRotation = rot * 65535;
if (ooxShape->spPr.xfrm->flipH.get_value_or(false)) pOutput->m_bFlipH = 1;
if (ooxShape->spPr.xfrm->flipV.get_value_or(false)) pOutput->m_bFlipV = 1;
Parse(oParam, pOutput, ooxShape->spPr.xfrm.GetPointer());
if (pOutput->m_bInGroup)
{
if (ooxShape->spPr.xfrm->offX.IsInit() && ooxShape->spPr.xfrm->offY.IsInit())
{
pOutput->m_nRelLeft = (int)ooxShape->spPr.xfrm->offX.get();
pOutput->m_nRelTop = (int)ooxShape->spPr.xfrm->offY.get();
}
else
{
pOutput->m_nRelLeft = 0;
pOutput->m_nRelTop = 0;
}
if (ooxShape->spPr.xfrm->extX.IsInit() && ooxShape->spPr.xfrm->extY.IsInit())
{
pOutput->m_nRelRight = (int)pOutput->m_nRelLeft + ooxShape->spPr.xfrm->offX.get();
pOutput->m_nRelBottom = (int)pOutput->m_nRelTop + ooxShape->spPr.xfrm->offY.get();
}
else
{
pOutput->m_nRelRight = 0;
pOutput->m_nRelBottom = 0;
}
pOutput->m_nRelRotation = pOutput->m_nRotation;
}
}
PPTX::Logic::ShapeStyle* oox_sp_style = ooxShape->style.GetPointer();
bool use_fill_from_style = false;
@ -1132,8 +1143,8 @@ bool OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput)
case PPTX::Logic::UniFill::gradFill:
case PPTX::Logic::UniFill::pattFill:
case PPTX::Logic::UniFill::solidFill:
Parse(oParam, pOutput, &ooxShape->spPr.Fill);
Parse(oParam, pOutput, &ooxShape->spPr.Fill);
break;
case PPTX::Logic::UniFill::noFill:
pOutput->m_bFilled = false; break;
default:
@ -1185,7 +1196,56 @@ bool OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput)
}
}
return true;
return true;
}
bool OOXShapeReader::ParsePic( ReaderParameter oParam, RtfShapePtr& pOutput)
{
PPTX::Logic::Pic * ooxPic = dynamic_cast<PPTX::Logic::Pic*>(m_ooxShape);
if (!ooxPic) return false;
std::wstring strXml;
pOutput->m_nShapeType = SimpleTypes::Vml::sptPictureFrame;
Parse(oParam, pOutput, ooxPic->spPr.xfrm.GetPointer());
PPTX::Logic::ShapeStyle* oox_sp_style = ooxPic->style.GetPointer();
pOutput->m_bFilled = true;
Parse(oParam, pOutput, &ooxPic->blipFill);
if ((oox_sp_style) && (oox_sp_style->lnRef.idx.IsInit()))
{
Parse(oParam, pOutput, &oox_sp_style->lnRef, 2);
}
if (ooxPic->spPr.ln.IsInit())
{
Parse(oParam, pOutput, ooxPic->spPr.ln.GetPointer());
}
return true;
}
bool OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput)
{
if (!m_vmlElement && !m_arrElement && !m_ooxShape) return false;
if (OOX::CHdrFtr *pHdrFtr = dynamic_cast<OOX::CHdrFtr *>(oParam.oReader->m_currentContainer))
pOutput->m_nHeader = 1;//shape in header/footer
else
pOutput->m_nHeader = 0;
if (m_vmlElement || m_arrElement) return ParseVml(oParam , pOutput);
PPTX::Logic::Shape * ooxShape = dynamic_cast<PPTX::Logic::Shape*> (m_ooxShape);
// PPTX::Logic::CxnSp * cxnShape = dynamic_cast<PPTX::Logic::CxnSp*> (m_ooxShape);
PPTX::Logic::Pic * ooxPic = dynamic_cast<PPTX::Logic::Pic*> (m_ooxShape);
if (ooxShape) return ParseShape(oParam, pOutput);
if (ooxPic) return ParsePic(oParam, pOutput);
//if (cxnShape) return ParseConnector(oParam, pOutput);
return false;
}
void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::UniFill *oox_fill, std::wstring *change_sheme_color)
{
@ -1401,12 +1461,6 @@ bool OOXShapeReader::ParseVml( ReaderParameter oParam , RtfShapePtr& pOutput)
}
//---------------------
if (OOX::CHdrFtr *pHdrFtr = dynamic_cast<OOX::CHdrFtr *>(oParam.oReader->m_currentContainer))
{
pOutput->m_nHeader = 1;//shape in header/footer
}
return ParseVmlChild(oParam, pOutput);
}
bool OOXShapeGroupReader::Parse( ReaderParameter oParam , RtfShapePtr& pOutput)
@ -1499,11 +1553,6 @@ bool OOXShapeGroupReader::Parse( ReaderParameter oParam , RtfShapePtr& pOutput)
}
if (m_ooxGroup)
{
//if( m_ooxGroup->m_sId.IsInit())
//{
// pOutput->m_nID = oParam.oReader->m_oOOXIdGenerator.GetId( m_ooxGroup->m_oId.get());
//}
pOutput->m_nZOrderRelative = 0;
pOutput->m_nWrapType = 3; //def

View File

@ -67,6 +67,12 @@ public:
static bool Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::BlipFill *oox_bitmap_fill);
private:
bool ParseShape( ReaderParameter oParam , RtfShapePtr& oOutput);
bool ParsePic( ReaderParameter oParam , RtfShapePtr& oOutput);
void Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::Xfrm *xfrm);
void Parse(ReaderParameter oParam, PPTX::Logic::ColorBase *oox_color, unsigned int & nColor, _CP_OPT(double) &opacity);
void Parse(ReaderParameter oParam, PPTX::Logic::SolidFill *oox_solid_fill, unsigned int & nColor, _CP_OPT(double) &opacity);

View File

@ -779,7 +779,7 @@ std::wstring RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter)
if( true == poRtfDocument->m_oStyleTable.GetStyle( m_nCharStyle, oStyle ) )
{
sResult += L"<w:pStyle w:val=\"";
sResult += oStyle->m_sName;
sResult += L"Style_" + std::to_wstring(m_nCharStyle); //oStyle->m_sName;
sResult += L"\"/>";
}
}
@ -1179,28 +1179,32 @@ std::wstring RtfStyle::RenderToOOXBegin(RenderParameter oRenderParameter)
case stSection : sType = L"numbering"; break;
case stTable : sType = L"table"; break;
}
sResult += L"<w:style w:type=\"" + sType + L"\" w:styleId=\"" + XmlUtils::EncodeXmlString( m_sName ) + L"\">";
sResult += L"<w:name w:val=\"" + XmlUtils::EncodeXmlString( m_sName ) + L"\"/>";
//sResult += L"<w:style w:type=\"" + sType + L"\" w:styleId=\"" + XmlUtils::EncodeXmlString( m_sName ) + L"\">";
sResult += L"<w:style w:type=\"" + sType + L"\" w:styleId=\"" + L"Style_" + std::to_wstring(m_nID) + L"\">";
sResult += L"<w:name w:val=\"" + XmlUtils::EncodeXmlString( m_sName ) + L"\"/>";
if( PROP_DEF != m_nBasedOn )
{
RtfStylePtr oBaseStyle;
if( true == poDocument->m_oStyleTable.GetStyle( m_nBasedOn, oBaseStyle ) )
sResult += L"<w:basedOn w:val=\"" + XmlUtils::EncodeXmlString( oBaseStyle->m_sName ) + L"\"/>";
{
sResult += L"<w:basedOn w:val=\"Style_" + std::to_wstring(m_nBasedOn) + L"\"/>";
//sResult += L"<w:basedOn w:val=\"" + XmlUtils::EncodeXmlString( oBaseStyle->m_sName ) + L"\"/>";
}
}
//if( PROP_DEF != m_nNext )
// sResult += L"<w:next w:val=\"" + XmlUtils::EncodeXmlString( m_sName ) + L"\"/>", );//Todo
//if( PROP_DEF != m_nLink )
// sResult += L"<w:link w:val=\"" + XmlUtils::EncodeXmlString( m_sName ) + L"\"/>", );//Todo
if( PROP_DEF != m_bHidden ) sResult += L"<w:hidden/>";
if( PROP_DEF != m_bLocked ) sResult += L"<w:locked/>";
if( PROP_DEF != m_bPersonal ) sResult += L"<w:personal w:val=\"true\" />";
if( PROP_DEF != m_bCompose ) sResult += L"<w:personalCompose w:val=\"true\" />";
if( PROP_DEF != m_bReply ) sResult += L"<w:personalReply w:val=\"true\" />";
if( 1 == m_nSemiHidden ) sResult += L"<w:semiHidden/>";
if( PROP_DEF != m_bQFormat ) sResult += L"<w:qformat/>";
if( PROP_DEF != m_nPriority ) sResult += L"<w:uiPriority w:val=\"" + std::to_wstring(m_nPriority) + L"\"/>";
if( PROP_DEF != m_bUnhiddenWhenUse ) sResult += L"<w:unhideWhenUsed/>";
if( 1 == m_bHidden ) sResult += L"<w:hidden/>";
if( 1 == m_bLocked ) sResult += L"<w:locked/>";
if( 1 == m_bPersonal ) sResult += L"<w:personal w:val=\"true\" />";
if( 1 == m_bCompose ) sResult += L"<w:personalCompose w:val=\"true\" />";
if( 1 == m_bReply ) sResult += L"<w:personalReply w:val=\"true\" />";
if( 1 == m_nSemiHidden ) sResult += L"<w:semiHidden/>";
if( 1 == m_bQFormat ) sResult += L"<w:qFormat/>";
if( 1 == m_bUnhiddenWhenUse ) sResult += L"<w:unhideWhenUsed/>";
if( PROP_DEF != m_nPriority ) sResult += L"<w:uiPriority w:val=\"" + std::to_wstring(m_nPriority) + L"\"/>";
return sResult;
}
@ -1965,7 +1969,7 @@ std::wstring RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
if( true == poRtfDocument->m_oStyleTable.GetStyle( m_nStyle, oCurStile ) )
{
sResult += L"<w:pStyle w:val=\"";
sResult += oCurStile->m_sName;
sResult += L"Style_" + std::to_wstring(m_nStyle);//oCurStile->m_sName;
sResult += L"\"/>" ;
}
}
@ -2558,7 +2562,7 @@ std::wstring RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter)
if( true == poDocument->m_oStyleTable.GetStyle( m_nStyle, oCurStyle) )
{
sResult += L"<w:tblStyle w:val=\"";
sResult += oCurStyle->m_sName;
sResult += L"Style_" + std::to_wstring(m_nStyle); //oCurStyle->m_sName;
sResult += L"\"/>";
}
}

View File

@ -256,8 +256,6 @@ std::wstring RtfShape::RenderToRtf(RenderParameter oRenderParameter)
sResult += L"{\\shp";
sResult += L"{\\*\\shpinst";
RENDER_RTF_INT( m_nID , sResult, L"shplid" );
if (!m_bInGroup)
{
m_bAllowOverlap = 1;
@ -265,8 +263,8 @@ std::wstring RtfShape::RenderToRtf(RenderParameter oRenderParameter)
m_nWrapType = 3;
m_nWrapSideType = 0;
m_bLockAnchor = 0;
m_nZOrder = PROP_DEF;
m_nZOrderRelative = PROP_DEF;
//m_nZOrder = PROP_DEF;
m_nZOrderRelative = 0;
m_nLeft = m_nTop = 0;
m_nRelBottom = m_nRelRight = PROP_DEF;
m_nPositionV = m_nPositionH = PROP_DEF;
@ -278,26 +276,28 @@ std::wstring RtfShape::RenderToRtf(RenderParameter oRenderParameter)
RENDER_RTF_INT ( m_nHeader , sResult, L"shpfhdr" );
//sResult += L"\\shpbxcolumn";
sResult += L"\\shpbxcolumn";
sResult += L"\\shpbxignore";
//sResult += L"\\shpbypara";
sResult += L"\\shpbypara";
sResult += L"\\shpbyignore";
RENDER_RTF_INT ( m_nWrapType , sResult, L"shpwr" );
RENDER_RTF_INT ( m_nWrapSideType , sResult, L"shpwrk" );
//sResult += L"\\shpfblwtxt0";
RENDER_RTF_INT( m_nZOrderRelative, sResult, L"shpfblwtxt");
RENDER_RTF_INT ( m_nZOrder, sResult, L"shpz" );
sResult += L"\\shplockanchor";
RENDER_RTF_INT ( m_nZOrder , sResult, L"shpz" );
RENDER_RTF_INT( m_nID, sResult, L"shplid" );
sResult += L"{\\sp{\\sn fUseShapeAnchor}{\\sv 0}}";
sResult += L"{\\sp{\\sn fPseudoInline}{\\sv 1}}";
}
sResult += RenderToRtfShapeProperty( oRenderParameter );
sResult += L"{\\sp{\\sn fLockPosition}{\\sv 1}}";
sResult += L"{\\sp{\\sn fLockRotation}{\\sv 1}}";
//sResult += L"{\\sp{\\sn fLockPosition}{\\sv 1}}";
//sResult += L"{\\sp{\\sn fLockRotation}{\\sv 1}}";
//picture
if( 0 != m_oPicture && m_nFillType == 1 || m_nFillType == 2 || m_nFillType == 3 || m_nFillType == 9)
@ -421,11 +421,11 @@ std::wstring RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter
std::wstring sResult;
//Position absolute
RENDER_RTF_SHAPE_PROP(L"posh", sResult, m_nPositionH);
RENDER_RTF_SHAPE_PROP(L"posrelh", sResult, m_nPositionHRelative);
RENDER_RTF_SHAPE_PROP(L"posv", sResult, m_nPositionV);
RENDER_RTF_SHAPE_PROP(L"posh", sResult, m_nPositionH);
RENDER_RTF_SHAPE_PROP(L"posrelh", sResult, m_nPositionHRelative);
RENDER_RTF_SHAPE_PROP(L"posv", sResult, m_nPositionV);
RENDER_RTF_SHAPE_PROP(L"posrelv", sResult, m_nPositionVRelative);
RENDER_RTF_SHAPE_PROP(L"posrelv", sResult, m_nPositionVRelative);
RENDER_RTF_SHAPE_PROP(L"fLayoutInCell", sResult, m_bLayoutInCell);
RENDER_RTF_SHAPE_PROP(L"fAllowOverlap", sResult, m_bAllowOverlap);
@ -438,6 +438,17 @@ std::wstring RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter
RENDER_RTF_SHAPE_PROP(L"sizerelv", sResult, m_nPctHeightRelative);
RENDER_RTF_SHAPE_PROP(L"colStart", sResult, m_nColStart);
RENDER_RTF_SHAPE_PROP(L"colSpan", sResult, m_nColSpan);
if (m_sName.empty() == false)
{
sResult += L"{\\sp{\\sn wzName}{\\sv ";
sResult += m_sName + L"}}";
}
if (m_sDescription.empty() == false)
{
sResult += L"{\\sp{\\sn wzDescription}{\\sv ";
sResult += m_sDescription + L"}}";
}
//Rehydration
//RENDER_RTF_SHAPE_PROP(L"metroBlob", sResult, m_sMetroBlob);
@ -449,7 +460,7 @@ std::wstring RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter
RENDER_RTF_SHAPE_PROP(L"shapeType", sResult, m_nShapeType);
RENDER_RTF_SHAPE_PROP(L"fBehindDocument",sResult, m_nZOrderRelative);
RENDER_RTF_SHAPE_PROP(L"fHidden", sResult, m_bHidden);
RENDER_RTF_SHAPE_PROP(L"fBackground", sResult, m_bBackground);
//RENDER_RTF_SHAPE_PROP(L"fBackground", sResult, m_bBackground);
//Text
//sResult += L"{\\sp{\\sn fLockText}{\\sv 0}}";
@ -586,7 +597,7 @@ std::wstring RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter
int nCodePage = -1;
if( !m_sGtextFont.empty() )
if( m_sGtextFont.empty() == false)
{
sResult += L"{\\sp{\\sn gtextFont}{\\sv ";
sResult += m_sGtextFont + L"}}";
@ -1487,8 +1498,8 @@ std::wstring RtfShape::GroupRenderToRtf(RenderParameter oRenderParameter)
RENDER_RTF_INT( m_nWrapSideType , sResult, L"shpwrk" );
RENDER_RTF_BOOL( m_bLockAnchor , sResult, L"shplockanchor" );
//sResult += L"{\\sp{\\sn fUseShapeAnchor}{\\sv 0}}";
//sResult += L"{\\sp{\\sn fPseudoInline}{\\sv 1}}";
sResult += L"{\\sp{\\sn fUseShapeAnchor}{\\sv 0}}";
sResult += L"{\\sp{\\sn fPseudoInline}{\\sv 1}}";
}

View File

@ -146,7 +146,7 @@ bool OOXWriter::SaveByItemEnd()
if (m_poDocPropsApp)
{
((OOX::CApp*)m_poDocPropsApp)->SetApplication ( L"OnlyOffice" );
((OOX::CApp*)m_poDocPropsApp)->SetAppVersion ( L"4.3" );
((OOX::CApp*)m_poDocPropsApp)->SetAppVersion ( L"5.0" );
((OOX::CApp*)m_poDocPropsApp)->write(pathDocProps + FILE_SEPARATOR_STR + L"app.xml", pathDocProps.GetDirectory(), oContentTypes);

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="windows-1251"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Version="8,00"
Name="RtfFormatTest"
ProjectGUID="{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}"
RootNamespace="RtfFormatTest"
@ -44,7 +44,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\Common\OfficeDrawing;&quot;..\..\DesktopEditor\freetype-2.5.2\include&quot;;..\..\..\..\..\Common\OfficeDrawing\Shapes"
AdditionalIncludeDirectories="../../DesktopEditor/xml/libxml2/include;../../DesktopEditor/xml/build/vs2005"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED;USE_LITE_READER;_USE_XMLLITE_READER_;PPTX_DEF;PPT_DEF;ENABLE_PPT_TO_PPTX_CONVERT;AVS_USE_CONVERT_PPTX_TOCUSTOM_VML;DONT_WRITE_EMBEDDED_FONTS"
MinimalRebuild="false"
BasicRuntimeChecks="3"

View File

@ -216,7 +216,7 @@ void CTxtXmlFile::CreateDocxEmpty(const std::wstring & _strDirectory, Writers::F
if (pApp)
{
pApp->SetApplication(_T("OnlyOffice"));
pApp->SetAppVersion(_T("4.3000"));
pApp->SetAppVersion(_T("5.0"));
pApp->SetDocSecurity(0);
pApp->SetScaleCrop(false);
pApp->SetLinksUpToDate(false);

View File

@ -43,7 +43,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="D:\WORK\AVS\Sources\TeamlabOffice\branches\Docx2DoctConverter\ServerComponents\Common\DocxFormat\Source\DocxFormat;&quot;D:\WORK\AVS\Sources\TeamlabOffice\branches\Docx2DoctConverter\ServerComponents\DesktopEditor\freetype-2.5.2\include&quot;"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED;USE_LITE_READER;_USE_XMLLITE_READER_;DONT_WRITE_EMBEDDED_FONTS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@ -107,7 +107,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="D:\WORK\AVS\Sources\TeamlabOffice\branches\Docx2DoctConverter\ServerComponents\Common\DocxFormat\Source\DocxFormat;&quot;D:\WORK\AVS\Sources\TeamlabOffice\branches\Docx2DoctConverter\ServerComponents\DesktopEditor\freetype-2.5.2\include&quot;"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;USE_LITE_READER;_USE_XMLLITE_READER_;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED"
MinimalRebuild="true"
BasicRuntimeChecks="3"

View File

@ -51,18 +51,26 @@
#pragma comment(lib, "../../build/bin/icu/win_32/icuuc.lib")
#endif
HRESULT convert_single(std::wstring fileName)
HRESULT convert_single(std::wstring srcFileName)
{
HRESULT hr = S_OK;
std::wstring srcFileName = fileName;
std::wstring dstPath = srcFileName + L"-my.xlsx";
std::wstring outputDir = NSDirectory::GetFolderPath(dstPath);
std::wstring outputDir = NSDirectory::GetFolderPath(srcFileName);
std::wstring dstTempPath = NSDirectory::CreateDirectoryWithUniqueName(outputDir);
std::wstring dstPath;
hr = ConvertXls2Xlsx(srcFileName, dstTempPath, L"password", L"C:\\Windows\\Fonts", NULL);
bool bMacros = true;
hr = ConvertXls2Xlsx(srcFileName, dstTempPath, L"password", L"C:\\Windows\\Fonts", NULL, bMacros);
if (bMacros)
{
dstPath = srcFileName + L"-my.xlsm";
}
else
{
dstPath = srcFileName + L"-my.xlsx";
}
if (hr == S_OK)
{
COfficeUtils oCOfficeUtils(NULL);
@ -71,6 +79,7 @@ HRESULT convert_single(std::wstring fileName)
NSDirectory::DeleteDirectory(dstTempPath);
return hr;
}

View File

@ -96,7 +96,63 @@ CompoundFile::CompoundFile(const std::wstring & file_path, const ReadWriteMode m
storage_ = NULL;
Open(file_path, mode);
}
// Opens "Workbook" stream and returns the only reference
void CompoundFile::copy_stream(std::string streamName, POLE::Storage * storageOut, bool withRoot)
{
POLE::Stream *stream = new POLE::Stream(storage_, streamName);
if (!stream) return;
stream->seek(0);
int size_stream = stream->size();
if (withRoot == false)
{
int pos = streamName.find("/");
if (pos >= 0)
streamName = streamName.substr(pos + 1);
}
POLE::Stream *streamNew = new POLE::Stream(storageOut, streamName, true, size_stream);
if (!streamNew) return;
unsigned char* data_stream = new unsigned char[size_stream];
if (data_stream)
{
stream->read(data_stream, size_stream);
streamNew->write(data_stream, size_stream);
delete []data_stream;
data_stream = NULL;
}
streamNew->flush();
delete streamNew;
delete stream;
}
void CompoundFile::copy( int indent, std::string path, POLE::Storage * storageOut, bool withRoot)
{
std::list<std::string> entries;
entries = storage_->entries( path );
std::list<std::string>::iterator it;
for( it = entries.begin(); it != entries.end(); ++it )
{
std::string name = *it;
std::string fullname = path + name;
if( storage_->isDirectory( fullname ) )
{
copy( indent + 1, fullname + "/", storageOut, withRoot );
}
else
{
copy_stream(fullname, storageOut, withRoot);
}
}
}
CFStreamPtr CompoundFile::getWorkbookStream()
{
CFStreamPtr stream = getNamedStream("Workbook");
@ -123,7 +179,6 @@ CFStreamPtr CompoundFile::getNamedStream(const std::string& name)
return streams[name];
}
CFStreamPtr CompoundFile::createNamedStream(const std::string& name)
{
if(!streams[name])

View File

@ -58,11 +58,15 @@ public:
bool isError();
void copy( int indent, std::string path, POLE::Storage * storageOut, bool withRoot = true);
CFStreamPtr getWorkbookStream ();
CFStreamPtr getNamedStream (const std::string& name);
POLE::Storage *storage_;
private:
void copy_stream(std::string streamName, POLE::Storage * storageOut, bool withRoot = true);
POLE::Stream* openStream (const std::string & stream_name); // Opens a stream in the storage (shall be called not more than once per stream)
POLE::Stream* createStream (const std::string & stream_name); // Creates a new stream in the storage

View File

@ -65,60 +65,427 @@ BaseObjectPtr SXAddl::clone()
void SXAddl::readFields(CFRecord& record)
{
m_SXAddlHdr.load(record);
record >> frtHeaderOld >> sxc >> sxd;
switch(sxc)
{
case 0x00: content = createSxcView (record); break;
case 0x01: content = createSxcField (record); break;
case 0x02: content = createSxcHierarchy(record); break;
case 0x03: content = createSxcCache (record); break;
case 0x04: content = createSxcCacheField(record); break;
case 0x05: content = createSxcQsi (record); break;
case 0x06: content = createSxcQuery (record); break;
case 0x07: content = createSxcGrpLevel (record); break;
case 0x08: content = createSxcGroup (record); break;
case 0x09: content = createSxcCacheItem(record); break;
case 0x0C: content = createSxcSXRule (record); break;
case 0x0D: content = createSxcSXFilt (record); break;
case 0x10: content = createSxcSXDH (record); break;
case 0x12: content = createSxcAutoSort (record); break;
case 0x13: content = createSxcSXMgs (record); break;
case 0x14: content = createSxcSXMg (record); break;
case 0x17: content = createSxcField12 (record); break;
case 0x1A: content = createSxcSXCondFmts(record); break;
case 0x1B: content = createSxcSXCondFmt(record); break;
case 0x1C: content = createSxcSXFilters12(record); break;
case 0x1D: content = createSxcSXFilter12(record); break;
}
if (content)
content->load(record);
Log::error("SXAddl record is not implemented.");
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
}
//-------------------------------------------------------------------------------------------------------
BaseObjectPtr SXAddl_SXCCache_SXDId::clone()
BiffStructurePtr SXAddl::createSxcView(CFRecord& record)
{
return BaseObjectPtr(new SXAddl_SXCCache_SXDId(*this));
}
void SXAddl_SXCCache_SXDId::readFields(CFRecord& record)
{
m_SXAddlHdr.load(record);
BiffStructurePtr result;
short reserved;
record >> idCache >> reserved;
switch(sxd)
{
case 0x00: result = BiffStructurePtr(new SXAddl_SXCView_SXDId()); break;
case 0x02: result = BiffStructurePtr(new SXAddl_SXCView_SXDVer10Info()); break;
case 0x19: result = BiffStructurePtr(new SXAddl_SXCView_SXDVer12Info()); break;
case 0x1E: result = BiffStructurePtr(new SXAddl_SXCView_SXDTableStyleClient()); break;
case 0xff: result = BiffStructurePtr(new SXAddl_SXCView_SXDEnd()); break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcField(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0x00: result = BiffStructurePtr(new SXAddl_SXCField_SXDId()); break;
case 0x02: result = BiffStructurePtr(new SXAddl_SXCField_SXDVer10Info()); break;
case 0xff: result = BiffStructurePtr(new SXAddl_SXCField_SXDEnd()); break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcHierarchy(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
if (result)
result->load(record);
return result;
}
BiffStructurePtr SXAddl::createSxcCache (CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0x00: result = BiffStructurePtr(new SXAddl_SXCCache_SXDId()); break;
case 0x01: result = BiffStructurePtr(new SXAddl_SXCCache_SXDVerUpdInv()); break;
case 0x02: result = BiffStructurePtr(new SXAddl_SXCCache_SXDVer10Info()); break;
case 0x18: result = BiffStructurePtr(new SXAddl_SXCCache_SXDVerSXMacro()); break;
case 0x34: result = BiffStructurePtr(new SXAddl_SXCCache_SXDInvRefreshReal()); break;
case 0x41: result = BiffStructurePtr(new SXAddl_SXCCache_SXDInfo12()); break;
case 0xff: result = BiffStructurePtr(new SXAddl_SXCCache_SXDEnd()); break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcCacheField(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0x00: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDId()); break;
case 0x05: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDProperty()); break;
case 0x2d: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDSxrmitmCount()); break;
case 0x2f: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDCaption()); break;
case 0x30: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDIfdbMempropMap()); break;
case 0x31: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDIfdbMpMapCount()); break;
case 0x40: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDPropName()); break;
case 0xff: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDEnd()); break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcQsi(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcQuery(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcGrpLevel(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcGroup(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcCacheItem(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcSXRule(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcSXFilt(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcSXDH(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcAutoSort(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcSXMgs(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcSXMg(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcField12(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcSXCondFmts(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcSXCondFmt(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcSXFilters12(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
BiffStructurePtr SXAddl::createSxcSXFilter12(CFRecord& record)
{
BiffStructurePtr result;
switch(sxd)
{
case 0xff: break;
}
return result;
}
//----------------------------------------------------------------------------
BaseObjectPtr SXAddl_SXCCache_SXDEnd::clone()
BiffStructurePtr SXAddl_SXCField_SXDId::clone()
{
return BaseObjectPtr(new SXAddl_SXCCache_SXDEnd(*this));
return BiffStructurePtr(new SXAddl_SXCField_SXDId(*this));
}
void SXAddl_SXCCache_SXDEnd::readFields(CFRecord& record)
{
m_SXAddlHdr.load(record);
void SXAddl_SXCField_SXDId::load(CFRecord& record)
{
record >> stName;
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCView_SXDId::clone()
{
return BiffStructurePtr(new SXAddl_SXCView_SXDId(*this));
}
void SXAddl_SXCView_SXDId::load(CFRecord& record)
{
record >> stName;
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCView_SXDVer10Info::clone()
{
return BiffStructurePtr(new SXAddl_SXCView_SXDVer10Info(*this));
}
void SXAddl_SXCView_SXDVer10Info::load(CFRecord& record)
{
unsigned short flags, reserved2;
unsigned char unused;
record >> bVerSxMacro >> flags >> unused >> reserved2;
fDisplayImmediateItems = GETBIT(flags, 0);
fEnableDataEd = GETBIT(flags, 1);
fDisableFList = GETBIT(flags, 2);
fReenterOnLoadOnce = GETBIT(flags, 3);
fNotViewCalculatedMembers = GETBIT(flags, 4);
fNotVisualTotals = GETBIT(flags, 5);
fPageMultipleItemLabel = GETBIT(flags, 6);
fTensorFillCv = GETBIT(flags, 7);
fHideDDData = GETBIT(flags, 8);
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCView_SXDVer12Info::clone()
{
return BiffStructurePtr(new SXAddl_SXCView_SXDVer12Info(*this));
}
void SXAddl_SXCView_SXDVer12Info::load(CFRecord& record)
{
_UINT32 flags;
unsigned short reserved3;
record >> flags >> reserved3;
fDefaultCompact = GETBIT(flags, 0);
fDefaultOutline = GETBIT(flags, 1);
fOutlineData = GETBIT(flags, 2);
fCompactData = GETBIT(flags, 3);
fNewDropZones = GETBIT(flags, 4);
fPublished = GETBIT(flags, 5);
fTurnOffImmersive = GETBIT(flags, 6);
fSingleFilterPerField = GETBIT(flags, 7);
fNonDefaultSortInFlist = GETBIT(flags, 8);
fDontUseCustomLists = GETBIT(flags, 10);
fHideDrillIndicators = GETBIT(flags, 12);
fPrintDrillIndicators = GETBIT(flags, 13);
fMemPropsInTips = GETBIT(flags, 14);
fNoPivotTips = GETBIT(flags, 15);
cIndentInc = GETBITS(flags, 16, 22);
fNoHeaders = GETBIT(flags, 23);
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCField_SXDEnd::clone()
{
return BiffStructurePtr(new SXAddl_SXCField_SXDEnd(*this));
}
void SXAddl_SXCField_SXDEnd::load(CFRecord& record)
{
_UINT32 reserved1;
short reserved2;
record >> reserved1 >> reserved2;
}
//----------------------------------------------------------------------------
BaseObjectPtr Continue_SxaddlSxString::clone()
BiffStructurePtr SXAddl_SXCView_SXDEnd::clone()
{
return BaseObjectPtr(new Continue_SxaddlSxString(*this));
return BiffStructurePtr(new SXAddl_SXCView_SXDEnd(*this));
}
void Continue_SxaddlSxString::readFields(CFRecord& record)
void SXAddl_SXCView_SXDEnd::load(CFRecord& record)
{
_UINT32 reserved1;
short reserved2;
record >> reserved1 >> reserved2;
}
//-------------------------------------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCCacheItem_SXDId::clone()
{
return BiffStructurePtr(new SXAddl_SXCCacheItem_SXDId(*this));
}
void SXAddl_SXCCacheItem_SXDId::load(CFRecord& record)
{
short reserved;
record >> dwItem >> reserved;
}
//-------------------------------------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCCacheField_SXDId::clone()
{
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDId(*this));
}
void SXAddl_SXCCacheField_SXDId::load(CFRecord& record)
{
record >> stSourceName;
}
//-------------------------------------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCCache_SXDId::clone()
{
return BiffStructurePtr(new SXAddl_SXCCache_SXDId(*this));
}
void SXAddl_SXCCache_SXDId::load(CFRecord& record)
{
short reserved;
record >> idCache >> reserved;
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCCache_SXDEnd::clone()
{
return BiffStructurePtr(new SXAddl_SXCCache_SXDEnd(*this));
}
void SXAddl_SXCCache_SXDEnd::load(CFRecord& record)
{
_UINT32 reserved1;
short reserved2;
record >> reserved1 >> reserved2;
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCField_SXDVer10Info::clone()
{
return BiffStructurePtr(new SXAddl_SXCField_SXDVer10Info(*this));
}
void SXAddl_SXCField_SXDVer10Info::load(CFRecord& record)
{
_UINT32 flags;
short reserved2;
record >> flags >> reserved2;
fHideDD = GETBIT(flags, 0);
}
//----------------------------------------------------------------------------
BiffStructurePtr Continue_SxaddlSxString::clone()
{
return BiffStructurePtr(new Continue_SxaddlSxString(*this));
}
void Continue_SxaddlSxString::load(CFRecord& record)
{
m_SXAddlHdr.load(record);
int sz = record.getDataSize() - record.getRdPtr();
if (sz > 0)
record >> stContinue;
}
//----------------------------------------------------------------------------
BaseObjectPtr SXAddl_SXCCache_SXDVer10Info::clone()
BiffStructurePtr SXAddl_SXCCache_SXDVer10Info::clone()
{
return BaseObjectPtr(new SXAddl_SXCCache_SXDVer10Info(*this));
return BiffStructurePtr(new SXAddl_SXCCache_SXDVer10Info(*this));
}
void SXAddl_SXCCache_SXDVer10Info::readFields(CFRecord& record)
{
m_SXAddlHdr.load(record);
void SXAddl_SXCCache_SXDVer10Info::load(CFRecord& record)
{
_UINT32 reserved1;
short reserved2;
record >> reserved1 >> reserved2;
@ -131,28 +498,28 @@ void SXAddl_SXCCache_SXDVer10Info::readFields(CFRecord& record)
record >> reserved2;
}
//----------------------------------------------------------------------------
BaseObjectPtr SXAddl_SXCCache_SXDVerUpdInv::clone()
{
return BaseObjectPtr(new SXAddl_SXCCache_SXDVerUpdInv(*this));
}
void SXAddl_SXCCache_SXDVerUpdInv::readFields(CFRecord& record)
{
m_SXAddlHdr.load(record);
BiffStructurePtr SXAddl_SXCCache_SXDVerUpdInv::clone()
{
return BiffStructurePtr(new SXAddl_SXCCache_SXDVerUpdInv(*this));
}
void SXAddl_SXCCache_SXDVerUpdInv::load(CFRecord& record)
{
record >> dwVersionInvalidates;
record.skipNunBytes(5);
}
//----------------------------------------------------------------------------
BaseObjectPtr SXAddl_SXCCache_SXDInfo12::clone()
{
return BaseObjectPtr(new SXAddl_SXCCache_SXDInfo12(*this));
}
void SXAddl_SXCCache_SXDInfo12::readFields(CFRecord& record)
{
m_SXAddlHdr.load(record);
BiffStructurePtr SXAddl_SXCCache_SXDInfo12::clone()
{
return BiffStructurePtr(new SXAddl_SXCCache_SXDInfo12(*this));
}
void SXAddl_SXCCache_SXDInfo12::load(CFRecord& record)
{
_UINT32 flags;
short reserved;
@ -163,39 +530,27 @@ void SXAddl_SXCCache_SXDInfo12::readFields(CFRecord& record)
fSrvSupportSubQuery = GETBIT(flags, 2);
}
//----------------------------------------------------------------------------
BaseObjectPtr SXAddl_SXCCache_SXDVerSXMacro::clone()
{
return BaseObjectPtr(new SXAddl_SXCCache_SXDVerSXMacro(*this));
}
void SXAddl_SXCCache_SXDVerSXMacro::readFields(CFRecord& record)
{
m_SXAddlHdr.load(record);
BiffStructurePtr SXAddl_SXCCache_SXDVerSXMacro::clone()
{
return BiffStructurePtr(new SXAddl_SXCCache_SXDVerSXMacro(*this));
}
void SXAddl_SXCCache_SXDVerSXMacro::load(CFRecord& record)
{
unsigned char reserved1;
short reserved2, reserved3;
record >> dwVer >> reserved1 >> reserved2 >> reserved3;
}
//----------------------------------------------------------------------------
BaseObjectPtr SXAddl_SXCView_SXDId::clone()
BiffStructurePtr SXAddl_SXCCacheField_SXDIfdbMempropMap::clone()
{
return BaseObjectPtr(new SXAddl_SXCView_SXDId(*this));
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDIfdbMempropMap(*this));
}
void SXAddl_SXCView_SXDId::readFields(CFRecord& record)
void SXAddl_SXCCacheField_SXDIfdbMempropMap::load(CFRecord& record)
{
m_SXAddlHdr.load(record);
record >> stName;
}
//----------------------------------------------------------------------------
BaseObjectPtr SXAddl_SXCCacheField_SXDIfdbMempropMap::clone()
{
return BaseObjectPtr(new SXAddl_SXCCacheField_SXDIfdbMempropMap(*this));
}
void SXAddl_SXCCacheField_SXDIfdbMempropMap::readFields(CFRecord& record)
{
m_SXAddlHdr.load(record);
record.skipNunBytes(6);
int sz = record.getDataSize() - record.getRdPtr();
@ -208,6 +563,106 @@ void SXAddl_SXCCacheField_SXDIfdbMempropMap::readFields(CFRecord& record)
rgMap.push_back(val);
}
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCView_SXDTableStyleClient::clone()
{
return BiffStructurePtr(new SXAddl_SXCView_SXDTableStyleClient(*this));
}
void SXAddl_SXCView_SXDTableStyleClient::load(CFRecord& record)
{
record.skipNunBytes(6);
unsigned short flags;
record >> flags >> stName;
fLastColumn = GETBIT(flags, 1);
fRowStrips = GETBIT(flags, 2);
fColumnStrips = GETBIT(flags, 3);
fRowHeaders = GETBIT(flags, 4);
fColumnHeaders = GETBIT(flags, 5);
fDefaultStyle = GETBIT(flags, 6);
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCCacheField_SXDSxrmitmCount::clone()
{
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDSxrmitmCount(*this));
}
void SXAddl_SXCCacheField_SXDSxrmitmCount::load(CFRecord& record)
{
short reserved2;
record >> citm >> reserved2;
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCCacheField_SXDPropName::clone()
{
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDPropName(*this));
}
void SXAddl_SXCCacheField_SXDPropName::load(CFRecord& record)
{
record >> stPropName;
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCCacheField_SXDProperty::clone()
{
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDProperty(*this));
}
void SXAddl_SXCCacheField_SXDProperty::load(CFRecord& record)
{
short reserved2;
record >> ihdb >> reserved2;
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCCacheField_SXDIfdbMpMapCount::clone()
{
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDIfdbMpMapCount(*this));
}
void SXAddl_SXCCacheField_SXDIfdbMpMapCount::load(CFRecord& record)
{
short reserved2;
record >> ifdbMemProp >> reserved2;
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCCacheField_SXDEnd::clone()
{
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDEnd(*this));
}
void SXAddl_SXCCacheField_SXDEnd::load(CFRecord& record)
{
_UINT32 reserved1;
short reserved2;
record >> reserved1 >> reserved2;
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCCacheField_SXDCaption::clone()
{
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDCaption(*this));
}
void SXAddl_SXCCacheField_SXDCaption::load(CFRecord& record)
{
record >> stCaption;
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCCache_SXDInvRefreshReal::clone()
{
return BiffStructurePtr(new SXAddl_SXCCache_SXDInvRefreshReal(*this));
}
void SXAddl_SXCCache_SXDInvRefreshReal::load(CFRecord& record)
{
_UINT32 flags;
short reserved2;
record >> flags >> reserved2;
fEnableRefresh = GETBIT(flags, 0);
fInvalid = GETBIT(flags, 1);
}
} // namespace XLS

View File

@ -60,18 +60,6 @@ class SXAddl: public BiffRecord
BIFF_RECORD_DEFINE_TYPE_INFO(SXAddl)
BASE_OBJECT_DEFINE_CLASS_NAME(SXAddl)
public:
struct _SXAddlHdr
{
_UINT32 frtHeaderOld;
unsigned char sxc;
unsigned char sxd;
void load(CFRecord& record)
{
record >> frtHeaderOld >> sxc >> sxd;
}
}m_SXAddlHdr;
SXAddl();
~SXAddl();
@ -79,57 +67,249 @@ public:
virtual void readFields(CFRecord& record);
static const ElementType type = typeSXAddl;
};
class Continue_SxaddlSxString : public SXAddl
{
_UINT32 frtHeaderOld;
unsigned char sxc;
unsigned char sxd;
BiffStructurePtr content;
private:
BiffStructurePtr createSxcView (CFRecord& record);
BiffStructurePtr createSxcField (CFRecord& record);
BiffStructurePtr createSxcHierarchy (CFRecord& record);
BiffStructurePtr createSxcCache (CFRecord& record);
BiffStructurePtr createSxcCacheField(CFRecord& record);
BiffStructurePtr createSxcQsi (CFRecord& record);
BiffStructurePtr createSxcQuery (CFRecord& record);
BiffStructurePtr createSxcGrpLevel (CFRecord& record);
BiffStructurePtr createSxcGroup (CFRecord& record);
BiffStructurePtr createSxcCacheItem (CFRecord& record);
BiffStructurePtr createSxcSXRule (CFRecord& record);
BiffStructurePtr createSxcSXFilt (CFRecord& record);
BiffStructurePtr createSxcSXDH (CFRecord& record);
BiffStructurePtr createSxcAutoSort (CFRecord& record);
BiffStructurePtr createSxcSXMgs (CFRecord& record);
BiffStructurePtr createSxcSXMg (CFRecord& record);
BiffStructurePtr createSxcField12 (CFRecord& record);
BiffStructurePtr createSxcSXCondFmts(CFRecord& record);
BiffStructurePtr createSxcSXCondFmt (CFRecord& record);
BiffStructurePtr createSxcSXFilters12(CFRecord& record);
BiffStructurePtr createSxcSXFilter12(CFRecord& record);
};
class Continue_SxaddlSxString : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(Continue_SxaddlSxString)
public:
virtual void readFields(CFRecord& record);
virtual BaseObjectPtr clone();
BiffStructurePtr clone();
Continue_SxaddlSxString(){}
~Continue_SxaddlSxString(){}
static const ElementType type = typeSXAddl;
virtual void load(CFRecord& record);
XLUnicodeStringSegmentedSXADDL stContinue;
};
class SXAddl_SXCAutoSort_SXDEnd : public SXAddl {};
class SXAddl_SXCAutoSort_SXDId : public SXAddl {};
class SXAddl_SXCCache_SXDEnd : public SXAddl
{
class SXAddl_SXCField_SXDId : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCField_SXDId)
public:
virtual void readFields(CFRecord& record);
virtual BaseObjectPtr clone();
BiffStructurePtr clone();
SXAddl_SXCField_SXDId(){}
~SXAddl_SXCField_SXDId(){}
static const ElementType type = typeSXAddl;
virtual void load(CFRecord& record);
XLUnicodeStringSegmentedSXADDL stName;
};
class SXAddl_SXCField_SXDEnd : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCField_SXDEnd)
public:
BiffStructurePtr clone();
SXAddl_SXCField_SXDEnd(){}
~SXAddl_SXCField_SXDEnd(){}
static const ElementType type = typeSXAddl;
virtual void load(CFRecord& record);
};
class SXAddl_SXCField_SXDVer10Info : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCField_SXDVer10Info)
public:
BiffStructurePtr clone();
SXAddl_SXCField_SXDVer10Info(){}
~SXAddl_SXCField_SXDVer10Info(){}
static const ElementType type = typeSXAddl;
virtual void load(CFRecord& record);
bool fHideDD;
};
class SXAddl_SXCCache_SXDId : public SXAddl
{
class SXAddl_SXCView_SXDId : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCView_SXDId)
public:
virtual void readFields(CFRecord& record);
virtual BaseObjectPtr clone();
BiffStructurePtr clone();
SXAddl_SXCView_SXDId(){}
~SXAddl_SXCView_SXDId(){}
static const ElementType type = typeSXAddl;
virtual void load(CFRecord& record);
XLUnicodeStringSegmentedSXADDL stName;
};
class SXAddl_SXCView_SXDEnd : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCView_SXDEnd)
public:
BiffStructurePtr clone();
SXAddl_SXCView_SXDEnd(){}
~SXAddl_SXCView_SXDEnd(){}
static const ElementType type = typeSXAddl;
virtual void load(CFRecord& record);
};
class SXAddl_SXCView_SXDTableStyleClient : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCView_SXDTableStyleClient)
public:
BiffStructurePtr clone();
SXAddl_SXCView_SXDTableStyleClient(){}
~SXAddl_SXCView_SXDTableStyleClient(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
bool fLastColumn;
bool fRowStrips;
bool fColumnStrips;
bool fRowHeaders;
bool fColumnHeaders;
bool fDefaultStyle;
LPWideString stName;
};
class SXAddl_SXCAutoSort_SXDEnd : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCAutoSort_SXDEnd)
public:
BiffStructurePtr clone();
SXAddl_SXCAutoSort_SXDEnd(){}
~SXAddl_SXCAutoSort_SXDEnd(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
};
class SXAddl_SXCAutoSort_SXDId : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCAutoSort_SXDId)
public:
BiffStructurePtr clone();
SXAddl_SXCAutoSort_SXDId(){}
~SXAddl_SXCAutoSort_SXDId(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
bool fAscendSort;
};
class SXAddl_SXCCache_SXDEnd : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCache_SXDEnd)
public:
BiffStructurePtr clone();
SXAddl_SXCCache_SXDEnd(){}
~SXAddl_SXCCache_SXDEnd(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
SXAddl_SXCCache_SXDEnd(CFRecord& record);
};
class SXAddl_SXCCache_SXDId : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCache_SXDId)
public:
BiffStructurePtr clone();
SXAddl_SXCCache_SXDId(){}
~SXAddl_SXCCache_SXDId(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
_UINT32 idCache;
};
class SXAddl_SXCCache_SXDInfo12 : public SXAddl
{
class SXAddl_SXCCache_SXDInfo12 : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCache_SXDInfo12)
public:
BiffStructurePtr clone();
virtual void readFields(CFRecord& record);
virtual BaseObjectPtr clone();
SXAddl_SXCCache_SXDInfo12(){}
~SXAddl_SXCCache_SXDInfo12(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
bool fSheetData;
bool fSrvSupportAttribDrill;
bool fSrvSupportSubQuery;
};
class SXAddl_SXCCache_SXDInvRefreshReal : public SXAddl
{
};
class SXAddl_SXCCache_SXDVer10Info : public SXAddl
{
class SXAddl_SXCCache_SXDInvRefreshReal : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCache_SXDInvRefreshReal)
public:
virtual void readFields(CFRecord& record);
virtual BaseObjectPtr clone();
BiffStructurePtr clone();
SXAddl_SXCCache_SXDInvRefreshReal(){}
~SXAddl_SXCCache_SXDInvRefreshReal(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
bool fEnableRefresh;
bool fInvalid;
};
class SXAddl_SXCCache_SXDVer10Info : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCache_SXDVer10Info)
public:
BiffStructurePtr clone();
SXAddl_SXCCache_SXDVer10Info(){}
~SXAddl_SXCCache_SXDVer10Info(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
_INT32 citmGhostMax;
unsigned char bVerCacheLastRefresh;
@ -138,155 +318,344 @@ public:
unsigned char numDateCopy[8];
};
class SXAddl_SXCCache_SXDVerSXMacro : public SXAddl
{
class SXAddl_SXCCache_SXDVerSXMacro : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCache_SXDVerSXMacro)
public:
virtual void readFields(CFRecord& record);
virtual BaseObjectPtr clone();
BiffStructurePtr clone();
SXAddl_SXCCache_SXDVerSXMacro(){}
~SXAddl_SXCCache_SXDVerSXMacro(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
unsigned char dwVer;
};
class SXAddl_SXCCache_SXDVerUpdInv : public SXAddl
{
class SXAddl_SXCCache_SXDVerUpdInv : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCache_SXDVerUpdInv)
public:
virtual void readFields(CFRecord& record);
virtual BaseObjectPtr clone();
BiffStructurePtr clone();
SXAddl_SXCCache_SXDVerUpdInv(){}
~SXAddl_SXCCache_SXDVerUpdInv(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
unsigned char dwVersionInvalidates;
};
class SXAddl_SXCCacheField_SXDCaption : public SXAddl {};
class SXAddl_SXCCacheField_SXDEnd : public SXAddl {};
class SXAddl_SXCCacheField_SXDId : public SXAddl {};
class SXAddl_SXCCacheField_SXDIfdbMempropMap: public SXAddl
{
class SXAddl_SXCCacheField_SXDCaption : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDCaption)
public:
virtual void readFields(CFRecord& record);
virtual BaseObjectPtr clone();
BiffStructurePtr clone();
SXAddl_SXCCacheField_SXDCaption(){}
~SXAddl_SXCCacheField_SXDCaption(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
XLUnicodeStringSegmentedSXADDL stCaption;
};
class SXAddl_SXCCacheField_SXDEnd : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDEnd)
public:
BiffStructurePtr clone();
SXAddl_SXCCacheField_SXDEnd(){}
~SXAddl_SXCCacheField_SXDEnd(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
};
class SXAddl_SXCCacheField_SXDId : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDId)
public:
BiffStructurePtr clone();
SXAddl_SXCCacheField_SXDId(){}
~SXAddl_SXCCacheField_SXDId(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
XLUnicodeStringSegmentedSXADDL stSourceName;
};
class SXAddl_SXCCacheField_SXDIfdbMempropMap : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDIfdbMempropMap)
public:
BiffStructurePtr clone();
SXAddl_SXCCacheField_SXDIfdbMempropMap(){}
~SXAddl_SXCCacheField_SXDIfdbMempropMap(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
std::vector<unsigned short> rgMap;
};
class SXAddl_SXCCacheField_SXDIfdbMpMapCount: public SXAddl {};
class SXAddl_SXCCacheField_SXDProperty : public SXAddl {};
class SXAddl_SXCCacheField_SXDPropName : public SXAddl {};
class SXAddl_SXCCacheField_SXDSxrmitmCount : public SXAddl {};
class SXAddl_SXCCacheItem_SXDEnd : public SXAddl {};
class SXAddl_SXCCacheItem_SXDId : public SXAddl {};
class SXAddl_SXCCacheItem_SXDItmMpMapCount : public SXAddl {};
class SXAddl_SXCCacheItem_SXDItmMpropMap : public SXAddl {};
class SXAddl_SXCCacheItem_SXDSxrmitmDisp : public SXAddl {};
class SXAddl_SXCField12_SXDAutoshow : public SXAddl {};
class SXAddl_SXCField12_SXDEnd : public SXAddl {};
class SXAddl_SXCField12_SXDId : public SXAddl {};
class SXAddl_SXCField12_SXDISXTH : public SXAddl {};
class SXAddl_SXCField12_SXDMemberCaption : public SXAddl {};
class SXAddl_SXCField12_SXDVer12Info : public SXAddl {};
class SXAddl_SXCField12_SXDVerUpdInv : public SXAddl {};
class SXAddl_SXCField_SXDEnd : public SXAddl {};
class SXAddl_SXCField_SXDId : public SXAddl {};
class SXAddl_SXCField_SXDVer10Info : public SXAddl {};
class SXAddl_SXCGroup_SXDEnd : public SXAddl {};
class SXAddl_SXCGroup_SXDGrpInfo : public SXAddl {};
class SXAddl_SXCGroup_SXDId : public SXAddl {};
class SXAddl_SXCGroup_SXDMember : public SXAddl {};
class SXAddl_SXCGrpLevel_SXDEnd : public SXAddl {};
class SXAddl_SXCGrpLevel_SXDGrpLevelInfo : public SXAddl {};
class SXAddl_SXCGrpLevel_SXDId : public SXAddl {};
class SXAddl_SXCHierarchy_SXDDisplayFolder : public SXAddl {};
class SXAddl_SXCHierarchy_SXDEnd : public SXAddl {};
class SXAddl_SXCHierarchy_SXDFilterMember : public SXAddl {};
class SXAddl_SXCHierarchy_SXDFilterMember12 : public SXAddl {};
class SXAddl_SXCHierarchy_SXDIconSet : public SXAddl {};
class SXAddl_SXCHierarchy_SXDId : public SXAddl {};
class SXAddl_SXCHierarchy_SXDInfo12 : public SXAddl {};
class SXAddl_SXCHierarchy_SXDKPIGoal : public SXAddl {};
class SXAddl_SXCHierarchy_SXDKPIStatus : public SXAddl {};
class SXAddl_SXCHierarchy_SXDKPITime : public SXAddl {};
class SXAddl_SXCHierarchy_SXDKPITrend : public SXAddl {};
class SXAddl_SXCHierarchy_SXDKPIValue : public SXAddl {};
class SXAddl_SXCHierarchy_SXDKPIWeight : public SXAddl {};
class SXAddl_SXCHierarchy_SXDMeasureGrp : public SXAddl {};
class SXAddl_SXCHierarchy_SXDParentKPI : public SXAddl {};
class SXAddl_SXCHierarchy_SXDProperty : public SXAddl {};
class SXAddl_SXCHierarchy_SXDSXSetParentUnique : public SXAddl {};
class SXAddl_SXCHierarchy_SXDUserCaption : public SXAddl {};
class SXAddl_SXCHierarchy_SXDVerUpdInv : public SXAddl {};
class SXAddl_SXCQsi_SXDEnd : public SXAddl {};
class SXAddl_SXCQsi_SXDId : public SXAddl {};
class SXAddl_SXCQuery_SXDEnd : public SXAddl {};
class SXAddl_SXCQuery_SXDReconnCond : public SXAddl {};
class SXAddl_SXCQuery_SXDSrcConnFile : public SXAddl {};
class SXAddl_SXCQuery_SXDSrcDataFile : public SXAddl {};
class SXAddl_SXCQuery_SXDXMLSource : public SXAddl {};
class SXAddl_SXCSXCondFmt_SXDEnd : public SXAddl {};
class SXAddl_SXCSXCondFmt_SXDSXCondFmt : public SXAddl {};
class SXAddl_SXCSXCondFmts_SXDEnd : public SXAddl {};
class SXAddl_SXCSXCondFmts_SXDId : public SXAddl {};
class SXAddl_SXCSXDH_SXDEnd : public SXAddl {};
class SXAddl_SXCSXDH_SXDId : public SXAddl {};
class SXAddl_SXCSXDH_SXDSxdh : public SXAddl {};
class SXAddl_SXCSXfilt_SXDEnd : public SXAddl {};
class SXAddl_SXCSXfilt_SXDId : public SXAddl {};
class SXAddl_SXCSXfilt_SXDSXfilt : public SXAddl {};
class SXAddl_SXCSXfilt_SXDSXItm : public SXAddl {};
class SXAddl_SXCSXFilter12_SXDCaption : public SXAddl {};
class SXAddl_SXCSXFilter12_SXDEnd : public SXAddl {};
class SXAddl_SXCSXFilter12_SXDId : public SXAddl {};
class SXAddl_SXCSXFilter12_SXDSXFilter : public SXAddl {};
class SXAddl_SXCSXFilter12_SXDSXFilterDesc : public SXAddl {};
class SXAddl_SXCSXFilter12_SXDSXFilterValue1: public SXAddl {};
class SXAddl_SXCSXFilter12_SXDSXFilterValue2: public SXAddl {};
class SXAddl_SXCSXFilter12_SXDXlsFilter : public SXAddl {};
class SXAddl_SXCSXFilter12_SXDXlsFilterValue1: public SXAddl {};
class SXAddl_SXCSXFilter12_SXDXlsFilterValue2: public SXAddl {};
class SXAddl_SXCSXFilters12_SXDEnd : public SXAddl {};
class SXAddl_SXCSXFilters12_SXDId : public SXAddl {};
class SXAddl_SXCSXMg_SXDEnd : public SXAddl {};
class SXAddl_SXCSXMg_SXDId : public SXAddl {};
class SXAddl_SXCSXMg_SXDUserCaption : public SXAddl {};
class SXAddl_SXCSXMgs_SXDEnd : public SXAddl {};
class SXAddl_SXCSXMgs_SXDId : public SXAddl {};
class SXAddl_SXCSXMgs_SXDMGrpSXDHMap : public SXAddl {};
class SXAddl_SXCSXrule_SXDEnd : public SXAddl {};
class SXAddl_SXCSXrule_SXDId : public SXAddl {};
class SXAddl_SXCSXrule_SXDSXrule : public SXAddl {};
class SXAddl_SXCView_SXDCalcMember : public SXAddl {};
class SXAddl_SXCView_SXDCalcMemString : public SXAddl {};
class SXAddl_SXCView_SXDCompactColHdr : public SXAddl {};
class SXAddl_SXCView_SXDCompactRwHdr : public SXAddl {};
class SXAddl_SXCView_SXDEnd : public SXAddl {};
class SXAddl_SXCView_SXDId : public SXAddl
{
class SXAddl_SXCCacheField_SXDIfdbMpMapCount : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDIfdbMpMapCount)
public:
virtual void readFields(CFRecord& record);
virtual BaseObjectPtr clone();
BiffStructurePtr clone();
XLUnicodeStringSegmentedSXADDL stName;
SXAddl_SXCCacheField_SXDIfdbMpMapCount(){}
~SXAddl_SXCCacheField_SXDIfdbMpMapCount(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
_UINT32 ifdbMemProp;
};
class SXAddl_SXCCacheField_SXDProperty : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDProperty)
public:
BiffStructurePtr clone();
SXAddl_SXCCacheField_SXDProperty(){}
~SXAddl_SXCCacheField_SXDProperty(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
_UINT32 ihdb;
};
class SXAddl_SXCCacheField_SXDPropName : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDPropName)
public:
BiffStructurePtr clone();
SXAddl_SXCCacheField_SXDPropName(){}
~SXAddl_SXCCacheField_SXDPropName(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
XLUnicodeStringSegmentedSXADDL stPropName;
};
class SXAddl_SXCCacheField_SXDSxrmitmCount : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDSxrmitmCount)
public:
BiffStructurePtr clone();
SXAddl_SXCCacheField_SXDSxrmitmCount(){}
~SXAddl_SXCCacheField_SXDSxrmitmCount(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
_UINT32 citm;
};
class SXAddl_SXCView_SXDSXPIIvmb : public SXAddl {};
class SXAddl_SXCView_SXDTableStyleClient : public SXAddl {};
class SXAddl_SXCView_SXDVer10Info : public SXAddl {};
class SXAddl_SXCView_SXDVer12Info : public SXAddl {};
class SXAddl_SXCView_SXDVerUpdInv : public SXAddl {};
class SXAddl_SXCCacheItem_SXDEnd : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheItem_SXDEnd)
public:
BiffStructurePtr clone();
SXAddl_SXCCacheItem_SXDEnd(){}
~SXAddl_SXCCacheItem_SXDEnd(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
};
class SXAddl_SXCCacheItem_SXDId : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheItem_SXDId)
public:
BiffStructurePtr clone();
SXAddl_SXCCacheItem_SXDId(){}
~SXAddl_SXCCacheItem_SXDId(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
_UINT32 dwItem;
};
class SXAddl_SXCView_SXDVer10Info: public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCView_SXDVer10Info)
public:
BiffStructurePtr clone();
SXAddl_SXCView_SXDVer10Info(){}
~SXAddl_SXCView_SXDVer10Info(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
unsigned char bVerSxMacro;
bool fDisplayImmediateItems;
bool fEnableDataEd;
bool fDisableFList;
bool fReenterOnLoadOnce;
bool fNotViewCalculatedMembers;
bool fNotVisualTotals;
bool fPageMultipleItemLabel;
bool fTensorFillCv;
bool fHideDDData;
};
class SXAddl_SXCView_SXDVer12Info: public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCView_SXDVer12Info)
public:
BiffStructurePtr clone();
SXAddl_SXCView_SXDVer12Info(){}
~SXAddl_SXCView_SXDVer12Info(){}
virtual void load(CFRecord& record);
static const ElementType type = typeSXAddl;
bool fDefaultCompact;
bool fDefaultOutline;
bool fOutlineData;
bool fCompactData;
bool fNewDropZones;
bool fPublished;
bool fTurnOffImmersive;
bool fSingleFilterPerField;
bool fNonDefaultSortInFlist;
bool fDontUseCustomLists;
bool fHideDrillIndicators;
bool fPrintDrillIndicators;
bool fMemPropsInTips;
bool fNoPivotTips;
unsigned char cIndentInc;
bool fNoHeaders;
};
//class SXAddl_SXCCacheItem_SXDItmMpMapCount : public SXAddl {};
//class SXAddl_SXCCacheItem_SXDItmMpropMap : public SXAddl {};
//class SXAddl_SXCCacheItem_SXDSxrmitmDisp : public SXAddl {};
//
//class SXAddl_SXCField12_SXDAutoshow : public SXAddl {};
//class SXAddl_SXCField12_SXDEnd : public SXAddl {};
//class SXAddl_SXCField12_SXDId : public SXAddl {};
//class SXAddl_SXCField12_SXDISXTH : public SXAddl {};
//class SXAddl_SXCField12_SXDMemberCaption : public SXAddl {};
//class SXAddl_SXCField12_SXDVer12Info : public SXAddl {};
//class SXAddl_SXCField12_SXDVerUpdInv : public SXAddl {};
//
//
//class SXAddl_SXCGroup_SXDEnd : public SXAddl {};
//class SXAddl_SXCGroup_SXDGrpInfo : public SXAddl {};
//class SXAddl_SXCGroup_SXDId : public SXAddl {};
//class SXAddl_SXCGroup_SXDMember : public SXAddl {};
//
//class SXAddl_SXCGrpLevel_SXDEnd : public SXAddl {};
//class SXAddl_SXCGrpLevel_SXDGrpLevelInfo : public SXAddl {};
//class SXAddl_SXCGrpLevel_SXDId : public SXAddl {};
//
//class SXAddl_SXCHierarchy_SXDDisplayFolder : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDEnd : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDFilterMember : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDFilterMember12 : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDIconSet : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDId : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDInfo12 : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDKPIGoal : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDKPIStatus : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDKPITime : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDKPITrend : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDKPIValue : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDKPIWeight : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDMeasureGrp : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDParentKPI : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDProperty : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDSXSetParentUnique : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDUserCaption : public SXAddl {};
//class SXAddl_SXCHierarchy_SXDVerUpdInv : public SXAddl {};
//
//class SXAddl_SXCQsi_SXDEnd : public SXAddl {};
//class SXAddl_SXCQsi_SXDId : public SXAddl {};
//
//class SXAddl_SXCQuery_SXDEnd : public SXAddl {};
//class SXAddl_SXCQuery_SXDReconnCond : public SXAddl {};
//class SXAddl_SXCQuery_SXDSrcConnFile : public SXAddl {};
//class SXAddl_SXCQuery_SXDSrcDataFile : public SXAddl {};
//class SXAddl_SXCQuery_SXDXMLSource : public SXAddl {};
//
//class SXAddl_SXCSXCondFmt_SXDEnd : public SXAddl {};
//class SXAddl_SXCSXCondFmt_SXDSXCondFmt : public SXAddl {};
//class SXAddl_SXCSXCondFmts_SXDEnd : public SXAddl {};
//class SXAddl_SXCSXCondFmts_SXDId : public SXAddl {};
//class SXAddl_SXCSXDH_SXDEnd : public SXAddl {};
//class SXAddl_SXCSXDH_SXDId : public SXAddl {};
//class SXAddl_SXCSXDH_SXDSxdh : public SXAddl {};
//
//class SXAddl_SXCSXfilt_SXDEnd : public SXAddl {};
//class SXAddl_SXCSXfilt_SXDId : public SXAddl {};
//class SXAddl_SXCSXfilt_SXDSXfilt : public SXAddl {};
//class SXAddl_SXCSXfilt_SXDSXItm : public SXAddl {};
//
//class SXAddl_SXCSXFilter12_SXDCaption : public SXAddl {};
//class SXAddl_SXCSXFilter12_SXDEnd : public SXAddl {};
//class SXAddl_SXCSXFilter12_SXDId : public SXAddl {};
//class SXAddl_SXCSXFilter12_SXDSXFilter : public SXAddl {};
//class SXAddl_SXCSXFilter12_SXDSXFilterDesc : public SXAddl {};
//class SXAddl_SXCSXFilter12_SXDSXFilterValue1: public SXAddl {};
//class SXAddl_SXCSXFilter12_SXDSXFilterValue2: public SXAddl {};
//class SXAddl_SXCSXFilter12_SXDXlsFilter : public SXAddl {};
//class SXAddl_SXCSXFilter12_SXDXlsFilterValue1: public SXAddl {};
//class SXAddl_SXCSXFilter12_SXDXlsFilterValue2: public SXAddl {};
//class SXAddl_SXCSXFilters12_SXDEnd : public SXAddl {};
//class SXAddl_SXCSXFilters12_SXDId : public SXAddl {};
//
//class SXAddl_SXCSXMg_SXDEnd : public SXAddl {};
//class SXAddl_SXCSXMg_SXDId : public SXAddl {};
//class SXAddl_SXCSXMg_SXDUserCaption : public SXAddl {};
//
//class SXAddl_SXCSXMgs_SXDEnd : public SXAddl {};
//class SXAddl_SXCSXMgs_SXDId : public SXAddl {};
//class SXAddl_SXCSXMgs_SXDMGrpSXDHMap : public SXAddl {};
//
//class SXAddl_SXCSXrule_SXDEnd : public SXAddl {};
//class SXAddl_SXCSXrule_SXDId : public SXAddl {};
//class SXAddl_SXCSXrule_SXDSXrule : public SXAddl {};
//
//class SXAddl_SXCView_SXDCalcMember : public SXAddl {};
//class SXAddl_SXCView_SXDCalcMemString : public SXAddl {};
//class SXAddl_SXCView_SXDCompactColHdr : public SXAddl {};
//class SXAddl_SXCView_SXDCompactRwHdr : public SXAddl {};
//class SXAddl_SXCView_SXDSXPIIvmb
//{
// SXAddl_SXCView_SXDSXPIIvmb(CFRecord& record);
//};
//class SXAddl_SXCView_SXDVerUpdInv : public SXAddl {};
} // namespace XLS

View File

@ -53,7 +53,10 @@ BaseObjectPtr SXStreamID::clone()
void SXStreamID::readFields(CFRecord& record)
{
GlobalWorkbookInfoPtr global_info = record.getGlobalWorkbookInfo();
record >> idStm;
global_info->arPivotCacheStream.push_back(idStm);
}
} // namespace XLS

View File

@ -73,13 +73,14 @@ int SXVI::serialize(std::wostream & strm)
{
CP_XML_NODE(L"item")
{
if (fHidden) CP_XML_ATTR(L"h", 1);
if (fMissing) CP_XML_ATTR(L"m", 1);
if (fHideDetail)CP_XML_ATTR(L"sd", 0);
if (fFormula) CP_XML_ATTR(L"f", 1);
if (itmType == 0)
{
if (fHidden) CP_XML_ATTR(L"h", 1);
CP_XML_ATTR(L"x", iCache);
}
switch(itmType)

View File

@ -77,8 +77,8 @@ void PtgSxName::assemble(AssemblerStack& ptg_stack, PtgQueue& extra_data, bool f
SXPair *pair = dynamic_cast<SXPair*>(global_info->arPivotSxNames[sxIndex].pair[0].get());
if (pair)
{
std::map<int, BaseObjectPtr>::iterator pFind = global_info->mapPivotCache.find(global_info->idPivotCache);
if (pFind != global_info->mapPivotCache.end())
std::unordered_map<int, BaseObjectPtr>::iterator pFind = global_info->mapPivotCacheStream.find(global_info->idPivotCache);
if (pFind != global_info->mapPivotCacheStream.end())
{
PIVOTCACHE* pivot_cache = dynamic_cast<PIVOTCACHE*>(pFind->second.get());
if (pivot_cache)

View File

@ -46,7 +46,10 @@ BiffStructurePtr XFExtGradient::clone()
void XFExtGradient::load(CFRecord& record)
{
record >> gradient >> cGradStops;
for(size_t i = 0; i < cGradStops; ++i)
if (cGradStops > 256) cGradStops = 256;
for(size_t i = 0; !record.isEOF() && i < cGradStops; ++i)
{
GradStop grad_stop;
record >> grad_stop;

View File

@ -61,8 +61,10 @@ void XFExtNoFRT::load(CFRecord& record)
unsigned short cexts;
record >> cexts;
for(unsigned short i = 0; !record.isEOF() && i < cexts; ++i)
for(unsigned short i = 0; i < cexts; ++i)
{
if (record.checkFitReadSafe(4) == false)
break;
ExtProp prop;
record >> prop;
rgExt.push_back(prop);

View File

@ -249,18 +249,15 @@ int FDB::serialize(std::wostream & strm, bool bSql)
// CP_XML_ATTR(L"containsString", 0);
// }
//}
if (bInteger)
{
if (bNumber) bInteger = false;
else bNumber = true;
}
if ((bDate & bNumber) || (bNumber & bString))
{
CP_XML_ATTR(L"containsSemiMixedTypes", 1);
}
else if ( bDate & bString)
else if ((bDate & bString) || (bEmpty & bInteger & bString))
{
if (bEmpty && bInteger)
bNumber = true;
CP_XML_ATTR(L"containsMixedTypes", 1);
}
else if (!bEmpty && !bString && !bBool)
@ -277,9 +274,22 @@ int FDB::serialize(std::wostream & strm, bool bSql)
CP_XML_ATTR(L"containsString", 0);
}
if (bEmpty) CP_XML_ATTR(L"containsBlank", 1);
if (bNumber) CP_XML_ATTR(L"containsNumber", 1);
if (bInteger) CP_XML_ATTR(L"containsInteger", 1);
if (bInteger && !bDate)
{
if (bString)
{
CP_XML_ATTR(L"containsInteger", 1);
}
else if (!bNumber)
{
CP_XML_ATTR(L"containsNumber", 1);
CP_XML_ATTR(L"containsInteger", 1);
}
}
if (fdb->fnumMinMaxValid)
{

View File

@ -69,109 +69,135 @@ PIVOTADDL = SXAddl_SXCView_SXDId *Continue_SxaddlSxString
[SXADDLSXFILTERS12] *SXAddl_SXCView_SXDVerUpdInv *SXAddl_SXCView_SXDSXPIIvmb
[SXAddl_SXCView_SXDVerUpdInv] SXAddl_SXCView_SXDEnd
*/
const bool PIVOTADDL::loadContent(BinProcessor& proc)
{
if(!proc.mandatory<SXAddl_SXCView_SXDId>())
{
return false;
}
m_SXAddl_SXCView_SXDId = elements_.back();
elements_.pop_back();
int count = proc.repeated<Continue_SxaddlSxString>(0, 0);
if (proc.optional<SXAddl_SXCView_SXDVer10Info>())
{
m_SXAddl_SXCView_SXDVer10Info = elements_.back();
elements_.pop_back();
}
if (proc.optional<SXAddl_SXCView_SXDVer12Info>())
{
m_SXAddl_SXCView_SXDVer12Info = elements_.back();
elements_.pop_back();
}
count = proc.repeated<SXADDLCALCMEMBER>(0, 0);
while(count > 0)
{
m_arSXADDLCALCMEMBER.push_back(elements_.front());
elements_.pop_front(); count--;
}
int count = proc.repeated<SXAddl>(0, 0);
count = proc.repeated<SXADDLHIERARCHY>(0, 0);
while(count > 0)
for (std::list<BaseObjectPtr>::iterator it = elements_.begin(); it != elements_.end(); it++)
{
m_arSXADDLHIERARCHY.push_back(elements_.front());
elements_.pop_front(); count--;
}
count = proc.repeated<SXADDLFIELD>(0, 0);
while(count > 0)
{
m_arSXADDLFIELD.push_back(elements_.front());
elements_.pop_front(); count--;
}
SXAddl* addl = dynamic_cast<SXAddl*>(it->get());
if (!addl) continue;
SXAddl_SXCView_SXDTableStyleClient* p1 = dynamic_cast<SXAddl_SXCView_SXDTableStyleClient*>(addl->content.get());
if (p1)
{
m_SXAddl_SXCView_SXDTableStyleClient = addl->content;
continue;
}
SXAddl_SXCView_SXDVer10Info* p2 = dynamic_cast<SXAddl_SXCView_SXDVer10Info*>(addl->content.get());
if (p2)
{
m_SXAddl_SXCView_SXDVer10Info = addl->content;
continue;
}
SXAddl_SXCView_SXDVer12Info* p3 = dynamic_cast<SXAddl_SXCView_SXDVer12Info*>(addl->content.get());
if (p3)
{
m_SXAddl_SXCView_SXDVer12Info = addl->content;
continue;
}
}
//if(!proc.mandatory<SXAddl_SXCView_SXDId>())
//{
// return false;
//}
//m_SXAddl_SXCView_SXDId = elements_.back();
//elements_.pop_back();
//
//int count = proc.repeated<Continue_SxaddlSxString>(0, 0);
//
//if (proc.optional<SXAddl_SXCView_SXDVer10Info>())
//{
// m_SXAddl_SXCView_SXDVer10Info = elements_.back();
// elements_.pop_back();
//}
//if (proc.optional<SXAddl_SXCView_SXDVer12Info>())
//{
// m_SXAddl_SXCView_SXDVer12Info = elements_.back();
// elements_.pop_back();
//}
//count = proc.repeated<SXADDLCALCMEMBER>(0, 0);
//while(count > 0)
//{
// m_arSXADDLCALCMEMBER.push_back(elements_.front());
// elements_.pop_front(); count--;
//}
count = proc.repeated<UNKNOWNFRT>(0, 0);
if (proc.optional<SXAddl_SXCView_SXDTableStyleClient>())
{
m_SXAddl_SXCView_SXDTableStyleClient = elements_.back();
elements_.pop_back();
}
//count = proc.repeated<SXADDLHIERARCHY>(0, 0);
//while(count > 0)
//{
// m_arSXADDLHIERARCHY.push_back(elements_.front());
// elements_.pop_front(); count--;
//}
//count = proc.repeated<SXADDLFIELD>(0, 0);
//while(count > 0)
//{
// m_arSXADDLFIELD.push_back(elements_.front());
// elements_.pop_front(); count--;
//}
if(proc.optional<SXAddl_SXCView_SXDCompactRwHdr>())
{
m_SXAddl_SXCView_SXDCompactRwHdr = elements_.back();
elements_.pop_back();
//count = proc.repeated<UNKNOWNFRT>(0, 0);
//
//if (proc.optional<SXAddl_SXCView_SXDTableStyleClient>())
//{
// m_SXAddl_SXCView_SXDTableStyleClient = elements_.back();
// elements_.pop_back();
//}
count = proc.repeated<Continue_SxaddlSxString>(0, 0);
}
if(proc.optional<SXAddl_SXCView_SXDCompactColHdr>())
{
m_SXAddl_SXCView_SXDCompactColHdr = elements_.back();
elements_.pop_back();
//if(proc.optional<SXAddl_SXCView_SXDCompactRwHdr>())
//{
// m_SXAddl_SXCView_SXDCompactRwHdr = elements_.back();
// elements_.pop_back();
count = proc.repeated<Continue_SxaddlSxString>(0, 0);
}
// count = proc.repeated<Continue_SxaddlSxString>(0, 0);
//}
//if(proc.optional<SXAddl_SXCView_SXDCompactColHdr>())
//{
// m_SXAddl_SXCView_SXDCompactColHdr = elements_.back();
// elements_.pop_back();
if (proc.optional<SXAddl_SXCView_SXDVerUpdInv>())
{
m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.back());
elements_.pop_back();
}
if (proc.optional<SXADDLCONDFMTS>())
{
m_SXADDLCONDFMTS = elements_.back();
elements_.pop_back();
}
if (proc.optional<SXADDLSXFILTERS12>())
{
m_SXAddl_SXADDLSXFILTERS12 = elements_.back();
elements_.pop_back();
}
count = proc.repeated<SXAddl_SXCView_SXDVerUpdInv>(0, 0);
while(count > 0)
{
m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.front());
elements_.pop_front(); count--;
}
// count = proc.repeated<Continue_SxaddlSxString>(0, 0);
//}
count = proc.repeated<SXAddl_SXCView_SXDSXPIIvmb>(0, 0);
while(count > 0)
{
m_arSXAddl_SXCView_SXDSXPIIvmb.push_back(elements_.front());
elements_.pop_front(); count--;
}
//if (proc.optional<SXAddl_SXCView_SXDVerUpdInv>())
//{
// m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.back());
// elements_.pop_back();
//}
//if (proc.optional<SXADDLCONDFMTS>())
//{
// m_SXADDLCONDFMTS = elements_.back();
// elements_.pop_back();
//}
//if (proc.optional<SXADDLSXFILTERS12>())
//{
// m_SXAddl_SXADDLSXFILTERS12 = elements_.back();
// elements_.pop_back();
//}
//count = proc.repeated<SXAddl_SXCView_SXDVerUpdInv>(0, 0);
//while(count > 0)
//{
// m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.front());
// elements_.pop_front(); count--;
//}
if (proc.optional<SXAddl_SXCView_SXDVerUpdInv>())
{
m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.front());
elements_.pop_front();
}
//count = proc.repeated<SXAddl_SXCView_SXDSXPIIvmb>(0, 0);
//while(count > 0)
//{
// m_arSXAddl_SXCView_SXDSXPIIvmb.push_back(elements_.front());
// elements_.pop_front(); count--;
//}
if (proc.optional<SXAddl_SXCView_SXDEnd>())
{
elements_.pop_back();
}
//if (proc.optional<SXAddl_SXCView_SXDVerUpdInv>())
//{
// m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.front());
// elements_.pop_front();
//}
//if (proc.optional<SXAddl_SXCView_SXDEnd>())
//{
// elements_.pop_back();
//}
return true;
}

View File

@ -49,21 +49,21 @@ public:
static const ElementType type = typePIVOTADDL;
BaseObjectPtr m_SXAddl_SXCView_SXDId;
BaseObjectPtr m_SXAddl_SXCView_SXDVer10Info;
BaseObjectPtr m_SXAddl_SXCView_SXDVer12Info;
BiffStructurePtr m_SXAddl_SXCView_SXDId;
BiffStructurePtr m_SXAddl_SXCView_SXDVer10Info;
BiffStructurePtr m_SXAddl_SXCView_SXDVer12Info;
BaseObjectPtr m_SXAddl_SXCView_SXDCompactRwHdr;
BaseObjectPtr m_SXAddl_SXCView_SXDCompactColHdr;
BaseObjectPtr m_SXAddl_SXADDLSXFILTERS12;
BaseObjectPtr m_SXADDLCONDFMTS;
BaseObjectPtr m_SXAddl_SXCView_SXDTableStyleClient;
BiffStructurePtr m_SXAddl_SXCView_SXDCompactRwHdr;
BiffStructurePtr m_SXAddl_SXCView_SXDCompactColHdr;
BiffStructurePtr m_SXAddl_SXADDLSXFILTERS12;
BiffStructurePtr m_SXADDLCONDFMTS;
BiffStructurePtr m_SXAddl_SXCView_SXDTableStyleClient;
std::vector<BaseObjectPtr> m_arSXAddl_SXCView_SXDVerUpdInv;
std::vector<BaseObjectPtr> m_arSXAddl_SXCView_SXDSXPIIvmb;
std::vector<BaseObjectPtr> m_arSXADDLFIELD;
std::vector<BaseObjectPtr> m_arSXADDLHIERARCHY;
std::vector<BaseObjectPtr> m_arSXADDLCALCMEMBER;
std::vector<BiffStructurePtr> m_arSXAddl_SXCView_SXDVerUpdInv;
std::vector<BiffStructurePtr> m_arSXAddl_SXCView_SXDSXPIIvmb;
std::vector<BiffStructurePtr> m_arSXADDLFIELD;
std::vector<BiffStructurePtr> m_arSXADDLHIERARCHY;
std::vector<BiffStructurePtr> m_arSXADDLCALCMEMBER;
};

View File

@ -98,11 +98,13 @@ int PIVOTCACHEDEFINITION::serialize_definitions(std::wostream & strm)
SXStreamID* streamId = dynamic_cast<SXStreamID*>(m_SXStreamID.get());
if (!streamId) return 0;
std::map<int, BaseObjectPtr>::iterator pFind = global_info_->mapPivotCache.find(streamId->idStm);
if (pFind == global_info_->mapPivotCache.end()) return 0;
std::unordered_map<int, BaseObjectPtr>::iterator pFind = global_info_->mapPivotCacheStream.find(streamId->idStm);
if (pFind == global_info_->mapPivotCacheStream.end()) return 0;
global_info_->idPivotCache = streamId->idStm;
global_info_->mapPivotCacheIndex.insert(std::make_pair(global_info_->idPivotCache, global_info_->mapPivotCacheIndex.size()));
PIVOTCACHE* pivot_cache = dynamic_cast<PIVOTCACHE*>(pFind->second.get());
if (!pivot_cache) return 0;
@ -124,13 +126,15 @@ int PIVOTCACHEDEFINITION::serialize_definitions(std::wostream & strm)
{
CP_XML_ATTR(L"r:id", L"rId1" );
}
else
{
CP_XML_ATTR(L"saveData", 0);
}
CP_XML_ATTR(L"enableRefresh", 1);
CP_XML_ATTR(L"refreshedBy", db->rgb.value());
CP_XML_ATTR(L"refreshedDate", db_ex->numDate.data.value);
CP_XML_ATTR(L"recordCount", db->crdbdb);
//createdVersion="1"
//refreshedVersion="2"
//upgradeOnRefresh="1">
//upgradeOnRefresh="1"
SXSRC* src = dynamic_cast<SXSRC*>(m_SXSRC.get());
if (src)
{
@ -176,8 +180,8 @@ int PIVOTCACHEDEFINITION::serialize_records(std::wostream & strm)
SXStreamID* streamId = dynamic_cast<SXStreamID*>(m_SXStreamID.get());
if (!streamId) return 0;
std::map<int, BaseObjectPtr>::iterator pFind = global_info_->mapPivotCache.find(streamId->idStm);
if (pFind == global_info_->mapPivotCache.end()) return 0;
std::unordered_map<int, BaseObjectPtr>::iterator pFind = global_info_->mapPivotCacheStream.find(streamId->idStm);
if (pFind == global_info_->mapPivotCacheStream.end()) return 0;
PIVOTCACHE* pivot_cache = dynamic_cast<PIVOTCACHE*>(pFind->second.get());
if (!pivot_cache) return 0;

View File

@ -31,9 +31,10 @@
*/
#include "PIVOTEX.h"
#include <Logic/Biff_records/SXEx.h>
#include <Logic/Biff_unions/PIVOTSELECT.h>
#include <Logic/Biff_unions/PIVOTFORMAT.h>
#include "PIVOTSELECT.h"
#include "PIVOTFORMAT.h"
#include "../Biff_records/SXEx.h"
namespace XLS
{
@ -54,7 +55,6 @@ BaseObjectPtr PIVOTEX::clone()
return BaseObjectPtr(new PIVOTEX(*this));
}
// PIVOTEX = SXEx *PIVOTSELECT *PIVOTFORMAT
const bool PIVOTEX::loadContent(BinProcessor& proc)
{
@ -62,9 +62,21 @@ const bool PIVOTEX::loadContent(BinProcessor& proc)
{
return false;
}
m_SXEx = elements_.back();
elements_.pop_back();
int count = 0;
count = proc.repeated<PIVOTSELECT>(0, 0);
while(count--)
{
m_arPIVOTSELECT.push_back(elements_.front()); elements_.pop_front();
}
count = proc.repeated<PIVOTFORMAT>(0, 0);
while(count--)
{
m_arPIVOTFORMAT.push_back(elements_.front()); elements_.pop_front();
}
return true;
}

View File

@ -36,8 +36,6 @@
namespace XLS
{
// Logical representation of PIVOTEX union of records
class PIVOTEX: public CompositeObject
{
BASE_OBJECT_DEFINE_CLASS_NAME(PIVOTEX)
@ -49,7 +47,12 @@ public:
virtual const bool loadContent(BinProcessor& proc);
static const ElementType type = typePIVOTEX;
static const ElementType type = typePIVOTEX;
BaseObjectPtr m_SXEx;
std::vector<BaseObjectPtr> m_arPIVOTSELECT;
std::vector<BaseObjectPtr> m_arPIVOTFORMAT;
};
} // namespace XLS

View File

@ -31,9 +31,10 @@
*/
#include "PIVOTFORMAT.h"
#include <Logic/Biff_records/SxFormat.h>
#include <Logic/Biff_unions/PIVOTRULE.h>
#include <Logic/Biff_records/SxDXF.h>
#include "PIVOTRULE.h"
#include "../Biff_records/SxFormat.h"
#include "../Biff_records/SxDXF.h"
namespace XLS
{
@ -54,7 +55,6 @@ BaseObjectPtr PIVOTFORMAT::clone()
return BaseObjectPtr(new PIVOTFORMAT(*this));
}
// PIVOTFORMAT = SxFormat PIVOTRULE [SxDXF]
const bool PIVOTFORMAT::loadContent(BinProcessor& proc)
{
@ -62,11 +62,18 @@ const bool PIVOTFORMAT::loadContent(BinProcessor& proc)
{
return false;
}
m_SxFormat = elements_.back();
elements_.pop_back();
if (proc.mandatory<PIVOTRULE>())
{
m_PIVOTRULE = elements_.back();
elements_.pop_back();
}
if (proc.optional<SxDXF>())
{
m_SxDXF = elements_.back();
elements_.pop_back();
}
return true;

View File

@ -36,8 +36,6 @@
namespace XLS
{
// Logical representation of PIVOTFORMAT union of records
class PIVOTFORMAT: public CompositeObject
{
BASE_OBJECT_DEFINE_CLASS_NAME(PIVOTFORMAT)
@ -49,7 +47,11 @@ public:
virtual const bool loadContent(BinProcessor& proc);
static const ElementType type = typePIVOTFORMAT;
static const ElementType type = typePIVOTFORMAT;
BaseObjectPtr m_SxFormat;
BaseObjectPtr m_PIVOTRULE;
BaseObjectPtr m_SxDXF;
};
} // namespace XLS

View File

@ -31,8 +31,8 @@
*/
#include "PIVOTFRT.h"
#include <Logic/Biff_unions/PIVOTFRT9.h>
#include <Logic/Biff_unions/PIVOTADDL.h>
#include "PIVOTFRT9.h"
#include "PIVOTADDL.h"
namespace XLS
{

View File

@ -99,7 +99,7 @@ int PIVOTVD::serialize(std::wostream & strm)
if (vd_ex->ifmt > 0)
{
CP_XML_ATTR(L"numFmtId", vd_ex->ifmt);
CP_XML_ATTR(L"numFmtId", vd_ex->ifmt != 44 ? vd_ex->ifmt : 0);
}
if (vd->stName.value().empty() == false)

View File

@ -38,16 +38,25 @@
#include "PIVOTPI.h"
#include "PIVOTLI.h"
#include "PIVOTEX.h"
#include "PIVOTADDL.h"
#include "PIVOTFORMAT.h"
#include "PIVOTFRT9.h"
#include "../Biff_records/SXDI.h"
#include "../Biff_records/SxView.h"
#include "../Biff_records/SXAddl.h"
#include "../Biff_records/SXEx.h"
#include "../Biff_records/SxFormat.h"
#include "../Biff_records/SxDXF.h"
#include "../Biff_records/SXViewEx9.h"
namespace XLS
{
PIVOTVIEW::PIVOTVIEW()
{
indexCache = -1;
indexStream = -1;
indexCache = -1;
}
PIVOTVIEW::~PIVOTVIEW()
@ -62,6 +71,8 @@ BaseObjectPtr PIVOTVIEW::clone()
// PIVOTVIEW = PIVOTCORE [PIVOTFRT]
const bool PIVOTVIEW::loadContent(BinProcessor& proc)
{
global_info_ = proc.getGlobalWorkbookInfo();
if(!proc.mandatory<PIVOTCORE>())
{
return false;
@ -95,8 +106,20 @@ int PIVOTVIEW::serialize(std::wostream & strm)
if (!view) return 0;
PIVOTFRT* frt = dynamic_cast<PIVOTFRT*>(m_PIVOTFRT.get());
PIVOTEX* pivot_ex = dynamic_cast<PIVOTEX*>(core->m_PIVOTEX.get());
indexCache = view->iCache;
PIVOTADDL* addls = frt ? dynamic_cast<PIVOTADDL*>(frt->m_PIVOTADDL.get()) : NULL;
PIVOTFRT9* frt9 = frt ? dynamic_cast<PIVOTFRT9*>(frt->m_PIVOTFRT9.get()) : NULL;
SXEx *view_ex = pivot_ex ? dynamic_cast<SXEx*>(pivot_ex->m_SXEx.get()) : NULL;
SXViewEx9 *view_ex9 = pivot_ex ? dynamic_cast<SXViewEx9*>(frt9->m_SXViewEx9.get()) : NULL;
SXAddl_SXCView_SXDVer10Info *view_ex10 = addls ? dynamic_cast<SXAddl_SXCView_SXDVer10Info*>(addls->m_SXAddl_SXCView_SXDTableStyleClient.get()) : NULL;
SXAddl_SXCView_SXDVer12Info *view_ex12 = addls ? dynamic_cast<SXAddl_SXCView_SXDVer12Info*>(addls->m_SXAddl_SXCView_SXDTableStyleClient.get()) : NULL;
indexStream = global_info_->arPivotCacheStream[view->iCache];
std::map<int, int>::iterator pFindIndex = global_info_->mapPivotCacheIndex.find(indexStream);
indexCache = pFindIndex->second;
CP_XML_WRITER(strm)
{
@ -105,8 +128,11 @@ int PIVOTVIEW::serialize(std::wostream & strm)
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
CP_XML_ATTR(L"name", view->stTable.value());
CP_XML_ATTR(L"cacheId", view->iCache);
CP_XML_ATTR(L"dataOnRows", view->sxaxis4Data.bRw);
CP_XML_ATTR(L"cacheId", indexCache);
if (view->sxaxis4Data.bRw)
{
CP_XML_ATTR(L"dataOnRows", view->sxaxis4Data.bRw);
}
CP_XML_ATTR(L"applyNumberFormats", view->fAtrNum);
CP_XML_ATTR(L"applyBorderFormats", view->fAtrBdr);
CP_XML_ATTR(L"applyFontFormats", view->fAtrFnt);
@ -117,15 +143,39 @@ int PIVOTVIEW::serialize(std::wostream & strm)
{
CP_XML_ATTR(L"dataCaption", view->stData.value());
}
CP_XML_ATTR(L"asteriskTotals", 1);
CP_XML_ATTR(L"showMemberPropertyTips", 0);
CP_XML_ATTR(L"useAutoFormatting", view->fAutoFormat);
CP_XML_ATTR(L"autoFormatId", view->itblAutoFmt);
CP_XML_ATTR(L"itemPrintTitles", 1);
CP_XML_ATTR(L"indent", 0);
CP_XML_ATTR(L"compact", 0);
CP_XML_ATTR(L"compactData", 0);
CP_XML_ATTR(L"gridDropZones", 1);
CP_XML_ATTR(L"autoFormatId", view->itblAutoFmt);
if (view_ex9)
{
CP_XML_ATTR(L"itemPrintTitles", view_ex9->fPrintTitles);
CP_XML_ATTR(L"outline", view_ex9->fLineMode);
CP_XML_ATTR(L"outlineData", view_ex12 ? view_ex12->fOutlineData : view_ex9->fLineMode);
}
CP_XML_ATTR(L"asteriskTotals", view_ex10 ? view_ex10->fNotVisualTotals : 0);
if (view_ex12)
{
CP_XML_ATTR(L"indent", view_ex12->cIndentInc );
CP_XML_ATTR(L"published", view_ex12->fPublished);
CP_XML_ATTR(L"compact", view_ex12->fCompactData);
CP_XML_ATTR(L"compactData", view_ex12->fCompactData);
CP_XML_ATTR(L"gridDropZones", view_ex12->fNewDropZones);
CP_XML_ATTR(L"showDrill", !view_ex12->fHideDrillIndicators);
CP_XML_ATTR(L"printDrill", view_ex12->fPrintDrillIndicators);
}
if (view_ex)
{
if (!view_ex->fEnableWizard) CP_XML_ATTR(L"enableWizard", 0);
if (!view_ex->fEnableDrilldown) CP_XML_ATTR(L"enableDrill", 0);
//CP_XML_ATTR(L"disableFieldList", !view_ex->fEnableFieldDialog);//enableFieldPropert
if (!view_ex->stError.value().empty())
CP_XML_ATTR(L"errorCaption", view_ex->stError.value());
}
CP_XML_NODE(L"location")
{
@ -133,8 +183,12 @@ int PIVOTVIEW::serialize(std::wostream & strm)
CP_XML_ATTR(L"firstHeaderRow", view->rwFirstHead - view->ref.rowFirst );
CP_XML_ATTR(L"firstDataRow", view->rwFirstData - view->ref.rowFirst);
CP_XML_ATTR(L"firstDataCol", view->colFirstData - view->ref.columnFirst);
CP_XML_ATTR(L"rowPageCount", 1);
CP_XML_ATTR(L"colPageCount", 1);
if (view->cDimPg > 0)
{
CP_XML_ATTR(L"rowPageCount", view->cDimPg);
CP_XML_ATTR(L"colPageCount", 1);
}
}
CP_XML_NODE(L"pivotFields")
{
@ -204,14 +258,23 @@ int PIVOTVIEW::serialize(std::wostream & strm)
}
}
}
//CP_XML_NODE(L"pivotTableStyleInfo")
//{
// CP_XML_ATTR(L"showRowHeaders", 1);
// CP_XML_ATTR(L"showColHeaders", 1);
// CP_XML_ATTR(L"showRowStripes", 0);
// CP_XML_ATTR(L"showColStripes", 0);
// CP_XML_ATTR(L"showLastColumn", 1);
//}
if ((addls) && (addls->m_SXAddl_SXCView_SXDTableStyleClient))
{
SXAddl_SXCView_SXDTableStyleClient* table_style = dynamic_cast<SXAddl_SXCView_SXDTableStyleClient*>(addls->m_SXAddl_SXCView_SXDTableStyleClient.get());
CP_XML_NODE(L"pivotTableStyleInfo")
{
if (!table_style->stName.value().empty())
CP_XML_ATTR(L"name", table_style->stName.value());
CP_XML_ATTR(L"showRowHeaders", table_style->fRowHeaders);
CP_XML_ATTR(L"showColHeaders", table_style->fColumnHeaders);
CP_XML_ATTR(L"showRowStripes", table_style->fRowStrips);
CP_XML_ATTR(L"showColStripes", table_style->fColumnStrips);
CP_XML_ATTR(L"showLastColumn", table_style->fLastColumn);
}
}
}
}

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