Compare commits

..

51 Commits

Author SHA1 Message Date
406c290be4 . 2017-11-01 15:40:15 +03:00
5ae4d7f819 XlsFormat - ... 2017-11-01 13:43:24 +03:00
4d836c180a XlsFormat - mso storage (customXml) 2017-10-31 17:40:49 +03:00
e08b6542d4 XlsFormat - ctrlProps 2017-10-31 15:15:44 +03:00
4b122c0b94 . 2017-10-30 13:47:16 +03:00
8b80aa94b7 XlsFormat - .. 2017-10-27 19:51:00 +03:00
f960fc60bb removed all stubs for FldChar 2017-10-27 19:05:06 +03:00
64213746b0 XlsFormat - query tables 2017-10-26 18:18:09 +03:00
09941c67ac . 2017-10-26 17:16:29 +03:00
c2605bb582 x2t - vps 2017-10-26 12:55:06 +03:00
ab2703c825 XlsFormat - vps 2017-10-26 11:04:35 +03:00
08ce8cb3f5 XlsFormat ... 2017-10-26 10:47:36 +03:00
5efe043ab3 refactoring 2017-10-25 18:34:05 +03:00
f2af1ccd36 refactoring 2017-10-25 18:22:51 +03:00
113d5b4ca3 refactoring 2017-10-25 18:10:59 +03:00
d3461dd3cb refactor 2017-10-25 17:54:27 +03:00
e95a0fb765 XlsFormat - activeX objects 2017-10-25 11:48:53 +03:00
c5ce1e27e4 x2t version up 2017-10-21 14:01:11 +03:00
7ecc7fa1df compaund file stream in unicode 2017-10-21 13:28:29 +03:00
c46cd9e6e5 Merge pull request #48 from ONLYOFFICE/hotfix/v5.0.3
Hotfix/v5.0.3
2017-10-20 17:45:01 +03:00
e299e59d11 fix write compaund files 2017-10-20 15:52:09 +03:00
1e0f4d6fdb XlsFormat - developers controls (buttons, options, ....), fix vba stream 2017-10-19 17:39:00 +03:00
4dae8f50fa Merge pull request #47 from ONLYOFFICE/feature/ooxmlsign
Feature/ooxmlsign
2017-10-18 19:08:30 +03:00
9cc5ed1db0 . 2017-10-18 19:03:58 +03:00
6d1dd9c420 ms crypto bug 2017-10-18 18:58:04 +03:00
a038e1562f XlsFormat - control objects 2017-10-18 14:38:31 +03:00
549e3dc579 Merge pull request #46 from ONLYOFFICE/feature/crypt
crypto fix padding size
2017-10-17 13:01:29 +03:00
8440b18223 crypto fix padding size 2017-10-17 12:57:47 +03:00
9c7a03fdc5 OdfFormatWriter - add ole objects 2017-10-17 11:40:37 +03:00
9272b27a69 crypto fix padding size 2017-10-16 19:37:18 +03:00
ef57330a79 . 2017-10-16 19:20:28 +03:00
d35619eeae Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop
* 'develop' of https://github.com/ONLYOFFICE/core:
  x2t binary - fix convert ole without vml drawing
  OdsFormat - fix absolute anchor for ole
  XlsFormat - activeX, controls & ole embedded & links
  xml string as second command-line param(first - path to xml)
  .
  --all-fonts-path param
  Added empty files
  v8 (windows correct)
  Added docbuilder target
2017-10-16 17:53:40 +03:00
b38c552cc5 fixed serialize 2017-10-16 17:53:31 +03:00
1b91ee579c x2t binary - fix convert ole without vml drawing 2017-10-16 14:22:53 +03:00
337c92e522 OdsFormat - fix absolute anchor for ole 2017-10-16 12:22:30 +03:00
8fe1eb7525 XlsFormat - activeX, controls & ole embedded & links 2017-10-16 11:28:46 +03:00
1deb2a6905 Merge 2017-10-13 14:44:53 +03:00
470eddf2b1 Merge 2017-10-13 14:43:33 +03:00
69a787411c xml string as second command-line param(first - path to xml) 2017-10-13 13:51:27 +03:00
22f986295f . 2017-10-12 18:17:16 +03:00
86d2bde83b x2t version up 2017-10-12 12:01:44 +03:00
07041d60f6 . 2017-10-12 11:54:47 +03:00
a5466ab740 XlsFormatReader - external data (dde, workbook, ..) 2017-10-12 11:41:21 +03:00
dfd54ff53f _MSC_VER >= 1900 build 2017-10-11 16:30:37 +03:00
6ec7d77e19 speed logger 2017-10-09 15:21:16 +03:00
3813be21c7 --all-fonts-path param 2017-10-09 15:11:30 +03:00
68c8c0cb29 Merge pull request #42 from ONLYOFFICE/feature/docbuilder
Feature/docbuilder
2017-10-06 11:57:57 +03:00
ab0c5703a5 Added empty files 2017-10-06 11:04:59 +03:00
e22b63347f v8 (windows correct) 2017-10-05 18:13:52 +03:00
438ba3aded v5.0.1 2017-10-05 14:46:28 +03:00
29b002ca80 Added docbuilder target 2017-10-04 14:56:03 +03:00
374 changed files with 9885 additions and 6830 deletions

View File

@ -501,7 +501,7 @@ namespace DocFileFormat
facet.widen((char*)bytes, (char*)bytes + size, &result[0]);
for (long i=0; i < result.length(); i++)
for (size_t i=0; i < result.length(); i++)
{
STLCollection->push_back(result[i]);
}
@ -536,7 +536,7 @@ namespace DocFileFormat
delete [] pStrUtf16;
return GetSTLCollectionFromLocale(STLCollection, bytes,size);
}
for (long i=0; i < nLength; i++)
for (unsigned int i = 0; i < nLength; i++)
{
STLCollection->push_back(pStrUtf16[i]);
}
@ -566,7 +566,7 @@ namespace DocFileFormat
delete [] pStrUtf32;
return GetSTLCollectionFromLocale(STLCollection, bytes, size);
}
for (long i=0; i < nLength; i++)
for (unsigned int i = 0; i < nLength; i++)
{
STLCollection->push_back(pStrUtf32[i]);
}
@ -652,7 +652,7 @@ namespace DocFileFormat
NSUnicodeConverter::CUnicodeConverter oConverter;
std::wstring unicode_string = oConverter.toUnicode((char*)bytes, size, sCodePage.c_str());
for (long i=0; i < unicode_string.size(); i++)
for (size_t i = 0; i < unicode_string.size(); i++)
{
STLCollection->push_back(unicode_string[i]);
}

View File

@ -393,7 +393,7 @@ namespace XMLTools
else
{
std::string s(m_str.begin(), m_str.end());
file.WriteFile((unsigned char*)s.c_str(), s.length());
file.WriteFile((unsigned char*)s.c_str(), (DWORD)s.length());
}
file.CloseFile();
return true;

View File

