mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
DocFormatReader - fix after testing
This commit is contained in:
@ -35,6 +35,7 @@
|
||||
#include <map>
|
||||
#include <list>
|
||||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
|
||||
#include "../../DesktopEditor/common/File.h"
|
||||
|
||||
@ -112,7 +113,10 @@ namespace XMLTools
|
||||
class XMLElement
|
||||
========================================================================================================*/
|
||||
|
||||
class XMLElement
|
||||
class XMLElement;
|
||||
typedef class boost::shared_ptr<XMLElement> XMLElementPtr;
|
||||
|
||||
class XMLElement
|
||||
{
|
||||
typedef std::pair< std::wstring, std::wstring> AttributeValuePair;
|
||||
|
||||
@ -180,7 +184,20 @@ namespace XMLTools
|
||||
}
|
||||
m_Elements.push_back( element );
|
||||
}
|
||||
void AppendChild( XMLElementPtr element, bool uniq = false)
|
||||
{
|
||||
if (!element) return;
|
||||
|
||||
if (m_ChildMap.find(element->GetName()) != m_ChildMap.end())
|
||||
{
|
||||
if (uniq) return;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ChildMap.insert(m_ChildMap.end(), std::pair<std::wstring, int>(element->GetName(), 0));
|
||||
}
|
||||
m_Elements.push_back( *element.get() );
|
||||
}
|
||||
void RemoveChild( const XMLElement& element )
|
||||
{
|
||||
m_Elements.remove( element );
|
||||
@ -368,7 +385,6 @@ namespace XMLTools
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class CStringXmlWriter
|
||||
{
|
||||
std::wstring m_str;
|
||||
|
||||
@ -122,7 +122,8 @@ namespace DocFileFormat
|
||||
fNumber1 == val.fNumber1 &&
|
||||
fNumberAcross == val.fNumberAcross &&
|
||||
fRestartHdn == val.fRestartHdn &&
|
||||
fSpareX == val.fSpareX;
|
||||
fSpareX == val.fSpareX &&
|
||||
xst == val.xst;
|
||||
|
||||
return res;
|
||||
}
|
||||
@ -158,7 +159,8 @@ namespace DocFileFormat
|
||||
fNumber1 == val->fNumber1 &&
|
||||
fNumberAcross == val->fNumberAcross &&
|
||||
fRestartHdn == val->fRestartHdn &&
|
||||
fSpareX == val->fSpareX;
|
||||
fSpareX == val->fSpareX &&
|
||||
xst == val->xst;
|
||||
|
||||
return res;
|
||||
|
||||
|
||||
@ -129,6 +129,7 @@ namespace DocFileFormat
|
||||
std::wstring xst; //32 chars ansi
|
||||
|
||||
public:
|
||||
std::wstring rPr;
|
||||
|
||||
bool operator == (const NumberingDescriptor & val) const;
|
||||
bool operator == (const NumberingDescriptorPtr & val) const;
|
||||
|
||||
@ -72,16 +72,17 @@ namespace DocFileFormat
|
||||
}
|
||||
}
|
||||
|
||||
size_t ListTable::appendNumbering( NumberingDescriptorPtr &desc )
|
||||
size_t ListTable::appendNumbering( NumberingDescriptorPtr &desc, const std::wstring & rPr )
|
||||
{
|
||||
for (size_t i = 0; i < listNumbering.size(); ++i)
|
||||
{
|
||||
if (listNumbering[i]->operator==(desc))
|
||||
if (listNumbering[i]->operator == (desc))
|
||||
{
|
||||
return listNumbering[i]->id;
|
||||
}
|
||||
}
|
||||
desc->id = listData.size() + listNumbering.size()/* + 1*/;
|
||||
desc->rPr = rPr;
|
||||
desc->id = listData.size() + listNumbering.size() + 1; // 23.doc
|
||||
listNumbering.push_back(desc);
|
||||
return desc->id;
|
||||
}
|
||||
|
||||
@ -47,6 +47,6 @@ namespace DocFileFormat
|
||||
virtual ~ListTable();
|
||||
ListTable( FileInformationBlock* fib, POLE::Stream* tableStream );
|
||||
|
||||
size_t appendNumbering( NumberingDescriptorPtr &desc );
|
||||
size_t appendNumbering( NumberingDescriptorPtr &desc, const std::wstring & rPr );
|
||||
};
|
||||
}
|
||||
@ -540,17 +540,24 @@ namespace DocFileFormat
|
||||
m_pXmlWriter->WriteNodeEnd(L"w:pPr");
|
||||
|
||||
// rPr
|
||||
m_pXmlWriter->WriteNodeBegin( L"w:rPr", FALSE );
|
||||
|
||||
if (!fontFamily.empty())
|
||||
if (false == lvl->rPr.empty())
|
||||
{
|
||||
m_pXmlWriter->WriteNodeBegin( L"w:rFonts", TRUE );
|
||||
// w:hint="default"
|
||||
m_pXmlWriter->WriteAttribute(L"w:hAnsi",fontFamily);
|
||||
m_pXmlWriter->WriteAttribute(L"w:ascii",fontFamily);
|
||||
m_pXmlWriter->WriteNodeEnd( L"", TRUE );
|
||||
m_pXmlWriter->WriteString( lvl->rPr );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pXmlWriter->WriteNodeBegin( L"w:rPr", FALSE );
|
||||
|
||||
if (!fontFamily.empty())
|
||||
{
|
||||
m_pXmlWriter->WriteNodeBegin( L"w:rFonts", TRUE );
|
||||
// w:hint="default"
|
||||
m_pXmlWriter->WriteAttribute(L"w:hAnsi", fontFamily);
|
||||
m_pXmlWriter->WriteAttribute(L"w:ascii", fontFamily);
|
||||
m_pXmlWriter->WriteNodeEnd( L"", TRUE );
|
||||
}
|
||||
m_pXmlWriter->WriteNodeEnd(L"w:rPr");
|
||||
}
|
||||
m_pXmlWriter->WriteNodeEnd(L"w:rPr");
|
||||
|
||||
m_pXmlWriter->WriteNodeEnd(L"w:lvl");
|
||||
}
|
||||
@ -702,7 +709,7 @@ namespace DocFileFormat
|
||||
}
|
||||
}
|
||||
|
||||
if (isPictureBullet)
|
||||
if (isPictureBullet && false == m_document->PictureBulletsCPsMap.empty())
|
||||
{
|
||||
m_pXmlWriter->WriteNodeBegin(L"w:lvlPicBulletId",TRUE);
|
||||
m_pXmlWriter->WriteAttribute(L"w:val",FormatUtils::IntToWideString(index));
|
||||
|
||||
@ -104,32 +104,33 @@ namespace DocFileFormat
|
||||
}
|
||||
|
||||
//append formatting of paragraph end mark
|
||||
|
||||
XMLTools::XMLElementPtr rPr = XMLTools::XMLElementPtr(XMLTools::XMLElementPtr(new XMLTools::XMLElement( L"w:rPr" )));
|
||||
|
||||
if ( _paraEndChpx != NULL )
|
||||
{
|
||||
XMLTools::XMLElement* rPr = new XMLTools::XMLElement( L"w:rPr" );
|
||||
|
||||
//append properties
|
||||
RevisionData* rev = new RevisionData( _paraEndChpx );
|
||||
CharacterPropertiesMapping* ccMapping = new CharacterPropertiesMapping( rPr, m_document, rev, papx, false );
|
||||
CharacterPropertiesMapping* ccMapping = new CharacterPropertiesMapping( rPr.get(), m_document, rev, papx, false );
|
||||
|
||||
_paraEndChpx->Convert( ccMapping );
|
||||
|
||||
//append delete infos
|
||||
if ( rev->Type == Deleted )
|
||||
{
|
||||
XMLTools::XMLElement del( L"w:del" );
|
||||
XMLTools::XMLElement del( L"w:del" );
|
||||
rPr->AppendChild( del );
|
||||
}
|
||||
|
||||
if( rPr->GetChildCount() >0 )
|
||||
if( rPr->GetChildCount() > 0 )
|
||||
{
|
||||
_pPr->AppendChild( *rPr );
|
||||
_pPr->AppendChild( rPr );
|
||||
}
|
||||
|
||||
RELEASEOBJECT( ccMapping );
|
||||
RELEASEOBJECT( rev );
|
||||
RELEASEOBJECT( rPr );
|
||||
}
|
||||
|
||||
bool bNumPr = false;
|
||||
|
||||
std::list<SinglePropertyModifier>::iterator end = papx->grpprl->end();
|
||||
for (std::list<SinglePropertyModifier>::iterator iter = papx->grpprl->begin(); iter != end; ++iter)
|
||||
{
|
||||
@ -426,7 +427,10 @@ namespace DocFileFormat
|
||||
|
||||
if (m_document->listTable)
|
||||
{
|
||||
unsigned short numId = m_document->listTable->appendNumbering( desc );
|
||||
std::wstring sRPr;
|
||||
if (rPr->GetChildCount() > 0) sRPr = rPr->GetXMLString();
|
||||
|
||||
unsigned short numId = m_document->listTable->appendNumbering( desc, sRPr );
|
||||
appendValueElement( &numPr, L"numId", numId, true );
|
||||
}
|
||||
}break;
|
||||
@ -439,8 +443,10 @@ namespace DocFileFormat
|
||||
case sprmOldPNLvlAnm:
|
||||
{
|
||||
short level = FormatUtils::BytesToUChar( iter->Arguments, 0, iter->argumentsSize) - 1;
|
||||
if (level > 0 && level < 10)
|
||||
appendValueElement( _pPr, L"outlineLvl", level, false );
|
||||
|
||||
level = 0;
|
||||
appendValueElement( &numPr, L"ilvl", level, true );
|
||||
bNumPr = true;
|
||||
}break;
|
||||
|
||||
case sprmOldPFNoLineNumb:
|
||||
@ -456,25 +462,11 @@ namespace DocFileFormat
|
||||
case sprmPIlfo:
|
||||
{
|
||||
//Если numbering.xml пустой, то не пищем свойство
|
||||
//Todo разобраться с закоментированным кодом
|
||||
if (NULL != m_document->listTable && false == m_document->listTable->listData.empty())
|
||||
{
|
||||
unsigned short numId = FormatUtils::BytesToUInt16( iter->Arguments, 0, iter->argumentsSize );
|
||||
appendValueElement( &numPr, L"numId", numId, true );
|
||||
}
|
||||
|
||||
//check if there is a ilvl reference, if not, check the count of LVLs.
|
||||
//if only one LVL exists in the referenced list, create a hard reference to that LVL
|
||||
//if (containsLvlReference(papx.grpprl) == false)
|
||||
//{
|
||||
// ListFormatOverride lfo = m_context.Doc.ListFormatOverrideTable[val];
|
||||
// int index = NumberingMapping.FindIndexbyId(m_context.Doc.ListTable, lfo.lsid);
|
||||
// ListData lst = m_context.Doc.ListTable[index];
|
||||
// if (lst.rglvl.Length == 1)
|
||||
// {
|
||||
// appendValueElement(numPr, "ilvl", "0", true);
|
||||
// }
|
||||
//}
|
||||
}
|
||||
break;
|
||||
|
||||
@ -645,15 +637,18 @@ namespace DocFileFormat
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
//append frame properties
|
||||
|
||||
if ( numPr.GetChildCount() > 0 && ((bNumPr && m_document->nWordVersion > 0) || m_document->nWordVersion == 0))//append numPr
|
||||
{//23.doc
|
||||
_pPr->AppendChild( numPr );
|
||||
}
|
||||
|
||||
if ( _framePr->GetAttributeCount() > 0 )
|
||||
{
|
||||
_pPr->AppendChild( *_framePr );
|
||||
}
|
||||
|
||||
_isSectionPageBreak = 0;
|
||||
//append section properties
|
||||
if ( _sepx != NULL )
|
||||
{
|
||||
XMLTools::XMLElement sectPr( L"w:sectPr" );
|
||||
@ -672,34 +667,27 @@ namespace DocFileFormat
|
||||
_pPr->AppendChild( sectPr );
|
||||
}
|
||||
|
||||
//append indent
|
||||
if ( ind.GetAttributeCount() > 0 )
|
||||
{
|
||||
_pPr->AppendChild( ind );
|
||||
}
|
||||
|
||||
if ( spacing.GetAttributeCount() > 0 )//append spacing
|
||||
if ( spacing.GetAttributeCount() > 0 )
|
||||
{
|
||||
_pPr->AppendChild( spacing );
|
||||
}
|
||||
|
||||
if ( jc ) //append justification
|
||||
if ( jc )
|
||||
{
|
||||
_pPr->AppendChild( *jc );
|
||||
RELEASEOBJECT( jc );
|
||||
}
|
||||
|
||||
if ( numPr.GetChildCount() > 0 )//append numPr
|
||||
{
|
||||
_pPr->AppendChild( numPr );
|
||||
}
|
||||
|
||||
if ( pBdr.GetChildCount() > 0 ) //append borders
|
||||
|
||||
if ( pBdr.GetChildCount() > 0 )
|
||||
{
|
||||
_pPr->AppendChild( pBdr );
|
||||
}
|
||||
|
||||
//write Properties
|
||||
if ( ( _pPr->GetChildCount() > 0 ) || ( _pPr->GetAttributeCount() > 0 ) )
|
||||
{
|
||||
m_pXmlWriter->WriteString( _pPr->GetXMLString() );
|
||||
|
||||
@ -559,8 +559,8 @@ namespace DocFileFormat
|
||||
pict->embeddedData = newData;
|
||||
}
|
||||
|
||||
m_context->_docx->ImagesList.push_back(ImageFileStructure(GetTargetExt(Global::msoblipDIB),
|
||||
pict->embeddedData, pict->embeddedDataSize, Global::msoblipDIB));
|
||||
m_context->_docx->ImagesList.push_back(ImageFileStructure(GetTargetExt(btWin32),
|
||||
pict->embeddedData, pict->embeddedDataSize, btWin32));
|
||||
|
||||
m_nImageId = m_context->_docx->RegisterImage(m_caller, btWin32);
|
||||
result = true;
|
||||
|
||||
@ -45,7 +45,7 @@
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="../../DesktopEditor/xml/build/vs2005;../../DesktopEditor/xml/libxml2/include;../../DesktopEditor/freetype-2.5.2/include"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED;USE_LITE_READER;_USE_XMLLITE_READER_;DONT_WRITE_EMBEDDED_FONTS"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED;USE_LITE_READER;_USE_XMLLITE_READER_;DONT_WRITE_EMBEDDED_FONTS;DONT_USED_EXTRA_LIBRARY"
|
||||
MinimalRebuild="false"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
|
||||
Reference in New Issue
Block a user