/*
* (c) Copyright Ascensio System SIA 2010-2023
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
#include "ParagraphProperty.h"
#include "RunProperty.h"
#include "SectionProperty.h"
#include "../Document.h"
#include "../../Common/SimpleTypes_Word.h"
namespace OOX
{
namespace Logic
{
//--------------------------------------------------------------------------------
// NumPr 17.13.1.19 (Part 1)
//--------------------------------------------------------------------------------
CNumPr::CNumPr()
{
}
CNumPr::~CNumPr()
{
}
void CNumPr::fromXML(XmlUtils::CXmlNode& oNode)
{
if ( L"w:numPr" != oNode.GetName() && L"w:listPr" != oNode.GetName())
return;
XmlUtils::CXmlNode oChild;
if ( oNode.GetNode( L"w:ilvl", oChild ) )
m_oIlvl = oChild;
if ( oNode.GetNode( L"w:ins", oChild ) )
m_oIns = oChild;
if ( oNode.GetNode( L"w:numId", oChild ) )
m_oNumID = oChild;
if ( oNode.GetNode( L"w:ilfo", oChild ) )
m_oNumID = oChild;
}
void CNumPr::fromXML(XmlUtils::CXmlLiteReader& oReader)
{
if ( oReader.IsEmptyNode() )
return;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
if ( L"w:ilvl" == sName )
m_oIlvl = oReader;
else if ( L"w:ins" == sName )
m_oIns = oReader;
else if ( L"w:numId" == sName || L"w:ilfo" == sName )
m_oNumID = oReader;
}
}
std::wstring CNumPr::toXML() const
{
std::wstring sResult = L"";
if ( m_oIlvl.IsInit() )
{
sResult += L"ToString();
sResult += L"/>";
}
if ( m_oIns.IsInit() )
{
sResult += L"ToString();
sResult += L"/>";
}
if ( m_oNumID.IsInit() )
{
sResult += L"ToString();
sResult += L"/>";
}
sResult += L"";
return sResult;
}
EElementType CNumPr::getType() const
{
return et_w_numPr;
}
//--------------------------------------------------------------------------------
// PBdr 17.13.1.24 (Part 1)
//--------------------------------------------------------------------------------
CPBdr::CPBdr()
{
}
CPBdr::~CPBdr()
{
}
void CPBdr::fromXML(XmlUtils::CXmlNode& oNode)
{
if ( L"w:pBdr" != oNode.GetName() )
return;
XmlUtils::CXmlNode oChild;
if ( oNode.GetNode( L"w:bar", oChild ) )
m_oBar = oChild;
if ( oNode.GetNode( L"w:between", oChild ) )
m_oBetween = oChild;
if ( oNode.GetNode( L"w:bottom", oChild ) )
m_oBottom = oChild;
if ( oNode.GetNode( L"w:left", oChild ) )
m_oLeft = oChild;
if ( oNode.GetNode( L"w:right", oChild ) )
m_oRight = oChild;
if ( oNode.GetNode( L"w:top", oChild ) )
m_oTop = oChild;
}
void CPBdr::fromXML(XmlUtils::CXmlLiteReader& oReader)
{
if ( oReader.IsEmptyNode() )
return;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
if ( L"w:bar" == sName )
m_oBar = oReader;
else if ( L"w:between" == sName )
m_oBetween = oReader;
else if ( L"w:bottom" == sName )
m_oBottom = oReader;
else if ( L"w:left" == sName )
m_oLeft = oReader;
else if ( L"w:right" == sName )
m_oRight = oReader;
else if ( L"w:top" == sName )
m_oTop = oReader;
}
}
std::wstring CPBdr::toXML() const
{
std::wstring sResult = L"";
if (m_oTop.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oLeft.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oBottom.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oRight.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oBetween.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if ( m_oBar.IsInit() )
{
sResult += L"ToString();
sResult += L"/>";
}
sResult += L"";
return sResult;
}
EElementType CPBdr::getType() const
{
return et_w_pBdr;
}
const CPBdr CPBdr::Merge(const CPBdr& oPrev, const CPBdr& oCurrent)
{
CPBdr oProperties;
oProperties.m_oBar = Merge( oPrev.m_oBar, oCurrent.m_oBar );
oProperties.m_oBetween = Merge( oPrev.m_oBetween, oCurrent.m_oBetween );
oProperties.m_oBottom = Merge( oPrev.m_oBottom, oCurrent.m_oBottom );
oProperties.m_oLeft = Merge( oPrev.m_oLeft, oCurrent.m_oLeft );
oProperties.m_oRight = Merge( oPrev.m_oRight, oCurrent.m_oRight );
oProperties.m_oTop = Merge( oPrev.m_oTop, oCurrent.m_oTop );
return oProperties;
}
//--------------------------------------------------------------------------------
// PPrChange
//--------------------------------------------------------------------------------
CPPrChange::CPPrChange()
{
m_pParPr.Init();
m_pParPr->m_bPPrChange = true;
}
CPPrChange::CPPrChange(XmlUtils::CXmlNode &oNode)
{
m_pParPr.Init();
m_pParPr->m_bPPrChange = true;
fromXML( oNode );
}
CPPrChange::CPPrChange(XmlUtils::CXmlLiteReader& oReader)
{
m_pParPr.Init();
m_pParPr->m_bPPrChange = true;
fromXML( oReader );
}
const CPPrChange& CPPrChange::operator =(const XmlUtils::CXmlNode &oNode)
{
fromXML( (XmlUtils::CXmlNode&)oNode );
return *this;
}
const CPPrChange& CPPrChange::operator =(const XmlUtils::CXmlLiteReader& oReader)
{
fromXML( (XmlUtils::CXmlLiteReader&)oReader );
return *this;
}
CPPrChange::~CPPrChange()
{
}
void CPPrChange::fromXML(XmlUtils::CXmlNode& oNode)
{
if ( L"w:pPrChange" != oNode.GetName() )
return;
XmlMacroReadAttributeBase( oNode, L"w:author", m_sAuthor );
XmlMacroReadAttributeBase( oNode, L"w:date", m_oDate );
XmlMacroReadAttributeBase( oNode, L"w:id", m_oId );
XmlMacroReadAttributeBase( oNode, L"oouserid", m_sUserId );
XmlUtils::CXmlNode oNode_pPr;
if ( m_pParPr.IsInit() && oNode.GetNode(L"w:pPr", oNode_pPr ) )
m_pParPr->fromXML( oNode_pPr );
}
void CPPrChange::fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
if ( oReader.IsEmptyNode() )
return;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName());
if ( L"pPr" == sName )
m_pParPr->fromXML( oReader );
}
}
std::wstring CPPrChange::toXML() const
{
std::wstring sResult = L"ToString();
sResult += L"\" ";
}
if ( m_oId.IsInit() )
{
sResult += L"w:id=\"";
sResult += m_oId->ToString();
sResult += L"\" ";
}
if ( m_sUserId.IsInit() )
{
sResult += L"oouserid=\"";
sResult += m_sUserId.get2();
sResult += L"\" ";
}
sResult += L">";
if ( m_pParPr.IsInit() )
sResult += m_pParPr->toXML();
sResult += L"";
return sResult;
}
EElementType CPPrChange::getType() const
{
return et_w_pPrChange;
}
void CPPrChange::ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start_No_NS( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, L"author", m_sAuthor )
WritingElement_ReadAttributes_Read_else_if( oReader, L"date", m_oDate )
WritingElement_ReadAttributes_Read_else_if( oReader, L"id", m_oId )
WritingElement_ReadAttributes_Read_else_if( oReader, L"oouserid", m_sUserId )
WritingElement_ReadAttributes_End_No_NS( oReader )
}
//--------------------------------------------------------------------------------
// Tabs 17.3.1.38 (Part 1)
//--------------------------------------------------------------------------------
CTabs::CTabs(OOX::Document *pMain) : WritingElement(pMain)
{
}
CTabs::~CTabs()
{
for ( unsigned int nIndex = 0; nIndex < m_arrTabs.size(); nIndex++ )
{
if ( m_arrTabs[nIndex] ) delete m_arrTabs[nIndex];
m_arrTabs[nIndex] = NULL;
}
m_arrTabs.clear();
}
CTabs::CTabs(const CTabs& oSrc)
{
*this = oSrc;
}
const CTabs& CTabs::operator =(const CTabs &oTabs)
{
for(size_t i = 0; i < oTabs.m_arrTabs.size(); ++i)
{
m_arrTabs.push_back(new ComplexTypes::Word::CTabStop(*oTabs.m_arrTabs[i]));
}
return *this;
}
void CTabs::fromXML(XmlUtils::CXmlNode& oNode)
{
if ( L"w:tabs" != oNode.GetName() )
return;
std::vector oTabs;
if ( oNode.GetNodes( L"w:tab", oTabs ) )
{
for ( size_t nIndex = 0; nIndex < oTabs.size(); nIndex++ )
{
XmlUtils::CXmlNode & oTab = oTabs[nIndex];
if ( oTab.IsValid() )
{
ComplexTypes::Word::CTabStop *oTabStop = new ComplexTypes::Word::CTabStop();
*oTabStop = oTab;
if (oTabStop) m_arrTabs.push_back( oTabStop );
}
}
}
}
void CTabs::fromXML(XmlUtils::CXmlLiteReader& oReader)
{
if ( oReader.IsEmptyNode() )
return;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
if ( L"w:tab" == sName )
{
ComplexTypes::Word::CTabStop *oTabStop = new ComplexTypes::Word::CTabStop();
*oTabStop = oReader;
if (oTabStop) m_arrTabs.push_back( oTabStop );
}
}
}
std::wstring CTabs::toXML() const
{
std::wstring sResult = L"";
for (unsigned int nIndex = 0; nIndex < m_arrTabs.size(); nIndex++ )
{
sResult += L"ToString();
sResult += L"/>";
}
sResult += L"";
return sResult;
}
EElementType CTabs::getType() const
{
return et_w_tabs;
}
//--------------------------------------------------------------------------------
// CParagraphProperty
//--------------------------------------------------------------------------------
CParagraphProperty::CParagraphProperty(OOX::Document *pMain) : WritingElement(pMain)
{
m_bPPrChange = false;
}
CParagraphProperty::CParagraphProperty(XmlUtils::CXmlNode& oNode) : WritingElement(NULL)
{
m_bPPrChange = false;
fromXML( oNode );
}
CParagraphProperty::CParagraphProperty(XmlUtils::CXmlLiteReader& oReader) : WritingElement(NULL)
{
m_bPPrChange = false;
fromXML( oReader );
}
CParagraphProperty::~CParagraphProperty() {}
const CParagraphProperty& CParagraphProperty::operator =(const XmlUtils::CXmlNode &oNode)
{
fromXML( (XmlUtils::CXmlNode &)oNode );
return *this;
}
const CParagraphProperty& CParagraphProperty::operator =(const XmlUtils::CXmlLiteReader &oReader)
{
fromXML( (XmlUtils::CXmlLiteReader&)oReader );
return *this;
}
void CParagraphProperty::Clear()
{
m_bPPrChange = false;
m_oAdjustRightInd.reset();
m_oAutoSpaceDE.reset();
m_oAutoSpaceDN.reset();
m_oBidi.reset();
m_oCnfStyle.reset();
m_oContextualSpacing.reset();
m_oDivID.reset();
m_oFramePr.reset();
m_oInd.reset();
m_oJc.reset();
m_oKeepLines.reset();
m_oKeepNext.reset();
m_oKinsoku.reset();
m_oMirrorIndents.reset();
m_oNumPr.reset();
m_oOutlineLvl.reset();
m_oOverflowPunct.reset();
m_oPageBreakBefore.reset();
m_oPBdr.reset();
m_oPPrChange.reset();
m_oPStyle.reset();
m_oRPr.reset();
m_oSectPr.reset();
m_oShd.reset();
m_oSnapToGrid.reset();
m_oSpacing.reset();
m_oSuppressAutoHyphens.reset();
m_oSuppressLineNumbers.reset();
m_oSuppressOverlap.reset();
m_oTabs.reset();
m_oTextAlignment.reset();
m_oTextboxTightWrap.reset();
m_oTextDirection.reset();
m_oTopLinePunct.reset();
m_oWidowControl.reset();
m_oWordWrap.reset();
}
bool CParagraphProperty::IsNoEmpty()
{
return (m_oAdjustRightInd.IsInit() || m_oAutoSpaceDE.IsInit() || m_oAutoSpaceDN.IsInit() ||
m_oBidi.IsInit() || m_oCnfStyle.IsInit() || m_oContextualSpacing.IsInit() || m_oDivID.IsInit() ||
m_oFramePr.IsInit() || m_oInd.IsInit() || m_oJc.IsInit() || m_oKeepLines.IsInit() || m_oKeepNext.IsInit() ||
m_oKinsoku.IsInit() || m_oMirrorIndents.IsInit() || m_oNumPr.IsInit() || m_oOutlineLvl.IsInit() ||
m_oOverflowPunct.IsInit() || m_oPageBreakBefore.IsInit() || m_oPBdr.IsInit() || m_oPPrChange.IsInit() ||
m_oPStyle.IsInit() || m_oRPr.IsInit() || m_oSectPr.IsInit() || m_oShd.IsInit() || m_oSnapToGrid.IsInit() ||
m_oSpacing.IsInit() || m_oSuppressAutoHyphens.IsInit() || m_oSuppressLineNumbers.IsInit() || m_oSuppressOverlap.IsInit() || m_oTabs.IsInit() ||
m_oTextAlignment.IsInit() || m_oTextboxTightWrap.IsInit() || m_oTextDirection.IsInit() || m_oTopLinePunct.IsInit() ||
m_oWidowControl.IsInit() || m_oWordWrap.IsInit() );
}
void CParagraphProperty::fromXML(XmlUtils::CXmlNode& oNode)
{//??? где используется ?
if ( L"w:pPr" != oNode.GetName() )
return;
std::vector oNodes;
if (oNode.GetNodes(_T("*"), oNodes))
{
size_t nCount = oNodes.size();
for (size_t i = 0; i < nCount; ++i)
{
XmlUtils::CXmlNode& oChild = oNodes[i];
std::wstring strName = oChild.GetName();
if (L"w:adjustRightInd" == strName) m_oAdjustRightInd = oChild;
if (L"w:autoSpaceDE" == strName) m_oAutoSpaceDE = oChild;
if (L"w:autoSpaceDN" == strName) m_oAutoSpaceDN = oChild;
if (L"w:bidi" == strName) m_oBidi = oChild;
if (L"w:cnfStyle" == strName) m_oCnfStyle = oChild;
if (L"w:contextualSpacing" == strName) m_oContextualSpacing = oChild;
if (L"w:divId" == strName) m_oDivID = oChild;
if (L"w:framePr" == strName) m_oFramePr = oChild;
if (L"w:ind" == strName) m_oInd = oChild;
if (L"w:jc" == strName) m_oJc = oChild;
if (L"w:keepLines" == strName) m_oKeepLines = oChild;
if (L"w:keepNext" == strName) m_oKeepNext = oChild;
if (L"w:kinsoku" == strName) m_oKinsoku = oChild;
if (L"w:mirrorIndents" == strName) m_oMirrorIndents = oChild;
if (L"w:numPr" == strName) m_oNumPr = oChild;
if (L"w:listPr" == strName) m_oNumPr = oChild;
if (L"w:outlineLvl" == strName) m_oOutlineLvl = oChild;
if (L"w:overflowPunct" == strName) m_oOverflowPunct = oChild;
if (L"w:pageBreakBefore" == strName) m_oPageBreakBefore = oChild;
if (L"w:pBdr" == strName) m_oPBdr = oChild;
if (!m_bPPrChange && L"w:pPrChange" == strName) m_oPPrChange = oChild;
if (L"w:pStyle" == strName) m_oPStyle = oChild;
if (!m_bPPrChange && L"w:rPr" == strName) m_oRPr = oChild;
if (!m_bPPrChange && L"w:sectPr" == strName)m_oSectPr = oChild;
if (L"w:shd" == strName) m_oShd = oChild;
if (L"w:snapToGrid" == strName) m_oSnapToGrid = oChild;
if (L"w:spacing" == strName) m_oSpacing = oChild;
if (L"w:suppressAutoHyphens" == strName) m_oSuppressAutoHyphens = oChild;
if (L"w:suppressLineNumbers" == strName) m_oSuppressLineNumbers = oChild;
if (L"w:suppressOverlap" == strName) m_oSuppressOverlap = oChild;
if (L"w:tabs" == strName) m_oTabs = oChild;
if (L"w:textAlignment" == strName) m_oTextAlignment = oChild;
if (L"w:textboxTightWrap" == strName) m_oTextboxTightWrap = oChild;
if (L"w:textDirection" == strName) m_oTextDirection = oChild;
if (L"w:topLinePunct" == strName) m_oTopLinePunct = oChild;
if (L"w:widowControl" == strName) m_oWidowControl = oChild;
if (L"w:wordWrap" == strName) m_oWordWrap = oChild;
}
}
}
void CParagraphProperty::fromXML(XmlUtils::CXmlLiteReader& oReader)
{
if ( oReader.IsEmptyNode() )
return;
OOX::Document* document = WritingElement::m_pMainDocument;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName());
if ( L"adjustRightInd" == sName )
m_oAdjustRightInd = oReader;
else if ( L"autoSpaceDE" == sName )
m_oAutoSpaceDE = oReader;
else if ( L"autoSpaceDN" == sName )
m_oAutoSpaceDN = oReader;
else if ( L"bidi" == sName )
m_oBidi = oReader;
else if ( L"cnfStyle" == sName )
m_oCnfStyle = oReader;
else if ( L"contextualSpacing" == sName )
m_oContextualSpacing = oReader;
else if ( L"divId" == sName )
m_oDivID = oReader;
else if ( L"framePr" == sName )
m_oFramePr = oReader;
else if ( L"ind" == sName )
m_oInd = oReader;
else if ( L"jc" == sName )
m_oJc = oReader;
else if ( L"keepLines" == sName )
m_oKeepLines = oReader;
else if ( L"keepNext" == sName )
m_oKeepNext = oReader;
else if ( L"kinsoku" == sName )
m_oKinsoku = oReader;
else if ( L"mirrorIndents" == sName )
m_oMirrorIndents = oReader;
else if ( L"numPr" == sName || L"listPr" == sName)
m_oNumPr = oReader;
else if ( L"outlineLvl" == sName )
m_oOutlineLvl = oReader;
else if ( L"overflowPunct" == sName )
m_oOverflowPunct = oReader;
else if ( L"pageBreakBefore" == sName )
m_oPageBreakBefore = oReader;
else if ( L"pBdr" == sName )
m_oPBdr = oReader;
else if ( !m_bPPrChange && L"pPrChange" == sName )
m_oPPrChange = oReader;
else if ( L"pStyle" == sName )
m_oPStyle = oReader;
else if ( !m_bPPrChange && L"rPr" == sName )
m_oRPr = oReader;
else if ( !m_bPPrChange && L"sectPr" == sName )
{
Logic::CSectionProperty* pSectPr = new Logic::CSectionProperty(document);
pSectPr->fromXML(oReader);
if (pSectPr->m_bEmpty)
{
delete pSectPr;
pSectPr = NULL;
}
else
{
m_oSectPr = pSectPr;
OOX::CDocx* docx = dynamic_cast(document);
if (docx)
{
OOX::CDocument* doc = docx->m_bGlossaryRead ? docx->m_oGlossary.document : docx->m_oMain.document;
if (doc->m_arrSections.empty())
{
OOX::CDocument::_section section;
doc->m_arrSections.push_back(section);
}
doc->m_arrSections.back().sect = m_oSectPr.GetPointer();
doc->m_arrSections.back().end_elm = doc->m_arrItems.size() + 1; // порядок выше - сначала читаем, потом добавляем
OOX::CDocument::_section section;
section.start_elm = doc->m_arrItems.size() + 1;
doc->m_arrSections.push_back(section);
}
}
}
else if ( L"shd" == sName )
m_oShd = oReader;
else if ( L"snapToGrid" == sName )
m_oSnapToGrid = oReader;
else if ( L"spacing" == sName )
m_oSpacing = oReader;
else if ( L"suppressAutoHyphens" == sName )
m_oSuppressAutoHyphens = oReader;
else if ( L"suppressLineNumbers" == sName )
m_oSuppressLineNumbers = oReader;
else if ( L"suppressOverlap" == sName )
m_oSuppressOverlap = oReader;
else if ( L"tabs" == sName )
m_oTabs = oReader;
else if ( L"textAlignment" == sName )
m_oTextAlignment = oReader;
else if ( L"textboxTightWrap" == sName )
m_oTextboxTightWrap = oReader;
else if ( L"textDirection" == sName )
m_oTextDirection = oReader;
else if ( L"topLinePunct" == sName )
m_oTopLinePunct = oReader;
else if ( L"widowControl" == sName )
m_oWidowControl = oReader;
else if ( L"wordWrap" == sName )
m_oWordWrap = oReader;
}
}
std::wstring CParagraphProperty::toXML() const
{
std::wstring sResult = L"";
if (m_oPStyle.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oKeepNext.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oKeepLines.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oPageBreakBefore.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oFramePr.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oWidowControl.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oNumPr.IsInit())
{
sResult += m_oNumPr->toXML();
}
if (m_oSuppressLineNumbers.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oPBdr.IsInit())
{
sResult += m_oPBdr->toXML();
}
if (m_oShd.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oTabs.IsInit())
{
sResult += m_oTabs->toXML();
}
if ( m_oSuppressAutoHyphens.IsInit() )
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oKinsoku.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oWordWrap.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oOverflowPunct.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oTopLinePunct.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oAutoSpaceDE.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oAutoSpaceDN.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oBidi.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oAdjustRightInd.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oSnapToGrid.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oSpacing.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oInd.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oContextualSpacing.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oMirrorIndents.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oSuppressOverlap.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oJc.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oTextDirection.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oTextAlignment.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oTextboxTightWrap.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oOutlineLvl.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if (m_oDivID.IsInit())
{
sResult += L"ToString();
sResult += L"/>";
}
if ( m_oCnfStyle.IsInit() )
{
sResult += L"ToString();
sResult += L"/>";
}
if ( !m_bPPrChange && m_oRPr.IsInit() )
sResult += m_oRPr->toXML();
if ( !m_bPPrChange && m_oSectPr.IsInit() )
sResult += m_oSectPr->toXML();
if ( !m_bPPrChange && m_oPPrChange.IsInit() )
sResult += m_oPPrChange->toXML();
sResult += L"";
return sResult;
}
EElementType CParagraphProperty::getType() const
{
return et_w_pPr;
}
const CParagraphProperty CParagraphProperty::Merge(const CParagraphProperty& oPrev, const CParagraphProperty& oCurrent)
{
CParagraphProperty oProperties;
oProperties.m_oAdjustRightInd = Merge(oPrev.m_oAdjustRightInd, oCurrent.m_oAdjustRightInd);
oProperties.m_oAutoSpaceDE = Merge(oPrev.m_oAutoSpaceDE, oCurrent.m_oAutoSpaceDE);
oProperties.m_oAutoSpaceDN = Merge(oPrev.m_oAutoSpaceDN, oCurrent.m_oAutoSpaceDN);
oProperties.m_oBidi = Merge(oPrev.m_oBidi, oCurrent.m_oBidi);
oProperties.m_oCnfStyle = Merge(oPrev.m_oCnfStyle, oCurrent.m_oCnfStyle);
oProperties.m_oContextualSpacing = Merge(oPrev.m_oContextualSpacing, oCurrent.m_oContextualSpacing);
oProperties.m_oDivID = Merge(oPrev.m_oDivID, oCurrent.m_oDivID);
oProperties.m_oFramePr = Merge(oPrev.m_oFramePr, oCurrent.m_oFramePr);
if (oCurrent.m_oInd.IsInit() && oPrev.m_oInd.IsInit())
oProperties.m_oInd = ComplexTypes::Word::CInd::Merge(oPrev.m_oInd.get(), oCurrent.m_oInd.get());
else
oProperties.m_oInd = Merge(oPrev.m_oInd, oCurrent.m_oInd);
oProperties.m_oJc = Merge(oPrev.m_oJc, oCurrent.m_oJc);
oProperties.m_oKeepLines = Merge(oPrev.m_oKeepLines, oCurrent.m_oKeepLines);
oProperties.m_oKeepNext = Merge(oPrev.m_oKeepNext, oCurrent.m_oKeepNext);
oProperties.m_oKinsoku = Merge(oPrev.m_oKinsoku, oCurrent.m_oKinsoku);
oProperties.m_oMirrorIndents = Merge(oPrev.m_oMirrorIndents, oCurrent.m_oMirrorIndents);
oProperties.m_oNumPr = Merge(oPrev.m_oNumPr, oCurrent.m_oNumPr);
oProperties.m_oOutlineLvl = Merge(oPrev.m_oOutlineLvl, oCurrent.m_oOutlineLvl);
oProperties.m_oOverflowPunct = Merge(oPrev.m_oOverflowPunct, oCurrent.m_oOverflowPunct);
oProperties.m_oPageBreakBefore = Merge(oPrev.m_oPageBreakBefore, oCurrent.m_oPageBreakBefore);
if (oCurrent.m_oPBdr.IsInit() && oPrev.m_oPBdr.IsInit())
oProperties.m_oPBdr = OOX::Logic::CPBdr::Merge(oPrev.m_oPBdr.get(), oCurrent.m_oPBdr.get());
else
oProperties.m_oPBdr = Merge(oPrev.m_oPBdr, oCurrent.m_oPBdr);
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);
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);
if (oCurrent.m_oSpacing.IsInit() && oPrev.m_oSpacing.IsInit())
oProperties.m_oSpacing = ComplexTypes::Word::CSpacing::Merge(oPrev.m_oSpacing.get(), oCurrent.m_oSpacing.get());
else
oProperties.m_oSpacing = Merge(oPrev.m_oSpacing, oCurrent.m_oSpacing);
oProperties.m_oSuppressAutoHyphens = Merge(oPrev.m_oSuppressAutoHyphens, oCurrent.m_oSuppressAutoHyphens);
oProperties.m_oSuppressLineNumbers = Merge(oPrev.m_oSuppressLineNumbers, oCurrent.m_oSuppressLineNumbers);
oProperties.m_oSuppressOverlap = Merge(oPrev.m_oSuppressOverlap, oCurrent.m_oSuppressOverlap);
oProperties.m_oTabs = Merge(oPrev.m_oTabs, oCurrent.m_oTabs);
oProperties.m_oTextAlignment = Merge(oPrev.m_oTextAlignment, oCurrent.m_oTextAlignment);
oProperties.m_oTextboxTightWrap = Merge(oPrev.m_oTextboxTightWrap, oCurrent.m_oTextboxTightWrap);
oProperties.m_oTextDirection = Merge(oPrev.m_oTextDirection, oCurrent.m_oTextDirection);
oProperties.m_oTopLinePunct = Merge(oPrev.m_oTopLinePunct, oCurrent.m_oTopLinePunct);
oProperties.m_oWidowControl = Merge(oPrev.m_oWidowControl, oCurrent.m_oWidowControl);
oProperties.m_oWordWrap = Merge(oPrev.m_oWordWrap, oCurrent.m_oWordWrap);
return oProperties;
}
} // Logic
} // OOX