@ -321,7 +321,7 @@ namespace DocFileFormat
case sprmCFtcBi :
{//default from FontTable
SHORT nIndex = FormatUtils::BytesToUInt16 (iter->Arguments, 0, iter->argumentsSize);
size_t nIndex = FormatUtils::BytesToUInt16 (iter->Arguments, 0, iter->argumentsSize);
if( nIndex < _doc->FontTable->Data.size() )
{
FontFamilyName* ffn = static_cast<FontFamilyName*>( _doc->FontTable->operator [] ( nIndex ) );
@ -373,7 +373,7 @@ namespace DocFileFormat
case sprmOldCFtc:
case sprmCRgFtc0:
{ // font family
int nIndex = FormatUtils::BytesToUInt16( iter->Arguments, 0, iter->argumentsSize );
size_t nIndex = FormatUtils::BytesToUInt16( iter->Arguments, 0, iter->argumentsSize );
if( nIndex < _doc->FontTable->Data.size() )
{
@ -388,7 +388,8 @@ namespace DocFileFormat
case sprmCRgFtc1:
{
int nIndex = FormatUtils::BytesToUInt16( iter->Arguments, 0, iter->argumentsSize );
size_t nIndex = FormatUtils::BytesToUInt16( iter->Arguments, 0, iter->argumentsSize );
if( nIndex >= 0 && nIndex < _doc->FontTable->Data.size() )
{
XMLTools::XMLAttribute* eastAsia = new XMLTools::XMLAttribute( L"w:eastAsia" );
@ -403,7 +404,8 @@ namespace DocFileFormat
case sprmCRgFtc2:
{
int nIndex = FormatUtils::BytesToUInt16( iter->Arguments, 0, iter->argumentsSize );
size_t nIndex = FormatUtils::BytesToUInt16( iter->Arguments, 0, iter->argumentsSize );
if( nIndex>=0 && nIndex < _doc->FontTable->Data.size() )
{
XMLTools::XMLAttribute* ansi = new XMLTools::XMLAttribute( L"w:hAnsi" );

View File

@ -88,7 +88,7 @@ namespace DocFileFormat
int DocumentMapping::getCurrentSection(int cp)
{
//if cp is the last char of a section, the next section will start at cp +1
int current = 0;
size_t current = 0;
for (std::vector<int>::iterator iter = m_document->SectionPlex->CharacterPositions.begin() + 1; iter != m_document->SectionPlex->CharacterPositions.end(); ++iter)
{
@ -107,7 +107,7 @@ namespace DocFileFormat
{
if ( !m_document->ListPlex ) return -1;
for (int i = 1; i < m_document->ListPlex->CharacterPositions.size(); i++)
for (size_t i = 1; i < m_document->ListPlex->CharacterPositions.size(); i++)
{
if ((fc >= m_document->ListPlex->CharacterPositions[i-1]) && (fc_end <= m_document->ListPlex->CharacterPositions[i]))
{
@ -382,7 +382,7 @@ namespace DocFileFormat
int DocumentMapping::writeRun (std::vector<wchar_t>* chars, CharacterPropertyExceptions* chpx, int initialCp)
{
int cp = initialCp;
int result_cp = cp + chars->size();
int result_cp = cp + (int)chars->size();
if ((_skipRuns <= 0) && (chars->size() > 0))
{
@ -564,7 +564,7 @@ namespace DocFileFormat
int cpFieldEnd = searchNextTextMark( m_document->Text, cpFieldStart, TextMark::FieldEndMark );
std::wstring f;
if (cpFieldEnd < m_document->Text->size())
if (cpFieldEnd < (int)m_document->Text->size())
f = std::wstring( ( m_document->Text->begin() + cpFieldStart ), ( m_document->Text->begin() + cpFieldEnd + 1 ) );
std::wstring EMBED ( L" EMBED" );
@ -660,11 +660,11 @@ namespace DocFileFormat
if (search( f1.begin(), f1.end(), PAGEREF.begin(), PAGEREF.end()) != f1.end())
{
int d = f1.find(PAGEREF);
int d = (int)f1.find(PAGEREF);
_writeWebHidden = true;
std::wstring _writeTocLink =f1.substr(d + 9);
d = _writeTocLink.find(L" ");
d = (int)_writeTocLink.find(L" ");
_writeTocLink = _writeTocLink.substr(0, d);
_writeAfterRun = std::wstring (L"<w:hyperlink w:anchor = \"");
@ -1176,7 +1176,8 @@ namespace DocFileFormat
TableInfo tai( papx );
//build the table grid
std::vector<short>* grid = buildTableGrid( cp, nestingLevel );
std::vector<short> grid, grid_write;
buildTableGrid( cp, nestingLevel, grid, grid_write );
//find first row end
int fcRowEnd = findRowEndFc( cp, nestingLevel );
@ -1187,7 +1188,7 @@ namespace DocFileFormat
m_pXmlWriter->WriteNodeBegin( L"w:tbl" );
//Convert it
TablePropertiesMapping *tpMapping = new TablePropertiesMapping( m_pXmlWriter, m_document->Styles, grid );
TablePropertiesMapping *tpMapping = new TablePropertiesMapping( m_pXmlWriter, m_document->Styles, &grid, &grid_write );
row1Tapx.Convert( tpMapping );
@ -1200,7 +1201,7 @@ namespace DocFileFormat
//only convert the cells with the given nesting level
while ( tai.iTap == nestingLevel )
{
cp = writeTableRow( cp, grid, nestingLevel );
cp = writeTableRow( cp, &grid, &grid_write, nestingLevel );
//?fc = m_document->FindFileCharPos(cp );
fc = m_document->m_PieceTable->FileCharacterPositions->operator []( cp );
papx = findValidPapx( fc );
@ -1213,7 +1214,7 @@ namespace DocFileFormat
//convert until the end of table is reached
while ( tai.fInTable )
{
cp = writeTableRow( cp, grid, nestingLevel );
cp = writeTableRow( cp, &grid, &grid_write, nestingLevel );
fc = m_document->FindFileCharPos( cp );
papx = findValidPapx( fc );
@ -1224,18 +1225,16 @@ namespace DocFileFormat
//close w:tbl
m_pXmlWriter->WriteNodeEnd( L"w:tbl" );
RELEASEOBJECT( grid );
return cp;
}
// Builds a list that contains the width of the several columns of the table.
std::vector<short>* DocumentMapping::buildTableGrid(int initialCp, unsigned int nestingLevel)
bool DocumentMapping::buildTableGrid(int initialCp, unsigned int nestingLevel, std::vector<short>& grid, std::vector<short>& grid_write)
{
ParagraphPropertyExceptions* backup = _lastValidPapx;
std::vector<short> boundaries;
std::vector<short>* grid = new std::vector<short>();
std::vector<short> boundaries_all;
int cp = initialCp;
int fc = m_document->FindFileCharPos( cp );
@ -1252,25 +1251,43 @@ namespace DocFileFormat
for ( std::list<SinglePropertyModifier>::iterator iter = papx->grpprl->begin(); iter != papx->grpprl->end(); iter++ )
{
//find the tDef SPRM
if ( iter->OpCode == sprmTDefTable || iter->OpCode == sprmOldTDefTable)
DWORD code = iter->OpCode;
switch(iter->OpCode)
{
unsigned char itcMac = iter->Arguments[0];
for (int i = 0; i < itcMac; i++)
case sprmTDefTable:
case sprmOldTDefTable:
{
short boundary1 = FormatUtils::BytesToInt16( iter->Arguments, 1 + ( i * 2 ), iter->argumentsSize );
unsigned char itcMac = iter->Arguments[0];
if ( find( boundaries.begin(), boundaries.end(), boundary1 ) == boundaries.end() )
while(boundaries.size() < itcMac + 1)
boundaries.push_back(-0x7fff);
short boundary0 = -0x7fff;
for (unsigned char i = 0; i < itcMac; i++)
{
boundaries.push_back( boundary1 );
}
short boundary1 = FormatUtils::BytesToInt16( iter->Arguments, 1 + ( i * 2 ), iter->argumentsSize );
short boundary2 = FormatUtils::BytesToInt16( iter->Arguments, 1 + ( ( i + 1 ) * 2 ), iter->argumentsSize );
short boundary2 = FormatUtils::BytesToInt16( iter->Arguments, 1 + ( ( i + 1 ) * 2 ), iter->argumentsSize );
if (boundary2 - boundary1 > 1 && boundary1 - boundary0 > 1)
{
if ( boundaries[i] == -0x7fff || boundaries[i+1] == -0x7fff)
{
boundaries[i] = boundary1;
boundaries[i+1] = boundary2;
}
}
if ( find( boundaries_all.begin(), boundaries_all.end(), boundary1 ) == boundaries_all.end() )
{
boundaries_all.push_back( boundary1 );
}
if ( find( boundaries.begin(), boundaries.end(), boundary2 ) == boundaries.end() )
{
boundaries.push_back( boundary2 );
}
if ( find( boundaries_all.begin(), boundaries_all.end(), boundary2 ) == boundaries_all.end() )
{
boundaries_all.push_back( boundary2 );
}
boundary0 = boundary1;
}break;
}
}
}
@ -1286,19 +1303,25 @@ namespace DocFileFormat
}
//build the grid based on the boundaries
sort( boundaries.begin(), boundaries.end() );
sort( boundaries_all.begin(), boundaries_all.end() );
if ( !boundaries.empty() )
{
for ( unsigned int i = 0; i < ( boundaries.size() - 1 ); i++ )
for ( size_t i = 0; i < ( boundaries.size() - 1 ); i++ )
{
grid->push_back( boundaries[i + 1] - boundaries[i] );
grid_write.push_back( boundaries[i + 1] - boundaries[i] );
}
}
if ( !boundaries_all.empty() )
{
for ( size_t i = 0; i < ( boundaries_all.size() - 1 ); i++ )
{
grid.push_back( boundaries_all[i + 1] - boundaries_all[i] );
}
}
_lastValidPapx = backup;
return grid;
return true;
}
// Finds the FC of the next row end mark.
@ -1418,7 +1441,7 @@ namespace DocFileFormat
}
/// Writes the table row that starts at the given cp value and ends at the next row end mark
int DocumentMapping::writeTableRow(int initialCp, std::vector<short>* grid, unsigned int nestingLevel)
int DocumentMapping::writeTableRow(int initialCp, std::vector<short>* grid, std::vector<short>* grid_write, unsigned int nestingLevel)
{
int cp = initialCp;
int fc = m_document->FindFileCharPos( cp );
@ -1448,7 +1471,7 @@ namespace DocFileFormat
//Write until the first "inner trailer paragraph" is reached
while ( !( ( m_document->Text->at( cp ) == TextMark::ParagraphEnd ) && ( tai.fInnerTtp ) ) && tai.fInTable )
{
cp = writeTableCell( cp, &tapx, grid, gridIndex, cellIndex, nestingLevel );
cp = writeTableCell( cp, &tapx, grid, grid_write, gridIndex, cellIndex, nestingLevel );
cellIndex++;
//each cell has it's own PAPX
@ -1465,7 +1488,7 @@ namespace DocFileFormat
while ( !( ( m_document->Text->at( cp ) == TextMark::CellOrRowMark ) && ( tai.fTtp ) )
&& tai.fInTable )
{
cp = writeTableCell( cp, &tapx, grid, gridIndex, cellIndex, nestingLevel );
cp = writeTableCell( cp, &tapx, grid, grid_write, gridIndex, cellIndex, nestingLevel );
cellIndex++;
//each cell has it's own PAPX
@ -1488,18 +1511,15 @@ namespace DocFileFormat
}
/// Writes the table cell that starts at the given cp value and ends at the next cell end mark
int DocumentMapping::writeTableCell(int initialCp, TablePropertyExceptions* tapx, std::vector<short>* grid, int& gridIndex, int cellIndex, unsigned int nestingLevel )
int DocumentMapping::writeTableCell(int initialCp, TablePropertyExceptions* tapx, std::vector<short>* grid, std::vector<short>* grid_write, int& gridIndex, int cellIndex, unsigned int nestingLevel )
{
int cp = initialCp;
int cp = initialCp;
int cpCellEnd = findCellEndCp( initialCp, nestingLevel );
//start w:tc
m_pXmlWriter->WriteNodeBegin( L"w:tc" );
//start w:tc
m_pXmlWriter->WriteNodeBegin( L"w:tc" );
//find cell end
int cpCellEnd = findCellEndCp( initialCp, nestingLevel );
//convert the properties
TableCellPropertiesMapping* tcpMapping = new TableCellPropertiesMapping( m_pXmlWriter, grid, gridIndex, cellIndex );
TableCellPropertiesMapping* tcpMapping = new TableCellPropertiesMapping( m_pXmlWriter, grid, grid_write, gridIndex, cellIndex );
if ( tapx != NULL )
{
@ -1510,7 +1530,7 @@ namespace DocFileFormat
RELEASEOBJECT( tcpMapping );
//write the paragraphs of the cell
//write the paragraphs of the cell
while ( cp < cpCellEnd )
{
//cp = writeParagraph(cp);
@ -1541,7 +1561,7 @@ namespace DocFileFormat
}
}
//end w:tc
//end w:tc
m_pXmlWriter->WriteNodeEnd( L"w:tc" );
return cp;

View File

@ -108,15 +108,15 @@ namespace DocFileFormat
// Writes the table starts at the given cp value
int writeTable ( int initialCp, unsigned int nestingLevel );
// Builds a list that contains the width of the several columns of the table.
std::vector<short>* buildTableGrid( int initialCp, unsigned int nestingLevel );
bool buildTableGrid( int initialCp, unsigned int nestingLevel, std::vector<short>& grid, std::vector<short>& grid_write );
// Finds the FC of the next row end mark.
int findRowEndFc ( int initialCp, int& rowEndCp, unsigned int nestingLevel );
// Finds the FC of the next row end mark.
int findRowEndFc ( int initialCp, unsigned int nestingLevel );
// Writes the table row that starts at the given cp value and ends at the next row end mark
int writeTableRow ( int initialCp, std::vector<short>* grid, unsigned int nestingLevel );
int writeTableRow ( int initialCp, std::vector<short>* grid, std::vector<short>* grid_write, unsigned int nestingLevel );
// Writes the table cell that starts at the given cp value and ends at the next cell end mark
int writeTableCell ( int initialCp, TablePropertyExceptions* tapx, std::vector<short>* grid, int& gridIndex, int cellIndex, unsigned int nestingLevel );
int writeTableCell ( int initialCp, TablePropertyExceptions* tapx, std::vector<short>* grid, std::vector<short>* grid_write, int& gridIndex, int cellIndex, unsigned int nestingLevel );
int findCellEndCp ( int initialCp, unsigned int nestingLevel );
bool writeBookmarks ( int cp );

View File

@ -136,7 +136,7 @@ namespace DocFileFormat
if (lMinF <= point.x)
{
int index = (DWORD)point.x - 0x80000000;
if (index >= 0 && index < guides.size())
if (index >= 0 && index < (int)guides.size())
{
point.x = guides[index].param3;
}
@ -144,7 +144,7 @@ namespace DocFileFormat
if (lMinF <= point.y)
{
int index = (DWORD)point.y - 0x80000000;
if (index >= 0 && index < guides.size())
if (index >= 0 && index < (int)guides.size())
{
point.y = guides[index].param3;
}

View File

@ -46,35 +46,35 @@ OleObject::OleObject( const CharacterPropertyExceptions* chpx, StructuredStorage
HRESULT res = S_OK;
POLE::Stream* ObjectPoolStorage = new POLE::Stream(oleStorage, "ObjectPool");
POLE::Stream* ObjectPoolStorage = new POLE::Stream(oleStorage, L"ObjectPool");
if (ObjectPoolStorage)
{
ObjectId = getOleEntryName( chpx );
std::string sObjectId( ObjectId.begin(), ObjectId.end() );
std::wstring sObjectId( ObjectId.begin(), ObjectId.end() );
{
std::string name = "ObjectPool/" + sObjectId + "/";
processOleStream( name + "Ole" );
std::wstring name = L"ObjectPool/" + sObjectId + L"/";
processOleStream( name + L"Ole" );
if ( bLinked )
{
processLinkInfoStream( name + "LinkInfo" );
processLinkInfoStream( name + L"LinkInfo" );
}
else
{
processCompObjStream( name + "CompObj" );
processCompObjStream( name + L"CompObj" );
}
processPICStream( name + "PIC" );
processPICStream( name + L"PIC" );
processEquationNativeStream( name + "Equation Native" );
processEquationNativeStream( name + L"Equation Native" );
}
delete ObjectPoolStorage;
}
}
void OleObject::processLinkInfoStream( const std::string& linkStream )
void OleObject::processLinkInfoStream( const std::wstring& linkStream )
{
try
{
@ -125,7 +125,7 @@ void OleObject::processLinkInfoStream( const std::string& linkStream )
}
}
void OleObject::processEquationNativeStream( const std::string& eqStream )
void OleObject::processEquationNativeStream( const std::wstring& eqStream )
{
try
{
@ -156,7 +156,7 @@ void OleObject::processEquationNativeStream( const std::string& eqStream )
}
}
void OleObject::processPICStream( const std::string& picStream )
void OleObject::processPICStream( const std::wstring& picStream )
{
try
{
@ -191,7 +191,7 @@ void OleObject::processPICStream( const std::string& picStream )
}
}
void OleObject::processCompObjStream( const std::string& compStream )
void OleObject::processCompObjStream( const std::wstring& compStream )
{
try
{
@ -206,11 +206,11 @@ void OleObject::processCompObjStream( const std::string& compStream )
//skip the CompObjHeader
reader.ReadBytes( 28, false );
int sz_obj = reader.GetSize() - reader.GetPosition();
unsigned int sz_obj = reader.GetSize() - reader.GetPosition();
if (sz_obj > 4)
{
UserType = reader.ReadLengthPrefixedAnsiString(sz_obj);
UserType = reader.ReadLengthPrefixedAnsiString(sz_obj);
sz_obj = reader.GetSize() - reader.GetPosition();
if (sz_obj > 4)
@ -218,7 +218,7 @@ void OleObject::processCompObjStream( const std::string& compStream )
sz_obj = reader.GetSize() - reader.GetPosition();
if (sz_obj > 4)
Program = reader.ReadLengthPrefixedAnsiString(sz_obj);
Program = reader.ReadLengthPrefixedAnsiString(sz_obj);
}
delete pCompStream;
}
@ -228,7 +228,7 @@ void OleObject::processCompObjStream( const std::string& compStream )
}
}
void OleObject::processOleStream( const std::string& oleStreamName )
void OleObject::processOleStream( const std::wstring& oleStreamName )
{
try
{

View File

@ -74,11 +74,11 @@ namespace DocFileFormat
private:
POLE::Storage *oleStorage;
void processLinkInfoStream ( const std::string& linkStream );
void processEquationNativeStream( const std::string& eqStream );
void processPICStream ( const std::string& picStream );
void processCompObjStream ( const std::string& compStream );
void processOleStream ( const std::string& oleStreamName );
void processLinkInfoStream ( const std::wstring& linkStream );
void processEquationNativeStream( const std::wstring& eqStream );
void processPICStream ( const std::wstring& picStream );
void processCompObjStream ( const std::wstring& compStream );
void processOleStream ( const std::wstring& oleStreamName );
std::wstring getOleEntryName ( const CharacterPropertyExceptions* chpx );
};

View File

@ -136,15 +136,17 @@ namespace DocFileFormat
{
NSFile::CFileBinary file;
file.CreateFileW(fileName);
file.WriteFile((BYTE*)data.c_str(), data.size());
file.WriteFile((BYTE*)data.c_str(), (_UINT32)data.size());
file.CloseFile();
return S_OK;
}
HRESULT OpenXmlPackage::SaveOLEObject( const std::wstring& fileName, const OleObjectFileStructure& oleObjectFileStructure )
{
POLE::Storage *storageOut = new POLE::Storage(fileName.c_str());
if (storageOut == NULL || docFile == NULL) return S_FALSE;
if (docFile == NULL) return S_FALSE;
POLE::Storage *storageOut = new POLE::Storage(fileName.c_str());
if (storageOut == NULL) return S_FALSE;
if (storageOut->open(true, true)==false)
{
delete storageOut;
@ -154,20 +156,19 @@ namespace DocFileFormat
POLE::Storage *storageInp = docFile->GetStorage()->GetStorage();
{
std::string id(oleObjectFileStructure.objectID.begin(),oleObjectFileStructure.objectID.end());
POLE::Stream* oleStorage = new POLE::Stream(storageInp, id);
POLE::Stream* oleStorage = new POLE::Stream(storageInp, oleObjectFileStructure.objectID);
if (oleStorage)
{
std::string path = "ObjectPool/" + id;
std::list<std::string> entries = storageInp->entries(path);
for (std::list<std::string>::iterator it = entries.begin(); it != entries.end(); it++)
std::wstring path = L"ObjectPool/" + oleObjectFileStructure.objectID;
std::list<std::wstring> entries = storageInp->entries(path);
for (std::list<std::wstring>::iterator it = entries.begin(); it != entries.end(); it++)
{
POLE::Stream *stream_inp = new POLE::Stream(storageInp, path + "/"+ (*it));
POLE::Stream *stream_inp = new POLE::Stream(storageInp, path + L"/"+ (*it));
if (stream_inp == NULL)continue;
int size = stream_inp->size();
POLE::uint64 size = stream_inp->size();
POLE::Stream *stream_out = new POLE::Stream(storageOut, *it, true, size);

View File

@ -154,7 +154,7 @@ namespace DocFileFormat
case sprmPFBiDi:
{
bool val = iter->argumentsSize > 0 ? iter->Arguments[0] : true;
bool val = iter->argumentsSize > 0 ? (iter->Arguments[0] != 0) : true;
appendFlagElement( _pPr, *iter, L"bidi", val);
_isBidi = val;
}break;
@ -427,7 +427,7 @@ namespace DocFileFormat
if (m_document->listTable)
{
m_document->listTable->appendNumbering( desc );
short numId = m_document->listTable->listNumbering.size();
short numId = static_cast<short>(m_document->listTable->listNumbering.size());
appendValueElement( &numPr, L"numId", numId, true );
}
}break;
@ -485,7 +485,7 @@ namespace DocFileFormat
{
XMLTools::XMLElement tabs( L"w:tabs" );
int pos = 0;
unsigned int pos = 0;
//read the removed tabs
unsigned char itbdDelMax = iter->Arguments[pos];

View File

@ -41,7 +41,7 @@ namespace DocFileFormat
{
TC80()
{
horzMerge = wWidth = 0;
wWidth = horzMerge =0;
textFlow = Global::lrTb;
vertMerge = Global::fvmClear;
@ -95,13 +95,14 @@ namespace DocFileFormat
int pointer = 1;
// rgdxaCenter
for (int i = 0; i < numberOfColumns + 1; ++i)
{
rgdxaCenter.push_back(FormatUtils::BytesToInt16(bytes, pointer, size));
int pos = FormatUtils::BytesToInt16(bytes, pointer, size);
rgdxaCenter.push_back(pos);
pointer += 2;
}
// rgTc80
for (int i = 0; i < numberOfColumns; ++i)

View File

@ -81,7 +81,7 @@ namespace DocFileFormat
}
}
ByteStructure* operator [] ( unsigned int index ) const
ByteStructure* operator [] ( size_t index ) const
{
if ( index < this->Data.size() )
{

View File

@ -61,18 +61,18 @@ namespace DocFileFormat
}
return false;
}
bool isDirectory( const std::string& name )
bool isDirectory( const std::wstring& name )
{
if (!m_pStorage) return false;
return m_pStorage->isDirectory(name);
}
bool GetStream (const char *path, POLE::Stream** ppStream)
bool GetStream (const std::wstring & path, POLE::Stream** ppStream)
{
if (( m_pStorage != NULL ) && ( path != NULL ))
if (( m_pStorage != NULL ) && ( !path.empty() ))
{
*ppStream = new POLE::Stream(m_pStorage, path);
*ppStream = new POLE::Stream(m_pStorage, path.c_str());
}
if ((*ppStream) && ((*ppStream)->size() > 0))
return true;
@ -85,15 +85,15 @@ namespace DocFileFormat
return m_pStorage;
}
void copy( int indent, std::string path, POLE::Storage * storageOut, bool withRoot = true)
void copy( int indent, std::wstring path, POLE::Storage * storageOut, bool withRoot = true)
{
std::list<std::string> entries, entries_sort;
entries = m_pStorage->entries( path );
std::list<std::wstring> entries, entries_sort;
entries = m_pStorage->entries_with_prefix( path );
for( std::list<std::string>::iterator it = entries.begin(); it != entries.end(); it++ )
for( std::list<std::wstring>::iterator it = entries.begin(); it != entries.end(); it++ )
{
std::string name = *it;
std::string fullname = path + name;
std::wstring name = *it;
std::wstring fullname = path + name;
if( m_pStorage->isDirectory( fullname ) )
{
@ -105,14 +105,14 @@ namespace DocFileFormat
}
}
//for( std::list<std::string>::iterator it = entries.begin(); it != entries.end(); it++ )
for( std::list<std::string>::iterator it = entries_sort.begin(); it != entries_sort.end(); it++ )
for( std::list<std::wstring>::iterator it = entries_sort.begin(); it != entries_sort.end(); it++ )
{
std::string name = *it;
std::string fullname = path + name;
std::wstring name = *it;
std::wstring fullname = path + name;
if( m_pStorage->isDirectory( fullname ) )
{
copy( indent + 1, fullname + "/", storageOut, withRoot );
copy( indent + 1, fullname + L"/", storageOut, withRoot );
}
else
{
@ -122,17 +122,17 @@ namespace DocFileFormat
}
private:
void copy_stream(std::string streamName, POLE::Storage * storageOut, bool withRoot = true)
void copy_stream(std::wstring streamName, POLE::Storage * storageOut, bool withRoot = true)
{
POLE::Stream *stream = new POLE::Stream(m_pStorage, streamName);
if (!stream) return;
stream->seek(0);
int size_stream = stream->size();
POLE::int64 size_stream = stream->size();
if (withRoot == false)
{
int pos = streamName.find("/");
int pos = (int)streamName.find(L"/");
if (pos >= 0)
streamName = streamName.substr(pos + 1);
}

View File

@ -35,13 +35,13 @@
namespace DocFileFormat
{
TableCellPropertiesMapping::TableCellPropertiesMapping (XMLTools::CStringXmlWriter* pWriter, const std::vector<short>* tableGrid, int gridIndex, int cellIndex) :
TableCellPropertiesMapping::TableCellPropertiesMapping (XMLTools::CStringXmlWriter* pWriter, const std::vector<short>* grid, const std::vector<short>* grid_write, int gridIndex, int cellIndex) :
PropertiesMapping(pWriter)
{
_width = 0;
_gridIndex = gridIndex;
_grid = tableGrid;
_grid = grid;
_cellIndex = cellIndex;
_brcTop = NULL;
@ -75,6 +75,8 @@ namespace DocFileFormat
TablePropertyExceptions* tapx = static_cast<TablePropertyExceptions*>(visited);
int nComputedCellWidth = 0;
_gridSpan = 1;
std::list<SinglePropertyModifier>::const_reverse_iterator rend = tapx->grpprl->rend();
for (std::list<SinglePropertyModifier>::const_reverse_iterator iter = tapx->grpprl->rbegin(); iter != rend; ++iter)
{
@ -87,7 +89,7 @@ namespace DocFileFormat
int cc = tdef.numberOfColumns;
_tGrid = tdef.rgdxaCenter;
_tcDef = tdef.rgTc80[(std::min)(_cellIndex, (int)tdef.rgTc80.size() - 1)]; // NOTE: fix for crash
_tcDef = tdef.rgTc80[(std::min)(_cellIndex, (int)tdef.rgTc80.size() - 1)];
appendValueElement( _tcPr, L"textDirection", FormatUtils::MapValueToWideString( _tcDef.textFlow, &Global::TextFlowMap[0][0], 6, 6 ), false );
@ -111,13 +113,19 @@ namespace DocFileFormat
{
appendValueElement( _tcPr, L"noWrap", L"", true );
}
nComputedCellWidth = (short)( tdef.rgdxaCenter[(size_t)(std::min)(_cellIndex, (int)tdef.rgTc80.size() - 1) + 1] -
tdef.rgdxaCenter[(std::min)(_cellIndex, (int)tdef.rgTc80.size() - 1)] ); // NOTE: fix for crash
int ind = (std::min)(_cellIndex, (int)tdef.rgTc80.size() - 1);
int ind1 = ind;
while (ind1 < tdef.rgdxaCenter.size() - 1)
{
int sz = tdef.rgdxaCenter[ ind1 + 1] - tdef.rgdxaCenter[ ind1 ] ;
if (sz > 1)
break;
ind1++;
}
nComputedCellWidth = tdef.rgdxaCenter[ ind1 + 1] - tdef.rgdxaCenter[ ind ] ;
if (!IsTableBordersDefined(tapx->grpprl))
{ //borders
{
RELEASEOBJECT(_brcTop);
_brcTop = new BorderCode(*_tcDef.brcTop);
@ -134,8 +142,7 @@ namespace DocFileFormat
break;
case sprmTCellPadding:
{ //margins
{
unsigned char first = iter->Arguments[0];
unsigned char lim = iter->Arguments[1];
unsigned char ftsMargin = iter->Arguments[3];
@ -165,7 +172,6 @@ namespace DocFileFormat
}
}
break;
case sprmTDefTableShd80:
{
if (!tapx->IsSkipShading97()) // если такой операнд единственный то учитываем его, иначе скипаем его
@ -270,24 +276,23 @@ namespace DocFileFormat
}
}
//width
XMLTools::XMLElement tcW ( L"w:tcW" );
XMLTools::XMLAttribute tcWType ( L"w:type", FormatUtils::MapValueToWideString( _ftsWidth, &Global::CellWidthTypeMap[0][0], 4, 5 ) );
XMLTools::XMLAttribute tcWVal ( L"w:w", FormatUtils::IntToWideString( _width ) );
XMLTools::XMLElement tcW ( L"w:tcW" );
tcW.AppendAttribute( tcWType );
XMLTools::XMLAttribute tcWVal ( L"w:w", FormatUtils::IntToWideString( _width > 1 ? _width : nComputedCellWidth) );
XMLTools::XMLAttribute tcWType ( L"w:type", _width > 1 ? FormatUtils::MapValueToWideString( _ftsWidth, &Global::CellWidthTypeMap[0][0], 4, 5 ) : L"dxa" );
tcW.AppendAttribute( tcWType );
tcW.AppendAttribute( tcWVal );
_tcPr->AppendChild( tcW );
//grid span
_gridSpan = 1;
if ( ( _gridIndex < (int)_grid->size() ) && ( nComputedCellWidth > _grid->at( _gridIndex ) ) )
{
//check the number of merged cells
int w = _grid->at( _gridIndex );
for ( unsigned int i = _gridIndex + 1; i < _grid->size(); i++ )
for ( size_t i = _gridIndex + 1; i < _grid->size(); i++ )
{
_gridSpan++;

View File

@ -58,7 +58,7 @@ namespace DocFileFormat
public:
virtual ~TableCellPropertiesMapping();
TableCellPropertiesMapping (XMLTools::CStringXmlWriter* pWriter, const std::vector<short>* tableGrid, int gridIndex, int cellIndex);
TableCellPropertiesMapping (XMLTools::CStringXmlWriter* pWriter, const std::vector<short>* grid, const std::vector<short>* grid_write, int gridIndex, int cellIndex);
virtual void Apply( IVisitable* visited );
inline int GetGridSpan() const
@ -71,9 +71,7 @@ namespace DocFileFormat
void apppendCellShading (unsigned char* sprmArg, int size, int cellIndex);
bool IsTableBordersDefined (const std::list<SinglePropertyModifier>* grpprl) const;
bool IsTableCellWidthDefined (const std::list<SinglePropertyModifier>* grpprl) const;
private:
int _gridIndex;
int _cellIndex;
@ -93,7 +91,6 @@ namespace DocFileFormat
BorderCode* _brcRight;
BorderCode* _brcBottom;
/// The grind span of this cell
int _gridSpan;
int _gridSpan;
};
}

View File

@ -106,7 +106,7 @@ namespace DocFileFormat
cellElements.clear();
}
void TableCell::Convert(IMapping* mapping, TablePropertyExceptions* tapx, const std::vector<short>* grid, int& gridIndex, int nCellIndex)
void TableCell::Convert(IMapping* mapping, TablePropertyExceptions* tapx, const std::vector<short>* grid, const std::vector<short>* grid_write, int& gridIndex, int nCellIndex)
{
if (NULL != mapping)
{
@ -116,14 +116,14 @@ namespace DocFileFormat
ParagraphPropertyExceptions* papxBackup = documentMapping->_lastValidPapx;
SectionPropertyExceptions* sepxBackup = documentMapping->_lastValidSepx;
//start w:tc
documentMapping->GetXMLWriter()->WriteNodeBegin( L"w:tc" );
//find cell end
//find cell end
int cpCellEnd = documentMapping->findCellEndCp(cp, depth);
//convert the properties
TableCellPropertiesMapping tcpMapping(documentMapping->GetXMLWriter(), grid, gridIndex, nCellIndex);
//start w:tc
documentMapping->GetXMLWriter()->WriteNodeBegin( L"w:tc" );
//convert the properties
TableCellPropertiesMapping tcpMapping(documentMapping->GetXMLWriter(), grid, grid_write, gridIndex, nCellIndex);
if ( tapx != NULL )
{
@ -140,7 +140,7 @@ namespace DocFileFormat
(*iter)->Convert( mapping );
}
//end w:tc
//end w:tc
documentMapping->GetXMLWriter()->WriteNodeEnd( L"w:tc" );
}
@ -193,7 +193,7 @@ namespace DocFileFormat
cells.clear();
}
void TableRow::Convert(IMapping* mapping, const std::vector<short>* grid)
void TableRow::Convert(IMapping* mapping, const std::vector<short>* grid, const std::vector<short>* grid_write)
{
if ( mapping != NULL )
{
@ -234,7 +234,7 @@ namespace DocFileFormat
{
for ( std::list<TableCell>::iterator iter = cells.begin(); iter != cells.end(); iter++ )
{
iter->Convert( mapping, &tapx, grid, gridIndex, nCellIndex++ );
iter->Convert( mapping, &tapx, grid, grid_write, gridIndex, nCellIndex++);
}
}
@ -516,7 +516,8 @@ namespace DocFileFormat
SectionPropertyExceptions* sepxBackup = documentMapping->_lastValidSepx;
//build the table grid
std::vector<short>* grid = documentMapping->buildTableGrid( cpStart, depth );
std::vector<short> grid, grid_write;
documentMapping->buildTableGrid( cpStart, depth, grid, grid_write );
//find first row end
int fcRowEnd = documentMapping->findRowEndFc( cpStart, depth );
@ -529,7 +530,7 @@ namespace DocFileFormat
documentMapping->GetXMLWriter()->WriteNodeBegin( L"w:tbl" );
//Convert it
TablePropertiesMapping tpMapping( documentMapping->GetXMLWriter(), documentMapping->m_document->Styles, grid );
TablePropertiesMapping tpMapping( documentMapping->GetXMLWriter(), documentMapping->m_document->Styles, &grid, &grid_write );
row1Tapx.Convert( &tpMapping );
@ -538,13 +539,12 @@ namespace DocFileFormat
for ( std::list<TableRow>::iterator iter = rows.begin(); iter != rows.end(); iter++ )
{
iter->Convert( mapping, grid );
iter->Convert( mapping, &grid, &grid_write );
}
//close w:tbl
documentMapping->GetXMLWriter()->WriteNodeEnd( L"w:tbl" );
RELEASEOBJECT( grid );
}
}

View File

@ -58,7 +58,7 @@ namespace DocFileFormat
void AddItem( const ITableCellElement& _tableCellElement );
bool IsEmpty() const;
void Clear();
void Convert( IMapping* mapping, TablePropertyExceptions* tapx, const std::vector<short>* grid, int& gridIndex, int cellIndex );
void Convert( IMapping* mapping, TablePropertyExceptions* tapx, const std::vector<short>* grid, const std::vector<short>* grid_write, int& gridIndex, int cellIndex );
~TableCell();
private:
@ -81,7 +81,7 @@ namespace DocFileFormat
void AddCell( const TableCell& _tableCell );
bool IsEmpty() const;
void Clear();
void Convert( IMapping* mapping, const std::vector<short>* grid );
void Convert( IMapping* mapping, const std::vector<short>* grid, const std::vector<short>* grid_write );
~TableRow();
private:

View File

@ -34,15 +34,13 @@
namespace DocFileFormat
{
TablePropertiesMapping::TablePropertiesMapping (XMLTools::CStringXmlWriter* pWriter, StyleSheet* styles, std::vector<short>* grid, bool isTableStyleNeeded ):
PropertiesMapping(pWriter), _tblPr(NULL), _tblGrid(NULL), _tblBorders(NULL), _grid(NULL),
brcLeft(NULL), brcTop(NULL), brcBottom(NULL), brcRight(NULL), brcHorz(NULL), brcVert(NULL), _styles(NULL),
TablePropertiesMapping::TablePropertiesMapping (XMLTools::CStringXmlWriter* pWriter, StyleSheet* styles, std::vector<short>* grid, std::vector<short>* grid_write, bool isTableStyleNeeded ):
PropertiesMapping(pWriter), _tblPr(NULL), _tblGrid(NULL), _tblBorders(NULL), _grid(grid), _grid_write(grid_write),
brcLeft(NULL), brcTop(NULL), brcBottom(NULL), brcRight(NULL), brcHorz(NULL), brcVert(NULL), _styles(styles),
_isTableStyleNeeded(isTableStyleNeeded)
{
_styles = styles;
_tblPr = new XMLTools::XMLElement( L"w:tblPr");
_tblBorders = new XMLTools::XMLElement( L"w:tblBorders");
_grid = grid;
}
TablePropertiesMapping::~TablePropertiesMapping()
{
@ -74,6 +72,9 @@ namespace DocFileFormat
short marginLeft = 0;
short marginRight = 0;
BYTE itcFirst = 0;
BYTE itcLim = 0;
for ( std::list<SinglePropertyModifier>::iterator iter = tapx->grpprl->begin(); iter != tapx->grpprl->end(); iter++ )
{
switch( iter->OpCode )
@ -120,7 +121,15 @@ namespace DocFileFormat
_tblPr->AppendChild( tblW );
}
break;
case sprmTMerge:
{
itcFirst = iter->Arguments[0];
itcLim = iter->Arguments[1];
}break;
case sprmTSplit:
{
}break;
case sprmOldTJc:
case sprmTJc:
case sprmTJcRow:
@ -144,7 +153,7 @@ namespace DocFileFormat
if ( _isTableStyleNeeded )
{
int ind = FormatUtils::BytesToInt16( iter->Arguments, 0, iter->argumentsSize );
size_t ind = FormatUtils::BytesToInt16( iter->Arguments, 0, iter->argumentsSize );
std::wstring id = ind < _styles->Styles->size() ? StyleSheetMapping::MakeStyleId( _styles->Styles->at( ind ) ) : L"";
@ -486,7 +495,7 @@ namespace DocFileFormat
bWriteGridCol = true;
else
{
for ( unsigned int i = 0, nSize = _grid->size(); i < nSize; i++ )
for ( size_t i = 0, nSize = _grid_write->size(); i < nSize; i++ )
{
if(_grid->at(i) % DocFileFormat::gc_nZeroWidth != 0)
{
@ -497,10 +506,10 @@ namespace DocFileFormat
}
if(true == bWriteGridCol)
{
for ( unsigned int i = 0; i < _grid->size(); i++ )
for ( size_t i = 0; i < _grid_write->size(); i++ )
{
XMLTools::XMLElement gridCol( L"w:gridCol");
XMLTools::XMLAttribute gridColW( L"w:w", FormatUtils::IntToWideString( _grid->at( i ) ) );
XMLTools::XMLAttribute gridColW( L"w:w", FormatUtils::IntToWideString( _grid_write->at( i ) ) );
gridCol.AppendAttribute( gridColW );
_tblGrid->AppendChild( gridCol );
}

View File

@ -71,7 +71,7 @@ namespace DocFileFormat
class TablePropertiesMapping: public PropertiesMapping, public IMapping
{
public:
TablePropertiesMapping( XMLTools::CStringXmlWriter* writer, StyleSheet* styles, std::vector<short>* grid, bool isTableStyleNeeded = true );
TablePropertiesMapping( XMLTools::CStringXmlWriter* writer, StyleSheet* styles, std::vector<short>* grid, std::vector<short>* grid_write, bool isTableStyleNeeded = true );
virtual ~TablePropertiesMapping();
void Apply( IVisitable* visited );
@ -83,6 +83,7 @@ namespace DocFileFormat
StyleSheet* _styles;
std::vector<short>* _grid;
std::vector<short>* _grid_write;
BorderCode* brcLeft;
BorderCode* brcTop;

View File

@ -62,8 +62,9 @@ namespace DocFileFormat
for (std::list<SinglePropertyModifier>::iterator oSpmIter = papx->grpprl->begin(); oSpmIter != papx->grpprl->end(); ++oSpmIter)
{
if (oSpmIter->OpCode == sprmTDefTableShd || oSpmIter->OpCode == sprmTDefTableShd2nd ||
oSpmIter->OpCode == sprmTDefTableShd2nd || oSpmIter->OpCode == sprmTDefTableShd3rd)
if (oSpmIter->OpCode == sprmTDefTableShd ||
oSpmIter->OpCode == sprmTDefTableShd2nd ||
oSpmIter->OpCode == sprmTDefTableShd3rd)
{
m_bSkipShading97 = TRUE;
}

View File

@ -159,13 +159,13 @@ namespace DocFileFormat
OOX::CDocument docEmbedded(path, path);
bool res = false;
for (int i = 0 ; i < docEmbedded.m_arrItems.size(); i++)
for (size_t i = 0 ; i < docEmbedded.m_arrItems.size(); i++)
{
if (docEmbedded.m_arrItems[i]->getType() == OOX::et_w_p)
{
OOX::Logic::CParagraph *paragraph = dynamic_cast<OOX::Logic::CParagraph *>(docEmbedded.m_arrItems[i]);
for (int j = 0; (paragraph) && (j < paragraph->m_arrItems.size()); j++)
for (size_t j = 0; (paragraph) && (j < paragraph->m_arrItems.size()); j++)
{
if (paragraph->m_arrItems[j]->getType() == OOX::et_m_oMath)
{
@ -177,7 +177,7 @@ namespace DocFileFormat
{
OOX::Logic::COMathPara *mathPara = dynamic_cast<OOX::Logic::COMathPara *>(paragraph->m_arrItems[j]);
for (int k = 0; (mathPara) && (k < mathPara->m_arrItems.size()); k++)
for (size_t k = 0; (mathPara) && (k < mathPara->m_arrItems.size()); k++)
{
if (mathPara->m_arrItems[k]->getType() == OOX::et_m_oMath)
{

View File

@ -744,7 +744,7 @@ namespace DocFileFormat
text = FormatUtils::XmlEncode(text);
if (0 <= text.find(L"\n"))
if (std::wstring::npos != text.find(L"\n"))
{
m_textpath.AppendText(text);
}
@ -754,7 +754,7 @@ namespace DocFileFormat
case gtextFont:
{
std::wstring font = NSStringExt::CConverter::GetUnicodeFromUTF16((unsigned short*)iter->opComplex.get(), (iter->op)/2);
int i = font.size();
size_t i = font.size();
while (i > 0)
{
if (font[i-1] != 0) break;
@ -1963,7 +1963,7 @@ namespace DocFileFormat
{
int index = (DWORD)val - 0x80000000;
if (index >= 0 && index < m_arrGuides.size())
if (index >= 0 && index < (int)m_arrGuides.size())
{
new_val = m_arrGuides[index].param3;
}
@ -2130,7 +2130,7 @@ namespace DocFileFormat
void VMLShapeMapping::ApplyPrimitives(DrawingPrimitives * primitives)
{
int index = 0;
size_t index = 0;
while(true)
{
@ -2142,7 +2142,7 @@ namespace DocFileFormat
static int currentTextBoxIndex = 1;
int VMLShapeMapping::ApplyPrimitive(DrawingPrimitives * primitives, int index)
size_t VMLShapeMapping::ApplyPrimitive(DrawingPrimitives * primitives, size_t index)
{
if (!primitives) return index++;
if (index >= primitives->size()) return index++;
@ -2165,7 +2165,7 @@ namespace DocFileFormat
//todooo нарисовать кастомный шейп
}
else
WritePrimitiveProps(primitive, (index==0?true:false));
WritePrimitiveProps(primitive, (index==0 ? true : false));
if (primitive->type == 0x0000)
@ -2241,11 +2241,11 @@ namespace DocFileFormat
{
//strStyle += L"left:" + FormatUtils::IntToWideString( x.ToPoints()) + L"pt;";
//strStyle += L"top:" + FormatUtils::IntToWideString( y.ToPoints()) + L"pt;";
strStyle += L"width:" + FormatUtils::IntToWideString( w.ToPoints()) + L"pt;";
strStyle += L"height:" + FormatUtils::IntToWideString( h.ToPoints()) + L"pt;";
strStyle += L"width:" + FormatUtils::IntToWideString( (int)w.ToPoints()) + L"pt;";
strStyle += L"height:" + FormatUtils::IntToWideString( (int)h.ToPoints()) + L"pt;";
strStyle += L"margin-left:" + FormatUtils::IntToWideString( x.ToPoints()) + L"pt;";
strStyle += L"margin-top:" + FormatUtils::IntToWideString( y.ToPoints()) + L"pt;";
strStyle += L"margin-left:" + FormatUtils::IntToWideString( (int)x.ToPoints()) + L"pt;";
strStyle += L"margin-top:" + FormatUtils::IntToWideString( (int)y.ToPoints()) + L"pt;";
std::wstring xMargin;
std::wstring yMargin;

View File

@ -73,7 +73,7 @@ namespace DocFileFormat
private:
void ApplyPrimitives (DrawingPrimitives * primitives );
int ApplyPrimitive (DrawingPrimitives * primitives, int index);
size_t ApplyPrimitive (DrawingPrimitives * primitives, size_t index);
void WritePrimitiveProps(DrawingPrimitive * primitive, bool root);

View File

@ -134,7 +134,7 @@ public:
if (position + count > stream->size())
{
if (position > stream->size()) count = 0;
else count = stream->size() - position;
else count = (unsigned int)(stream->size() - position);
}
rdBytes = new unsigned char[count];
}
@ -152,7 +152,7 @@ public:
virtual unsigned long GetPosition() const
{
return this->position;
return (unsigned long)this->position;
}
virtual unsigned long GetSize() const
@ -161,7 +161,7 @@ public:
if ( stream != NULL )
{
size = stream->size();
size = (unsigned long)stream->size();
}
return size;
@ -246,7 +246,7 @@ public:
/// The string must have the following structure:
/// unsigned char 1-4: Character count (cch)
/// unsigned char 5-cch+4: ANSI characters terminated by \0
std::wstring ReadLengthPrefixedAnsiString(int max_size)
std::wstring ReadLengthPrefixedAnsiString(unsigned int max_size)
{
std::wstring result;
@ -257,8 +257,8 @@ public:
if (cch > max_size)
{
//error ... skip to 0
int pos_orinal = GetPosition();
int pos = 0;
unsigned int pos_orinal = GetPosition();
unsigned int pos = 0;
stringBytes = ReadBytes( max_size, true );

View File

@ -95,7 +95,7 @@ namespace DocFileFormat
return AVS_ERROR_FILEFORMAT;
}
//-----------------------------------------------------------------------------------------------------------------
if (m_pStorage->GetStream ("WordDocument", &WordDocumentStream) == false)
if (m_pStorage->GetStream (L"WordDocument", &WordDocumentStream) == false)
{
Clear();
return AVS_ERROR_FILEFORMAT;
@ -121,16 +121,16 @@ namespace DocFileFormat
if (FIB->m_FibBase.fWhichTblStm)
{
if (!m_pStorage->GetStream ("1Table", &TableStream))
if (!m_pStorage->GetStream (L"1Table", &TableStream))
{
res = m_pStorage->GetStream ("0Table", &TableStream);
res = m_pStorage->GetStream (L"0Table", &TableStream);
}
}
else
{
if (!m_pStorage->GetStream ("0Table", &TableStream))
if (!m_pStorage->GetStream (L"0Table", &TableStream))
{
res = m_pStorage->GetStream ("1Table", &TableStream);
res = m_pStorage->GetStream (L"1Table", &TableStream);
}
}
@ -176,8 +176,8 @@ namespace DocFileFormat
POLE::Stream * Summary = NULL;
POLE::Stream * DocSummary = NULL;
m_pStorage->GetStream ("SummaryInformation", &Summary);
m_pStorage->GetStream ("DocumentSummaryInformation", &DocSummary);
m_pStorage->GetStream (L"SummaryInformation", &Summary);
m_pStorage->GetStream (L"DocumentSummaryInformation", &DocSummary);
document_code_page = ENCODING_WINDOWS_1250;
@ -206,7 +206,7 @@ namespace DocFileFormat
//-------------------------------------------------------------------------------------------------
try
{
m_pStorage->GetStream ("Data", &DataStream);
m_pStorage->GetStream (L"Data", &DataStream);
}
catch (...)
{
@ -216,7 +216,7 @@ namespace DocFileFormat
if (TableStream->size() < 1 && bOlderVersion)
{
RELEASEOBJECT(TableStream);
m_pStorage->GetStream ("WordDocument", &TableStream);
m_pStorage->GetStream (L"WordDocument", &TableStream);
}
RevisionAuthorTable = new StringTable<WideString> (TableStream, FIB->m_FibWord97.fcSttbfRMark, FIB->m_FibWord97.lcbSttbfRMark, bOlderVersion);
@ -483,7 +483,7 @@ namespace DocFileFormat
delete storageOut;
return false;
}
DecryptStream( 0, "/", storageIn, storageOut, Decryptor);
DecryptStream( 0, L"/", storageIn, storageOut, Decryptor);
//std::list<std::string> listStream = storageIn->entries();
@ -514,59 +514,60 @@ namespace DocFileFormat
m_pStorage->SetFile(m_sTempDecryptFileName.c_str());
if (m_pStorage->GetStream ("WordDocument", &WordDocumentStream) == false) return false;
if (m_pStorage->GetStream (L"WordDocument", &WordDocumentStream) == false) return false;
if (FIB->m_FibBase.fWhichTblStm)
{
if (!m_pStorage->GetStream ("1Table", &TableStream)) m_pStorage->GetStream ("0Table", &TableStream);
if (!m_pStorage->GetStream (L"1Table", &TableStream)) m_pStorage->GetStream (L"0Table", &TableStream);
}
else
{
if (!m_pStorage->GetStream ("0Table", &TableStream)) m_pStorage->GetStream ("1Table", &TableStream);
if (!m_pStorage->GetStream (L"0Table", &TableStream)) m_pStorage->GetStream (L"1Table", &TableStream);
}
return true;
}
void WordDocument::DecryptStream( int level, std::string path, POLE::Storage * storageIn, POLE::Storage * storageOut, CRYPT::Decryptor* Decryptor)
void WordDocument::DecryptStream( int level, std::wstring path, POLE::Storage * storageIn, POLE::Storage * storageOut, CRYPT::Decryptor* Decryptor)
{
std::list<std::string> entries, entries_sort;
entries = storageIn->entries( path );
std::list<std::wstring> entries, entries_files, entries_dir;
entries = storageIn->entries_with_prefix( path );
for( std::list<std::string>::iterator it = entries.begin(); it != entries.end(); it++ )
for( std::list<std::wstring>::iterator it = entries.begin(); it != entries.end(); it++ )
{
std::string name = *it;
std::string fullname = path + name;
std::wstring name = *it;
std::wstring fullname = path + name;
if( storageIn->isDirectory( fullname ) )
{
entries_sort.push_back(name);
entries_dir.push_back(name);
}
else
{
entries_sort.push_front(name);
entries_files.push_front(name);
}
}
for( std::list<std::string>::iterator it = entries_sort.begin(); it != entries_sort.end(); ++it )
for( std::list<std::wstring>::iterator it = entries_dir.begin(); it != entries_dir.end(); ++it )
{
std::string name = *it;
std::string fullname = path + name;
std::wstring fullname = path + *it;
if( storageIn->isDirectory( fullname ) )
{
DecryptStream( level + 1, fullname + "/", storageIn, storageOut, Decryptor );
}
else
{
DecryptStream(fullname, storageIn, storageOut, Decryptor );
}
DecryptStream( level + 1, fullname + L"/", storageIn, storageOut, Decryptor );
}
//if (bSortFiles)
entries_files.sort();
for( std::list<std::wstring>::iterator it = entries_files.begin(); it != entries_files.end(); ++it )
{
std::wstring fullname = path + *it;
DecryptStream(fullname, storageIn, storageOut, Decryptor );
}
}
bool WordDocument::DecryptStream(std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut, CRYPT::Decryptor* Decryptor)
bool WordDocument::DecryptStream(std::wstring streamName, 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 size_stream = stream->size();
POLE::uint64 size_stream = stream->size();
POLE::Stream *streamNew = new POLE::Stream(storageOut, streamName, true, size_stream);
if (!streamNew) return false;
@ -577,7 +578,7 @@ namespace DocFileFormat
unsigned char* data_store = NULL;
int size_data_store = 0;
if ( std::wstring::npos != streamName.find("WordDocument") )
if ( std::wstring::npos != streamName.find(L"WordDocument") )
{
size_data_store = 68;
data_store = new unsigned char[size_data_store];
@ -586,8 +587,10 @@ namespace DocFileFormat
if (data_store)
memcpy(data_store, data_stream, size_data_store);
int size_block = 0x200;
for (int pos = 0, block = 0 ; pos < size_stream; pos += size_block, block++)
size_t size_block = 0x200;
unsigned long block = 0;
for (POLE::uint64 pos = 0; pos < size_stream; pos += size_block, block++)
{
if (pos + size_block > size_stream)
size_block = size_stream - pos;

View File

@ -107,8 +107,8 @@ namespace DocFileFormat
private:
bool DecryptOfficeFile (CRYPT::Decryptor* Decryptor);
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);
bool DecryptStream (std::wstring streamName, POLE::Storage * storageIn, POLE::Storage * storageOut, CRYPT::Decryptor* Decryptor);
void DecryptStream (int level, std::wstring streamName, POLE::Storage * storageIn, POLE::Storage * storageOut, CRYPT::Decryptor* Decryptor);
inline OfficeArtContent* GetOfficeArt ()
{

View File

@ -71,7 +71,7 @@ namespace ImageHelper
__BITMAPINFOHEADER * header = (__BITMAPINFOHEADER*)data;
if (!header) return result;
result == Global::msoblipDIB;
result = Global::msoblipDIB;
if (header->biWidth > 100000 || header->biHeight > 100000 || header->biSize != 40)
{
@ -185,7 +185,7 @@ namespace DocFileFormat
std::wstring pathWord = m_strOutputPath + FILE_SEPARATOR_STR + L"word" ;
NSDirectory::CreateDirectory( pathWord );
if (bMacros && docFile->GetStorage()->isDirectory("Macros"))
if (bMacros && docFile->GetStorage()->isDirectory(L"Macros"))
{
std::wstring sVbaProjectFile = pathWord + FILE_SEPARATOR_STR + L"vbaProject.bin";
@ -193,7 +193,7 @@ namespace DocFileFormat
if ((storageVbaProject) && (storageVbaProject->open(true, true)))
{
docFile->GetStorage()->copy(0, "Macros/", storageVbaProject, false);
docFile->GetStorage()->copy(0, L"Macros/", storageVbaProject, false);
storageVbaProject->close();
delete storageVbaProject;

View File

@ -49,12 +49,9 @@
#pragma comment(lib, "../../build/bin/icu/win_32/icuuc.lib")
#endif
int _tmain(int argc, _TCHAR* argv[])
HRESULT convert_single(std::wstring sSrcDoc)
{
if (argc < 2) return 1;
std::wstring sSrcDoc = argv[1];
std::wstring sDstDocx;
HRESULT hr = S_OK;
std::wstring outputDir = NSDirectory::GetFolderPath(sSrcDoc);
std::wstring dstTempPath = NSDirectory::CreateDirectoryWithUniqueName(outputDir);
@ -66,6 +63,7 @@ int _tmain(int argc, _TCHAR* argv[])
bool bMacros = true;
HRESULT hRes = docFile.LoadFromFile( sSrcDoc, dstTempPath, L"password", bMacros, NULL);
std::wstring sDstDocx;
if (bMacros)
{
sDstDocx = sSrcDoc + L"-my.docm";
@ -86,3 +84,33 @@ int _tmain(int argc, _TCHAR* argv[])
return hRes;
}
HRESULT convert_directory(std::wstring pathName)
{
HRESULT hr = S_OK;
std::vector<std::wstring> arFiles = NSDirectory::GetFiles(pathName, false);
for (size_t i = 0; i < arFiles.size(); i++)
{
convert_single(arFiles[i]);
}
return S_OK;
}
int _tmain(int argc, _TCHAR* argv[])
{
if (argc < 2) return 1;
HRESULT hr = -1;
if (NSFile::CFileBinary::Exists(argv[1]))
{
hr = convert_single(argv[1]);
}
else if (NSDirectory::Exists(argv[1]))
{
hr = convert_directory(argv[1]);
}
return hr;
}

View File

@ -1697,7 +1697,7 @@ public:
std::vector<std::wstring> arSplit;
boost::algorithm::split(arSplit, pComment->UserName, boost::algorithm::is_any_of(L" "), boost::algorithm::token_compress_on);
for (int i = 0; i < arSplit.size(); i++)
for (size_t i = 0; i < arSplit.size(); i++)
{
sInitials += arSplit[i][0];
}
@ -1733,7 +1733,7 @@ public:
bool bFirst = true;
int nPrevIndex = 0;
for(size_t i = 0; i < sText.length(); i++)
for (int i = 0; i < (int)sText.length(); i++)
{
wchar_t cToken = sText[i];
if('\n' == cToken)

View File

@ -4008,6 +4008,19 @@ public:
res = c_oSerConstants::ReadUnknown;
return res;
}
int ReadFldChar(BYTE type, long length, void* poResult)
{
int res = c_oSerConstants::ReadOk;
OOX::Logic::CFldChar* pFldChar = static_cast<OOX::Logic::CFldChar*>(poResult);
if ( c_oSer_FldSimpleType::CharType == type )
{
pFldChar->m_oFldCharType.Init();
pFldChar->m_oFldCharType->SetValue((SimpleTypes::EFldCharType)m_oBufferedStream.GetUChar());
}
else
res = c_oSerConstants::ReadUnknown;
return res;
}
int ReadFldSimple(BYTE type, long length, void* poResult)
{
int res = c_oSerConstants::ReadOk;
@ -6634,7 +6647,7 @@ public:
//сбрасываем Shd
oBinary_tblPrReader.m_sCurTableShd.clear();
}
else if(c_oSerRunType::fldstart == type)
else if(c_oSerRunType::fldstart_deprecated == type)
{
std::wstring sField(m_oBufferedStream.GetString3(length));
sField = XmlUtils::EncodeXmlString(sField);
@ -6648,7 +6661,7 @@ public:
m_oCur_rPr.Write(&GetRunStringWriter());
GetRunStringWriter().WriteString(std::wstring(_T("<w:fldChar w:fldCharType=\"separate\"/>")));
}
else if(c_oSerRunType::fldend == type)
else if(c_oSerRunType::fldend_deprecated == type)
{
GetRunStringWriter().WriteString(std::wstring(_T("<w:fldChar w:fldCharType=\"end\"/>")));
}
@ -6697,6 +6710,28 @@ public:
res = Read1(length, &Binary_DocumentTableReader::ReadEndnoteRef, this, &oEndnoteRef);
GetRunStringWriter().WriteString(oEndnoteRef.toXML());
}
else if ( c_oSerRunType::fldChar == type)
{
OOX::Logic::CFldChar oFldChar;
res = Read1(length, &Binary_DocumentTableReader::ReadFldChar, this, &oFldChar);
GetRunStringWriter().WriteString(oFldChar.toXML());
}
else if ( c_oSerRunType::instrText == type)
{
GetRunStringWriter().WriteString(std::wstring(_T("<w:instrText xml:space=\"preserve\">")));
std::wstring sText(m_oBufferedStream.GetString3(length));
sText = XmlUtils::EncodeXmlString(sText);
GetRunStringWriter().WriteString(sText);
GetRunStringWriter().WriteString(std::wstring(_T("</w:instrText>")));
}
else if ( c_oSerRunType::delInstrText == type)
{
GetRunStringWriter().WriteString(std::wstring(_T("<w:delInstrText xml:space=\"preserve\">")));
std::wstring sText(m_oBufferedStream.GetString3(length));
sText = XmlUtils::EncodeXmlString(sText);
GetRunStringWriter().WriteString(sText);
GetRunStringWriter().WriteString(std::wstring(_T("</w:delInstrText>")));
}
else
res = c_oSerConstants::ReadUnknown;
return res;

View File

@ -557,11 +557,11 @@ namespace MathEquation
BYTE horAlign;
switch(eHorAlign)
{
case matrixhoralignLeft: horAlign = SimpleTypes::xalignLeft;
case matrixhoralignCenter: horAlign = SimpleTypes::xalignCenter;
case matrixhoralignRight: horAlign = SimpleTypes::xalignRight;
case matrixhoralignEqualSign: horAlign = SimpleTypes::xalignCenter;
case matrixhoralignCommaSign: horAlign = SimpleTypes::xalignCenter;
case matrixhoralignLeft: horAlign = SimpleTypes::xalignLeft; break;
case matrixhoralignCenter: horAlign = SimpleTypes::xalignCenter; break;
case matrixhoralignRight: horAlign = SimpleTypes::xalignRight; break;
case matrixhoralignEqualSign: horAlign = SimpleTypes::xalignCenter; break;
case matrixhoralignCommaSign: horAlign = SimpleTypes::xalignCenter; break;
}
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::McJc, horAlign);

View File

@ -503,8 +503,8 @@ extern int g_nCurFormatVersion;
image = 6,
table = 7,
Content = 8,
fldstart = 9,
fldend = 10,
fldstart_deprecated = 9,
fldend_deprecated = 10,
CommentReference = 11,
pptxDrawing = 12,
object = 14,
@ -521,7 +521,10 @@ extern int g_nCurFormatVersion;
endnoteRef = 25,
footnoteReference = 26,
endnoteReference = 27,
arPr = 28
arPr = 28,
fldChar = 29,
instrText = 30,
delInstrText = 31
};}
namespace c_oSerVbaProjectTypes{enum c_oSerVbaProjectType
{
@ -929,7 +932,8 @@ extern int g_nCurFormatVersion;
{
Content = 0,
Instr = 1,
FFData = 2
FFData = 2,
CharType = 3
};}
namespace c_oSer_ColorThemeType{ enum c_oSer_ColorThemeType
{

View File

@ -76,18 +76,6 @@ namespace BinDocxRW
{
}
};
class FldStruct
{
protected:
int m_nType;
public:
std::wstring m_sFld;
FldStruct(std::wstring sFld, int nType):m_sFld(sFld),m_nType(nType){}
int GetType()
{
return m_nType;
}
};
class BinaryCommonWriter
{
public:
@ -2992,11 +2980,6 @@ namespace BinDocxRW
std::wstring m_sCurParStyle;
OOX::CSettings* m_oSettings;
//для fldChar
//todo в документации описан случай если нет fldchartypeEnd, у нас работает не так.
std::vector<FldStruct*> m_aFldChars;
std::wstring m_sFldChar;
SimpleTypes::EFldCharType m_eFldState;
NSBinPptxRW::CDrawingConverter* m_pOfficeDrawingConverter;
std::map<int, bool>* m_mapIgnoreComments;
public:
@ -3012,14 +2995,6 @@ namespace BinDocxRW
pBackground = NULL;
pSectPr = NULL;
m_bWriteSectPr = false;
m_eFldState = SimpleTypes::fldchartypeEnd;
}
~BinaryDocumentTableWriter()
{
for(size_t i = 0, length = m_aFldChars.size(); i < length; ++i)
{
RELEASEOBJECT(m_aFldChars[i]);
}
}
void prepareOfficeDrawingConverter(NSBinPptxRW::CDrawingConverter* pOfficeDrawingConverter, OOX::IFileContainer *rels, std::vector<std::wstring>& aShapeTypes)
{
@ -3169,24 +3144,6 @@ namespace BinDocxRW
m_oBcw.WriteItemWithLengthEnd(nCurPos);
}
FldStruct* ParseField(const std::wstring& sFld)
{
std::wstring sFldCopy = sFld;
boost::algorithm::trim (sFldCopy);
boost::algorithm::to_upper (sFldCopy);
FldStruct* pRes = NULL;
int nIndex = 0;
if(-1 != (nIndex = (int)sFldCopy.find(_T("TOC"))))
pRes = new FldStruct(sFldCopy, fieldstruct_toc);
else if(-1 != (nIndex = (int)sFldCopy.find(_T("HYPERLINK"))))
pRes = new FldStruct(sFldCopy, fieldstruct_hyperlink);
else
pRes = new FldStruct(sFldCopy, fieldstruct_none);
return pRes;
}
void WriteParagraphContent(const std::vector<OOX::WritingElement *>& Content, bool bHyperlink = false)
{
int nCurPos = 0;
@ -3465,6 +3422,16 @@ namespace BinDocxRW
m_oBcw.WriteItemEnd(nCurPos);
}
}
void WriteFldChar(OOX::Logic::CFldChar* pFldChar)
{
int nCurPos = 0;
if(pFldChar->m_oFldCharType.IsInit())
{
nCurPos = m_oBcw.WriteItemStart(c_oSer_FldSimpleType::CharType);
m_oBcw.m_oStream.WriteBYTE((BYTE)pFldChar->m_oFldCharType->GetValue());
m_oBcw.WriteItemWithLengthEnd(nCurPos);
}
}
void WriteFldSimple(OOX::Logic::CFldSimple* pFldSimple)
{
int nCurPos = 0;
@ -3616,7 +3583,7 @@ namespace BinDocxRW
m_oBcw.m_oStream.WriteLONG(oDDList.m_oResult->m_oVal->GetValue());
m_oBcw.WriteItemWithLengthEnd(nCurPos);
}
for(int i = 0 ; i < oDDList.m_arrListEntry.size(); ++i)
for(size_t i = 0 ; i < oDDList.m_arrListEntry.size(); ++i)
{
ComplexTypes::Word::String* pVal = oDDList.m_arrListEntry[i];
if(pVal->m_sVal.IsInit())
@ -5422,51 +5389,6 @@ namespace BinDocxRW
int nCurPos = 0;
OOX::Logic::CRunProperty* oCur_rPr = pRun->m_oRunProperty;
if(NULL != oCur_rPr)
{
//Заглушка для содержания
if(false == bHyperlink)
{
//Случай если Hyperlink задан как field
for(size_t i = 0, length = m_aFldChars.size(); i < length; ++i)
{
if(fieldstruct_hyperlink == m_aFldChars[i]->GetType())
{
bHyperlink = true;
break;
}
}
}
if(bHyperlink)
{
bool bInTOC = false;
for(size_t i = 0, length = m_aFldChars.size(); i < length; ++i)
{
if(fieldstruct_toc == m_aFldChars[i]->GetType())
{
bInTOC = true;
break;
}
}
if(bInTOC)
{
//убираем Runstyle
if(oCur_rPr->m_oRStyle.IsInit())
oCur_rPr->m_oRStyle.reset();
//Если настройки выставлены явно, то убираем их
if(oCur_rPr->m_oColor.IsInit() && oCur_rPr->m_oColor->m_oVal.IsInit() && SimpleTypes::hexcolorRGB == oCur_rPr->m_oColor->m_oVal->GetValue())
{
unsigned char bR = oCur_rPr->m_oColor->m_oVal->Get_R();
unsigned char bG = oCur_rPr->m_oColor->m_oVal->Get_G();
unsigned char bB = oCur_rPr->m_oColor->m_oVal->Get_B();
if(0x00 == bR && 0x00 == bG && 0xFF == bB)
oCur_rPr->m_oColor->m_oVal->Set_B(0x00);
}
if(oCur_rPr->m_oU.IsInit() && oCur_rPr->m_oU->m_oVal.IsInit() && SimpleTypes::underlineSingle == oCur_rPr->m_oU->m_oVal->GetValue())
oCur_rPr->m_oU->m_oVal->SetValue(SimpleTypes::underlineNone);
}
}
}
//Если первый элемент символ надо выставить в его настройки шрифт
if(nIndexStart < (int)pRun->m_arrItems.size() && OOX::et_w_sym == pRun->m_arrItems[nIndexStart]->getType())
{
@ -5543,51 +5465,21 @@ namespace BinDocxRW
case OOX::et_w_fldChar:
{
OOX::Logic::CFldChar* pFldChar = static_cast<OOX::Logic::CFldChar*>(item);
if(pFldChar->m_oFldCharType.IsInit())
{
if(SimpleTypes::fldchartypeBegin == pFldChar->m_oFldCharType.get().GetValue())
{
m_eFldState = SimpleTypes::fldchartypeBegin;
m_sFldChar.clear();
}
else if(SimpleTypes::fldchartypeEnd == pFldChar->m_oFldCharType.get().GetValue())
{
m_eFldState = SimpleTypes::fldchartypeEnd;
if(m_aFldChars.size() > 0)
{
int nIndex = (int)m_aFldChars.size() - 1;
FldStruct* pFldStruct = m_aFldChars[nIndex];
RELEASEOBJECT(pFldStruct);
m_aFldChars.erase(m_aFldChars.begin() + nIndex);
m_oBcw.m_oStream.WriteBYTE(c_oSerRunType::fldend);
m_oBcw.m_oStream.WriteLONG(c_oSerPropLenType::Null);
}
}
else if(SimpleTypes::fldchartypeSeparate == pFldChar->m_oFldCharType.get().GetValue())
{
m_eFldState = SimpleTypes::fldchartypeSeparate;
FldStruct* pFldStruct = ParseField(m_sFldChar);
m_aFldChars.push_back(pFldStruct);
m_oBcw.m_oStream.WriteBYTE(c_oSerRunType::fldstart);
m_oBcw.m_oStream.WriteStringW(m_sFldChar);
}
}
int nCurPos = m_oBcw.WriteItemStart(c_oSerRunType::fldChar);
WriteFldChar(pFldChar);
m_oBcw.WriteItemEnd(nCurPos);
}
break;
case OOX::et_w_delInstrText:
{
OOX::Logic::CDelInstrText* pInstrText = static_cast<OOX::Logic::CDelInstrText*>(item);
WriteText(pInstrText->m_sText, c_oSerRunType::delInstrText);
}
break;
case OOX::et_w_instrText:
{
OOX::Logic::CInstrText* pInstrText = static_cast<OOX::Logic::CInstrText*>(item);
if(SimpleTypes::fldchartypeBegin == m_eFldState)
m_sFldChar += pInstrText->m_sText;
else
{
if(!pInstrText->m_sText.empty())
{
WriteText(pInstrText->m_sText);
}
}
WriteText(pInstrText->m_sText, c_oSerRunType::instrText);
}
break;
case OOX::et_w_nonBreakHyphen:
@ -5619,25 +5511,19 @@ namespace BinDocxRW
OOX::Logic::CSym* oSym = static_cast<OOX::Logic::CSym*>(item);
wchar_t ch = 0x0FFF & oSym->m_oChar->GetValue();
std::wstring sText(&ch, 1);
WriteText(sText);
WriteText(sText, c_oSerRunType::run);
break;
}
case OOX::et_w_delText:
{
std::wstring& sText = static_cast<OOX::Logic::CDelText*>(item)->m_sText;
if(!sText.empty())
{
WriteDelText(sText);
}
WriteText(sText, c_oSerRunType::delText);
}
break;
case OOX::et_w_t:
{
std::wstring& sText = static_cast<OOX::Logic::CText*>(item)->m_sText;
if(!sText.empty())
{
WriteText(sText);
}
WriteText(sText, c_oSerRunType::run);
}
break;
case OOX::et_w_tab:
@ -5727,19 +5613,15 @@ namespace BinDocxRW
m_oBcw.WriteItemEnd(nCurPos);
}
}
void WriteDelText(const std::wstring& text)
void WriteText(const std::wstring& text, BYTE type)
{
m_oBcw.m_oStream.WriteBYTE(c_oSerRunType::delText);
m_oBcw.m_oStream.WriteStringW(text.c_str());
if(NULL != m_oBcw.m_pEmbeddedFontsManager)
m_oBcw.m_pEmbeddedFontsManager->CheckString(text);
}
void WriteText(const std::wstring& text)
{
m_oBcw.m_oStream.WriteBYTE(c_oSerRunType::run);
m_oBcw.m_oStream.WriteStringW(text);
if(NULL != m_oBcw.m_pEmbeddedFontsManager)
m_oBcw.m_pEmbeddedFontsManager->CheckString(text);
if(!text.empty())
{
m_oBcw.m_oStream.WriteBYTE(type);
m_oBcw.m_oStream.WriteStringW(text);
if(NULL != m_oBcw.m_pEmbeddedFontsManager)
m_oBcw.m_pEmbeddedFontsManager->CheckString(text);
}
}
void WriteDrawingPptx(OOX::WritingElement* item)
{

View File

@ -154,7 +154,7 @@ namespace cpdoccore
if (val)
{
std::wstring tmp = *val;
XmlUtils::GetLower(tmp);
tmp = XmlUtils::GetLower(tmp);
return optional<bool>::Type((tmp == xml_char_value_type::trueVal));
}
else

View File

@ -555,7 +555,6 @@ HEADERS += \
../src/docx/xlsx_xf.h \
../include/logging.h \
../include/cpdoccore/CPColorUtils.h \
../include/cpdoccore/CPHash.h \
../include/cpdoccore/CPNoncopyable.h \
../include/cpdoccore/CPOptional.h \
../include/cpdoccore/CPScopedPtr.h \

View File

@ -224,8 +224,9 @@ public:
bool & get_use_image_replace()
{
bool res = false;
if (frames_.size()>0) return frames_.back().use_image_replace;
else return res;
if (!frames_.empty()) return frames_.back().use_image_replace;
else
throw;
}
std::wstring & get_text_stream_shape()

View File

@ -32,7 +32,7 @@
#include <boost/functional.hpp>
#include <cpdoccore/CPHash.h>
#include <cpdoccore/CPOptional.h>
#include <cpdoccore/xml/simple_xml_writer.h>
#include "oox_chart_legend.h"

View File

@ -30,7 +30,7 @@
*
*/
#include <boost/functional.hpp>
#include <cpdoccore/CPHash.h>
#include <cpdoccore/CPOptional.h>
#include <cpdoccore/xml/simple_xml_writer.h>
#include "oox_chart_shape.h"

View File

@ -31,7 +31,7 @@
*/
#include <cpdoccore/CPHash.h>
#include <cpdoccore/CPOptional.h>
#include <cpdoccore/xml/simple_xml_writer.h>
#include "oox_data_labels.h"

View File

@ -32,7 +32,7 @@
#include "oox_layout.h"
#include <boost/functional.hpp>
#include <cpdoccore/CPHash.h>
#include <cpdoccore/CPOptional.h>
#include <cpdoccore/xml/simple_xml_writer.h>
#include "../odf/style_text_properties.h"

View File

@ -33,7 +33,7 @@
#include "oox_plot_area.h"
#include <boost/foreach.hpp>
#include <boost/functional.hpp>
#include <cpdoccore/CPHash.h>
#include <cpdoccore/CPOptional.h>
#include <cpdoccore/xml/simple_xml_writer.h>
#include "../odf/style_text_properties.h"

View File

@ -32,7 +32,7 @@
#include "oox_title.h"
#include <boost/functional.hpp>
#include <cpdoccore/CPHash.h>
#include <cpdoccore/CPOptional.h>
#include <cpdoccore/xml/simple_xml_writer.h>
#include "../odf/style_text_properties.h"

View File

@ -32,7 +32,7 @@
#include "xlsx_border.h"
#include <boost/functional.hpp>
#include <cpdoccore/CPHash.h>
#include <cpdoccore/CPOptional.h>
#include <cpdoccore/xml/simple_xml_writer.h>
#include "../odf/style_text_properties.h"

View File

@ -55,8 +55,8 @@ public:
void add_format(std::wstring const & condition, std::wstring const & format)
{
std::wstring c = condition;
XmlUtils::GetLower(c);
std::wstring c = XmlUtils::GetLower(condition);
XmlUtils::replace_all( c, L" ", L"");
XmlUtils::replace_all( c, L"\t", L"");

View File

@ -576,11 +576,31 @@ void xlsx_drawing_context::process_chart(drawing_object_description & obj,_xlsx_
impl_->get_drawings()->add(isMediaInternal, drawing.objectId, ref, obj.type_); // не объект
}
void xlsx_drawing_context::process_object(drawing_object_description & obj,_xlsx_drawing & drawing, xlsx_drawings_ptr xlsx_drawings_)
void xlsx_drawing_context::process_object(drawing_object_description & obj, xlsx_table_metrics & table_metrics,_xlsx_drawing & drawing, xlsx_drawings_ptr xlsx_drawings_)
{
std::wstring ref;
bool isMediaInternal = true;
if (drawing.type_anchor == 2) // absolute
{
//пересчет нужен для оле
xlsx_table_position from, to;
process_position_properties (obj, table_metrics, from, to);
drawing.from_.type = xlsx_drawing_position::from;
drawing.from_.position.col = from.col;
drawing.from_.position.colOff = static_cast<size_t>(odf_types::length(from.colOff, odf_types::length::pt).get_value_unit(odf_types::length::emu));
drawing.from_.position.row = from.row;
drawing.from_.position.rowOff = static_cast<size_t>(odf_types::length(from.rowOff, odf_types::length::pt).get_value_unit(odf_types::length::emu));
drawing.to_.type = xlsx_drawing_position::to;
drawing.to_.position.col = to.col;
drawing.to_.position.colOff = static_cast<size_t>(odf_types::length(to.colOff, odf_types::length::pt).get_value_unit(odf_types::length::emu));
drawing.to_.position.row = to.row;
drawing.to_.position.rowOff = static_cast<size_t>(odf_types::length(to.rowOff, odf_types::length::pt).get_value_unit(odf_types::length::emu));
}
drawing.objectId = impl_->get_mediaitems().add_or_find(obj.xlink_href_, obj.type_, isMediaInternal, ref);
drawing.objectProgId = obj.descriptor_;
@ -602,7 +622,7 @@ void xlsx_drawing_context::process_group(drawing_object_description & obj, xlsx_
{
xlsx_drawings_ptr xlsx_drawings_child(xlsx_drawings::create(true));
process_objects ( obj.child_objects_, table_metrics, xlsx_drawings_child);
process_group_objects ( obj.child_objects_, table_metrics, xlsx_drawings_child);
std::wstringstream strm;
@ -620,9 +640,9 @@ void xlsx_drawing_context::process_group(drawing_object_description & obj, xlsx_
}
void xlsx_drawing_context::process_objects(xlsx_table_metrics & table_metrics)
{
process_objects(impl_->objects_, table_metrics, impl_->get_drawings());
process_group_objects(impl_->objects_, table_metrics, impl_->get_drawings());
}
void xlsx_drawing_context::process_objects(std::vector<drawing_object_description> objects, xlsx_table_metrics & table_metrics, xlsx_drawings_ptr xlsx_drawings_)
void xlsx_drawing_context::process_group_objects(std::vector<drawing_object_description> objects, xlsx_table_metrics & table_metrics, xlsx_drawings_ptr xlsx_drawings_)
{
for (size_t i = 0 ; i < objects.size(); i++)
{
@ -661,7 +681,7 @@ void xlsx_drawing_context::process_objects(std::vector<drawing_object_descriptio
case typeGroupShape: process_group ( obj, table_metrics, drawing, xlsx_drawings_); break;
case typeMsObject:
case typeOleObject:
process_object ( obj, drawing, xlsx_drawings_); break;
process_object ( obj, table_metrics, drawing, xlsx_drawings_); break;
}
}
}

View File

@ -133,13 +133,13 @@ private:
class Impl;
_CP_PTR(Impl) impl_;
void process_objects (std::vector<drawing_object_description> objects, xlsx_table_metrics & table_metrics, xlsx_drawings_ptr xlsx_drawings_);
void process_group (drawing_object_description & obj, xlsx_table_metrics & table_metrics, _xlsx_drawing & drawing, xlsx_drawings_ptr xlsx_drawings_);
void process_group_objects (std::vector<drawing_object_description> objects, xlsx_table_metrics & table_metrics, xlsx_drawings_ptr xlsx_drawings_);
void process_image (drawing_object_description & obj, _xlsx_drawing & drawing, xlsx_drawings_ptr xlsx_drawings_);
void process_chart (drawing_object_description & obj, _xlsx_drawing & drawing, xlsx_drawings_ptr xlsx_drawings_);
void process_shape (drawing_object_description & obj, _xlsx_drawing & drawing, xlsx_drawings_ptr xlsx_drawings_);
void process_object (drawing_object_description & obj, _xlsx_drawing & drawing, xlsx_drawings_ptr xlsx_drawings_);
void process_object (drawing_object_description & obj, xlsx_table_metrics & table_metrics, _xlsx_drawing & drawing, xlsx_drawings_ptr xlsx_drawings_);
void process_common_properties (drawing_object_description & obj, _xlsx_drawing & drawing, xlsx_table_metrics & table_metrics);

View File

@ -65,7 +65,7 @@ public:
if (sheet_rel)
{
for (int i = 0 ; i < xlsx_sheet_rels_.size(); i++)
for (size_t i = 0 ; i < xlsx_sheet_rels_.size(); i++)
{
if (xlsx_sheet_rels_[i].rid == rid && xlsx_sheet_rels_[i].ref == ref)
present = true;
@ -75,7 +75,7 @@ public:
}
else
{
for (int i = 0 ; i < xlsx_drawing_rels_.size(); i++)
for (size_t i = 0 ; i < xlsx_drawing_rels_.size(); i++)
{
if (xlsx_drawing_rels_[i].rid == rid && xlsx_drawing_rels_[i].ref == ref)
present = true;
@ -89,7 +89,7 @@ public:
{
if (inGroup)
{
for (int i = 0 ; i < xlsx_drawings_.size(); i++)
for (size_t i = 0 ; i < xlsx_drawings_.size(); i++)
{
xlsx_drawings_[i].serialize(strm);
}
@ -114,7 +114,7 @@ public:
}
void serialize_objects(std::wostream & strm)
{
for (int i = 0 ; i < xlsx_drawings_.size(); i++)
for (size_t i = 0 ; i < xlsx_drawings_.size(); i++)
{
if (xlsx_drawings_[i].type != typeOleObject && xlsx_drawings_[i].type != typeMsObject) continue;
@ -129,7 +129,7 @@ public:
void dump_rels_drawing(rels & Rels)
{
for (int i = 0 ; i < xlsx_drawing_rels_.size(); i++)
for (size_t i = 0 ; i < xlsx_drawing_rels_.size(); i++)
{
if (xlsx_drawing_rels_[i].type == typeImage ||
xlsx_drawing_rels_[i].type == typeMedia ||
@ -146,7 +146,7 @@ public:
}
void dump_rels_sheet(rels & Rels)
{
for (int i = 0 ; i < xlsx_sheet_rels_.size(); i++)
for (size_t i = 0 ; i < xlsx_sheet_rels_.size(); i++)
{
Rels.add(relationship( xlsx_sheet_rels_[i].rid,
mediaitems::get_rel_type(xlsx_sheet_rels_[i].type),

View File

@ -66,9 +66,10 @@ public:
struct _field_value
{
_field_value(const std::wstring &val, const std::wstring &type) : sVal(val), sNode(type) {}
_field_value(const std::wstring &val, const std::wstring &type, const bool &sd) : sVal(val), sNode(type), show_details(sd) {}
std::wstring sVal;
std::wstring sNode;
bool show_details;
};
struct _reference
{
@ -141,6 +142,11 @@ public:
data_on_row = false;
identify_categories = false;
drill_enabled = true;
grand_total = -1;
firstDataRow = 0;
firstDataCol = 0;
bAxisRow = true;
bAxisCol = true;
}
std::wstring name;
std::wstring location_ref;
@ -160,14 +166,21 @@ public:
std::vector<int> col_fields;
std::vector<int> data_fields;
int grand_total = -1;
bool identify_categories = false;
bool drill_enabled = true;
bool ignore_empty_rows = false;
bool data_on_row = false;
bool in_group = false;
//-----------------------------------------------------------------------------
int firstDataRow = 0;
int firstDataCol = 0;
bool bAxisRow = true;
bool bAxisCol = true;
}current_;
void calc_headers();
void sort_fields();
void serialize_view(std::wostream & strm);
@ -279,6 +292,109 @@ private:
xlsx_pivots_context::xlsx_pivots_context() : impl_(new xlsx_pivots_context::Impl())
{
}
void xlsx_pivots_context::Impl::calc_headers()
{
if (current_.headers.empty()) return;
std::map<size_t, size_t> mapRowHeader;
std::map<size_t, size_t> mapColHeader;
std::map<size_t, size_t>::iterator pFind;
size_t min_col = 0xffffff, min_row = 0xffffff;
for (size_t i = 0; i < current_.headers.size(); i++)//("F18","F19","F23","G21","H21")
{
size_t row = 0, col = 0;
oox::getCellAddressInv(current_.headers[i], col, row);
if (col < min_col) min_col = col;
if (row < min_row) min_row = row;
pFind = mapRowHeader.find(row);
if (pFind == mapRowHeader.end())
{
mapRowHeader.insert(std::make_pair(row, col));
}
else
{
if (pFind->second > col )
pFind->second = col;
}
pFind = mapColHeader.find(col);
if (pFind == mapColHeader.end())
{
mapColHeader.insert(std::make_pair(col, row));
}
else
{
if (pFind->second > row )
pFind->second = row;
}
}
bool resRow = clear_header_map(mapRowHeader);
bool resCol = clear_header_map(mapColHeader);
if (resRow == resCol && resCol == false)
{
current_.firstDataRow = current_.firstDataCol = 1;
}
else if (resRow == false)
{
current_.bAxisCol = false;
clear_header_map2(mapRowHeader, mapColHeader);
}
else if (resCol == false)
{
current_.bAxisRow = false;
clear_header_map2(mapColHeader, mapRowHeader);
}
if (resRow || resCol)
{
current_.firstDataCol = mapRowHeader.empty() ? 1 : mapRowHeader.begin()->second - min_col;
if (mapColHeader.empty())
{
pFind = mapRowHeader.end(); pFind--;
min_row = pFind->first;
current_.firstDataRow = 1;
}
else
{
min_row = mapColHeader.begin()->second;
if (!mapRowHeader.empty() && current_.page_fields.empty())
{
if (min_row > mapRowHeader.begin()->first)
min_row = mapRowHeader.begin()->first;
}
current_.firstDataRow = mapColHeader.begin()->second - min_row + 1;
}
}
if (current_.firstDataCol < 1) current_.firstDataCol = 1;
if (current_.firstDataRow < 1) current_.firstDataRow = 1;
std::vector<std::wstring> split_ref;
boost::algorithm::split(split_ref, current_.location_ref, boost::algorithm::is_any_of(L":"), boost::algorithm::token_compress_on);
if (split_ref.size() > 0)
{
size_t row = 0, col = 0;
oox::getCellAddressInv(split_ref[0], col, row);
if (min_col != 0xffffff && min_row != 0xffffff)
{
col = min_col;
row = min_row;
}
split_ref[0] = oox::getColAddress(col) + oox::getRowAddress(row);
}
if (split_ref.size() > 1)
{
current_.location_ref = split_ref[0] + L":" + split_ref[1];
}
}
void xlsx_pivots_context::Impl::sort_fields()
{
size_t count_skip = 0;
@ -304,8 +420,10 @@ void xlsx_pivots_context::Impl::sort_fields()
}
}
bool bEmptyRowCache = false, bAddRepeateCol = false;
bool bEmptyColCache = false, bAddRepeateRow = false;
bool bAddRepeateRow = false;
bool bAddRepeateCol = false;
int count_items_col = -1, count_items_row = -1;
int index_current = 0;
for (size_t i = 0; i < current_.fields.size(); i++, index_current++)
@ -349,22 +467,37 @@ void xlsx_pivots_context::Impl::sort_fields()
case 0: // column
{
if (!current_.fields[i].name.empty())
{
current_.col_fields.push_back(i);
if (current_.fields[i].data_layout)
{
if ((current_.fields[i].name.empty() && (!current_.identify_categories || current_.fields[i].hierarchy >= 0)) ||
current_.fields[i].used_in_referenes )
if ( count_items_col < 0)
{
if ((current_.col_fields.empty()) || (current_.col_fields.back() != -2))
{
bAddRepeateCol = true;
}
count_items_col = current_.fields[i].caches.size();
}
else
{
if (count_items_col != current_.fields[i].caches.size())
bAddRepeateCol = true;
}
}
//if (current_.fields[i].data_layout)
//{
// bAddRepeateCol = false;
// if ((current_.fields[i].name.empty() && (!current_.identify_categories || current_.fields[i].hierarchy >= 0)) ||
// current_.fields[i].used_in_referenes )
// {
// if ((current_.col_fields.empty()) || (current_.col_fields.back() != -2))
// {
// bAddRepeateCol = true;
// }
// }
//}
if (current_.fields[i].caches.empty())
bEmptyColCache = true;
//if (current_.fields[i].caches.empty())
// bEmptyColCache = true;
}break;
case 1: // data
{
@ -405,23 +538,33 @@ void xlsx_pivots_context::Impl::sort_fields()
case 4: // row
{
if (!current_.fields[i].name.empty())
{
current_.row_fields.push_back(i);
if ( count_items_row < 0)
{
count_items_row = current_.fields[i].caches.size();
}
else
{
if (count_items_row != current_.fields[i].caches.size())
bAddRepeateRow = true;
}
}
if (current_.fields[i].data_layout)
{
current_.data_on_row = true;
if ((current_.fields[i].name.empty() && (!current_.identify_categories || current_.fields[i].hierarchy >= 0)) ||
bAddRepeateCol = false;
if ((current_.fields[i].name.empty() && (current_.fields[i].hierarchy >= 0)) ||
current_.fields[i].used_in_referenes )
{
bAddRepeateRow = true;
}
}
if (current_.fields[i].caches.empty())
bEmptyRowCache = true;
}break;
}
@ -432,118 +575,14 @@ void xlsx_pivots_context::Impl::sort_fields()
i--;
}
}
if (bAddRepeateCol || bEmptyColCache)
if (bAddRepeateCol || (count_items_col == 0 && current_.bAxisCol)) ///* || (bEmptyColCache && current_.grand_total < 0)*/?? Financial Execution (template).ods
current_.col_fields.push_back(-2);
if (bAddRepeateRow)
if (bAddRepeateRow || (count_items_row == 0 && current_.bAxisRow))
current_.row_fields.push_back(-2);
}
void xlsx_pivots_context::Impl::serialize_view(std::wostream & strm)
{
if (current_.headers.empty()) return;
std::map<size_t, size_t> mapRowHeader;
std::map<size_t, size_t> mapColHeader;
std::map<size_t, size_t>::iterator pFind;
size_t min_col = 0xffffff, min_row = 0xffffff;
for (size_t i = 0; i < current_.headers.size(); i++)//("F18","F19","F23","G21","H21")
{
size_t row = 0, col = 0;
oox::getCellAddressInv(current_.headers[i], col, row);
if (col < min_col) min_col = col;
if (row < min_row) min_row = row;
pFind = mapRowHeader.find(row);
if (pFind == mapRowHeader.end())
{
mapRowHeader.insert(std::make_pair(row, col));
}
else
{
if (pFind->second > col )
pFind->second = col;
}
pFind = mapColHeader.find(col);
if (pFind == mapColHeader.end())
{
mapColHeader.insert(std::make_pair(col, row));
}
else
{
if (pFind->second > row )
pFind->second = row;
}
}
bool resRow = clear_header_map(mapRowHeader);
bool resCol = clear_header_map(mapColHeader);
size_t firstDataRow, firstDataCol;
if (resRow == resCol && resCol == false)
{
firstDataRow = firstDataCol = 1;
}
else if (resRow == false)
{
clear_header_map2(mapRowHeader, mapColHeader);
}
else if (resCol == false)
{
clear_header_map2(mapColHeader, mapRowHeader);
}
if (resRow || resCol)
{
firstDataCol = mapRowHeader.empty() ? 1 : mapRowHeader.begin()->second - min_col;
if (mapColHeader.empty())
{
pFind = mapRowHeader.end(); pFind--;
min_row = pFind->first;
firstDataRow = 1;
}
else
{
min_row = mapColHeader.begin()->second;
if (!mapRowHeader.empty() && current_.page_fields.empty())
{
if (min_row > mapRowHeader.begin()->first)
min_row = mapRowHeader.begin()->first;
}
firstDataRow = mapColHeader.begin()->second - min_row + 1;
}
}
if (firstDataCol < 1) firstDataCol = 1;
if (firstDataRow < 1) firstDataRow = 1;
std::vector<std::wstring> split_ref;
boost::algorithm::split(split_ref, current_.location_ref, boost::algorithm::is_any_of(L":"), boost::algorithm::token_compress_on);
if (split_ref.size() > 0)
{
size_t row = 0, col = 0;
oox::getCellAddressInv(split_ref[0], col, row);
if (min_col != 0xffffff && min_row != 0xffffff)
{
col = min_col;
row = min_row;
}
split_ref[0] = oox::getColAddress(col) + oox::getRowAddress(row);
}
std::wstring location_data;
if (split_ref.size() > 1)
{
location_data += split_ref[0] + L":" + split_ref[1];
}
else location_data = current_.location_ref;
//------------------------------------------------------------------------------------------------
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"pivotTableDefinition")
@ -580,11 +619,11 @@ void xlsx_pivots_context::Impl::serialize_view(std::wostream & strm)
CP_XML_NODE(L"location")
{
CP_XML_ATTR(L"ref", location_data);
CP_XML_ATTR(L"ref", current_.location_ref);
CP_XML_ATTR(L"firstHeaderRow", 1 );
CP_XML_ATTR(L"firstDataRow", firstDataRow);
CP_XML_ATTR(L"firstDataCol", firstDataCol);
CP_XML_ATTR(L"firstDataRow", current_.firstDataRow);
CP_XML_ATTR(L"firstDataCol", current_.firstDataCol);
if (current_.page_fields.empty() == false)
{
@ -660,6 +699,10 @@ void xlsx_pivots_context::Impl::serialize_view(std::wostream & strm)
{
CP_XML_NODE(L"item")
{
if (current_.fields[i].caches[j].show_details == false)
{
CP_XML_ATTR(L"sd", 0);
}
CP_XML_ATTR(L"x", j);
}
}
@ -898,7 +941,7 @@ void xlsx_pivots_context::Impl::serialize_type_field(CP_ATTR_NODE, _field & fiel
}
void xlsx_pivots_context::Impl::serialize_cache(std::wostream & strm)
{
std::map<std::wstring, bool> used_field_name;
std::map<std::wstring, bool> used_field_name, used_field_name_lower;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"pivotCacheDefinition")
@ -956,12 +999,24 @@ void xlsx_pivots_context::Impl::serialize_cache(std::wostream & strm)
if (used_field_name.end() != used_field_name.find(current_.fields[i].name))
continue;
//---------------------------------------------------------------------------
used_field_name.insert(std::make_pair(current_.fields[i].name, true)); //дублированые поля
used_field_name.insert(std::make_pair(current_.fields[i].name, true));
std::wstring name = current_.fields[i].name; // в мс "H" и "h" одно имя (
std::wstring name_lower = XmlUtils::GetLower(name);
while (used_field_name_lower.end() != used_field_name_lower.find(name_lower))
{
name += L"_";
name_lower = XmlUtils::GetLower(name);
}
used_field_name_lower.insert(std::make_pair(name_lower, true));
//---------------------------------------------------------------------------
CP_XML_NODE(L"cacheField")
{
CP_XML_ATTR(L"name", current_.fields[i].name);
CP_XML_ATTR(L"name", name);
CP_XML_ATTR(L"numFmtId", 0);
if (!current_.fields[i].source_groups.empty())
@ -1181,6 +1236,7 @@ int xlsx_pivots_context::end_table()
std::wstringstream cache_strm;
std::wstringstream rec_strm;
impl_->calc_headers();
impl_->sort_fields();
impl_->serialize_view(view_strm);
@ -1226,6 +1282,10 @@ void xlsx_pivots_context::set_drill(bool val)
{
impl_->current_.drill_enabled = val;
}
void xlsx_pivots_context::set_grand_total(int type)
{
impl_->current_.grand_total = type;
}
void xlsx_pivots_context::start_field()
{
Impl::_field f;
@ -1401,14 +1461,14 @@ void xlsx_pivots_context::set_field_ref_member_type(int type)
{
impl_->current_.fields.back().references.back().member_type = type;
}
void xlsx_pivots_context::add_field_cache(int index, std::wstring value)
void xlsx_pivots_context::add_field_cache(int index, std::wstring value, bool show_details)
{
if (index < 0)
index = impl_->current_.fields.back().caches.size();
while (index > impl_->current_.fields.back().caches.size())
{
Impl::_field_value f(L"", L"m");
Impl::_field_value f(L"", L"m", true);
impl_->current_.fields.back().caches.push_back(f);
impl_->current_.fields.back().bEmpty = true;
@ -1469,7 +1529,7 @@ void xlsx_pivots_context::add_field_cache(int index, std::wstring value)
impl_->current_.fields.back().bString = true;
}
}
impl_->current_.fields.back().caches.push_back(Impl::_field_value(value, node_name));
impl_->current_.fields.back().caches.push_back(Impl::_field_value(value, node_name, show_details));
if (impl_->current_.in_group)
{

View File

@ -56,7 +56,7 @@ public:
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 add_field_cache (int index, std::wstring value, bool show_details = true);
void set_field_show_empty (bool val);
void set_field_data_layout (bool val);
void set_field_sort (int type);
@ -89,6 +89,7 @@ public:
void set_identify_categories(bool val);
void set_ignore_empty_rows(bool val);
void set_drill(bool val);
void set_grand_total(int type);
void set_source_range(std::wstring table_name, std::wstring ref);

View File

@ -46,8 +46,7 @@ std::wostream & operator << (std::wostream & _Wostream, const Bool & _Val)
}
Bool Bool::parse(const std::wstring & Str)
{
std::wstring tmp = Str;
XmlUtils::GetLower(tmp);
std::wstring tmp = XmlUtils::GetLower(Str);
if (tmp == L"0" || tmp == L"false") return Bool(false);
else return Bool(true);

View File

@ -306,7 +306,7 @@ std::wstring draw_object_ole::detectObject(const std::wstring &fileName)
return L"";
}
std::wstring prog;
POLE::Stream* pStream = new POLE::Stream(storage, "CompObj");
POLE::Stream* pStream = new POLE::Stream(storage, L"CompObj");
if ((pStream) && (pStream->size() > 28))
{
//skip the CompObjHeader

View File

@ -87,10 +87,6 @@ void content_xml_t::add_child_element( xml::sax * Reader, const std::wstring & N
else if ( CP_CHECK_NAME(L"math", L"math") || CP_CHECK_NAME(L"", L"math"))
{
create_element_and_read(Reader, Ns, Name, xml_content_, getContext(), true);
}
else if CP_CHECK_NAME(L"manifest", L"manifest")
{
create_element_and_read(Reader, Ns, Name, xml_content_, getContext(), true);
}
}

View File

@ -104,8 +104,7 @@ void styles_container::add_style( const std::wstring & Name,
map_[n] = pos;
// TODO: как правильно??
std::wstring lName = Name;
XmlUtils::GetLower(lName);
std::wstring lName = XmlUtils::GetLower(Name);
//if ( boost::algorithm::contains(lName, L"internet_20_link") )
if (lName == L"internet_20_link")///???????????????
hyperlink_style_pos_ = pos;

View File

@ -62,9 +62,9 @@ void table_calculation_settings::add_child_element( xml::sax * Reader, const std
{
CP_CREATE_ELEMENT(table_null_date_);
}
else if CP_CHECK_NAME(L"table", L"null-date")
{
}
//else if CP_CHECK_NAME(L"table", L"iteration")
//{
//}
else
CP_NOT_APPLICABLE_ELM();
}

View File

@ -108,6 +108,10 @@ void table_data_pilot_table::xlsx_convert(oox::xlsx_conversion_context & Context
Context.get_pivots_context().set_view_target_range(ref);
Context.get_pivots_context().set_view_target_table_name(sheet_name);
}
if (table_grand_total_)
{
Context.get_pivots_context().set_grand_total(table_grand_total_->get_type());
}
if (table_buttons_)
{
@ -494,7 +498,7 @@ void table_data_pilot_member::add_attributes( const xml::attributes_wc_ptr & Att
void table_data_pilot_member::xlsx_convert(oox::xlsx_conversion_context & Context)
{
Context.get_pivots_context().add_field_cache(-1, table_name_.get_value_or(L""));
Context.get_pivots_context().add_field_cache(-1, table_name_.get_value_or(L""), table_show_details_ ? table_show_details_->get() : true);
}
//-------------------------------------------------------------------------------------------------
const wchar_t * table_data_pilot_group_member::ns = L"table";

View File

@ -490,7 +490,6 @@ void table_table_column::xlsx_convert(oox::xlsx_conversion_context & Context)
size_t style_ = Context.get_style_manager().xfId(NULL,NULL, &cellFormatProperties, NULL, L"", set_default);
if (style_>=0)
//if (set_default)
CP_XML_ATTR(L"style", style_ );
}

View File

@ -1111,10 +1111,6 @@
RelativePath="..\include\cpdoccore\CPColorUtils.h"
>
</File>
<File
RelativePath="..\include\cpdoccore\CPHash.h"
>
</File>
<File
RelativePath="..\include\cpdoccore\CPNoncopyable.h"
>

View File

@ -44,7 +44,7 @@ namespace cpdoccore {
namespace odf_writer {
_mediaitems::item::item( std::wstring const & _oox_ref,
_mediaitems::item::item(std::wstring const & _oox_ref,
Type _type,
std::wstring const & _odf_ref
)
@ -58,23 +58,31 @@ _mediaitems::item::item( std::wstring const & _oox_ref,
void _mediaitems::add_or_find(const std::wstring & oox_ref, Type type, std::wstring & odf_ref)
{
std::wstring output_sub_path;//
std::wstring output_sub_path;
std::wstring output_fileName;
int number=0;
if (type == typeImage)
{
output_sub_path = L"Pictures/";
number= count_image+1;
number = count_image + 1;
}
else
else if (type == typeMedia)
{
output_sub_path = L"Media/";
number= count_media+1;
number = count_media + 1;
}
output_fileName = utils::media::create_file_name(oox_ref, type, number);//guid???
else if (type == typeOleObject)
{
output_sub_path = L"";
number = count_object + 1;
}
else if (type == typeObjectReplacement)
{
output_sub_path = L"ObjectReplacements/";
number = count_image_object + 1;
}
output_fileName = utils::media::create_file_name(oox_ref, type, number); //guid???
std::wstring input_path = oox_ref;
@ -92,16 +100,25 @@ void _mediaitems::add_or_find(const std::wstring & oox_ref, Type type, std::wst
break;
}
}
if (output_path .length() < 1)
if (output_path.length() < 1)
{
output_path = ( output_sub_path + output_fileName) ;
if ( type == typeImage)
{
count_image++;
}
else
else if ( type == typeMedia)
{
count_media++;
}
else if ( type == typeOleObject)
{
count_object++;
}
else if ( type == typeObjectReplacement)
{
count_image_object++;
}
items_.push_back( item(input_path, type, xml::utils::replace_text_to_xml(output_path)) );
}

View File

@ -42,13 +42,14 @@ class rels;
class _mediaitems
{
public:
enum Type { typeUnknown = 0, typeImage, typeMedia};
//oleObject ???
enum Type { typeUnknown = 0, typeImage, typeMedia, typeOleObject, typeObjectReplacement};
_mediaitems()
{
count_image =0;
count_media =0;
count_image = 0;
count_media = 0;
count_object = 0;
count_image_object = 0;
}
struct item
@ -66,6 +67,8 @@ public:
size_t count_image;
size_t count_media;
size_t count_object;
size_t count_image_object;
void add_or_find(const std::wstring & oox_ref, Type type, std::wstring & odf_ref);

View File

@ -29,12 +29,8 @@
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
#include "mediaitems_utils.h"
#include <boost/lexical_cast.hpp>
namespace cpdoccore {
namespace odf_writer{
namespace utils {
@ -45,9 +41,11 @@ std::wstring get_rel_type(_mediaitems::Type type)
{
switch (type)
{
case _mediaitems::typeImage:
return L"";
default:
case _mediaitems::typeOleObject:
return L"application/vnd.sun.star.oleobject";
case _mediaitems::typeMedia:
case _mediaitems::typeImage:
default:
return L"";
}
}
@ -58,6 +56,9 @@ std::wstring get_default_file_name(_mediaitems::Type type)
{
case _mediaitems::typeImage:
return L"image";
case _mediaitems::typeOleObject:
case _mediaitems::typeObjectReplacement:
return L"Object ";
default:
return L"media";
}
@ -66,11 +67,15 @@ std::wstring get_default_file_name(_mediaitems::Type type)
std::wstring create_file_name(const std::wstring & uri, _mediaitems::Type type, size_t Num)
{
std::wstring sExt;
int n = uri.rfind(L".");
if (n>=0) sExt = uri.substr(n);
//todooo проверить
return get_default_file_name(type) + boost::lexical_cast<std::wstring>(Num) + sExt;
if (type == _mediaitems::typeOleObject &&
type == _mediaitems::typeObjectReplacement)
{
int n = uri.rfind(L".");
if (n >= 0) sExt = uri.substr(n);
}
return get_default_file_name(type) + std::to_wstring(Num) + sExt;
}

View File

@ -77,8 +77,7 @@ namespace odf_writer
{
return boost::make_shared<simple_element>(FileName, Content, utf8);
}
////////////
//-------------------------------------------------------------------------------
content_simple_ptr content_simple::create()
{
return boost::make_shared<content_simple>();
@ -87,7 +86,7 @@ namespace odf_writer
{
return boost::make_shared<content_content>();
}
///////////////
//-------------------------------------------------------------------------------
void manifect_file::add_rels(rels & r)
{
std::vector<relationship> & rels = r.relationships();
@ -174,23 +173,21 @@ namespace odf_writer
simple_element elm(L"meta.xml", resStream.str());
elm.write(RootPath);
}
///////////////////////////
media::media(_mediaitems & mediaitems) : mediaitems_(mediaitems)
//-------------------------------------------------------------------------------
media::media(_mediaitems & mediaitems, const std::wstring internal_folder, int type) : mediaitems_(mediaitems), type_(type), folder_(internal_folder)
{
}
void media::write(const std::wstring & RootPath)
{
if (mediaitems_.count_media < 1)return;
std::wstring path = RootPath + FILE_SEPARATOR_STR + L"Media";
std::wstring path = RootPath + (folder_.empty() ? L"" : FILE_SEPARATOR_STR) + folder_;
NSDirectory::CreateDirectory(path);
std::vector< _mediaitems::item > & items = mediaitems_.items();
for (size_t i = 0; i < items.size(); i++)
{
if (items[i].type == _mediaitems::typeMedia)
if (items[i].type == type_)
{
std::wstring file_name_out = RootPath + FILE_SEPARATOR_STR + items[i].odf_ref;
@ -198,49 +195,31 @@ namespace odf_writer
}
}
}
pictures::pictures(_mediaitems & mediaitems) : mediaitems_(mediaitems)
{
}
void pictures::write(const std::wstring & RootPath)//folder by content.xml
{
if (mediaitems_.count_image < 1 )return;
std::wstring path = RootPath + FILE_SEPARATOR_STR + L"Pictures";
NSDirectory::CreateDirectory(path);
std::vector< _mediaitems::item > & items = mediaitems_.items();
for (size_t i = 0; i < items.size(); i++)
{
if (items[i].type == _mediaitems::typeImage && items[i].oox_ref.length()>0)
{
std::wstring file_name_out = RootPath + FILE_SEPARATOR_STR + items[i].odf_ref;
try
{
NSFile::CFileBinary::Copy(items[i].oox_ref, file_name_out);
}catch (...)
{
}
}
}
}
}
//-------------------------------------------------------------------------------
void object_files::set_content(content_content_ptr & _content)
{
content_.set_content(_content);
meta_ = element_ptr(new meta_file());
}
void object_files::set_media(_mediaitems & mediaitems)
void object_files::set_mediaitems(_mediaitems & mediaitems)
{
media_ = element_ptr( new media(mediaitems) );
}
void object_files::set_pictures(_mediaitems & mediaitems)
{
pictures_ = element_ptr( new pictures(mediaitems) );
if (mediaitems.count_image > 0)
{
pictures_ = element_ptr( new media(mediaitems, L"Picture", 1) );
}
if (mediaitems.count_media > 0)
{
media_ = element_ptr( new media(mediaitems, L"Media", 2) );
}
if (mediaitems.count_object > 0)
{
oleObjects_ = element_ptr( new media(mediaitems, L"", 3) );
}
if (mediaitems.count_object > 0)
{
imageObjects_ = element_ptr( new media(mediaitems, L"ObjectReplacements", 4) );
}
}
void object_files::set_styles(content_simple_ptr & _content)
{
@ -258,8 +237,10 @@ namespace odf_writer
if (meta_) meta_->write(RootPath);
if (media_) media_->write(RootPath);
if (pictures_) pictures_->write(RootPath);
if (media_) media_->write(RootPath);
if (pictures_) pictures_->write(RootPath);
if (oleObjects_) oleObjects_->write(RootPath);
if (imageObjects_) imageObjects_->write(RootPath);
}
void odf_document::add_object(element_ptr _object, bool root)

View File

@ -174,21 +174,13 @@ namespace odf_writer
class media : public element
{
public:
media(_mediaitems & mediaitems);
media(_mediaitems & mediaitems, const std::wstring internal_folder, int type);
virtual void write(const std::wstring & RootPath);
private:
_mediaitems & mediaitems_;
};
class pictures : public element
{
public:
pictures(_mediaitems & mediaitems);
virtual void write(const std::wstring & RootPath);
private:
_mediaitems & mediaitems_;
_mediaitems& mediaitems_;
int type_;
std::wstring folder_;
};
class object_files : public element
@ -201,8 +193,7 @@ namespace odf_writer
void set_styles (content_simple_ptr & _styles);
void set_settings (content_simple_ptr & _settings);
void set_media (_mediaitems & mediaitems);
void set_pictures (_mediaitems & mediaitems);
void set_mediaitems (_mediaitems & mediaitems);
virtual void write(const std::wstring & RootPath);
@ -212,16 +203,18 @@ namespace odf_writer
styles_file styles_;
element_ptr meta_;
element_ptr media_;
element_ptr pictures_;
};
element_ptr oleObjects_;
element_ptr imageObjects_;
};
class odf_document : public element
{
public:
odf_document(std::wstring type);
void add_object(element_ptr _object,bool root=false);
void add_object(element_ptr _object,bool root = false);
void set_rels(rels & r);

View File

@ -150,13 +150,12 @@ void odf_conversion_context::end_document()
{
object_files->set_content (content_root_);
object_files->set_styles (content_style_);
object_files->set_media (object.mediaitems);
object_files->set_pictures (object.mediaitems);
object_files->set_mediaitems(object.mediaitems);
object_files->set_settings (content_settings_);
if (!isRoot)object_files->local_path = object.name + L"/";
object.mediaitems.dump_rels(rels_,object_files->local_path);
object.mediaitems.dump_rels(rels_, object_files->local_path);
rels_.add(relationship(std::wstring(L"text/xml"), object_files->local_path + L"styles.xml"));
rels_.add(relationship(std::wstring(L"text/xml"), object_files->local_path + L"content.xml"));
@ -311,6 +310,24 @@ std::wstring odf_conversion_context::add_media(const std::wstring & file_name)
return odf_ref_name;
}
std::wstring odf_conversion_context::add_imageobject(const std::wstring & file_name)
{
if (file_name.empty()) return L"";
std::wstring odf_ref_name ;
mediaitems()->add_or_find(file_name,_mediaitems::typeObjectReplacement, odf_ref_name);
return odf_ref_name;
}
std::wstring odf_conversion_context::add_oleobject(const std::wstring & file_name)
{
if (file_name.empty()) return L"";
std::wstring odf_ref_name ;
mediaitems()->add_or_find(file_name,_mediaitems::typeOleObject, odf_ref_name);
return odf_ref_name;
}
void odf_conversion_context::add_tab(_CP_OPT(int) type, _CP_OPT(length) _length, _CP_OPT(int) leader)
{
if (!temporary_.elm) return;

View File

@ -96,8 +96,10 @@ public:
virtual void start_text_context() = 0;
virtual void end_text_context() = 0;
std::wstring add_image(const std::wstring & image_file_name);
std::wstring add_media(const std::wstring & file_name);
std::wstring add_image (const std::wstring & image_file_name);
std::wstring add_media (const std::wstring & file_name);
std::wstring add_oleobject (const std::wstring & ole_file_name);
std::wstring add_imageobject(const std::wstring & ole_file_name);
virtual odf_style_context * styles_context();

View File

@ -222,6 +222,7 @@ struct odf_drawing_state
_CP_OPT(presentation_class) presentation_class_;
_CP_OPT(std::wstring) presentation_placeholder_;
std::wstring program_;
std::wstring replacement_;
std::wstring path_;
std::wstring view_box_;
@ -2462,8 +2463,6 @@ void odf_drawing_context::start_action(std::wstring value)
event_->attlist_.presentation_action_ = L"last-page";
else if (std::wstring::npos != value.find(L"endshow"))
event_->attlist_.presentation_action_ = L"end";
else if (std::wstring::npos != value.find(L"endshow"))
event_->attlist_.presentation_action_ = L"end";
}
else if (std::wstring::npos != value.find(L"hlinksldjump"))
{
@ -2655,6 +2654,10 @@ void odf_drawing_context::start_object_ole(std::wstring ref)
{
start_frame();
impl_->current_graphic_properties->common_draw_fill_attlist_.draw_fill_ = draw_fill::none;
impl_->current_graphic_properties->draw_stroke_ = line_style(line_style::None);
impl_->current_graphic_properties->draw_ole_draw_aspect_ = 1;
//------------------------------------------------------------------------------------------------------
office_element_ptr object_elm;
create_element(L"draw", L"object-ole", object_elm, impl_->odf_context_);
@ -2682,6 +2685,11 @@ void odf_drawing_context::set_image_replacement(std::wstring ref)
impl_->current_drawing_state_.replacement_ = ref;
}
void odf_drawing_context::set_program(std::wstring program)
{
impl_->current_drawing_state_.program_ = program;
}
bool odf_drawing_context::is_exist_content()
{
return (impl_->drawing_list_.empty() ? false : true);

View File

@ -153,6 +153,8 @@ public:
void add_image_replacement();
void set_image_replacement(std::wstring ref);
void set_program(std::wstring program);
bool isLineShape();
void corrected_line_fill();

View File

@ -56,7 +56,7 @@ namespace utils
void calculate_size_font_symbols(_font_metrix & metrix, CApplicationFonts *appFonts)
{
double appr_px = _graphics_utils_::calculate_size_symbol_asc(metrix.font_name,metrix.font_size,metrix.italic,metrix.bold, appFonts);
double appr_px = _graphics_utils_::calculate_size_symbol_asc(metrix.font_name, metrix.font_size, metrix.italic, metrix.bold, appFonts);
if (appr_px <0.01)
{
@ -357,12 +357,15 @@ void ods_conversion_context::end_cell()
}
void ods_conversion_context::calculate_font_metrix(std::wstring name, double size, bool italic, bool bold)
{
if (font_metrix_.IsCalc)return;
if (font_metrix_.IsCalc) return;
font_metrix_.font_size = size;
font_metrix_.italic = italic;
font_metrix_.bold = bold;
font_metrix_.font_name = name;
if (size < 1)
size = 12;
font_metrix_.font_size = size;
font_metrix_.italic = italic;
font_metrix_.bold = bold;
font_metrix_.font_name = name;
////////////////////////////////////////////
utils::calculate_size_font_symbols(font_metrix_, applicationFonts_);

View File

@ -69,7 +69,7 @@ public:
void add_column(int start_column, int repeated, int level = 0, bool _default = false);
void end_columns();
void calculate_font_metrix(std::wstring name, double size, bool italic, bool bold);
void calculate_font_metrix(std::wstring name, double size, bool italic, bool bold);
void start_rows();
void start_row(int _start_row, int repeated, int level = 0, bool _default = false);

View File

@ -75,11 +75,8 @@ office_element_creator * office_element_creator::get()
{
if (!instance_)
{
if (!instance_)
{
office_element_creator * temp = new office_element_creator();
instance_ = temp;
}
office_element_creator * temp = new office_element_creator();
instance_ = temp;
}
return instance_;

View File

@ -62,7 +62,9 @@ void graphic_format_properties::apply_from(const graphic_format_properties & Oth
_CP_APPLY_PROP2(draw_auto_grow_width_);
_CP_APPLY_PROP2(draw_fit_to_size_);
_CP_APPLY_PROP2(draw_fit_to_contour_);
_CP_APPLY_PROP2(draw_wrap_influence_on_position_);
_CP_APPLY_PROP2(draw_ole_draw_aspect_);
_CP_APPLY_PROP2(svg_stroke_color_);
_CP_APPLY_PROP2(svg_stroke_width_);
_CP_APPLY_PROP2(svg_stroke_opacity_);
@ -86,7 +88,6 @@ void graphic_format_properties::apply_from(const graphic_format_properties & Oth
_CP_APPLY_PROP2(style_overflow_behavior_);
_CP_APPLY_PROP2(style_mirror_);
_CP_APPLY_PROP2(fo_clip_);
_CP_APPLY_PROP2(draw_wrap_influence_on_position_);
common_draw_fill_attlist_.apply_from(Other.common_draw_fill_attlist_);
common_draw_rel_size_attlist_.apply_from(Other.common_draw_rel_size_attlist_);
@ -123,6 +124,7 @@ void graphic_format_properties::serialize(std::wostream & _Wostream ,const wchar
CP_XML_ATTR_OPT(L"draw:auto-grow-width", draw_auto_grow_width_);
CP_XML_ATTR_OPT(L"draw:fit-to-size", draw_fit_to_size_);
CP_XML_ATTR_OPT(L"draw:fit-to-contour", draw_fit_to_contour_);
CP_XML_ATTR_OPT(L"draw:ole-draw-aspect", draw_ole_draw_aspect_);
CP_XML_ATTR_OPT(L"draw:stroke", draw_stroke_);
CP_XML_ATTR_OPT(L"draw:stroke-dash", draw_stroke_dash_);

View File

@ -103,7 +103,8 @@ public:
_CP_OPT(odf_types::color) draw_shadow_color_;
_CP_OPT(odf_types::length) draw_shadow_offset_y_;
_CP_OPT(odf_types::length) draw_shadow_offset_x_;
_CP_OPT(unsigned int) draw_ole_draw_aspect_;
odf_types::common_draw_fill_attlist common_draw_fill_attlist_;
odf_types::common_draw_rel_size_attlist common_draw_rel_size_attlist_;
@ -143,8 +144,8 @@ public:
_CP_OPT(std::wstring) style_mirror_;
_CP_OPT(std::wstring) fo_clip_;
////////////////////////////////////////////////////////////////////////
office_element_ptr style_background_image_;
//-------------------------------------------------------------------------------------
office_element_ptr style_background_image_;
};

View File

@ -203,25 +203,25 @@ void OoxConverter::convert(PPTX::Logic::Pic *oox_picture)
}
}
//--------------------------------------------------------------------------------------
std::wstring odf_ref_image;
bool bEmbedded = true;
std::wstring pathImage;
if (oox_picture->blipFill.blip.IsInit())
{
bool bEmbedded = true;
if (oox_picture->blipFill.blip->embed.IsInit())
{
std::wstring sID = oox_picture->blipFill.blip->embed->get();
pathImage = find_link_by_id(sID, 1);
odf_ref_image = odf_context()->add_image(pathImage);
}
else if (oox_picture->blipFill.blip->link.IsInit())
{
odf_ref_image = oox_picture->blipFill.blip->link->get();
pathImage = oox_picture->blipFill.blip->link->get();
bEmbedded = false;
}
}
//--------------------------------------------------------------------------------------
std::wstring odf_ref_image;
if (oox_picture->nvPicPr.nvPr.media.is_init())
{
if (oox_picture->nvPicPr.nvPr.media.is<PPTX::Logic::MediaFile>())
@ -238,7 +238,7 @@ void OoxConverter::convert(PPTX::Logic::Pic *oox_picture)
PPTX::Logic::Ext & ext = oox_picture->nvPicPr.nvPr.extLst[i];
if (pathMedia.empty() && ext.link.IsInit())
{
pathMedia= find_link_by_id(ext.link->get(), 3);
pathMedia = find_link_by_id(ext.link->get(), 3);
//например файлики mp3
}
if (ext.st.IsInit()) start = *ext.st;
@ -255,6 +255,7 @@ void OoxConverter::convert(PPTX::Logic::Pic *oox_picture)
OoxConverter::convert(&oox_picture->nvPicPr.cNvPr);
OoxConverter::convert(&oox_picture->spPr, oox_picture->style.GetPointer());
odf_ref_image = bEmbedded ? odf_context()->add_image(pathImage) : pathImage;
odf_context()->drawing_context()->set_image_replacement(odf_ref_image);
odf_context()->drawing_context()->end_media();
@ -265,15 +266,32 @@ void OoxConverter::convert(PPTX::Logic::Pic *oox_picture)
}
if (oox_picture->oleObject.IsInit())
{
//nullable_limit<Limit::OLEDrawAspectType>m_oDrawAspect;
//nullable<OOX::RId> m_oId;
//nullable_string m_sObjectId;
//nullable_string m_sProgId;
//nullable_string m_sShapeId;
//nullable_limit<Limit::OLEType> m_oType;
//nullable_limit<Limit::OLEUpdateMode> m_oUpdateMode;
std::wstring pathOle;
if (oox_picture->oleObject->m_oId.IsInit())
{
pathOle = find_link_by_id(oox_picture->oleObject->m_oId->get(), 4);
}
std::wstring odf_ref_ole = odf_context()->add_oleobject(pathOle);
if (!odf_ref_ole.empty())
{
odf_context()->drawing_context()->start_object_ole(odf_ref_ole);
if (oox_picture->oleObject->m_sProgId.IsInit())
{
odf_context()->drawing_context()->set_program(*oox_picture->oleObject->m_sProgId);
}
odf_ref_image = bEmbedded ? odf_context()->add_imageobject(pathImage) : pathImage;
odf_context()->drawing_context()->set_image_replacement(odf_ref_image);
odf_context()->drawing_context()->end_object_ole();
return;
}
}
//--------------------------------------------------------------------------------------
odf_ref_image = bEmbedded ? odf_context()->add_image(pathImage) : pathImage;
odf_context()->drawing_context()->start_image(odf_ref_image);
{
double Width = 0, Height = 0;

View File

@ -328,6 +328,13 @@ std::wstring OoxConverter::find_link_by (smart_ptr<OOX::File> & oFile, int type)
if (pMedia)
ref = pMedia->filename().GetPath();
}
if (type == 4)
{
OOX::OleObject* pOleObject = dynamic_cast<OOX::OleObject*>(oFile.operator->());
if (pOleObject)
ref = pOleObject->filename().GetPath();
}
return ref;
}

View File

@ -2733,10 +2733,10 @@ void DocxConverter::convert(SimpleTypes::CHexColor<> *color,
std::wstring strColor = L"#" + oRgbColor->ToString().substr(2);//.Right(6);
odf_color = odf_types::color(strColor);
delete oRgbColor;
result = true;
}
if (oRgbColor)
delete oRgbColor;
}
if(theme_color && result == false)
{
@ -3150,7 +3150,7 @@ void DocxConverter::convert(OOX::Numbering::CLvl* oox_num_lvl)
int id = oox_num_lvl->m_oLvlPicBulletId->m_oVal->GetValue();
OOX::CNumbering * lists_styles = docx_document->GetNumbering();
for (size_t i = 0; (lists_styles) && (i< lists_styles->m_arrNumPicBullet.size()); i++)
for (size_t i = 0; (lists_styles) && (i < lists_styles->m_arrNumPicBullet.size()); i++)
{
if ((lists_styles->m_arrNumPicBullet[i]) && (lists_styles->m_arrNumPicBullet[i]->m_oNumPicBulletId.GetValue() == id))
{

View File

@ -925,9 +925,10 @@ void PptxConverter::convert(PPTX::Logic::Table *oox_table)
}
void PptxConverter::convert(PPTX::Logic::TableRow *oox_table_row)
{
odp_context->slide_context()->start_table_row(oox_table_row->Height.IsInit());
if (!oox_table_row) return;
odp_context->slide_context()->start_table_row(oox_table_row->Height.IsInit());
if (oox_table_row->Height.IsInit())
{
odf_writer::style_table_row_properties * table_row_properties = odp_context->styles_context()->last_state()->get_table_row_properties();

View File

@ -295,17 +295,20 @@ void XlsxConverter::convert(OOX::Spreadsheet::CWorksheet *oox_sheet)
{
OOX::Spreadsheet::CDrawing* pDrawing = (OOX::Spreadsheet::CDrawing*)oFile.operator->();
convert(pDrawing);
convert(pDrawing, oox_sheet);
}
}
////сортировки
convert(oox_sheet->m_oOleObjects.GetPointer(), oox_sheet);
//сортировки
//convert(oox_sheet->m_oSortState.GetPointer());
//автофильтры
convert(oox_sheet->m_oAutofilter.GetPointer());
//условное форматирование
if (oox_sheet->m_arrConditionalFormatting.size() >0)
if (!oox_sheet->m_arrConditionalFormatting.empty() )
{
ods_context->start_conditional_formats();
for (size_t fmt =0; fmt < oox_sheet->m_arrConditionalFormatting.size(); fmt++)
@ -1232,7 +1235,7 @@ void XlsxConverter::convert_styles()
void XlsxConverter::convert(OOX::Spreadsheet::CFont * font, odf_writer::style_text_properties * text_properties)
void XlsxConverter::convert(OOX::Spreadsheet::CFont *font, odf_writer::style_text_properties *text_properties)
{
if (font == NULL)return;
if (text_properties == NULL)return;
@ -1271,7 +1274,7 @@ void XlsxConverter::convert(OOX::Spreadsheet::CFont * font, odf_writer::style_te
}
}
}
if (font->m_oItalic.IsInit() && (font->m_oItalic->m_oVal.ToBool() ==true))font_italic = true;
if (font->m_oItalic.IsInit() && (font->m_oItalic->m_oVal.ToBool() ==true)) font_italic = true;
if (font_italic) text_properties->content_.fo_font_style_ = odf_types::font_style(odf_types::font_style::Italic);
else text_properties->content_.fo_font_style_ = odf_types::font_style(odf_types::font_style::Normal);
@ -1322,7 +1325,7 @@ void XlsxConverter::convert(OOX::Spreadsheet::CFont * font, odf_writer::style_te
if ((font->m_oStrike.IsInit()) && (font->m_oStrike->m_oVal.ToBool()))
text_properties->content_.style_text_line_through_type_ = odf_types::line_type(odf_types::line_type::Single);
ods_context->calculate_font_metrix(font_name,font_size,font_italic,font_bold);
ods_context->calculate_font_metrix(font_name, font_size, font_italic, font_bold);
}
void XlsxConverter::convert(double oox_size, _CP_OPT(odf_types::length) & odf_size)
@ -1818,7 +1821,6 @@ void XlsxConverter::convert(OOX::Spreadsheet::CCellAnchor *oox_anchor)
{
if (!oox_anchor) return;
if (oox_anchor->m_bShapeOle) return;
//////////////////
if (oox_anchor->m_oFrom.IsInit() || oox_anchor->m_oTo.IsInit())
{
@ -1859,22 +1861,107 @@ void XlsxConverter::convert(OOX::Spreadsheet::CCellAnchor *oox_anchor)
odf_context()->drawing_context()->end_drawing();
}
void XlsxConverter::convert(OOX::Spreadsheet::CDrawing *oox_drawing)
void XlsxConverter::convert(OOX::Spreadsheet::CDrawing *oox_drawing, OOX::Spreadsheet::CWorksheet *oox_sheet)
{
if (!oox_drawing)return;
OOX::IFileContainer* old_container = xlsx_current_container;
xlsx_current_container = dynamic_cast<OOX::IFileContainer*>(oox_drawing);
for (size_t dr = 0 ; dr < oox_drawing->m_arrItems.size(); dr++)
for (size_t i = 0; i < oox_drawing->m_arrItems.size(); i++)
{
OOX::Spreadsheet::CCellAnchor * oox_anchor = oox_drawing->m_arrItems[i];
if (oox_anchor->m_bShapeOle) continue;
if (oox_sheet->m_oOleObjects.IsInit() && oox_anchor->m_nId.IsInit())
{
std::map<int, OOX::Spreadsheet::COleObject*>::const_iterator pFind = oox_sheet->m_oOleObjects->m_mapOleObjects.find(oox_anchor->m_nId.get());
if (pFind != oox_sheet->m_oOleObjects->m_mapOleObjects.end())
{
//??? перенести даные привязки
oox_anchor->m_bShapeOle = true;
continue;
}
}
ods_context->start_drawings();
convert(oox_drawing->m_arrItems[dr]);
convert(oox_anchor);
ods_context->end_drawings();
}
xlsx_current_container = old_container;
}
void XlsxConverter::convert(OOX::Spreadsheet::COleObjects *oox_objects, OOX::Spreadsheet::CWorksheet *oox_sheet)
{
if (!oox_objects) return;
for (std::map<int, OOX::Spreadsheet::COleObject*>::const_iterator it = oox_objects->m_mapOleObjects.begin(); it != oox_objects->m_mapOleObjects.end(); ++it)
{
OOX::Spreadsheet::COleObject* object = it->second;
ods_context->start_drawings();
bool bAnchor = false;
std::wstring odf_ref_object, odf_ref_image;
if (object->m_oObjectPr.IsInit())
{
if (object->m_oObjectPr->m_oAnchor.IsInit())
{
bAnchor = true;
oox_table_position from = {}, to = {};
convert(object->m_oObjectPr->m_oAnchor->m_oFrom.GetPointer(), &from);
convert(object->m_oObjectPr->m_oAnchor->m_oTo.GetPointer(), &to);
double x1 = 0, y1 = 0, x2 = 0, y2 = 0;
ods_context->current_table().convert_position(from, x1, y1);
ods_context->current_table().convert_position(to, x2, y2);
ods_context->drawing_context()->set_drawings_rect(x1, y1, x2 - x1, y2 - y1);
}
}
if (object->m_oRid.IsInit())
{
std::wstring pathOle;
std::wstring sID = object->m_oRid->GetValue();
pathOle = find_link_by_id(sID, 4);
odf_ref_object = odf_context()->add_oleobject(pathOle);
}
if ((object->m_oObjectPr.IsInit()) && (object->m_oObjectPr->m_oRid.IsInit()))
{
std::wstring pathImage;
std::wstring sID = object->m_oObjectPr->m_oRid->GetValue();
pathImage = find_link_by_id(sID, 1);
odf_ref_image = odf_context()->add_imageobject(pathImage);
}
//--------------------------------------------------------------------------------------------------
if (!bAnchor || odf_ref_image.empty())
{
//from vml drawing or oox drawing
//m_oShapeId;
}
//--------------------------------------------------------------------------------------------------
ods_context->drawing_context()->start_drawing();
ods_context->drawing_context()->start_object_ole(odf_ref_object);
ods_context->drawing_context()->set_image_replacement(odf_ref_image);
if (object->m_oProgId.IsInit())
{
ods_context->drawing_context()->set_program(*object->m_oProgId);
}
ods_context->drawing_context()->end_object_ole();
ods_context->drawing_context()->end_drawing();
ods_context->end_drawings();
}
}
void XlsxConverter::convert(OOX::Spreadsheet::CFromTo* oox_from_to, oox_table_position * pos)

View File

@ -47,7 +47,6 @@ namespace OOX
class WritingElement;
class CWorksheet;
class CDrawing;
class CTable;
class CCol;
class CRow;
@ -69,8 +68,9 @@ namespace OOX
class CDxf;
class CCellStyle;
class CNumFmt;
class CCellAnchor;
class COleObjects;
class CDrawing;
class CCellAnchor;
class CFromTo;
class CCommentItem;
class CDefinedName;
@ -182,18 +182,19 @@ namespace Oox2Odf
void convert(OOX::Spreadsheet::CColor *color, _CP_OPT(odf_types::color) & odf_color);
void convert(OOX::Spreadsheet::CColor *color, _CP_OPT(odf_types::background_color) & odf_bckgrd_color);
void convert(OOX::Spreadsheet::CBorderProp *borderProp, std::wstring & odf_border_prop);
void convert(OOX::Spreadsheet::CAligment *aligment, odf_writer::style_paragraph_properties * paragraph_properties,
odf_writer::style_table_cell_properties * cell_properties);
void convert(OOX::Spreadsheet::CAligment *aligment, odf_writer::style_paragraph_properties *paragraph_properties,
odf_writer::style_table_cell_properties *cell_properties);
void convert(OOX::Spreadsheet::CXfs *cell_style, int oox_id, bool automatic=true, bool root = false);
void convert(OOX::Spreadsheet::CXfs *cell_style, int oox_id, bool automatic = true, bool root = false);
void convert(OOX::Spreadsheet::CCellStyle *cell_style);
void convert(OOX::Spreadsheet::CNumFmt *numFmt);
void convert(OOX::Spreadsheet::CDxf *dxFmt, int oox_id);
void convert(OOX::Spreadsheet::CCellAnchor *oox_anchor);
void convert(OOX::Spreadsheet::CDrawing *oox_drawing);
void convert(OOX::Spreadsheet::CDrawing *oox_drawing, OOX::Spreadsheet::CWorksheet *oox_sheet);
void convert(OOX::Spreadsheet::COleObjects *oox_objects, OOX::Spreadsheet::CWorksheet *oox_sheet);
void convert(OOX::Spreadsheet::CFromTo *oox_from_to, oox_table_position * pos);
void convert(OOX::Spreadsheet::CFromTo *oox_from_to, oox_table_position *pos);
void convert(OOX::Spreadsheet::CConditionalFormatting *oox_cond_fmt);
void convert(OOX::Spreadsheet::CConditionalFormattingRule *oox_cond_rule);

View File

@ -959,7 +959,7 @@ void NSPresentationEditor::CPPTXWriter::WriteSlide(int nIndexSlide)
void NSPresentationEditor::CPPTXWriter::WriteTransition(CStringWriter& oWriter, CTransition& transition)
{
if (!transition.m_nEffectType == 0xFF) return;
if (transition.m_nEffectType == 0xFF) return;
std::wstring type;

View File

@ -787,9 +787,9 @@ void NSPresentationEditor::CShapeWriter::WriteShapeInfo()
{
if (m_pShapeElement->m_lPlaceholderSizePreset == 1)
m_oWriter.WriteString(std::wstring(L" size=\"half\""));
if (m_pShapeElement->m_lPlaceholderSizePreset == 2)
else if (m_pShapeElement->m_lPlaceholderSizePreset == 2)
m_oWriter.WriteString(std::wstring(L" size=\"quarter\""));
if (m_pShapeElement->m_lPlaceholderSizePreset == 3)
else if (m_pShapeElement->m_lPlaceholderSizePreset == 3)
{
if (isBodyPlaceholder(m_pShapeElement->m_lPlaceholderType))
m_oWriter.WriteString(std::wstring(L" size=\"half\""));

View File

@ -100,7 +100,7 @@ public:
{
delete pInfo;
if (pInfo->m_bEncrypt)
if (m_oCurrentUser.m_bIsEncrypt)
return false;
else
continue;

View File

@ -195,7 +195,7 @@ void CPPTUserInfo::DecryptStream(POLE::Stream *pStream, int block)
{
int size = pStream->size() - pStream->tell();
POLE::Stream *pStreamTmp = new POLE::Stream(m_pStorageDecrypt, "Tmp" + std::to_string(m_arStreamDecrypt.size() + 1), true, size);
POLE::Stream *pStreamTmp = new POLE::Stream(m_pStorageDecrypt, L"Tmp" + std::to_wstring(m_arStreamDecrypt.size() + 1), true, size);
unsigned char* data_stream = new unsigned char[size];
pStream->read(data_stream, size);
@ -2432,12 +2432,14 @@ void CPPTUserInfo::AddAudioTransition (DWORD dwSlideID, CTransition* pTransition
if (NULL==pTransition)
return;
CAudioElement* pAudio = new CAudioElement ();
CAudioElement* pAudio = new CAudioElement ();
if (pAudio)
{
pAudio->m_strAudioFileName = strFilePath;
}
// ??? недоделка ???
pAudio->Release();
}
void CPPTUserInfo::CreateDefaultStyle(NSPresentationEditor::CTextStyles& pStyle, NSPresentationEditor::CTheme* pTheme)

View File

@ -37,17 +37,17 @@
#include "../../../DesktopEditor/common/Directory.h"
#include "../Records/Drawing/ArtBlip.h"
#define CURRENT_USER_STREAM "Current User"
#define CURRENT_USER_STREAM L"Current User"
#define DOCUMENT_STREAM "PowerPoint Document"
#define DOCUMENT_STREAM L"PowerPoint Document"
#define PICTURE_STREAM "Pictures"
#define HEADER_STREAM "Header"
#define PICTURE_STREAM L"Pictures"
#define HEADER_STREAM L"Header"
#define PP97_DUALSTORAGE "PP97_DUALSTORAGE"
#define PP97_DUALSTORAGE L"PP97_DUALSTORAGE"
#define ENCRYPTED_SUMMARY_STREAM "EncryptedSummary"
#define DOCUMENT_SUMMARY_STREAM "DocumentSummaryInformation"
#define ENCRYPTED_SUMMARY_STREAM L"EncryptedSummary"
#define DOCUMENT_SUMMARY_STREAM L"DocumentSummaryInformation"
CPPTFileReader::CPPTFileReader(POLE::Storage *pStorage, std::wstring strTemp):
m_pStorage(pStorage),
@ -69,7 +69,7 @@ CPPTFileReader::CPPTFileReader(POLE::Storage *pStorage, std::wstring strTemp):
{
RELEASEOBJECT(pStm);
std::string stream_name = std::string(PP97_DUALSTORAGE) + std::string("/") + std::string(CURRENT_USER_STREAM);
std::wstring stream_name = std::wstring(PP97_DUALSTORAGE) + std::wstring(L"/") + std::wstring(CURRENT_USER_STREAM);
pStm = new POLE::Stream( m_pStorage, stream_name);
if (pStm == NULL)
@ -157,14 +157,14 @@ CFStreamPtr CPPTFileReader::GetPictureStream()
}
return m_pPictureStream;
}
CFStreamPtr CPPTFileReader::GetStreamByName(const std::string & name)
CFStreamPtr CPPTFileReader::GetStreamByName(const std::wstring & name)
{
if (!m_bIsPPTFile)
return CFStreamPtr();
std::string stream_name;
std::wstring stream_name;
if (m_bDualStorage) stream_name = std::string(PP97_DUALSTORAGE) + std::string("/");
if (m_bDualStorage) stream_name = std::wstring(PP97_DUALSTORAGE) + std::wstring(L"/");
POLE::Stream *pStream = new POLE::Stream(m_pStorage, stream_name + name);

View File

@ -51,7 +51,7 @@ protected:
CFStreamPtr GetEncryptedSummaryStream();
CFStreamPtr GetDocumentSummaryStream();
CFStreamPtr GetStreamByName(const std::string & name);
CFStreamPtr GetStreamByName(const std::wstring & name);
bool ReadCurrentUser(POLE::Stream *pStm);
void ReadEncryptedSummary();

View File

@ -526,7 +526,7 @@ namespace Animations
//{
// if (RT_ParaBuild == header.RecType)
// {
// rgChildRec = new ParaBuildContainer ();
// rgChildRec = new ParaBuildContainer ();
// if (rgChildRec)
// rgChildRec->ReadFromStream (header, pStream);
// }
@ -982,60 +982,25 @@ namespace Animations
switch ( VariableType )
{
case TL_TPID_Display :
pRecord = new TimeDisplayType ();
case TL_TPID_MasterPos :
pRecord = new TimeMasterRelType ();
case TL_TPID_SlaveType :
pRecord = new TimeSlaveType ();
case TL_TPID_Display: pRecord = new TimeDisplayType (); break;
case TL_TPID_MasterPos: pRecord = new TimeMasterRelType (); break;
case TL_TPID_SlaveType: pRecord = new TimeSlaveType (); break;
case TL_TPID_EffectID: pRecord = new TimeEffectID (); break;
case TL_TPID_EffectDir: pRecord = new TimeEffectDir (); break;
case TL_TPID_EffectType: pRecord = new TimeEffectType (); break;
case TL_TPID_AfterEffect: pRecord = new TimeAfterEffect (); break;
case TL_TPID_SlideCount: pRecord = new TimeSlideCount (); break;
case TL_TPID_TimeFilter: pRecord = new TimeNodeTimeFilter (); break;
case TL_TPID_EventFilter: pRecord = new TimeEventFilter (); break;
case TL_TPID_HideWhenStopped: pRecord = new TimeHideWhenStopped (); break;
case TL_TPID_GroupID: pRecord = new TimeGroupID (); break;
case TL_TPID_EffectNodeType: pRecord = new TimeEffectNodeType (); break;
case TL_TPID_PlaceholderNode: pRecord = new TimePlaceholderNode (); break;
case TL_TPID_MediaVolume: pRecord = new TimeMediaVolume (); break;
case TL_TPID_MediaMute: pRecord = new TimeMediaMute (); break;
case TL_TPID_ZoomToFullScreen: pRecord = new TimeZoomToFullScreen (); break;
default :
break;
case TL_TPID_EffectID :
pRecord = new TimeEffectID ();
break;
case TL_TPID_EffectDir :
pRecord = new TimeEffectDir ();
break;
case TL_TPID_EffectType :
pRecord = new TimeEffectType ();
break;
case TL_TPID_AfterEffect :
pRecord = new TimeAfterEffect ();
break;
case TL_TPID_SlideCount :
pRecord = new TimeSlideCount ();
break;
case TL_TPID_TimeFilter :
pRecord = new TimeNodeTimeFilter ();
break;
case TL_TPID_EventFilter :
pRecord = new TimeEventFilter ();
break;
case TL_TPID_HideWhenStopped :
pRecord = new TimeHideWhenStopped ();
break;
case TL_TPID_GroupID :
pRecord = new TimeGroupID ();
break;
case TL_TPID_EffectNodeType :
pRecord = new TimeEffectNodeType ();
break;
case TL_TPID_PlaceholderNode :
pRecord = new TimePlaceholderNode ();
break;
case TL_TPID_MediaVolume :
pRecord = new TimeMediaVolume ();
break;
case TL_TPID_MediaMute :
pRecord = new TimeMediaMute ();
break;
case TL_TPID_ZoomToFullScreen :
pRecord = new TimeZoomToFullScreen ();
break;
#if defined(_DEBUG) && (defined(_WIN32) || defined(_WIN64))
default : assert (0);
break;
#endif
}
pRecord->ReadFromStream ( ReadHeader, pStream );
@ -1359,7 +1324,7 @@ namespace Animations
if ( RT_TimePropertyList == header.RecType )
{
propertyList = new TimePropertyList4TimeBehavior();
propertyList = new TimePropertyList4TimeBehavior();
if (propertyList)
{
propertyList->ReadFromStream (header, pStream);
@ -1371,7 +1336,7 @@ namespace Animations
if ( RT_TimeVariantList == header.RecType )
{
stringList = new TimeStringListContainer();
stringList = new TimeStringListContainer();
if (stringList)
{
stringList->ReadFromStream (header, pStream);
@ -1420,7 +1385,7 @@ namespace Animations
if ( RT_TimeVariantList == ReadHeader.RecType )
{
haveStringList = true;
haveStringList = true;
stringList.ReadFromStream ( ReadHeader, pStream );
}
}
@ -2394,8 +2359,8 @@ namespace Animations
if ( RT_TimePropertyList == nRecord )
{
haveTimePropertyList = true;
timePropertyList = new TimePropertyList4TimeNodeContainer ();
haveTimePropertyList = true;
timePropertyList = new TimePropertyList4TimeNodeContainer ();
timePropertyList->ReadFromStream ( ReadHeader, pStream );
continue;
@ -2403,8 +2368,8 @@ namespace Animations
if ( RT_TimeSetBehaviorContainer == nRecord )
{
haveSetBehavior = true;
timeSetBehavior = new TimeSetBehaviorContainer();
haveSetBehavior = true;
timeSetBehavior = new TimeSetBehaviorContainer();
timeSetBehavior->ReadFromStream ( ReadHeader, pStream );
continue;
@ -2412,8 +2377,8 @@ namespace Animations
if ( RT_TimeColorBehaviorContainer == nRecord )
{
haveColorBehavior = true;
timeColorBehavior = new TimeColorBehaviorContainer();
haveColorBehavior = true;
timeColorBehavior = new TimeColorBehaviorContainer();
timeColorBehavior->ReadFromStream ( ReadHeader, pStream );
continue;
@ -2421,8 +2386,8 @@ namespace Animations
if ( RT_TimeClientVisualElement == nRecord )
{
haveClientVisualElement = true;
clientVisualElement = new ClientVisualElementContainer ();
haveClientVisualElement = true;
clientVisualElement = new ClientVisualElementContainer ();
clientVisualElement->ReadFromStream ( ReadHeader, pStream );
continue;
@ -2433,7 +2398,7 @@ namespace Animations
extTimeContainer = CAnimationFactory::BuildAnimationObject (nRecord); // ExtTimeNodeContainer
if (extTimeContainer)
{
haveExtTimeContainer = true;
haveExtTimeContainer = true;
extTimeContainer->ReadFromStream ( ReadHeader, pStream );
continue;
}
@ -2547,14 +2512,14 @@ namespace Animations
if ( ReadHeader.ReadFromStream(pStream) == false)
break;
lCurLen += 8 + ReadHeader.RecLen;
lCurLen += 8 + ReadHeader.RecLen;
//AnimationsClassType nRecord = (AnimationsClassType)ReadHeader.RecType;
WORD nRecord = ReadHeader.RecType;
if ( RT_TimeExtTimeNodeContainer == nRecord )
{
ExtTimeNodeContainer* pContainer = new ExtTimeNodeContainer ();
ExtTimeNodeContainer* pContainer = new ExtTimeNodeContainer ();
if (pContainer)
{
pContainer->ReadFromStream ( ReadHeader, pStream );
@ -2566,11 +2531,11 @@ namespace Animations
if ( RT_BuildList == nRecord )
{
buildList = new BuildListContainer ();
buildList = new BuildListContainer ();
if (buildList)
{
buildList->ReadFromStream ( ReadHeader, pStream );
haveBuildList = true;
haveBuildList = true;
continue;
}
@ -2590,11 +2555,11 @@ namespace Animations
if ( RT_TimeSequenceData == nRecord )
{
timeSequenceDataAtom = new TimeSequenceDataAtom ();
timeSequenceDataAtom = new TimeSequenceDataAtom ();
if (timeSequenceDataAtom)
{
timeSequenceDataAtom->ReadFromStream ( ReadHeader, pStream );
haveSequenceAtom = true;
haveSequenceAtom = true;
continue;
}
@ -2602,11 +2567,11 @@ namespace Animations
if ( RT_TimeIterateData == nRecord )
{
timeIterateDataAtom = new TimeIterateDataAtom ();
timeIterateDataAtom = new TimeIterateDataAtom ();
if (timeIterateDataAtom)
{
timeIterateDataAtom->ReadFromStream ( ReadHeader, pStream );
haveIterateDataAtom = true;
haveIterateDataAtom = true;
continue;
}
@ -2614,7 +2579,7 @@ namespace Animations
if ( RT_TimePropertyList == nRecord )
{
timePropertyList = new TimePropertyList4TimeNodeContainer ();
timePropertyList = new TimePropertyList4TimeNodeContainer ();
if (timePropertyList)
{
timePropertyList->ReadFromStream ( ReadHeader, pStream );
@ -2626,22 +2591,22 @@ namespace Animations
if ( RT_TimeEffectBehaviorContainer == nRecord )
{
timeEffectBehavior = new TimeEffectBehaviorContainer();
timeEffectBehavior = new TimeEffectBehaviorContainer();
if (timeEffectBehavior)
{
timeEffectBehavior->ReadFromStream ( ReadHeader, pStream );
haveEffectBehavior = true;
haveEffectBehavior = true;
continue;
}
}
if ( RT_TimeColorBehaviorContainer == nRecord )
{
timeColorBehavior = new TimeColorBehaviorContainer();
timeColorBehavior = new TimeColorBehaviorContainer();
if (timeColorBehavior)
{
timeColorBehavior->ReadFromStream ( ReadHeader, pStream );
haveColorBehavior = true;
haveColorBehavior = true;
continue;
}
@ -2649,11 +2614,11 @@ namespace Animations
if ( RT_TimeMotionBehaviorContainer == nRecord )
{
timeMotionBehavior = new TimeMotionBehaviorContainer ();
timeMotionBehavior = new TimeMotionBehaviorContainer ();
if (timeMotionBehavior)
{
timeMotionBehavior->ReadFromStream ( ReadHeader, pStream );
haveMotionBehavior = true;
haveMotionBehavior = true;
continue;
}
@ -2661,11 +2626,11 @@ namespace Animations
if ( RT_TimeSetBehaviorContainer == nRecord )
{
timeSetBehavior = new TimeSetBehaviorContainer ();
timeSetBehavior = new TimeSetBehaviorContainer ();
if (timeSetBehavior)
{
timeSetBehavior->ReadFromStream ( ReadHeader, pStream );
haveSetBehavior = true;
haveSetBehavior = true;
continue;
}
@ -2673,11 +2638,11 @@ namespace Animations
if ( RT_TimeAnimateBehaviorContainer == nRecord )
{
timeAnimateBehavior = new TimeAnimateBehaviorContainer ();
timeAnimateBehavior = new TimeAnimateBehaviorContainer ();
if (timeAnimateBehavior)
{
timeAnimateBehavior->ReadFromStream ( ReadHeader, pStream );
haveAnimateBehavior = true;
haveAnimateBehavior = true;
continue;
}
@ -2685,7 +2650,7 @@ namespace Animations
if ( RT_TimeRotationBehaviorContainer == nRecord )
{
timeRotationBehavior = new TimeRotationBehaviorContainer ();
timeRotationBehavior = new TimeRotationBehaviorContainer ();
if (timeRotationBehavior)
{
timeRotationBehavior->ReadFromStream ( ReadHeader, pStream );
@ -2697,11 +2662,11 @@ namespace Animations
if ( RT_TimeScaleBehaviorContainer == nRecord )
{
timeScaleBehavior = new TimeScaleBehaviorContainer ();
timeScaleBehavior = new TimeScaleBehaviorContainer ();
if (timeScaleBehavior)
{
timeScaleBehavior->ReadFromStream ( ReadHeader, pStream );
haveScaleBehavior = true;
haveScaleBehavior = true;
continue;
}
@ -2709,8 +2674,8 @@ namespace Animations
if (RT_TimeClientVisualElement == nRecord)
{
haveClientVisualElement = true;
clientVisualElement = new ClientVisualElementContainer ();
haveClientVisualElement = true;
clientVisualElement = new ClientVisualElementContainer ();
clientVisualElement->ReadFromStream ( ReadHeader, pStream );
continue;
@ -2718,11 +2683,11 @@ namespace Animations
if ( RT_TimeSlaveContainer == nRecord )
{
rgSlave = new SlaveContainer ();
rgSlave = new SlaveContainer ();
if (rgSlave)
{
rgSlave->ReadFromStream ( ReadHeader, pStream );
haveSlaveContainer = true;
haveSlaveContainer = true;
continue;
}
@ -2730,7 +2695,7 @@ namespace Animations
if (RT_TimeModifierAtom == nRecord)
{
TimeModifierAtom* atom = new TimeModifierAtom ();
TimeModifierAtom* atom = new TimeModifierAtom ();
if (atom)
{
atom->ReadFromStream ( ReadHeader, pStream );
@ -3176,7 +3141,7 @@ namespace Animations
SlaveContainer* pSlave = pContainer->rgSlave;
if(pSlave->haveSetBehavior) // после анимации к объекту может быть применена дополнительная анимация
{
m_HaveAfterEffect = true;
m_HaveAfterEffect = true;
// эффект исчезновения элемента (Appear)
m_oAfterEffect.m_nDuration = 1.0;
@ -3336,7 +3301,7 @@ namespace Animations
Effects* pEffects = NULL;
if (mSearch == m_oAnimation.end())
{
pEffects = new Effects ();
pEffects = new Effects ();
m_oAnimation.insert(std::pair<DWORD,Effects*>( oEffect.m_nRefID, pEffects));
}else
pEffects = mSearch->second;
@ -3594,7 +3559,7 @@ namespace Animations
{
if (2 == container.clientVisualElement.m_oVisualShapeAtom.m_Type) // указывает на то что анимация применяется к тексту
{
m_oTopEffect.m_bIgnoreShape = true;
m_oTopEffect.m_bIgnoreShape = true;
m_oTopEffect.m_nTextSequence = container.clientVisualElement.m_oVisualShapeAtom.m_nData1; // номер параграфа - не нормальзован
m_oTopEffect.m_bRemoveEmptyBlocks = true;
@ -3792,7 +3757,7 @@ public:
if (Animations::RT_TimeExtTimeNodeContainer == ReadHeader.RecType)
{
extTimeNodeContainer = new Animations::ExtTimeNodeContainer ();
extTimeNodeContainer = new Animations::ExtTimeNodeContainer ();
if (extTimeNodeContainer)
{
extTimeNodeContainer->ReadFromStream ( ReadHeader, pStream );
@ -3802,7 +3767,7 @@ public:
if (Animations::RT_BuildList == ReadHeader.RecType)
{
buildListContainer = new Animations::BuildListContainer ();
buildListContainer = new Animations::BuildListContainer ();
if (buildListContainer)
{
buildListContainer->ReadFromStream ( ReadHeader, pStream );

View File

@ -144,7 +144,7 @@ public:
LONG lWidthClient = m_rcGroupClientAnchor.right - m_rcGroupClientAnchor.left;
LONG lHeightClient = m_rcGroupClientAnchor.bottom - m_rcGroupClientAnchor.top;
bool bIsRecalc = ((lWidthClient > 0) && (lHeightClient > 0) && (lWidthClient > 0) && (lHeightGroup > 0));
bool bIsRecalc = ((lWidthClient > 0) && (lHeightClient > 0) && (lWidthGroup > 0) && (lHeightGroup > 0));
if (bIsRecalc)
{

View File

@ -98,12 +98,12 @@ public:
BYTE* pDataUncompress = new BYTE[decompressedSize + 64];
if (NSZLib::Decompress(pData, compressedSize, pDataUncompress, decompressedSize))
{
RELEASEOBJECT(pData);
delete []pData;
pData = pDataUncompress;
}
else
{
RELEASEOBJECT(pData);
delete []pData;
}
}
//if (pDecryptor)

View File

@ -99,7 +99,7 @@ public:
BYTE* pDataUncompress = new BYTE[decompressedSize];
NSZLib::Decompress(pData, compressedSize, pDataUncompress, decompressedSize);
RELEASEOBJECT(pData);
delete []pData;
pData = pDataUncompress;
}

View File

@ -327,12 +327,12 @@ namespace NSBinPptxRW
{
//CompObj Stream
BYTE dataCompObj[] = {0x01,0x00,0xfe,0xff,0x03,0x0a,0x00,0x00,0xff,0xff,0xff,0xff,0x0c,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x0c,0x00,0x00,0x00,0x4f,0x4c,0x45,0x20,0x50,0x61,0x63,0x6b,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x50,0x61,0x63,0x6b,0x61,0x67,0x65,0x00,0xf4,0x39,0xb2,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
POLE::Stream oStream1(&oStorage, "\001CompObj", true, arraysize(dataCompObj));
POLE::Stream oStream1(&oStorage, L"\001CompObj", true, arraysize(dataCompObj));
oStream1.write(dataCompObj, arraysize(dataCompObj));
oStream1.flush();
//ObjInfo Stream
BYTE dataObjInfo[] = {0x00,0x00,0x03,0x00,0x0d,0x00};
POLE::Stream oStream2(&oStorage, "\003ObjInfo", true, arraysize(dataObjInfo));
POLE::Stream oStream2(&oStorage, L"\003ObjInfo", true, arraysize(dataObjInfo));
oStream2.write(dataObjInfo, arraysize(dataObjInfo));
oStream2.flush();
//Ole10Native Stream
@ -345,7 +345,7 @@ namespace NSBinPptxRW
memcpy(head, &nDataSize, sizeof(_UINT32));
POLE::Stream oStream(&oStorage, "\001Ole10Native", true, arraysize(head) + nDataSize);
POLE::Stream oStream(&oStorage, L"\001Ole10Native", true, arraysize(head) + nDataSize);
oStream.write(head, arraysize(head));
oStream.write(aData, nDataSize);
oStream.flush();

View File

@ -99,7 +99,7 @@ namespace PPTX
ext.fromXML(oReader);
if (ext.spid.IsInit())
{
oleSpid = ext.spid;
vmlSpid = ext.spid;
break;
}
}
@ -137,7 +137,7 @@ namespace PPTX
ext.fromXML(oNode);
if (ext.spid.IsInit())
{
oleSpid = ext.spid;
vmlSpid = ext.spid;
break;
}
}
@ -320,7 +320,7 @@ namespace PPTX
nullable<Hyperlink> hlinkHover;
//std::vector<Ext> extLst;
nullable_string oleSpid;
nullable_string vmlSpid;
protected:
virtual void FillParentPointersForChilds()
{

View File

@ -130,6 +130,8 @@ namespace PPTX
std::to_wstring((int)(dkoefX * txRect.right)) + L"," +
std::to_wstring((int)(dkoefY * txRect.bottom));
}
if (lpShapeElement)
delete lpShapeElement;
}
}
}

View File

@ -112,7 +112,7 @@ namespace PPTX
void GraphicFrame::ReadAttributes3(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle ( oReader, _T("spid"), oleSpid )
WritingElement_ReadAttributes_ReadSingle ( oReader, _T("spid"), vmlSpid )
WritingElement_ReadAttributes_End( oReader )
}
void GraphicFrame::fromXML2(XmlUtils::CXmlLiteReader& oReader)
@ -259,7 +259,6 @@ namespace PPTX
else
{
olePic.Init(); //старый вариант описания объекта через spid в VmlDrawing
olePic->spPr.xfrm;
Logic::PrstGeom* geom = new Logic::PrstGeom();
geom->prst = L"rect";
@ -293,7 +292,7 @@ namespace PPTX
}
else if (L"legacyDrawing" == strName)
{
oNode.ReadAttributeBase(L"spid", oleSpid);
oNode.ReadAttributeBase(L"spid", vmlSpid);
result = true;
}
}
@ -377,7 +376,7 @@ namespace PPTX
bool GraphicFrame::IsEmpty() const
{
return !olePic.is_init() && !smartArt.is_init() && !table.is_init() && !chartRec.is_init() && !oleSpid.is_init() && !element.is_init();
return !olePic.is_init() && !smartArt.is_init() && !table.is_init() && !chartRec.is_init() && !vmlSpid.is_init() && !element.is_init();
}
void GraphicFrame::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
@ -394,12 +393,12 @@ namespace PPTX
std::wstring xml_object_vml;
smart_ptr<OOX::IFileContainer> xml_object_rels;
if (oleSpid.is_init())
if (vmlSpid.is_init())
{
xml_object_vml = GetVmlXmlBySpid(xml_object_rels);
}
if (smartArt.is_init() && !table.is_init() && !chartRec.is_init() && !oleSpid.is_init())
if (smartArt.is_init() && !table.is_init() && !chartRec.is_init() && !vmlSpid.is_init())
{
smartArt->LoadDrawing(pWriter);
@ -482,7 +481,7 @@ namespace PPTX
pWriter->StartRecord(SPTREE_TYPE_GRFRAME);
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
pWriter->WriteString2(0, oleSpid);
pWriter->WriteString2(0, vmlSpid);
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
pWriter->WriteRecord1(0, nvGraphicFramePr);
@ -523,7 +522,7 @@ namespace PPTX
{
case 0:
{
oleSpid = pReader->GetString2();
vmlSpid = pReader->GetString2();
break;
}
default:
@ -640,17 +639,17 @@ namespace PPTX
std::wstring xml;
if(parentFileIs<PPTX::Slide>() && parentFileAs<PPTX::Slide>().Vml.IsInit())
{
xml = parentFileAs<PPTX::Slide>().GetVmlXmlBySpid(oleSpid.get_value_or(L""));
xml = parentFileAs<PPTX::Slide>().GetVmlXmlBySpid(vmlSpid.get_value_or(L""));
rels = parentFileAs<PPTX::Slide>().Vml.smart_dynamic_cast<OOX::IFileContainer>();
}
else if(parentFileIs<PPTX::SlideLayout>() && parentFileAs<PPTX::SlideLayout>().Vml.IsInit())
{
xml = parentFileAs<PPTX::SlideLayout>().GetVmlXmlBySpid(oleSpid.get_value_or(L""));
xml = parentFileAs<PPTX::SlideLayout>().GetVmlXmlBySpid(vmlSpid.get_value_or(L""));
rels = parentFileAs<PPTX::SlideLayout>().Vml.smart_dynamic_cast<OOX::IFileContainer>();
}
else if(parentFileIs<PPTX::SlideMaster>() && parentFileAs<PPTX::SlideMaster>().Vml.IsInit())
{
xml = parentFileAs<PPTX::SlideMaster>().GetVmlXmlBySpid(oleSpid.get_value_or(L""));
xml = parentFileAs<PPTX::SlideMaster>().GetVmlXmlBySpid(vmlSpid.get_value_or(L""));
rels = parentFileAs<PPTX::SlideMaster>().Vml.smart_dynamic_cast<OOX::IFileContainer>();
}

View File

@ -89,7 +89,7 @@ namespace PPTX
nullable<Xfrm> xfrm;
nullable_string oleSpid;
nullable_string vmlSpid;
nullable<Pic> olePic;
nullable<Table> table;

View File

@ -511,7 +511,7 @@ namespace PPTX
POLE::Storage oStorage(sFilePath.c_str());
if(oStorage.open(false, false))
{
POLE::Stream oStream(&oStorage, "Ole10Native");
POLE::Stream oStream(&oStorage, L"Ole10Native");
if(oStream.size() > 4)
{
BYTE head[] = {0x00, 0x00, 0x00, 0x00};

View File

@ -105,7 +105,7 @@ namespace PPTX
oValue.m_strValue += XmlUtils::CreateNode(_T("p:by"), oAttr1);
}
if (fromY.IsInit() || fromY.IsInit())
if (fromX.IsInit() || fromY.IsInit())
{
XmlUtils::CAttribute oAttr1;
oAttr1.Write(_T("x"), fromX);

View File

@ -54,12 +54,12 @@ HRESULT ConvertOle1ToOle2(BYTE *pData, int nSize, std::wstring sOle2Name)
_UINT32 name_size = name.length() + 1;
//Ole
BYTE dataOleInfo[] = {0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
POLE::Stream oStream3(storageOut, "\001Ole", true, 20);
POLE::Stream oStream3(storageOut, L"\001Ole", true, 20);
oStream3.write(dataOleInfo, 20);
oStream3.flush();
//CompObj
BYTE dataCompObjHeader[28] = {0x01,0x00,0xfe,0xff,0x03,0x0a,0x00,0x00,0xff,0xff,0xff,0xff,0x0a,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46};
POLE::Stream oStream1(storageOut, "\001CompObj", true, 28 + (name_size + 5) + 2 * (ole1Reader.Header.ClassName.size + 4) + 4 * 4);
POLE::Stream oStream1(storageOut, L"\001CompObj", true, 28 + (name_size + 5) + 2 * (ole1Reader.Header.ClassName.size + 4) + 4 * 4);
oStream1.write(dataCompObjHeader, 28);
oStream1.write((BYTE*)&name_size, 4);
@ -84,11 +84,11 @@ HRESULT ConvertOle1ToOle2(BYTE *pData, int nSize, std::wstring sOle2Name)
//ObjInfo
BYTE dataObjInfo[] = {0x00,0x00,0x03,0x00,0x04,0x00};
POLE::Stream oStream2(storageOut, "\003ObjInfo", true, 6);
POLE::Stream oStream2(storageOut, L"\003ObjInfo", true, 6);
oStream2.write(dataObjInfo, 6);
oStream2.flush();
//Ole10Native
POLE::Stream streamData(storageOut, "\001Ole10Native", true, ole1Reader.NativeDataSize + 4);
POLE::Stream streamData(storageOut, L"\001Ole10Native", true, ole1Reader.NativeDataSize + 4);
streamData.write((BYTE*)&ole1Reader.NativeDataSize, 4);
streamData.write(ole1Reader.NativeData, ole1Reader.NativeDataSize);
streamData.flush();

View File

@ -514,49 +514,31 @@ const std::wstring tab2sheet_name(const short tabid, std::vector<std::wstring>&
return L"#REF";
}
//
const std::wstring xti2sheets(const unsigned short ixti, std::vector<std::wstring>& xti_parsed)
const std::wstring xti_indexes2sheet_name(const short tabFirst, const short tabLast, std::vector<std::wstring>& names, const std::wstring prefix)
{
if(ixti >= 0 && static_cast<unsigned short>(ixti) < xti_parsed.size())
{
return xti_parsed[ixti];
}
return L"#REF!";
}
//
const std::wstring xti_indexes2sheet_name(const short itabFirst, const short itabLast, std::vector<std::wstring>& sheets_names)
{
if(-1 == itabFirst)
if(-1 == tabFirst)
{
return L"#REF";
}
static boost::wregex correct_sheet_name(L"^\\'.+?\\'$");
static boost::wregex test_sheet_name(L"[\\s)(\\':.-]+");
static boost::wregex test_sheet_name(L"[\\s)(\\'&:-]+"); //.??? 6442946.xls
std::wstring sheet_first = prefix + tab2sheet_name(tabFirst, names);
std::wstring sheet_first = tab2sheet_name(itabFirst, sheets_names);
if(!boost::regex_search(sheet_first.begin(), sheet_first.end(), correct_sheet_name))
{
if(boost::regex_search(sheet_first.begin(), sheet_first.end(), test_sheet_name))
{
sheet_first = boost::algorithm::replace_all_copy(sheet_first, L"'", L"''");
sheet_first = std::wstring(L"\'") + sheet_first + std::wstring(L"\'");
sheet_first = std::wstring(L"'") + sheet_first + std::wstring(L"'");
}
}
else
{
//todooo найти хоть один файл где в апострофах уже есть внутренний не экранированный апостроф
//static boost::wregex test_sheet_name1(L"[\']+");
//if(boost::regex_search(sheet_first.begin() + 1, sheet_first.end() - 1, test_sheet_name1))
//{
// sheet_first = boost::algorithm::replace_all_copy(sheet_first.begin()+1, sheet_first.end() - 1 , L"'", L"''");
// sheet_first = std::wstring(L"\'") + sheet_first + std::wstring(L"\'");
//}
}
std::wstring sheet_last;
if (itabLast != itabFirst)
if (tabLast != tabFirst)
{
sheet_last = tab2sheet_name(itabLast, sheets_names);
sheet_last = prefix + tab2sheet_name(tabLast, names);
if(!boost::regex_search(sheet_last.begin(), sheet_last.end(), correct_sheet_name))
{
@ -572,20 +554,6 @@ const std::wstring xti_indexes2sheet_name(const short itabFirst, const short ita
return sheet_first + sheet_last;
}
const std::wstring make3dRef(const unsigned short ixti, const std::wstring cell_ref, std::vector<std::wstring>& xti_parsed, bool full_ref)
{
std::wstring sheets_prefix = xti2sheets(ixti, xti_parsed);
if(L"#REF!" == sheets_prefix)
{
return sheets_prefix;
}
else if (!sheets_prefix.empty()) sheets_prefix += L"!";
else if (sheets_prefix.empty() && full_ref) sheets_prefix += L"#REF!";
return sheets_prefix + cell_ref;
}
} //namespace XMLSTUFF

View File

@ -95,13 +95,7 @@ namespace STR
namespace XMLSTUFF
{;
// Makes a new tag and append it to parent (no attributes set)
//BiffStructurePtr createElement(const std::wstring & tag_name, BiffStructurePtr & parent);
const std::wstring make3dRef(const unsigned short ixti, const std::wstring cell_ref, std::vector<std::wstring>& xti_parsed, bool full_ref = false);
//const unsigned short sheetsnames2ixti(const std::wstring str, MSXML2::IXMLDOMDocumentPtr doc);
const std::wstring xti_indexes2sheet_name(const short itabFirst, const short itabLast, std::vector<std::wstring>& sheets_names);
const std::wstring xti_indexes2sheet_name(const short tabFirst, const short tabLast, std::vector<std::wstring>& names, const std::wstring prefix = L"");
}

View File

@ -33,9 +33,6 @@
#include "CFRecord.h"
#include "CFStream.h"
#ifdef __linux__
#include <string.h>
#endif
namespace XLS
{
@ -245,7 +242,7 @@ const bool CFRecord::isEOF() const
{
if(rdPtr > size_)
{
throw;// EXCEPT::LE::WrongFormatInterpretation(__FUNCTION__);
true;//throw;
}
return rdPtr >= size_;
}

View File

@ -39,39 +39,9 @@
#include "../../Common/common.h"
#include "../Auxiliary/HelpFunc.h"
#include "../../../Common/DocxFormat/Source/Base/unicode_util.h"
namespace XLS
{
static std::wstring convertUtf16ToWString(const UTF16 * Data, int nLength)
{
UTF32 *pStrUtf32 = new UTF32 [nLength + 1];
memset ((void *) pStrUtf32, 0, sizeof (UTF32) * (nLength + 1));
// this values will be modificated
const UTF16 *pStrUtf16_Conv = Data;
UTF32 *pStrUtf32_Conv = pStrUtf32;
ConversionResult eUnicodeConversionResult =
ConvertUTF16toUTF32 (&pStrUtf16_Conv,
&Data[nLength]
, &pStrUtf32_Conv
, &pStrUtf32 [nLength]
, strictConversion);
if (conversionOK != eUnicodeConversionResult)
{
delete [] pStrUtf32;
return std::wstring();
}
std::wstring wstr ((wchar_t *) pStrUtf32);
delete [] pStrUtf32;
return wstr;
}
class CFRecord
{
public:

View File

@ -97,34 +97,51 @@ CompoundFile::CompoundFile(const std::wstring & file_path, const ReadWriteMode m
Open(file_path, mode);
}
void CompoundFile::copy_stream(std::string streamName, POLE::Storage * storageOut, bool withRoot)
void CompoundFile::copy_stream(std::wstring streamNameOpen, std::wstring streamNameCreate, POLE::Storage * storageOut, bool bWithRoot)
{
POLE::Stream *stream = new POLE::Stream(storage_, streamName);
POLE::Stream *stream = new POLE::Stream(storage_, streamNameOpen);
if (!stream) return;
stream->seek(0);
int size_stream = stream->size();
if (withRoot == false)
if (bWithRoot == false)
{
int pos = streamName.find("/");
int pos = streamNameCreate.find(L"/");
if (pos >= 0)
streamName = streamName.substr(pos + 1);
streamNameCreate = streamNameCreate.substr(pos + 1);
}
POLE::Stream *streamNew = new POLE::Stream(storageOut, streamName, true, size_stream);
POLE::Stream *streamNew = new POLE::Stream(storageOut, streamNameCreate, true, size_stream);
if (!streamNew) return;
unsigned char* data_stream = new unsigned char[size_stream];
if (data_stream)
unsigned char buffer[4096];
int bytesRead = 0;
while(true)
{
stream->read(data_stream, size_stream);
streamNew->write(data_stream, size_stream);
delete []data_stream;
data_stream = NULL;
int bytesToRead = size_stream - bytesRead;
if (bytesToRead <= 0)
break;
if (bytesToRead > 4096)
bytesToRead = 4096;
stream->read(buffer, bytesToRead);
streamNew->write(buffer, bytesToRead);
bytesRead += bytesToRead;
}
//unsigned char* data_stream = new unsigned char[size_stream + 64];
//memset(data_stream, 0, size_stream + 64);
//if (data_stream)
//{
// stream->read(data_stream, size_stream);
// streamNew->write(data_stream, size_stream);
// delete []data_stream;
// data_stream = NULL;
//}
streamNew->flush();
@ -132,57 +149,62 @@ void CompoundFile::copy_stream(std::string streamName, POLE::Storage * storageOu
delete stream;
}
void CompoundFile::copy( int indent, std::string path, POLE::Storage * storageOut, bool withRoot)
void CompoundFile::copy( int indent, std::wstring path, POLE::Storage * storageOut, bool bWithRoot, bool bSortFiles)
{
std::list<std::string> entries, entries_sort;
entries = storage_->entries( path );
std::list<std::wstring> entries, entries_files, entries_dir;
entries = storage_->entries_with_prefix( path );
for( std::list<std::string>::iterator it = entries.begin(); it != entries.end(); it++ )
for( std::list<std::wstring>::iterator it = entries.begin(); it != entries.end(); it++ )
{
std::string name = *it;
std::string fullname = path + name;
std::wstring fullname = path + *it;
if( storage_->isDirectory( fullname ) )
if ((it->at(0) >= 32) && (storage_->isDirectory( fullname ) ))
{
entries_sort.push_back(name);
entries_dir.push_back(*it);
}
else
{
entries_sort.push_front(name);
entries_files.push_front(*it);
}
}
//for( std::list<std::string>::iterator it = entries.begin(); it != entries.end(); it++ )
for( std::list<std::string>::iterator it = entries_sort.begin(); it != entries_sort.end(); it++ )
for( std::list<std::wstring>::iterator it = entries_dir.begin(); it != entries_dir.end(); it++ )
{
std::string name = *it;
std::string fullname = path + name;
std::wstring fullname = path + *it;
if( storage_->isDirectory( fullname ) )
{
copy( indent + 1, fullname + "/", storageOut, withRoot );
}
else
{
copy_stream(fullname, storageOut, withRoot);
}
copy( indent + 1, fullname + L"/", storageOut, bWithRoot, bSortFiles );
}
//entries_files.sort();
for( std::list<std::wstring>::iterator it = entries_files.begin(); it != entries_files.end(); it++ )
{
std::wstring createName = path + *it;
std::wstring openName;
if (it->at(0) < 32) openName = path + it->substr(1);
else openName = path + *it;
copy_stream(openName, createName, storageOut, bWithRoot);
}
}
CFStreamPtr CompoundFile::getWorkbookStream()
{
CFStreamPtr stream = getNamedStream("Workbook");
CFStreamPtr stream = getNamedStream(L"Workbook");
if (stream == NULL)
stream = getNamedStream("WORKBOOK"); //6447323.xls
stream = getNamedStream(L"WORKBOOK"); //6447323.xls
if (stream == NULL)
stream = getNamedStream("Book");
stream = getNamedStream(L"Book");
if (stream == NULL)
stream = getNamedStream("BOOK");//file(6).xls
stream = getNamedStream(L"BOOK");//file(6).xls
if (stream == NULL)
stream = getNamedStream("book");
stream = getNamedStream(L"book");
return stream;
}
CFStreamPtr CompoundFile::getNamedStream(const std::string& name)
CFStreamPtr CompoundFile::getNamedStream(const std::wstring& name)
{
if(!streams[name])
{
@ -193,7 +215,7 @@ CFStreamPtr CompoundFile::getNamedStream(const std::string& name)
return streams[name];
}
CFStreamPtr CompoundFile::createNamedStream(const std::string& name)
CFStreamPtr CompoundFile::createNamedStream(const std::wstring& name)
{
if(!streams[name])
{
@ -205,14 +227,14 @@ CFStreamPtr CompoundFile::createNamedStream(const std::string& name)
}
void CompoundFile::closeNamedStream(const std::string& name)
void CompoundFile::closeNamedStream(const std::wstring& name)
{
streams[name].reset();
}
// Opens a stream in the storage (shall be called not more than once per stream)
POLE::Stream* CompoundFile::openStream(const std::string & stream_name)
POLE::Stream* CompoundFile::openStream(const std::wstring & stream_name)
{
if (storage_ == NULL) return NULL;
@ -228,7 +250,7 @@ POLE::Stream* CompoundFile::openStream(const std::string & stream_name)
// Creates a new stream in the storage
POLE::Stream* CompoundFile::createStream(const std::string & stream_name)
POLE::Stream* CompoundFile::createStream(const std::wstring & stream_name)
{
if (storage_ == NULL) return NULL;

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