mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
fix bug #75551
This commit is contained in:
@ -333,10 +333,8 @@ namespace OOX
|
||||
{
|
||||
CParagraphProperty prop2(document);
|
||||
prop2.fromXML(oReader);
|
||||
|
||||
CParagraphProperty newProp = CParagraphProperty::Merge(*m_oParagraphProperty, prop2);
|
||||
|
||||
pItem = m_oParagraphProperty = new CParagraphProperty(newProp);
|
||||
pItem = m_oParagraphProperty = new CParagraphProperty(CParagraphProperty::Merge(*m_oParagraphProperty, prop2));
|
||||
m_arrItems.push_back( pItem );
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -939,7 +939,10 @@ namespace OOX
|
||||
oProperties.m_oPPrChange = Merge(oPrev.m_oPPrChange, oCurrent.m_oPPrChange);
|
||||
oProperties.m_oPStyle = Merge(oPrev.m_oPStyle, oCurrent.m_oPStyle);
|
||||
oProperties.m_oRPr = Merge(oPrev.m_oRPr, oCurrent.m_oRPr);
|
||||
oProperties.m_oSectPr = Merge(oPrev.m_oSectPr, oCurrent.m_oSectPr);
|
||||
if (oCurrent.m_oSectPr.IsInit() && oPrev.m_oSectPr.IsInit())
|
||||
oProperties.m_oSectPr = OOX::Logic::CSectionProperty::Merge(oPrev.m_oSectPr.get(), oCurrent.m_oSectPr.get());
|
||||
else
|
||||
oProperties.m_oSectPr = Merge(oPrev.m_oSectPr, oCurrent.m_oSectPr);
|
||||
oProperties.m_oShd = Merge(oPrev.m_oShd, oCurrent.m_oShd);
|
||||
oProperties.m_oSnapToGrid = Merge(oPrev.m_oSnapToGrid, oCurrent.m_oSnapToGrid);
|
||||
|
||||
|
||||
@ -986,12 +986,6 @@ namespace OOX
|
||||
}
|
||||
CColumns::~CColumns()
|
||||
{
|
||||
for ( unsigned int nIndex = 0; nIndex < m_arrColumns.size(); nIndex++ )
|
||||
{
|
||||
if ( m_arrColumns[nIndex] ) delete m_arrColumns[nIndex];
|
||||
m_arrColumns[nIndex] = NULL;
|
||||
}
|
||||
m_arrColumns.clear();
|
||||
}
|
||||
void CColumns::fromXML(XmlUtils::CXmlNode& oNode)
|
||||
{
|
||||
@ -1006,13 +1000,13 @@ namespace OOX
|
||||
{
|
||||
for ( size_t nIndex = 0; nIndex < oCols.size(); nIndex++ )
|
||||
{
|
||||
XmlUtils::CXmlNode& oCol = oCols[nIndex];
|
||||
if ( oCol.IsValid() )
|
||||
XmlUtils::CXmlNode& oColNode = oCols[nIndex];
|
||||
if (oColNode.IsValid() )
|
||||
{
|
||||
ComplexTypes::Word::CColumn *oColumn = new ComplexTypes::Word::CColumn();
|
||||
*oColumn = oCol;
|
||||
nullable<ComplexTypes::Word::CColumn> oColumn; oColumn.Init();
|
||||
oColumn->FromXML(oColNode);
|
||||
|
||||
if (oColumn) m_arrColumns.push_back( oColumn );
|
||||
m_arrColumns.push_back( oColumn );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1030,10 +1024,10 @@ namespace OOX
|
||||
std::wstring sName = oReader.GetName();
|
||||
if ( L"w:col" == sName )
|
||||
{
|
||||
ComplexTypes::Word::CColumn *oColumn = new ComplexTypes::Word::CColumn();
|
||||
*oColumn = oReader;
|
||||
nullable<ComplexTypes::Word::CColumn> oColumn; oColumn.Init();
|
||||
oColumn->FromXML(oReader);
|
||||
|
||||
if (oColumn) m_arrColumns.push_back( oColumn );
|
||||
m_arrColumns.push_back( oColumn );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1072,7 +1066,7 @@ namespace OOX
|
||||
for ( unsigned int nIndex = 0; nIndex < m_arrColumns.size(); nIndex++ )
|
||||
{
|
||||
sResult += L"<w:col ";
|
||||
if (m_arrColumns[nIndex])
|
||||
if (m_arrColumns[nIndex].IsInit())
|
||||
sResult += m_arrColumns[nIndex]->ToString();
|
||||
sResult += L"/>";
|
||||
}
|
||||
@ -1502,19 +1496,6 @@ namespace OOX
|
||||
}
|
||||
void CSectionProperty::ClearItems()
|
||||
{
|
||||
for ( unsigned int nIndex = 0; nIndex < m_arrFooterReference.size(); nIndex++ )
|
||||
{
|
||||
if ( m_arrFooterReference[nIndex] ) delete m_arrFooterReference[nIndex];
|
||||
m_arrFooterReference[nIndex] = NULL;
|
||||
}
|
||||
m_arrFooterReference.clear();
|
||||
|
||||
for ( unsigned int nIndex = 0; nIndex < m_arrHeaderReference.size(); nIndex++ )
|
||||
{
|
||||
if ( m_arrHeaderReference[nIndex] ) delete m_arrHeaderReference[nIndex];
|
||||
m_arrHeaderReference[nIndex] = NULL;
|
||||
}
|
||||
m_arrHeaderReference.clear();
|
||||
}
|
||||
CSectionProperty& CSectionProperty::operator =(const XmlUtils::CXmlNode& oNode)
|
||||
{
|
||||
@ -1562,10 +1543,10 @@ namespace OOX
|
||||
XmlUtils::CXmlNode& oNode = oNodes[nIndex];
|
||||
if ( oNode.IsValid() )
|
||||
{
|
||||
ComplexTypes::Word::CHdrFtrRef *oFooter = new ComplexTypes::Word::CHdrFtrRef();
|
||||
nullable<ComplexTypes::Word::CHdrFtrRef> oFooter; oFooter.Init();
|
||||
oFooter->FromXML(oNode);
|
||||
|
||||
if (oFooter) m_arrFooterReference.push_back( oFooter );
|
||||
m_arrFooterReference.push_back( oFooter );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1587,10 +1568,10 @@ namespace OOX
|
||||
XmlUtils::CXmlNode& oNode = oNodes[nIndex];
|
||||
if ( oNode.IsValid())
|
||||
{
|
||||
ComplexTypes::Word::CHdrFtrRef *oHeader = new ComplexTypes::Word::CHdrFtrRef();
|
||||
nullable < ComplexTypes::Word::CHdrFtrRef> oHeader; oHeader.Init();
|
||||
oHeader->FromXML(oNode);
|
||||
|
||||
if (oHeader) m_arrHeaderReference.push_back( oHeader );
|
||||
m_arrHeaderReference.push_back( oHeader );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1661,10 +1642,10 @@ namespace OOX
|
||||
m_oEndnotePr = oReader;
|
||||
else if ( !m_bSectPrChange && L"w:footerReference" == sName )
|
||||
{
|
||||
ComplexTypes::Word::CHdrFtrRef *oFooter = new ComplexTypes::Word::CHdrFtrRef();
|
||||
*oFooter = oReader;
|
||||
nullable<ComplexTypes::Word::CHdrFtrRef> oFooter; oFooter.Init();
|
||||
oFooter->FromXML(oReader);
|
||||
|
||||
if (oFooter) m_arrFooterReference.push_back( oFooter );
|
||||
m_arrFooterReference.push_back( oFooter );
|
||||
}
|
||||
else if ( L"w:footnotePr" == sName )
|
||||
m_oFootnotePr = oReader;
|
||||
@ -1672,10 +1653,10 @@ namespace OOX
|
||||
m_oFormProt = oReader;
|
||||
else if ( !m_bSectPrChange && L"w:headerReference" == sName )
|
||||
{
|
||||
ComplexTypes::Word::CHdrFtrRef *oHeader = new ComplexTypes::Word::CHdrFtrRef();
|
||||
*oHeader = oReader;
|
||||
nullable < ComplexTypes::Word::CHdrFtrRef> oHeader; oHeader.Init();
|
||||
oHeader->FromXML(oReader);
|
||||
|
||||
if (oHeader) m_arrHeaderReference.push_back( oHeader );
|
||||
m_arrHeaderReference.push_back( oHeader );
|
||||
}
|
||||
else if ( L"w:lnNumType" == sName )
|
||||
m_oLnNumType = oReader;
|
||||
@ -1710,10 +1691,10 @@ namespace OOX
|
||||
CDocxFlat* docx_flat = dynamic_cast<CDocxFlat*>(document);
|
||||
if (docx_flat)
|
||||
{
|
||||
ComplexTypes::Word::CHdrFtrRef *pHeaderRef = new ComplexTypes::Word::CHdrFtrRef();
|
||||
nullable<ComplexTypes::Word::CHdrFtrRef> pHeaderRef; pHeaderRef.Init();
|
||||
NSCommon::smart_ptr<OOX::CHdrFtr> pHeader = new OOX::CHdrFtr(document);
|
||||
|
||||
if (pHeaderRef && pHeader.IsInit())
|
||||
if (pHeaderRef.IsInit() && pHeader.IsInit())
|
||||
{
|
||||
OOX::IFileContainer* oldContainer = docx_flat->m_currentContainer;
|
||||
docx_flat->m_currentContainer = dynamic_cast<OOX::IFileContainer*>(pHeader.GetPointer());
|
||||
@ -1735,10 +1716,10 @@ namespace OOX
|
||||
CDocxFlat* docx_flat = dynamic_cast<CDocxFlat*>(document);
|
||||
if (docx_flat)
|
||||
{
|
||||
ComplexTypes::Word::CHdrFtrRef *pFooterRef = new ComplexTypes::Word::CHdrFtrRef();
|
||||
nullable<ComplexTypes::Word::CHdrFtrRef> pFooterRef; pFooterRef.Init();
|
||||
NSCommon::smart_ptr<OOX::CHdrFtr> pFooter = new OOX::CHdrFtr(document);
|
||||
|
||||
if (pFooter.IsInit() && pFooterRef)
|
||||
if (pFooter.IsInit() && pFooterRef.IsInit())
|
||||
{
|
||||
OOX::IFileContainer* oldContainer = docx_flat->m_currentContainer;
|
||||
docx_flat->m_currentContainer = dynamic_cast<OOX::IFileContainer*>(pFooter.GetPointer());
|
||||
@ -1783,14 +1764,14 @@ namespace OOX
|
||||
for (size_t nIndex = 0; nIndex < m_arrHeaderReference.size(); nIndex++)
|
||||
{
|
||||
sResult += (L"<w:headerReference");
|
||||
if (m_arrHeaderReference[nIndex])
|
||||
if (m_arrHeaderReference[nIndex].IsInit())
|
||||
sResult += m_arrHeaderReference[nIndex]->ToString();
|
||||
sResult += (L"/>");
|
||||
}
|
||||
for (size_t nIndex = 0; nIndex < m_arrFooterReference.size(); nIndex++)
|
||||
{
|
||||
sResult += (L"<w:footerReference");
|
||||
if (m_arrFooterReference[nIndex])
|
||||
if (m_arrFooterReference[nIndex].IsInit())
|
||||
sResult += m_arrFooterReference[nIndex]->ToString();
|
||||
sResult += (L"/>");
|
||||
}
|
||||
@ -1891,6 +1872,11 @@ namespace OOX
|
||||
WritingElement_ReadAttributes_Read_else_if( oReader, (L"w:rsidSect"), m_oRsidSect )
|
||||
WritingElement_ReadAttributes_End( oReader )
|
||||
}
|
||||
const CSectionProperty CSectionProperty::Merge(const CSectionProperty& oPrev, const CSectionProperty& oCurrent)
|
||||
{
|
||||
// ??? ну не хорошо это
|
||||
return oPrev;
|
||||
}
|
||||
|
||||
} // Logic
|
||||
}
|
||||
|
||||
@ -54,12 +54,10 @@ namespace ComplexTypes
|
||||
|
||||
virtual std::wstring ToString() const;
|
||||
|
||||
private:
|
||||
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader);
|
||||
|
||||
public:
|
||||
nullable<SimpleTypes::CTwipsMeasure > m_oSpace;
|
||||
nullable<SimpleTypes::CTwipsMeasure > m_oW;
|
||||
private:
|
||||
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader);
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------------
|
||||
@ -351,23 +349,20 @@ namespace OOX
|
||||
CColumns();
|
||||
virtual ~CColumns();
|
||||
|
||||
public:
|
||||
virtual void fromXML(XmlUtils::CXmlNode& oNode);
|
||||
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
|
||||
|
||||
virtual std::wstring toXML() const;
|
||||
virtual EElementType getType () const;
|
||||
|
||||
private:
|
||||
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader);
|
||||
|
||||
public:
|
||||
nullable<SimpleTypes::COnOff > m_oEqualWidth;
|
||||
nullable<SimpleTypes::CDecimalNumber > m_oNum;
|
||||
nullable<SimpleTypes::COnOff > m_oSep;
|
||||
nullable<SimpleTypes::CTwipsMeasure > m_oSpace;
|
||||
|
||||
std::vector<ComplexTypes::Word::CColumn *> m_arrColumns;
|
||||
std::vector< nullable<ComplexTypes::Word::CColumn>> m_arrColumns;
|
||||
private:
|
||||
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader);
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------------
|
||||
@ -503,6 +498,7 @@ namespace OOX
|
||||
virtual std::wstring toXML() const;
|
||||
virtual EElementType getType() const;
|
||||
|
||||
static const CSectionProperty Merge(const CSectionProperty& oPrev, const CSectionProperty& oCurrent);
|
||||
private:
|
||||
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader);
|
||||
|
||||
@ -518,10 +514,10 @@ namespace OOX
|
||||
nullable<OOX::Logic::CColumns> m_oCols;
|
||||
nullable<ComplexTypes::Word::CDocGrid> m_oDocGrid;
|
||||
nullable<OOX::Logic::CEdnProps> m_oEndnotePr;
|
||||
std::vector<ComplexTypes::Word::CHdrFtrRef*> m_arrFooterReference;
|
||||
std::vector< nullable<ComplexTypes::Word::CHdrFtrRef>> m_arrFooterReference;
|
||||
nullable<OOX::Logic::CFtnProps> m_oFootnotePr;
|
||||
nullable<ComplexTypes::Word::COnOff2> m_oFormProt;
|
||||
std::vector<ComplexTypes::Word::CHdrFtrRef*> m_arrHeaderReference;
|
||||
std::vector< nullable<ComplexTypes::Word::CHdrFtrRef>> m_arrHeaderReference;
|
||||
nullable<ComplexTypes::Word::CLineNumber> m_oLnNumType;
|
||||
nullable<ComplexTypes::Word::COnOff2> m_oNoEndnote;
|
||||
nullable<ComplexTypes::Word::CPaperSource> m_oPaperSrc;
|
||||
|
||||
Reference in New Issue
Block a user