Files
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

423 lines
18 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* (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
*
*/
#pragma once
#include "../../Base/Nullable.h"
#include "../WritingElement.h"
#include "../../Common/SimpleTypes_Shared.h"
#include "../../Common/SimpleTypes_OMath.h"
namespace OOX
{
namespace Logic
{
//--------------------------------------------------------------------------------
/*
CAln 22.1.2.1, CAlnScr 22.1.2.4, CArgSz 22.1.2.6, CBaseJc 22.1.2.9, CBegChr 22.1.2.10, CBrkBin 22.1.2.16, CBrkBinSub 22.1.2.17,
CCGp 22.1.2.18, CCGpRule 22.1.2.19, CChr 22.1.2.20, CCount 22.1.2.21, CCSp 22.1.2.22,
CDefJc 22.1.2.25, CDegHide 22.1.2.27, CDiff 22.1.2.29, CDispDef 22.1.2.30, CEndChr 22.1.2.33,
CGrow 22.1.2.43, CHideBot 22.1.2.44, CHideLeft 22.1.2.45, CHideRight 22.1.2.46, CHideTop 22.1.2.47, CInterSp 22.1.2.48,
CIntLim 22.1.2.49, CIntraSp 22.1.2.48, CMJc 22.1.2.51, CLimLoc 22.1.2.53, CLit 22.1.2.58 , CLMargin 22.1.2.59,
CMaxDist 22.1.2.63, CMcJc 22.1.2.65, CNaryLim 22.1.2.71, CNoBreak 22.1.2.73,
CNor 22.1.2.74, CObjDist 22.1.2.76, COpEmu 22.1.2.80 , CPlcHide 22.1.2.83, CPos 22.1.2.84,
CPostSp 22.1.2.85, CPreSp 22.1.2.86, CRMargin 22.1.2.90, CRSp 22.1.2.92 , CRSpRule 22.1.2.93,
CScr 22.1.2.94, CSepChr 22.1.2.95, CShow 22.1.2.96, CShp 22.1.2.97, CSmallFrac 22.1.2.98,
CStrikeBLTR 22.1.2.107 , CStrikeH 22.1.2.108, CStrikeTLBR 22.1.2.109, CStrikeV 22.1.2.110,
CSty 22.1.2.111 ,CSubHide 22.1.2.113, CSupHide 22.1.2.115, CTransp 22.1.2.117,
CType 22.1.2.118, CVertJc 22.1.2.119,CWrapIndent 22.1.2.120, CWrapRight 22.1.2.121,
CZeroAsc 22.1.2.122, CZeroDesc 22.1.2.123, CZeroWid 22.1.2.124
*/
//--------------------------------------------------------------------------------
template <typename TMathBottomType>
class CMathBottomNodes : public WritingElement
{
public:
WritingElement_AdditionMethods(CMathBottomNodes)
CMathBottomNodes()
{
}
virtual ~CMathBottomNodes()
{
}
virtual void fromXML(XmlUtils::CXmlNode& oNode)
{
m_sNodeName = oNode.GetName();
if ( _T("m:aln") == m_sNodeName )
m_eType = et_m_aln;
else if ( _T("m:alnScr") == m_sNodeName )
m_eType = et_m_alnScr;
else if ( _T("m:argSz") == m_sNodeName )
m_eType = et_m_argSz;
else if ( _T("m:baseJc") == m_sNodeName )
m_eType = et_m_baseJc;
else if ( _T("m:begChr") == m_sNodeName )
m_eType = et_m_begChr;
else if ( _T("m:cGp") == m_sNodeName )
m_eType = et_m_cGp;
else if ( _T("m:cGpRule") == m_sNodeName )
m_eType = et_m_cGpRule;
else if ( _T("m:chr") == m_sNodeName )
m_eType = et_m_chr;
else if ( _T("m:count") == m_sNodeName )
m_eType = et_m_count;
else if ( _T("m:cSp") == m_sNodeName )
m_eType = et_m_cSp;
else if ( _T("m:degHide") == m_sNodeName )
m_eType = et_m_degHide;
else if ( _T("m:diff") == m_sNodeName )
m_eType = et_m_diff;
else if ( _T("m:endChr") == m_sNodeName )
m_eType = et_m_endChr;
else if ( _T("m:grow") == m_sNodeName )
m_eType = et_m_grow;
else if ( _T("m:hideBot") == m_sNodeName )
m_eType = et_m_hideBot;
else if ( _T("m:hideLeft") == m_sNodeName )
m_eType = et_m_hideLeft;
else if ( _T("m:hideRight") == m_sNodeName )
m_eType = et_m_hideRight;
else if ( _T("m:hideTop") == m_sNodeName )
m_eType = et_m_hideTop;
else if ( _T("m:jc") == m_sNodeName )
m_eType = et_m_jc;
else if ( _T("m:limLoc") == m_sNodeName )
m_eType = et_m_limLoc;
else if ( _T("m:lit") == m_sNodeName )
m_eType = et_m_lit;
else if ( _T("m:maxDist") == m_sNodeName )
m_eType = et_m_maxDist;
else if ( _T("m:mcJc") == m_sNodeName )
m_eType = et_m_mcJc;
else if ( _T("m:noBreak") == m_sNodeName )
m_eType = et_m_noBreak;
else if ( _T("m:nor") == m_sNodeName )
m_eType = et_m_nor;
else if ( _T("m:objDist") == m_sNodeName )
m_eType = et_m_objDist;
else if ( _T("m:opEmu") == m_sNodeName )
m_eType = et_m_opEmu;
else if ( _T("m:plcHide") == m_sNodeName )
m_eType = et_m_plcHide;
else if ( _T("m:pos") == m_sNodeName )
m_eType = et_m_pos;
else if ( _T("m:rSp") == m_sNodeName )
m_eType = et_m_rSp;
else if ( _T("m:rSpRule") == m_sNodeName )
m_eType = et_m_rSpRule;
else if ( _T("m:scr") == m_sNodeName )
m_eType = et_m_scr;
else if ( _T("m:sepChr") == m_sNodeName )
m_eType = et_m_sepChr;
else if ( _T("m:show") == m_sNodeName )
m_eType = et_m_show;
else if ( _T("m:shp") == m_sNodeName )
m_eType = et_m_shp;
else if ( _T("m:strikeBLTR") == m_sNodeName )
m_eType = et_m_strikeBLTR;
else if ( _T("m:strikeH") == m_sNodeName )
m_eType = et_m_strikeH;
else if ( _T("m:strikeTLBR") == m_sNodeName )
m_eType = et_m_strikeTLBR;
else if ( _T("m:strikeV") == m_sNodeName )
m_eType = et_m_strikeV;
else if ( _T("m:sty") == m_sNodeName )
m_eType = et_m_sty;
else if ( _T("m:subHide") == m_sNodeName )
m_eType = et_m_subHide;
else if ( _T("m:supHide") == m_sNodeName )
m_eType = et_m_supHide;
else if ( _T("m:transp") == m_sNodeName )
m_eType = et_m_transp;
else if ( _T("m:type") == m_sNodeName )
m_eType = et_m_type;
else if ( _T("m:vertJc") == m_sNodeName )
m_eType = et_m_vertJc;
else if ( _T("m:zeroAsc") == m_sNodeName )
m_eType = et_m_zeroAsc;
else if ( _T("m:zeroDesc") == m_sNodeName )
m_eType = et_m_zeroDesc;
else if ( _T("m:zeroWid") == m_sNodeName )
m_eType = et_m_zeroWid;
XmlMacroReadAttributeBase( oNode, _T("m:val"), m_val );
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
m_sNodeName = oReader.GetName();
if ( _T("m:brkBin") == m_sNodeName )
m_eType = et_m_brkBin;
else if ( _T("m:brkBinSub") == m_sNodeName )
m_eType = et_m_brkBinSub;
else if ( _T("m:defJc") == m_sNodeName )
m_eType = et_m_defJc;
else if ( _T("m:dispDef") == m_sNodeName )
m_eType = et_m_dispDef;
else if ( _T("m:interSp") == m_sNodeName )
m_eType = et_m_interSp;
else if ( _T("m:intLim") == m_sNodeName )
m_eType = et_m_intLim;
else if ( _T("m:intraSp") == m_sNodeName )
m_eType = et_m_intraSp;
else if ( _T("m:lMargin") == m_sNodeName )
m_eType = et_m_lMargin;
else if ( _T("m:naryLim") == m_sNodeName )
m_eType = et_m_naryLim;
else if ( _T("m:postSp") == m_sNodeName )
m_eType = et_m_postSp;
else if ( _T("m:preSp") == m_sNodeName )
m_eType = et_m_preSp;
else if ( _T("m:rMargin") == m_sNodeName )
m_eType = et_m_rMargin;
else if ( _T("m:smallFrac") == m_sNodeName )
m_eType = et_m_smallFrac;
else if ( _T("m:wrapIndent") == m_sNodeName )
m_eType = et_m_wrapIndent;
else if ( _T("m:wrapRight") == m_sNodeName )
m_eType = et_m_wrapRight;
ReadAttributes( oReader );
if ( !oReader.IsEmptyNode() )
oReader.ReadTillEnd();
}
virtual std::wstring toXML() const
{
std::wstring sNodeName = m_sNodeName;
if (sNodeName.empty())
sNodeName = GetMathNodeName(m_eType);
if (sNodeName.empty()) return L"";
std::wstring sResult = _T("<") + sNodeName;
if (m_val.IsInit())
{
sResult += _T(" m:val=\"");
sResult += m_val->ToString();
sResult += _T("\"");
}
sResult += _T("/>");
return sResult;
}
virtual EElementType getType() const
{
return m_eType;
}
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("m:val"), m_val )
WritingElement_ReadAttributes_End( oReader )
}
std::wstring GetMathNodeName(const EElementType & enumType) const
{//todooo вытащить в одно место - пересекается с MathArgNodes
switch(enumType)
{
case OOX::et_m_deg: return L"m:deg";
case OOX::et_m_aln: return L"m:aln";
case OOX::et_m_alnScr: return L"m:alnScr";
case OOX::et_m_argSz: return L"m:argSz";
case OOX::et_m_baseJc: return L"m:baseJc";
case OOX::et_m_begChr: return L"m:begChr";
case OOX::et_m_brkBin: return L"m:brkBin";
case OOX::et_m_brkBinSub: return L"m:brkBinSub";
case OOX::et_m_cGp: return L"m:cGp";
case OOX::et_m_cGpRule: return L"m:cGpRule";
case OOX::et_m_chr: return L"m:chr";
case OOX::et_m_count: return L"m:count";
case OOX::et_m_cSp: return L"m:cSp";
case OOX::et_m_defJc: return L"m:defJc";
case OOX::et_m_degHide: return L"m:degHide";
case OOX::et_m_diff: return L"m:diff";
case OOX::et_m_dispDef: return L"m:dispDef";
case OOX::et_m_endChr: return L"m:endChr";
case OOX::et_m_grow: return L"m:grow";
case OOX::et_m_hideBot: return L"m:hideBot";
case OOX::et_m_hideLeft: return L"m:hideLeft";
case OOX::et_m_hideRight: return L"m:hideRight";
case OOX::et_m_hideTop: return L"m:hideTop";
case OOX::et_m_interSp: return L"m:interSp";
case OOX::et_m_intLim: return L"m:intLim";
case OOX::et_m_intraSp: return L"m:intraSp";
case OOX::et_m_jc: return L"m:jc";
case OOX::et_m_limLoc: return L"m:limLoc";
case OOX::et_m_lit: return L"m:lit";
case OOX::et_m_lMargin: return L"m:lMargin";
case OOX::et_m_maxDist: return L"m:maxDist";
case OOX::et_m_mcJc: return L"m:mcJc";
case OOX::et_m_naryLim: return L"m:naryLim";
case OOX::et_m_noBreak: return L"m:noBreak";
case OOX::et_m_nor: return L"m:nor";
case OOX::et_m_objDist: return L"m:objDist";
case OOX::et_m_opEmu: return L"m:opEmu";
case OOX::et_m_plcHide: return L"m:plcHide";
case OOX::et_m_pos: return L"m:pos";
case OOX::et_m_postSp: return L"m:postSp";
case OOX::et_m_preSp: return L"m:preSp";
case OOX::et_m_rMargin: return L"m:rMargin";
case OOX::et_m_rSp: return L"m:rSp";
case OOX::et_m_rSpRule: return L"m:rSpRule";
case OOX::et_m_scr: return L"m:scr";
case OOX::et_m_sepChr: return L"m:sepChr";
case OOX::et_m_show: return L"m:show";
case OOX::et_m_shp: return L"m:shp";
case OOX::et_m_smallFrac: return L"m:smallFrac";
case OOX::et_m_strikeBLTR: return L"m:strikeBLTR";
case OOX::et_m_strikeH: return L"m:strikeH";
case OOX::et_m_strikeTLBR: return L"m:strikeTLBR";
case OOX::et_m_strikeV: return L"m:strikeV";
case OOX::et_m_sty: return L"m:sty";
case OOX::et_m_subHide: return L"m:subHide";
case OOX::et_m_supHide: return L"m:supHide";
case OOX::et_m_transp: return L"m:transp";
case OOX::et_m_type: return L"m:type";
case OOX::et_m_vertJc: return L"m:vertJc";
case OOX::et_m_wrapIndent: return L"m:wrapIndent";
case OOX::et_m_wrapRight: return L"m:wrapRight";
case OOX::et_m_zeroAsc: return L"m:zeroAsc";
case OOX::et_m_zeroDesc: return L"m:zeroDesc";
case OOX::et_m_zeroWid: return L"m:zeroWid";
default:
break;
}
return L"";
}
public:
EElementType m_eType;
std::wstring m_sNodeName;
nullable<TMathBottomType> m_val;
};
template<class TMathBottomType, class NodeType>
inline void CMathBottomNodesExFromXML(CMathBottomNodes<TMathBottomType>& v, NodeType& oNode)
{
v.fromXML( oNode );
}
template<class NodeType>
inline void CMathBottomNodesExFromXML(CMathBottomNodes<SimpleTypes::COnOff>& v, NodeType& oNode)
{
v.m_val.Init();
v.m_val->FromBool(true);
v.fromXML( oNode );
}
template <typename TMathBottomType, EElementType type = OOX::et_Unknown>
class CMathBottomNodesEx : public CMathBottomNodes<TMathBottomType>
{
public:
CMathBottomNodesEx()
{
CMathBottomNodes<TMathBottomType>::m_eType = type;
}
CMathBottomNodesEx(XmlUtils::CXmlNode& oNode)
{
CMathBottomNodes<TMathBottomType>::m_eType = type;
CMathBottomNodesExFromXML(*this, oNode);
}
CMathBottomNodesEx(XmlUtils::CXmlLiteReader& oReader)
{
CMathBottomNodes<TMathBottomType>::m_eType = type;
CMathBottomNodesExFromXML(*this, oReader);
}
virtual EElementType getType() const
{
return CMathBottomNodes<TMathBottomType>::m_eType;
}
};
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_aln> CAln;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_alnScr> CAlnScr;
typedef CMathBottomNodesEx<SimpleTypes::CInteger2, OOX::et_m_argSz> CArgSz;
typedef CMathBottomNodesEx<SimpleTypes::CYAlign, OOX::et_m_baseJc> CBaseJc;
typedef CMathBottomNodesEx<SimpleTypes::CMChar, OOX::et_m_begChr> CBegChr;
typedef CMathBottomNodesEx<SimpleTypes::CBreakBin, OOX::et_m_brkBin> CBrkBin;
typedef CMathBottomNodesEx<SimpleTypes::CBreakBinSub, OOX::et_m_brkBinSub>CBrkBinSub;
typedef CMathBottomNodesEx<SimpleTypes::CUnSignedInteger, OOX::et_m_cGp> CCGp;
typedef CMathBottomNodesEx<SimpleTypes::CSpacingRule, OOX::et_m_cGpRule> CCGpRule;
typedef CMathBottomNodesEx<SimpleTypes::CMChar, OOX::et_m_chr> CChr;
typedef CMathBottomNodesEx<SimpleTypes::CInteger255, OOX::et_m_count> CCount;
typedef CMathBottomNodesEx<SimpleTypes::CUnSignedInteger, OOX::et_m_cSp> CCSp;
typedef CMathBottomNodesEx<SimpleTypes::CMJc, OOX::et_m_defJc> CDefJc;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_degHide> CDegHide;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_diff> CDiff;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_dispDef> CDispDef;
typedef CMathBottomNodesEx<SimpleTypes::CMChar, OOX::et_m_endChr> CEndChr;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_grow> CGrow;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_hideBot> CHideBot;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_hideLeft> CHideLeft;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_hideRight>CHideRight;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_hideTop> CHideTop;
typedef CMathBottomNodesEx<SimpleTypes::CTwipsMeasure, OOX::et_m_interSp> CInterSp;
typedef CMathBottomNodesEx<SimpleTypes::CLimLoc, OOX::et_m_intLim> CIntLim;
typedef CMathBottomNodesEx<SimpleTypes::CTwipsMeasure, OOX::et_m_intraSp> CIntraSp;
typedef CMathBottomNodesEx<SimpleTypes::CMJc, OOX::et_m_jc> CMJc;
typedef CMathBottomNodesEx<SimpleTypes::CLimLoc, OOX::et_m_limLoc> CLimLoc;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_lit> CLit;
typedef CMathBottomNodesEx<SimpleTypes::CTwipsMeasure, OOX::et_m_lMargin> CLMargin;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_maxDist> CMaxDist;
typedef CMathBottomNodesEx<SimpleTypes::CXAlign, OOX::et_m_mcJc> CMcJc;
typedef CMathBottomNodesEx<SimpleTypes::CLimLoc, OOX::et_m_naryLim> CNaryLim;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_noBreak> CNoBreak;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_nor> CNor;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_objDist> CObjDist;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_opEmu> COpEmu;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_plcHide> CPlcHide;
typedef CMathBottomNodesEx<SimpleTypes::CTopBot, OOX::et_m_pos> CPos;
typedef CMathBottomNodesEx<SimpleTypes::CTwipsMeasure, OOX::et_m_postSp> CPostSp;
typedef CMathBottomNodesEx<SimpleTypes::CTwipsMeasure, OOX::et_m_preSp> CPreSp;
typedef CMathBottomNodesEx<SimpleTypes::CTwipsMeasure, OOX::et_m_rMargin> CRMargin;
typedef CMathBottomNodesEx<SimpleTypes::CUnSignedInteger, OOX::et_m_rSp> CRSp;
typedef CMathBottomNodesEx<SimpleTypes::CSpacingRule, OOX::et_m_rSpRule> CRSpRule;
typedef CMathBottomNodesEx<SimpleTypes::CScript, OOX::et_m_scr> CScr;
typedef CMathBottomNodesEx<SimpleTypes::CMChar, OOX::et_m_sepChr> CSepChr;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_show> CShow;
typedef CMathBottomNodesEx<SimpleTypes::CShp, OOX::et_m_shp> CShp;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_smallFrac>CSmallFrac;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_strikeBLTR>CStrikeBLTR;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_strikeH> CStrikeH;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_strikeTLBR>CStrikeTLBR;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_strikeV> CStrikeV;
typedef CMathBottomNodesEx<SimpleTypes::CStyle, OOX::et_m_sty> CSty;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_subHide> CSubHide;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_supHide> CSupHide;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_transp> CTransp;
typedef CMathBottomNodesEx<SimpleTypes::CFType, OOX::et_m_type> CType;
typedef CMathBottomNodesEx<SimpleTypes::CTopBot, OOX::et_m_vertJc> CVertJc;
typedef CMathBottomNodesEx<SimpleTypes::CTwipsMeasure, OOX::et_m_wrapIndent>CWrapIndent;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_wrapRight>CWrapRight;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_zeroAsc> CZeroAsc;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_zeroDesc> CZeroDesc;
typedef CMathBottomNodesEx<SimpleTypes::COnOff, OOX::et_m_zeroWid> CZeroWid;
}// Logic
}//OOX