diff --git a/HwpFile/HwpDoc/Common/XMLReader.cpp b/HwpFile/HwpDoc/Common/XMLReader.cpp index edb1831268..50e6382701 100644 --- a/HwpFile/HwpDoc/Common/XMLReader.cpp +++ b/HwpFile/HwpDoc/Common/XMLReader.cpp @@ -3,23 +3,38 @@ namespace HWP { CXMLReader::CXMLReader() + : m_pReader(new XmlUtils::CXmlLiteReader), m_bParseAttribute(false) {} -CXMLReader::CXMLReader(CXmlLiteReader& oReader) - // : XmlUtils::CXmlLiteReader(oReader) +CXMLReader::~CXMLReader() { - oReader.ReadNextNode(); - FromString(oReader.GetInnerXml()); + if (nullptr != m_pReader) + delete m_pReader; +} + +XmlUtils::CXmlLiteReader* CXMLReader::GetReader() +{ + return m_pReader; +} + +unsigned int CXMLReader::GetDepth() +{ + return (nullptr != m_pReader) ? m_pReader->GetDepth() : 0; +} + +bool CXMLReader::IsEmptyNode() +{ + return (nullptr != m_pReader) ? m_pReader->IsEmptyNode() : true; } bool CXMLReader::GetBool() { - return "1" == GetText2A(); + return "1" == GetTextAValue(*this); } int CXMLReader::GetColor(const int& nDefault) { - return ConvertHexToInt(GetText2A(), nDefault); + return ConvertHexToInt(GetTextAValue(*this), nDefault); } int CXMLReader::GetInt() @@ -32,8 +47,24 @@ double CXMLReader::GetDouble() return GetDoubleValue(*this); } +std::string CXMLReader::GetTextA() +{ + if (nullptr == m_pReader) + return std::string(); + + return (m_bParseAttribute) ? m_pReader->GetTextA() : m_pReader->GetText2A(); +} + +std::wstring CXMLReader::GetText() +{ + if (nullptr == m_pReader) + return std::wstring(); + + return (m_bParseAttribute) ? m_pReader->GetText() : m_pReader->GetText2(); +} + template -T CXMLReader::GetAttribute(const std::string& sName, T _default, T (*GetValue)(CXMLReader& oReader)) +T CXMLReader::GetAttribute(const std::string& sName, T _default, T (*GetValue)(CXMLReader&)) { if (!MoveToFirstAttribute()) return _default; @@ -42,12 +73,12 @@ T CXMLReader::GetAttribute(const std::string& sName, T _default, T (*GetValue)(C do { - if (sName == GetNameA()) + if (sName == m_pReader->GetNameA()) { oValue = GetValue(*this); break; } - }while(MoveToNextAttribute()); + }while(m_pReader->MoveToNextAttribute()); MoveToElement(); @@ -79,29 +110,74 @@ std::wstring CXMLReader::GetAttribute(const std::string& sName) return GetAttribute(sName, L"", &GetTextValue); } +bool CXMLReader::MoveToFirstAttribute() +{ + if (nullptr == m_pReader || !m_pReader->MoveToFirstAttribute()) + return false; + + m_bParseAttribute = true; + + return true; +} + +bool CXMLReader::MoveToNextAttribute() +{ + return (nullptr != m_pReader) ? m_pReader->MoveToNextAttribute() : false; +} + +bool CXMLReader::MoveToElement() +{ + if (nullptr == m_pReader || !m_pReader->MoveToElement()) + return false; + + m_bParseAttribute = false; + + return true; +} + +std::wstring CXMLReader::GetInnerXml() +{ + return m_pReader->GetInnerXml(); +} + +std::string CXMLReader::GetName() +{ + return (nullptr != m_pReader) ? m_pReader->GetNameA() : std::string(); +} + +bool CXMLReader::ReadNextSiblingNode(unsigned int unDepth) +{ + return (nullptr != m_pReader) ? m_pReader->ReadNextSiblingNode(unDepth) : false; +} + +bool CXMLReader::ReadNextNode() +{ + return (nullptr != m_pReader) ? m_pReader->ReadNextNode() : false; +} + int CXMLReader::GetIntValue(CXMLReader& oXmlReader) { - return std::atoi(oXmlReader.GetText2A().c_str()); + return std::atoi(oXmlReader.GetTextA().c_str()); } bool CXMLReader::GetBoolValue(CXMLReader& oXmlReader) { - return "1" == oXmlReader.GetText2A(); + return "1" == oXmlReader.GetTextA(); } double CXMLReader::GetDoubleValue(CXMLReader& oXmlReader) { - return std::atof(oXmlReader.GetText2A().c_str()); + return std::atof(oXmlReader.GetTextA().c_str()); } std::string CXMLReader::GetTextAValue(CXMLReader& oXmlReader) { - return oXmlReader.GetText2A(); + return oXmlReader.GetTextA(); } std::wstring CXMLReader::GetTextValue(CXMLReader& oXmlReader) { - return oXmlReader.GetText2(); + return oXmlReader.GetText(); } int ConvertWidthToHWP(const std::string& sValue) diff --git a/HwpFile/HwpDoc/Common/XMLReader.h b/HwpFile/HwpDoc/Common/XMLReader.h index 55e961cf40..98630351d4 100644 --- a/HwpFile/HwpDoc/Common/XMLReader.h +++ b/HwpFile/HwpDoc/Common/XMLReader.h @@ -5,22 +5,41 @@ namespace HWP { -class CXMLReader : public XmlUtils::CXmlLiteReader +class CXMLReader { + XmlUtils::CXmlLiteReader *m_pReader; + + bool m_bParseAttribute; public: CXMLReader(); - CXMLReader(XmlUtils::CXmlLiteReader& oReader); + ~CXMLReader(); + + XmlUtils::CXmlLiteReader* GetReader(); + unsigned int GetDepth(); + bool IsEmptyNode(); bool GetBool(); int GetColor(const int& nDefault = 0x000000); int GetInt(); double GetDouble(); + std::string GetTextA(); + std::wstring GetText(); int GetAttributeInt(const std::string& sName, int nDefault = 0); bool GetAttributeBool(const std::string& sName); double GetAttributeDouble(const std::string& sName); std::string GetAttributeA(const std::string& sName); std::wstring GetAttribute(const std::string& sName); + + bool MoveToFirstAttribute(); + bool MoveToNextAttribute(); + bool MoveToElement(); + + std::wstring GetInnerXml(); + + std::string GetName(); + bool ReadNextSiblingNode(unsigned int unDepth); + bool ReadNextNode(); private: static int GetIntValue(CXMLReader& oXmlReader); static bool GetBoolValue(CXMLReader& oXmlReader); @@ -33,42 +52,51 @@ private: }; #define WHILE_READ_NEXT_NODE_WITH_DEPTH(xml_reader, name_depth)\ + if (!xml_reader.IsEmptyNode())\ + {\ const int n##name_depth = xml_reader.GetDepth();\ - while (xml_reader.ReadNextSiblingNode2(n##name_depth)) + while (xml_reader.ReadNextSiblingNode(n##name_depth))\ + { #define WHILE_READ_NEXT_NODE_WITH_DEPTH_AND_NAME(xml_reader, name_depth)\ + if (!xml_reader.IsEmptyNode())\ + {\ const int n##name_depth##Depth = xml_reader.GetDepth();\ std::string sNode##name_depth##Name;\ - while (xml_reader.ReadNextSiblingNode2(n##name_depth##Depth))\ + while (xml_reader.ReadNextSiblingNode(n##name_depth##Depth))\ {\ - sNode##name_depth##Name = xml_reader.GetNameA(); + sNode##name_depth##Name = xml_reader.GetName(); #define WHILE_READ_NEXT_NODE(xml_reader) WHILE_READ_NEXT_NODE_WITH_DEPTH(xml_reader, Depth) #define WHILE_READ_NEXT_NODE_WITH_NAME(xml_reader)\ + if (!xml_reader.IsEmptyNode())\ + {\ const int nDepth = xml_reader.GetDepth();\ std::string sNodeName;\ - while (xml_reader.ReadNextSiblingNode2(nDepth))\ + while (xml_reader.ReadNextSiblingNode(nDepth))\ {\ - sNodeName = xml_reader.GetNameA(); + sNodeName = xml_reader.GetName(); #define WHILE_READ_NEXT_NODE_WITH_DEPTH_ONE_NAME(xml_reader, name_depth, node_name)\ WHILE_READ_NEXT_NODE_WITH_DEPTH(xml_reader, name_depth)\ - {\ - if (node_name != xml_reader.GetNameA())\ + if (node_name != xml_reader.GetName())\ continue; #define WHILE_READ_NEXT_NODE_WITH_ONE_NAME(xml_reader, node_name) WHILE_READ_NEXT_NODE_WITH_DEPTH_ONE_NAME(xml_reader, Depth, node_name) -#define END_WHILE } +#define END_WHILE } } #define START_READ_ATTRIBUTES(xml_reader)\ if (xml_reader.MoveToFirstAttribute())\ {\ - std::string sAttributeName{xml_reader.GetNameA()};\ - do + std::string sAttributeName;\ + do\ + {\ + sAttributeName = xml_reader.GetName(); #define END_READ_ATTRIBUTES(xml_reader)\ + }\ while(xml_reader.MoveToNextAttribute());\ xml_reader.MoveToElement();\ } diff --git a/HwpFile/HwpDoc/Conversion/Converter2OOXML.h b/HwpFile/HwpDoc/Conversion/Converter2OOXML.h index 10510e1887..51f016ecc4 100644 --- a/HwpFile/HwpDoc/Conversion/Converter2OOXML.h +++ b/HwpFile/HwpDoc/Conversion/Converter2OOXML.h @@ -24,8 +24,6 @@ namespace HWP { - - struct TContentType { HWP_STRING m_wsName; diff --git a/HwpFile/HwpDoc/HWPDocInfo.cpp b/HwpFile/HwpDoc/HWPDocInfo.cpp index 6d8b8c073c..78bc3277e0 100644 --- a/HwpFile/HwpDoc/HWPDocInfo.cpp +++ b/HwpFile/HwpDoc/HWPDocInfo.cpp @@ -203,7 +203,7 @@ bool CHWPDocInfo::ReadRefList(CXMLReader& oReader, int nVersion) if ("hh:fontfaces" == sNodeName) { WHILE_READ_NEXT_NODE_WITH_DEPTH_ONE_NAME(oReader, FontFace, "hh:fontface") - WHILE_READ_NEXT_NODE_WITH_DEPTH_ONE_NAME(oReader, Font, "hh:font") + WHILE_READ_NEXT_NODE_WITH_DEPTH_ONE_NAME(oReader, Font, "hh:font") m_arFaseNames.push_back(new CHWPRecordFaceName(*this, oReader, nVersion)); END_WHILE END_WHILE @@ -236,6 +236,7 @@ bool CHWPDocInfo::ReadRefList(CXMLReader& oReader, int nVersion) { WHILE_READ_NEXT_NODE_WITH_DEPTH(oReader, Bullet) m_arBullets.push_back(new CHWPRecordBullet(*this, oReader, nVersion)); + END_WHILE } else if ("hh:paraProperties" == sNodeName) { diff --git a/HwpFile/HwpDoc/HWPElements/HWPRecordBinData.cpp b/HwpFile/HwpDoc/HWPElements/HWPRecordBinData.cpp index 5e2a02a5a9..76f2a350b7 100644 --- a/HwpFile/HwpDoc/HWPElements/HWPRecordBinData.cpp +++ b/HwpFile/HwpDoc/HWPElements/HWPRecordBinData.cpp @@ -83,16 +83,16 @@ CHWPRecordBinData::CHWPRecordBinData(CXMLReader& oReader, int nVersion) START_READ_ATTRIBUTES(oReader) { if ("id" == sAttributeName) - m_sItemID = oReader.GetText2(); + m_sItemID = oReader.GetText(); else if ("isEmbeded" == sAttributeName) - sType = oReader.GetText2A(); + sType = oReader.GetTextA(); else if ("href" == sAttributeName) - m_sAPath = oReader.GetText2(); + m_sAPath = oReader.GetText(); else if ("sub-path" == sAttributeName) - sSubPath = oReader.GetText2(); + sSubPath = oReader.GetText(); else if ("media-type" == sAttributeName) { - m_sFormat = oReader.GetText2(); + m_sFormat = oReader.GetText(); std::wregex oRegex(L"image/(.*)"); m_sFormat = std::regex_replace(m_sFormat, oRegex, L"$1"); diff --git a/HwpFile/HwpDoc/HWPElements/HWPRecordBorderFill.cpp b/HwpFile/HwpDoc/HWPElements/HWPRecordBorderFill.cpp index b899ef0f2e..d4f185550b 100644 --- a/HwpFile/HwpDoc/HWPElements/HWPRecordBorderFill.cpp +++ b/HwpFile/HwpDoc/HWPElements/HWPRecordBorderFill.cpp @@ -63,11 +63,11 @@ void TBorder::Read(CXMLReader& oReader) START_READ_ATTRIBUTES(oReader) { if ("type" == sAttributeName) - m_eStyle = GetLineStyle2(oReader.GetText2()); + m_eStyle = GetLineStyle2(oReader.GetText()); else if ("color" == sAttributeName) m_nColor = oReader.GetInt(); else if ("width" == sAttributeName) - m_chWidth = (HWP_BYTE)ConvertWidthToHWP(oReader.GetText2A()); + m_chWidth = (HWP_BYTE)ConvertWidthToHWP(oReader.GetTextA()); } END_READ_ATTRIBUTES(oReader) } @@ -157,11 +157,8 @@ CFill::CFill(CHWPStream& oBuffer, int nOff, int nSize) CFill::CFill(CXMLReader& oReader) : m_nFillType(0), m_eHatchStyle(EColorFillPattern::NONE), m_eMode(EImageFillType::NONE), m_chAlpha(0xff) { - std::string sNodeName; - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_NAME(oReader) { - sNodeName = oReader.GetNameA(); - if ("hc:winBrush" == sNodeName) { ReadWinBrush(oReader); @@ -178,6 +175,7 @@ CFill::CFill(CXMLReader& oReader) m_nFillType |= 0x02; } } + END_WHILE } void CFill::ReadWinBrush(CXMLReader& oReader) @@ -222,31 +220,26 @@ void CFill::ReadGradation(CXMLReader& oReader) } END_READ_ATTRIBUTES(oReader) - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, "hc:color") { - if ("hc:color" != oReader.GetNameA()) - continue; - START_READ_ATTRIBUTES(oReader) { - if ("value" != oReader.GetNameA()) + if ("value" != oReader.GetName()) continue; - m_arColors.push_back(oReader.GetColor()); + m_arColors.push_back(oReader.GetColor(true)); } END_READ_ATTRIBUTES(oReader) } + END_WHILE } void CFill::ReadImgBrush(CXMLReader& oReader) { m_eMode = GetImageFillType(oReader.GetAttributeInt("mode")); - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, "hc:img") { - if ("hc:img" != oReader.GetNameA()) - continue; - START_READ_ATTRIBUTES(oReader) { if ("bright" == sAttributeName) @@ -255,7 +248,7 @@ void CFill::ReadImgBrush(CXMLReader& oReader) m_chContrast = (HWP_BYTE)oReader.GetInt(); else if ("effect" == sAttributeName) { - const std::string sEffect{oReader.GetText2A()}; + const std::string sEffect{oReader.GetTextA()}; if ("REAL_PIC" == sEffect) m_chEffect = 0; @@ -265,12 +258,13 @@ void CFill::ReadImgBrush(CXMLReader& oReader) m_chEffect = 2; } else if ("binaryItemIDRef" == sAttributeName) - m_sBinItemID = oReader.GetText2(); + m_sBinItemID = oReader.GetText(); else if ("alpha" == sAttributeName) m_chAlpha = (HWP_BYTE)oReader.GetInt(); } END_READ_ATTRIBUTES(oReader) } + END_WHILE } int CFill::GetSize() const @@ -395,18 +389,15 @@ CHWPRecordBorderFill::CHWPRecordBorderFill(CHWPDocInfo& oDocInfo, CXMLReader& oR } END_READ_ATTRIBUTES(oReader) - std::string sNodeName; - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_NAME(oReader) { - sNodeName = oReader.GetNameA(); - if ("hh:slash" == sNodeName) { START_READ_ATTRIBUTES(oReader) { if ("type" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("NONE" == sType) m_chSlash = 0x0; @@ -432,7 +423,7 @@ CHWPRecordBorderFill::CHWPRecordBorderFill(CHWPDocInfo& oDocInfo, CXMLReader& oR { if ("type" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("NONE" == sType) m_chBackSlash = 0x0; @@ -465,6 +456,7 @@ CHWPRecordBorderFill::CHWPRecordBorderFill(CHWPDocInfo& oDocInfo, CXMLReader& oR else if ("hc:fillBrush" == sNodeName) m_pFill = new CFill(oReader); } + END_WHILE } CHWPRecordBorderFill::~CHWPRecordBorderFill() diff --git a/HwpFile/HwpDoc/HWPElements/HWPRecordBullet.cpp b/HwpFile/HwpDoc/HWPElements/HWPRecordBullet.cpp index 76d5b790ac..bcabed7a5a 100644 --- a/HwpFile/HwpDoc/HWPElements/HWPRecordBullet.cpp +++ b/HwpFile/HwpDoc/HWPElements/HWPRecordBullet.cpp @@ -52,14 +52,14 @@ CHWPRecordBullet::CHWPRecordBullet(CHWPDocInfo& oDocInfo, CXMLReader& oReader, i { if ("char" == sAttributeName) { - const HWP_STRING wsValue{oReader.GetText2()}; + const HWP_STRING wsValue{oReader.GetText()}; if (!wsValue.empty()) m_chBulletChar = wsValue.at(0); } else if ("checkedChar" == sAttributeName) { - const HWP_STRING wsValue{oReader.GetText2()}; + const HWP_STRING wsValue{oReader.GetText()}; if (!wsValue.empty()) m_chCheckBulletChar = wsValue.at(0); @@ -69,19 +69,8 @@ CHWPRecordBullet::CHWPRecordBullet(CHWPDocInfo& oDocInfo, CXMLReader& oReader, i } END_READ_ATTRIBUTES(oReader) - WHILE_READ_NEXT_NODE(oReader) - { - if ("hc:img" != oReader.GetNameA()) - continue; - - START_READ_ATTRIBUTES(oReader) - { - if ("binaryItemIDRef" != sAttributeName) - continue; - - m_sBinItemRefID = oReader.GetText2(); - } - END_READ_ATTRIBUTES(oReader) - } + WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, "hc:img") + m_sBinItemRefID = oReader.GetAttribute("binaryItemIDRef"); + END_WHILE } } diff --git a/HwpFile/HwpDoc/HWPElements/HWPRecordCharShape.cpp b/HwpFile/HwpDoc/HWPElements/HWPRecordCharShape.cpp index 9d60028cc9..238b2bb316 100644 --- a/HwpFile/HwpDoc/HWPElements/HWPRecordCharShape.cpp +++ b/HwpFile/HwpDoc/HWPElements/HWPRecordCharShape.cpp @@ -227,17 +227,14 @@ CHWPRecordCharShape::CHWPRecordCharShape(CHWPDocInfo& oDocInfo, CXMLReader& oRea else if ("useKerning" == sAttributeName) m_bUseKerning = oReader.GetBool(); else if ("symMark" == sAttributeName) - m_eSymMark = GetAccent(oReader.GetText2()); + m_eSymMark = GetAccent(oReader.GetText()); else if ("borderFillIDRef" == sAttributeName) m_shBorderFillIDRef = oReader.GetInt(); } END_READ_ATTRIBUTES(oReader) - std::string sNodeName; - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_NAME(oReader) { - sNodeName = oReader.GetNameA(); - if ("hh:fontRef" == sNodeName) { if (nullptr == m_pParent) @@ -284,9 +281,9 @@ CHWPRecordCharShape::CHWPRecordCharShape(CHWPDocInfo& oDocInfo, CXMLReader& oRea START_READ_ATTRIBUTES(oReader) { if ("type" == sAttributeName) - m_eUnderline = GetUnderline(oReader.GetText2()); + m_eUnderline = GetUnderline(oReader.GetText()); else if ("shape" == sAttributeName) - m_eUnderLineShape = GetLineStyle1(oReader.GetText2()); + m_eUnderLineShape = GetLineStyle1(oReader.GetText()); else if ("color" == sAttributeName) m_nUnderlineColor = oReader.GetColor(); } @@ -297,7 +294,7 @@ CHWPRecordCharShape::CHWPRecordCharShape(CHWPDocInfo& oDocInfo, CXMLReader& oRea START_READ_ATTRIBUTES(oReader) { if ("shape" == sAttributeName) - m_eStrikeOutShape = GetLineStyle2(oReader.GetText2()); + m_eStrikeOutShape = GetLineStyle2(oReader.GetText()); else if ("color" == sAttributeName) m_nStrikeOutColor = oReader.GetColor(); } @@ -311,7 +308,7 @@ CHWPRecordCharShape::CHWPRecordCharShape(CHWPDocInfo& oDocInfo, CXMLReader& oRea { if ("type" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("DROP" == sType) m_eShadow = EShadow::DISCRETE; @@ -342,6 +339,7 @@ CHWPRecordCharShape::CHWPRecordCharShape(CHWPDocInfo& oDocInfo, CXMLReader& oRea else if ("hh:subscript" == sNodeName) m_bSubScript = true; } + END_WHILE } bool CHWPRecordCharShape::Bold() const diff --git a/HwpFile/HwpDoc/HWPElements/HWPRecordFaceName.cpp b/HwpFile/HwpDoc/HWPElements/HWPRecordFaceName.cpp index 94a7b9dde4..c097a44c41 100644 --- a/HwpFile/HwpDoc/HWPElements/HWPRecordFaceName.cpp +++ b/HwpFile/HwpDoc/HWPElements/HWPRecordFaceName.cpp @@ -58,12 +58,8 @@ CHWPRecordFaceName::CHWPRecordFaceName(CHWPDocInfo& oDocInfo, CXMLReader& oReade { m_sFaceName = oReader.GetAttribute("face"); - std::string sNodeName; - - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_NAME(oReader) { - sNodeName = oReader.GetNameA(); - if ("hh:substFont" == sNodeName) { m_bSubstExists = true; @@ -71,10 +67,10 @@ CHWPRecordFaceName::CHWPRecordFaceName(CHWPDocInfo& oDocInfo, CXMLReader& oReade START_READ_ATTRIBUTES(oReader) { if ("face" == sAttributeName) - m_sSubstFace = oReader.GetText2(); + m_sSubstFace = oReader.GetText(); else if ("type" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("TTF" == sType) m_eSubstType = EAltType::FFT; @@ -94,7 +90,7 @@ CHWPRecordFaceName::CHWPRecordFaceName(CHWPDocInfo& oDocInfo, CXMLReader& oReade { if ("familyType" == sAttributeName) { - m_sBasicFaceName = oReader.GetText2(); + m_sBasicFaceName = oReader.GetText(); if (!m_sBasicFaceName.empty()) m_bBasicFaceExists = true; @@ -121,6 +117,7 @@ CHWPRecordFaceName::CHWPRecordFaceName(CHWPDocInfo& oDocInfo, CXMLReader& oReade END_READ_ATTRIBUTES(oReader) } } + END_WHILE } HWP_STRING CHWPRecordFaceName::GetFaceName() const diff --git a/HwpFile/HwpDoc/HWPElements/HWPRecordNumbering.cpp b/HwpFile/HwpDoc/HWPElements/HWPRecordNumbering.cpp index 24ab2ac9b9..1325983893 100644 --- a/HwpFile/HwpDoc/HWPElements/HWPRecordNumbering.cpp +++ b/HwpFile/HwpDoc/HWPElements/HWPRecordNumbering.cpp @@ -61,12 +61,10 @@ CHWPRecordNumbering::CHWPRecordNumbering(CHWPDocInfo& oDocInfo, CXMLReader& oRea unsigned int unIndex = 0; short shLevel = 0; - std::string sNodeName, sNumFormat; + std::string sNumFormat; - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_NAME(oReader) { - sNodeName = oReader.GetNameA(); - if ("hh:paraHead" == sNodeName || "paraHead" == sNodeName) { @@ -74,7 +72,7 @@ CHWPRecordNumbering::CHWPRecordNumbering(CHWPDocInfo& oDocInfo, CXMLReader& oRea { if ("align" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("LEFT" == sType) m_arNumbering[unIndex].m_chAlign = 0; @@ -91,7 +89,7 @@ CHWPRecordNumbering::CHWPRecordNumbering(CHWPDocInfo& oDocInfo, CXMLReader& oRea m_arNumbering[unIndex].m_shWidthAdjust = oReader.GetInt(); else if ("textOffsetType" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("PERCENT" == sType) m_arNumbering[unIndex].m_chTextOffsetType = 0; @@ -105,7 +103,7 @@ CHWPRecordNumbering::CHWPRecordNumbering(CHWPDocInfo& oDocInfo, CXMLReader& oRea else if ("start" == sAttributeName) m_arNumbering[unIndex].m_nStartNumber = oReader.GetInt(); else if ("numFormat" == sAttributeName) - sNumFormat = oReader.GetText2A(); + sNumFormat = oReader.GetTextA(); else if ("level" == sAttributeName) shLevel = oReader.GetInt(); } @@ -204,6 +202,7 @@ CHWPRecordNumbering::CHWPRecordNumbering(CHWPDocInfo& oDocInfo, CXMLReader& oRea if (7 == unIndex) return; } + END_WHILE } short CHWPRecordNumbering::GetStart() const diff --git a/HwpFile/HwpDoc/HWPElements/HWPRecordParaShape.cpp b/HwpFile/HwpDoc/HWPElements/HWPRecordParaShape.cpp index 830d9e521b..52f4ab1368 100644 --- a/HwpFile/HwpDoc/HWPElements/HWPRecordParaShape.cpp +++ b/HwpFile/HwpDoc/HWPElements/HWPRecordParaShape.cpp @@ -150,26 +150,21 @@ CHWPRecordParaShape::CHWPRecordParaShape(CHWPDocInfo& oDocInfo, CXMLReader& oRea } END_READ_ATTRIBUTES(oReader) - WHILE_READ_NEXT_NODE(oReader) - RecursiveParaShape(oReader); + RecursiveParaShape(oReader); } void CHWPRecordParaShape::RecursiveParaShape(CXMLReader& oReader) { - std::string sNodeName; - - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_NAME(oReader) { - sNodeName = oReader.GetNameA(); - if ("hh:align" == sNodeName) { START_READ_ATTRIBUTES(oReader) { if ("horizontal" == sAttributeName) - m_eAlign = ::HWP::GetHorizontalAlign(oReader.GetText2()); + m_eAlign = ::HWP::GetHorizontalAlign(oReader.GetText()); else if ("vertical" == sAttributeName) - m_eVertAlign = ::HWP::GetVerticalAlign(oReader.GetText2()); + m_eVertAlign = ::HWP::GetVerticalAlign(oReader.GetText()); } END_READ_ATTRIBUTES(oReader) } @@ -178,7 +173,7 @@ void CHWPRecordParaShape::RecursiveParaShape(CXMLReader& oReader) START_READ_ATTRIBUTES(oReader) { if ("type" == sAttributeName) - m_eHeadingType = ::HWP::GetHeadingType(oReader.GetText2()); + m_eHeadingType = ::HWP::GetHeadingType(oReader.GetText()); else if ("idRef" == sAttributeName) m_shHeadingIdRef = oReader.GetInt(); else if ("level" == sAttributeName) @@ -192,7 +187,7 @@ void CHWPRecordParaShape::RecursiveParaShape(CXMLReader& oReader) { if ("breakLatinWord" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("KEEP_WORD" == sType) m_chBreakLatinWord = 0; @@ -201,7 +196,7 @@ void CHWPRecordParaShape::RecursiveParaShape(CXMLReader& oReader) } else if ("breakNonLatinWord" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("KEEP_WORD" == sType) m_chBreakNonLatinWord = 0; @@ -216,7 +211,7 @@ void CHWPRecordParaShape::RecursiveParaShape(CXMLReader& oReader) m_bPageBreakBefore = oReader.GetBool(); else if ("lineWrap" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("BREAK" == sType) m_chLineWrap = 0; @@ -232,7 +227,7 @@ void CHWPRecordParaShape::RecursiveParaShape(CXMLReader& oReader) { if ("type" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("PERCENT" == sType) m_nLineSpacingType = 0; @@ -290,13 +285,12 @@ void CHWPRecordParaShape::RecursiveParaShape(CXMLReader& oReader) m_nMarginPrev = oReader.GetAttributeInt("value"); else if ("hc:next" == sNodeName) m_nMarginNext = oReader.GetAttributeInt("value"); - else if ("hh:margin" == sNodeName || - "hp:switch" == sNodeName) - { - WHILE_READ_NEXT_NODE(oReader) - RecursiveParaShape(oReader); - } + else if ("hh:margin" == sNodeName || + "hp:switch" == sNodeName || + "hp:default" == sNodeName) + RecursiveParaShape(oReader); } + END_WHILE } EHorizontalAlign CHWPRecordParaShape::GetHorizantalAlign() const diff --git a/HwpFile/HwpDoc/HWPElements/HWPRecordStyle.cpp b/HwpFile/HwpDoc/HWPElements/HWPRecordStyle.cpp index ecb12eaeac..edebd143c6 100644 --- a/HwpFile/HwpDoc/HWPElements/HWPRecordStyle.cpp +++ b/HwpFile/HwpDoc/HWPElements/HWPRecordStyle.cpp @@ -27,7 +27,7 @@ CHWPRecordStyle::CHWPRecordStyle(CHWPDocInfo& oDocInfo, CXMLReader& oReader, int { if ("type" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("PARA" == sType) m_chType = 0; @@ -35,9 +35,9 @@ CHWPRecordStyle::CHWPRecordStyle(CHWPDocInfo& oDocInfo, CXMLReader& oReader, int m_chType = 1; } else if ("name" == sAttributeName) - m_sName = oReader.GetText2(); + m_sName = oReader.GetText(); else if ("engName" == sAttributeName) - m_sEngName = oReader.GetText2(); + m_sEngName = oReader.GetText(); else if ("paraPrIDRef" == sAttributeName) m_nParaShape = oReader.GetInt(); else if ("charPrIDRef" == sAttributeName) diff --git a/HwpFile/HwpDoc/HWPElements/HwpRecordTabDef.cpp b/HwpFile/HwpDoc/HWPElements/HwpRecordTabDef.cpp index cf2b9514c4..f67bb030a1 100644 --- a/HwpFile/HwpDoc/HWPElements/HwpRecordTabDef.cpp +++ b/HwpFile/HwpDoc/HWPElements/HwpRecordTabDef.cpp @@ -14,7 +14,7 @@ TTab::TTab(CXMLReader& oReader) else if ("type" == sAttributeName) SetType(oReader.GetInt()); else if ("leader" == sAttributeName) - m_eLeader = GetLineStyle2(oReader.GetText2()); + m_eLeader = GetLineStyle2(oReader.GetText()); } END_READ_ATTRIBUTES(oReader) } diff --git a/HwpFile/HwpDoc/HWPXFile.cpp b/HwpFile/HwpDoc/HWPXFile.cpp index cf663fda23..d37f043236 100644 --- a/HwpFile/HwpDoc/HWPXFile.cpp +++ b/HwpFile/HwpDoc/HWPXFile.cpp @@ -115,8 +115,11 @@ VECTOR CHWPXFile::GetPathsToSections() const bool CHWPXFile::GetFileHeader() { - CXMLNode oVersionXml{GetDocument(L"version.xml")}; - CXMLReader oReader{GetDocument(L"version.xml")}; + CXMLReader oReader; + + if (!GetDocument(L"version.xml", oReader)) + return false; + return m_oFileHeader.Parse(oReader); } @@ -147,10 +150,18 @@ bool CHWPXFile::GetChildStream(const HWP_STRING& sFileName, CHWPStream& oBuffer) bool CHWPXFile::GetDocInfo(int nVersion) { - CXMLReader oContentReader{GetDocument(L"Contents/content.hpf")}; + CXMLReader oContentReader; + + if (!GetDocument(L"Contents/content.hpf", oContentReader)) + return false; + if (m_oDocInfo.ReadContentHpf(oContentReader, nVersion)) { - CXMLReader oHeaderReader{GetDocument(L"Contents/header.xml")}; + CXMLReader oHeaderReader; + + if (!GetDocument(L"Contents/header.xml", oHeaderReader)) + return false; + return m_oDocInfo.Parse(oHeaderReader, nVersion); } @@ -159,7 +170,10 @@ bool CHWPXFile::GetDocInfo(int nVersion) bool CHWPXFile::ReadSection(const HWP_STRING& sName, int nVersion) { - CXMLReader oReader{GetDocument(sName)}; + CXMLReader oReader; + + if (!GetDocument(sName, oReader)) + return false; CHWPSection* pSection = new CHWPSection(); const bool bResult = pSection->Parse(oReader, nVersion); @@ -172,34 +186,14 @@ bool CHWPXFile::ReadSection(const HWP_STRING& sName, int nVersion) return bResult; } -CXMLReader CHWPXFile::GetDocument(const HWP_STRING& sEntryName) +bool CHWPXFile::GetDocument(const HWP_STRING& sEntryName, CXMLReader& oReader) { - if (nullptr == m_pZipFolder) - return CXMLReader(); + if (nullptr == m_pZipFolder || nullptr == oReader.GetReader()) + return false; - XmlUtils::CXmlLiteReader oTempReader{m_pZipFolder->getReaderFromFile(sEntryName)}; + if (m_pZipFolder->getReaderFromFile(sEntryName, *oReader.GetReader())) + return oReader.ReadNextNode(); - std::cout << oTempReader.GetNameA() << std::endl; - - if (oTempReader.IsValid()) - std::cout << "Valid" << std::endl; - else - std::cout << "No valid" << std::endl; - - oTempReader.ReadNextNode(); - - if (oTempReader.IsValid()) - std::cout << "Valid" << std::endl; - else - std::cout << "No valid" << std::endl; - - std::wcout << oTempReader.GetDepth() << L" _ " << oTempReader.GetName() << std::endl; - - CXMLReader oReader(oTempReader); - - std::wcout << oReader.GetInnerXml() << std::endl; - - - return oReader; + return false; } } diff --git a/HwpFile/HwpDoc/HWPXFile.h b/HwpFile/HwpDoc/HWPXFile.h index 88af44470b..9034b47bd5 100644 --- a/HwpFile/HwpDoc/HWPXFile.h +++ b/HwpFile/HwpDoc/HWPXFile.h @@ -32,7 +32,7 @@ private: bool GetFileHeader(); bool GetDocInfo(int nVersion); bool ReadSection(const HWP_STRING& sName, int nVersion); - CXMLReader GetDocument(const HWP_STRING& sEntryName); + bool GetDocument(const HWP_STRING& sEntryName, CXMLReader& oReader); }; } diff --git a/HwpFile/HwpDoc/HwpFileHeader.cpp b/HwpFile/HwpDoc/HwpFileHeader.cpp index 3d6c723f89..422e714c2a 100644 --- a/HwpFile/HwpDoc/HwpFileHeader.cpp +++ b/HwpFile/HwpDoc/HwpFileHeader.cpp @@ -62,21 +62,18 @@ bool CHwpFileHeader::Parse(CHWPStream& oBuffer) bool CHwpFileHeader::Parse(CXMLReader& oReader) { - if (!oReader.IsValid()) - return false; - HWP_STRING wsMajor, wsMinor, wsMicro, wsBuildNumber; START_READ_ATTRIBUTES(oReader) { if ("major" == sAttributeName) - wsMajor = oReader.GetText2(); + wsMajor = oReader.GetText(); else if ("minor" == sAttributeName) - wsMinor = oReader.GetText2(); + wsMinor = oReader.GetText(); else if ("micro" == sAttributeName) - wsMicro = oReader.GetText2(); + wsMicro = oReader.GetText(); else if ("buildNumber" == sAttributeName) - wsBuildNumber = oReader.GetText2(); + wsBuildNumber = oReader.GetText(); } END_READ_ATTRIBUTES(oReader) diff --git a/HwpFile/HwpDoc/Paragraph/Ctrl.cpp b/HwpFile/HwpDoc/Paragraph/Ctrl.cpp index 3ecefd7705..39a8dd3fd2 100644 --- a/HwpFile/HwpDoc/Paragraph/Ctrl.cpp +++ b/HwpFile/HwpDoc/Paragraph/Ctrl.cpp @@ -52,7 +52,7 @@ bool CCtrl::Equals(CCtrl* pFirstCtrl, CCtrl* pSecondCtrl) CCtrl* CCtrl::GetCtrl(CXMLReader& oReader, int nVersion) { - const std::string sNodeName{oReader.GetNameA()}; + const std::string sNodeName{oReader.GetName()}; if ("hp:colPr" == sNodeName) return new CCtrlColumnDef(L"dloc", oReader, nVersion); diff --git a/HwpFile/HwpDoc/Paragraph/CtrlAutoNumber.cpp b/HwpFile/HwpDoc/Paragraph/CtrlAutoNumber.cpp index aeb903fdd3..c61e1a9cdc 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlAutoNumber.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlAutoNumber.cpp @@ -57,7 +57,7 @@ CCtrlAutoNumber::CCtrlAutoNumber(const HWP_STRING& sCtrlID, CXMLReader& oReader, m_bSuperscript = oReader.GetBool(); else if ("type" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("DIGIT" == sType) m_eNumShape = ENumberShape2::DIGIT; @@ -102,6 +102,7 @@ CCtrlAutoNumber::CCtrlAutoNumber(const HWP_STRING& sCtrlID, CXMLReader& oReader, } END_READ_ATTRIBUTES(oReader) } + END_WHILE m_bFullFilled = true; } diff --git a/HwpFile/HwpDoc/Paragraph/CtrlColumnDef.cpp b/HwpFile/HwpDoc/Paragraph/CtrlColumnDef.cpp index 22228cb0f2..baed9d74f6 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlColumnDef.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlColumnDef.cpp @@ -59,20 +59,17 @@ CCtrlColumnDef::CCtrlColumnDef(const HWP_STRING& sCtrlID, CXMLReader& oReader, i } unsigned int unColSzIndex = 0; - std::string sNodeName; - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_NAME(oReader) { - sNodeName = oReader.GetNameA(); - if ("hp:colLine" == sNodeName) { START_READ_ATTRIBUTES(oReader) { if ("type" == sAttributeName) - m_eColLineStyle = GetLineStyle2(oReader.GetText2()); + m_eColLineStyle = GetLineStyle2(oReader.GetText()); else if ("width" == sAttributeName) - m_chColLineWidth = (HWP_BYTE)ConvertWidthToHWP(oReader.GetText2A()); + m_chColLineWidth = (HWP_BYTE)ConvertWidthToHWP(oReader.GetTextA()); else if ("color" == sAttributeName) m_nColLineColor = oReader.GetColor(); } @@ -90,6 +87,7 @@ CCtrlColumnDef::CCtrlColumnDef(const HWP_STRING& sCtrlID, CXMLReader& oReader, i END_READ_ATTRIBUTES(oReader) } } + END_WHILE m_bFullFilled = true; } diff --git a/HwpFile/HwpDoc/Paragraph/CtrlCommon.cpp b/HwpFile/HwpDoc/Paragraph/CtrlCommon.cpp index 6b14cd883c..e1e63f1049 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlCommon.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlCommon.cpp @@ -1,6 +1,8 @@ #include "CtrlCommon.h" #include "../Common/Common.h" #include +#include +#include #include "CapParagraph.h" @@ -251,7 +253,7 @@ namespace HWP m_nObjInstanceID = std::abs(oReader.GetInt()); else if ("textFlow" == sAttributeName) { - sType = oReader.GetText2A(); + sType = oReader.GetTextA(); if ("BOTH_SIDES" == sType) m_chTextFlow = 0; @@ -264,7 +266,7 @@ namespace HWP } else if ("textWrap" == sAttributeName) { - sType = oReader.GetText2A(); + sType = oReader.GetTextA(); if ("SQUARE" == sType) m_eTextWrap = ETextWrap::SQUARE; @@ -279,7 +281,7 @@ namespace HWP m_nZOrder = oReader.GetInt(); else if ("numberingType" == sAttributeName) { - sType = oReader.GetText2A(); + sType = oReader.GetTextA(); if ("NONE" == sType) m_chNumeringType = 0; @@ -292,133 +294,6 @@ namespace HWP } } END_READ_ATTRIBUTES(oReader) - - std::string sNodeName; - - WHILE_READ_NEXT_NODE(oReader) - { - sNodeName = oReader.GetNameA(); - - if ("hp:sz" == sNodeName) - { - START_READ_ATTRIBUTES(oReader) - { - if ("width" == sAttributeName) - m_nWidth = oReader.GetInt(); - else if ("widthRelTo" == sAttributeName) - m_eWidthRelTo = ::HWP::GetWidthRelTo(oReader.GetText2()); - else if ("height" == sAttributeName) - m_nHeight = oReader.GetInt(); - else if ("heightRelTo" == sAttributeName) - m_eHeightRelTo = ::HWP::GetHeightRelTo(oReader.GetText2()); - } - END_READ_ATTRIBUTES(oReader) - } - else if ("hp:pos" == sNodeName) - { - START_READ_ATTRIBUTES(oReader) - { - if ("treatAsChar" == sAttributeName) - m_bTreatAsChar = oReader.GetBool(); - else if ("affectLSpacing" == sAttributeName) - m_bAffectLSpacing = oReader.GetBool(); - else if ("allowOverlap" == sAttributeName) - m_bAllowOverlap = oReader.GetBool(); - else if ("vertRelTo" == sAttributeName) - m_eVertRelTo = GetVRelTo(oReader.GetText2()); - else if ("horzRelTo" == sAttributeName) - m_eHorzRelTo = GetHRelTo(oReader.GetText2()); - else if ("flowWithText" == sAttributeName) - m_bFlowWithText = oReader.GetBool(); - else if ("vertAlign" == sAttributeName) - m_eVertAlign = GetVertAlign(oReader.GetText2()); - else if ("horzAlign" == sAttributeName) - m_eHorzAlign = GetHorzAlign(oReader.GetText2()); - else if ("vertOffset" == sAttributeName) - m_nVertOffset = oReader.GetInt(); - else if ("horzOffset" == sAttributeName) - m_nHorzOffset = oReader.GetInt(); - } - END_READ_ATTRIBUTES(oReader) - } - else if ("hp:outMargin" == sNodeName) - { - START_READ_ATTRIBUTES(oReader) - { - if ("left" == sAttributeName) - m_arOutMargin[0] = oReader.GetInt(); - else if ("right" == sAttributeName) - m_arOutMargin[1] = oReader.GetInt(); - else if ("top" == sAttributeName) - m_arOutMargin[2] = oReader.GetInt(); - else if ("bottom" == sAttributeName) - m_arOutMargin[3] = oReader.GetInt(); - } - END_READ_ATTRIBUTES(oReader) - } - else if ("hp:inMargin" == sNodeName) - { - START_READ_ATTRIBUTES(oReader) - { - if ("left" == sAttributeName) - m_arInMargin[0] = oReader.GetInt(); - else if ("right" == sAttributeName) - m_arInMargin[1] = oReader.GetInt(); - else if ("top" == sAttributeName) - m_arInMargin[2] = oReader.GetInt(); - else if ("bottom" == sAttributeName) - m_arInMargin[3] = oReader.GetInt(); - } - END_READ_ATTRIBUTES(oReader) - } - else if ("hp:caption" == sNodeName) - { - START_READ_ATTRIBUTES(oReader) - { - if ("side" == sAttributeName) - { - sType = oReader.GetText2A(); - - if ("LEFT" == sType) - m_nCaptionAttr = 0b00; - else if ("RIGHT" == sType) - m_nCaptionAttr = 0b01; - else if ("TOP" == sType) - m_nCaptionAttr = 0b10; - else if ("BOTTOM" == sType) - m_nCaptionAttr = 0b11; - } - else if ("fullSz" == sAttributeName) - { - if (oReader.GetBool()) - m_nCaptionAttr |= 0b100; - } - else if ("width" == sAttributeName) - m_nCaptionWidth = oReader.GetInt(); - else if ("gap" == sAttributeName) - m_nCaptionSpacing = oReader.GetInt(); - else if ("lastWidth" == sAttributeName) - m_nCaptionMaxW = oReader.GetInt(); - } - END_READ_ATTRIBUTES(oReader) - - const int nChildDepth = oReader.GetDepth(); - while (oReader.ReadNextSiblingNode2(nChildDepth)) - { - if ("hp:subList" != oReader.GetNameA()) - continue; - - const int nSubChildDepth = oReader.GetDepth(); - while (oReader.ReadNextSiblingNode2(nSubChildDepth)) - { - if ("hp:p" != oReader.GetNameA()) - continue; - - m_arCaption.push_back(new CCapParagraph(oReader, nVersion)); - } - } - } - } } CCtrlCommon::~CCtrlCommon() @@ -446,6 +321,121 @@ namespace HWP m_eTextVerAlign = eVertAlign; } + void CCtrlCommon::ParseChildren(CXMLReader& oReader, int nVersion) + { + const std::string sNodeName{oReader.GetName()}; + + if ("hp:sz" == sNodeName) + { + START_READ_ATTRIBUTES(oReader) + { + if ("width" == sAttributeName) + m_nWidth = oReader.GetInt(); + else if ("widthRelTo" == sAttributeName) + m_eWidthRelTo = ::HWP::GetWidthRelTo(oReader.GetText()); + else if ("height" == sAttributeName) + m_nHeight = oReader.GetInt(); + else if ("heightRelTo" == sAttributeName) + m_eHeightRelTo = ::HWP::GetHeightRelTo(oReader.GetText()); + } + END_READ_ATTRIBUTES(oReader) + } + else if ("hp:pos" == sNodeName) + { + START_READ_ATTRIBUTES(oReader) + { + if ("treatAsChar" == sAttributeName) + m_bTreatAsChar = oReader.GetBool(); + else if ("affectLSpacing" == sAttributeName) + m_bAffectLSpacing = oReader.GetBool(); + else if ("allowOverlap" == sAttributeName) + m_bAllowOverlap = oReader.GetBool(); + else if ("vertRelTo" == sAttributeName) + m_eVertRelTo = GetVRelTo(oReader.GetText()); + else if ("horzRelTo" == sAttributeName) + m_eHorzRelTo = GetHRelTo(oReader.GetText()); + else if ("flowWithText" == sAttributeName) + m_bFlowWithText = oReader.GetBool(); + else if ("vertAlign" == sAttributeName) + m_eVertAlign = GetVertAlign(oReader.GetText()); + else if ("horzAlign" == sAttributeName) + m_eHorzAlign = GetHorzAlign(oReader.GetText()); + else if ("vertOffset" == sAttributeName) + m_nVertOffset = oReader.GetInt(); + else if ("horzOffset" == sAttributeName) + m_nHorzOffset = oReader.GetInt(); + } + END_READ_ATTRIBUTES(oReader) + } + else if ("hp:outMargin" == sNodeName) + { + START_READ_ATTRIBUTES(oReader) + { + if ("left" == sAttributeName) + m_arOutMargin[0] = oReader.GetInt(); + else if ("right" == sAttributeName) + m_arOutMargin[1] = oReader.GetInt(); + else if ("top" == sAttributeName) + m_arOutMargin[2] = oReader.GetInt(); + else if ("bottom" == sAttributeName) + m_arOutMargin[3] = oReader.GetInt(); + } + END_READ_ATTRIBUTES(oReader) + } + else if ("hp:inMargin" == sNodeName) + { + START_READ_ATTRIBUTES(oReader) + { + if ("left" == sAttributeName) + m_arInMargin[0] = oReader.GetInt(); + else if ("right" == sAttributeName) + m_arInMargin[1] = oReader.GetInt(); + else if ("top" == sAttributeName) + m_arInMargin[2] = oReader.GetInt(); + else if ("bottom" == sAttributeName) + m_arInMargin[3] = oReader.GetInt(); + } + END_READ_ATTRIBUTES(oReader) + } + else if ("hp:caption" == sNodeName) + { + START_READ_ATTRIBUTES(oReader) + { + if ("side" == sAttributeName) + { + const std::string sType{oReader.GetTextA()}; + + if ("LEFT" == sType) + m_nCaptionAttr = 0b00; + else if ("RIGHT" == sType) + m_nCaptionAttr = 0b01; + else if ("TOP" == sType) + m_nCaptionAttr = 0b10; + else if ("BOTTOM" == sType) + m_nCaptionAttr = 0b11; + } + else if ("fullSz" == sAttributeName) + { + if (oReader.GetBool()) + m_nCaptionAttr |= 0b100; + } + else if ("width" == sAttributeName) + m_nCaptionWidth = oReader.GetInt(); + else if ("gap" == sAttributeName) + m_nCaptionSpacing = oReader.GetInt(); + else if ("lastWidth" == sAttributeName) + m_nCaptionMaxW = oReader.GetInt(); + } + END_READ_ATTRIBUTES(oReader) + + WHILE_READ_NEXT_NODE_WITH_DEPTH_ONE_NAME(oReader, SubList, "hp:subList") + WHILE_READ_NEXT_NODE_WITH_DEPTH_ONE_NAME(oReader, Paragraph, "hp:p") + m_arCaption.push_back(new CCapParagraph(oReader, nVersion)); + END_WHILE + END_WHILE + } + } + void CCtrlCommon::AddParagraph(CHWPPargraph* pParagraph) { m_arParas.push_back(pParagraph); diff --git a/HwpFile/HwpDoc/Paragraph/CtrlCommon.h b/HwpFile/HwpDoc/Paragraph/CtrlCommon.h index 1e7ffc4b10..7ec5dc965d 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlCommon.h +++ b/HwpFile/HwpDoc/Paragraph/CtrlCommon.h @@ -121,6 +121,8 @@ public: void SetTextVerAlign(EVertAlign eVertAlign); + void ParseChildren(CXMLReader& oReader, int nVersion); + void AddParagraph(CHWPPargraph* pParagraph); void AddCaption(CCapParagraph* pCapPara); diff --git a/HwpFile/HwpDoc/Paragraph/CtrlContainer.cpp b/HwpFile/HwpDoc/Paragraph/CtrlContainer.cpp index 04a4a974d0..047f20f100 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlContainer.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlContainer.cpp @@ -28,11 +28,8 @@ CCtrlContainer::CCtrlContainer(const HWP_STRING& sCtrlID, int nSize, CHWPStream& CCtrlContainer::CCtrlContainer(const HWP_STRING& sCtrlID, CXMLReader& oReader, int nVersion) : CCtrlGeneralShape(sCtrlID, oReader, nVersion) { - std::string sNodeName; - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_NAME(oReader) { - sNodeName = oReader.GetNameA(); - if ("hp:container" == sNodeName) m_arShapes.push_back(new CCtrlContainer(L"noc$", oReader, nVersion)); else if ("hp:line" == sNodeName) @@ -54,6 +51,7 @@ CCtrlContainer::CCtrlContainer(const HWP_STRING& sCtrlID, CXMLReader& oReader, i else if ("hp:ole" == sNodeName) m_arShapes.push_back(new CCtrlShapeOle(L"elo$", oReader, nVersion)); } + END_WHILE m_shNElement = m_arShapes.size(); } diff --git a/HwpFile/HwpDoc/Paragraph/CtrlEqEdit.cpp b/HwpFile/HwpDoc/Paragraph/CtrlEqEdit.cpp index 093aa547ce..274b1b20bb 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlEqEdit.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlEqEdit.cpp @@ -18,12 +18,12 @@ CCtrlEqEdit::CCtrlEqEdit(const HWP_STRING& sCtrlID, int nSize, CHWPStream& oBuff {} CCtrlEqEdit::CCtrlEqEdit(const HWP_STRING& sCtrlID, CXMLReader& oReader, int nVersion) - : CCtrlGeneralShape(sCtrlID) + : CCtrlGeneralShape(sCtrlID, oReader, nVersion) { START_READ_ATTRIBUTES(oReader) { if ("version" == sAttributeName) - m_sVersion = oReader.GetText2(); + m_sVersion = oReader.GetText(); else if ("baseLine" == sAttributeName) m_nBaseline = oReader.GetInt(); else if ("textColor" == sAttributeName) @@ -32,7 +32,7 @@ CCtrlEqEdit::CCtrlEqEdit(const HWP_STRING& sCtrlID, CXMLReader& oReader, int nVe m_nCharSize = oReader.GetInt(); else if ("lineMode" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("LINE" == sType) m_nAttr = 1; @@ -40,17 +40,18 @@ CCtrlEqEdit::CCtrlEqEdit(const HWP_STRING& sCtrlID, CXMLReader& oReader, int nVe m_nAttr = 0; } else if ("font" == sAttributeName) - m_sFont = oReader.GetText2(); + m_sFont = oReader.GetText(); } END_READ_ATTRIBUTES(oReader) - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE(oReader) { - if ("hp:script" != oReader.GetNameA()) - continue; - - m_sEqn = oReader.GetText2(); + if ("hp:script" == oReader.GetName()) + m_sEqn = oReader.GetText(); + else + CCtrlGeneralShape::ParseChildren(oReader, nVersion); } + END_WHILE m_bFullFilled = true; } diff --git a/HwpFile/HwpDoc/Paragraph/CtrlField.cpp b/HwpFile/HwpDoc/Paragraph/CtrlField.cpp index d1ab08e187..f3e757c003 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlField.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlField.cpp @@ -34,7 +34,7 @@ void CCtrlField::UpdateType(const HWP_STRING& sCtrlID) CCtrlField::CCtrlField(const HWP_STRING& sCtrlID, CXMLReader& oReader, int nVersion) : CCtrl(sCtrlID), m_eType(EFieldType::Unknown) { - const std::string sNodeName{oReader.GetNameA()}; + const std::string sNodeName{oReader.GetName()}; HWP_STRING wsName; if ("hp:fieldBegin" == sNodeName) @@ -43,7 +43,7 @@ CCtrlField::CCtrlField(const HWP_STRING& sCtrlID, CXMLReader& oReader, int nVers { if ("type" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("HYPERLINK" == sType) m_eType = EFieldType::Hyperlink; @@ -53,7 +53,7 @@ CCtrlField::CCtrlField(const HWP_STRING& sCtrlID, CXMLReader& oReader, int nVers else if ("fieldid" == sAttributeName) m_nInstanceID = oReader.GetInt(); else if ("name" == sAttributeName) - wsName = oReader.GetText2(); + wsName = oReader.GetText(); } END_READ_ATTRIBUTES(oReader) @@ -65,7 +65,7 @@ CCtrlField::CCtrlField(const HWP_STRING& sCtrlID, CXMLReader& oReader, int nVers WHILE_READ_NEXT_NODE_WITH_DEPTH_AND_NAME(oReader, Child) { if ("hp:stringParam" == sNodeChildName) - AddStringParam(oReader.GetAttribute("name"), oReader.GetText2()); + AddStringParam(oReader.GetAttribute("name"), oReader.GetText()); else if ("hp:integerParam" == sNodeChildName) AddIntegerParam(oReader.GetAttribute("name"), oReader.GetInt()); } diff --git a/HwpFile/HwpDoc/Paragraph/CtrlGeneralShape.cpp b/HwpFile/HwpDoc/Paragraph/CtrlGeneralShape.cpp index 214ea11929..d1b4a5a61e 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlGeneralShape.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlGeneralShape.cpp @@ -66,154 +66,6 @@ CCtrlGeneralShape::CCtrlGeneralShape(const HWP_STRING& sCtrlID, CXMLReader& oRea : CCtrlObjElement(sCtrlID, oReader, nVersion) { InitData(); - - std::string sNodeName; - - bool bHeadFill = false, bTailFill = false; - - WHILE_READ_NEXT_NODE(oReader) - { - sNodeName = oReader.GetNameA(); - - if ("hp:lineShape" == sNodeName) - { - std::string sHeadStyle, sTailStyle; - - START_READ_ATTRIBUTES(oReader) - { - if ("color" == sAttributeName) - m_nLineColor = oReader.GetInt(); - else if ("width" == sAttributeName) - m_nLineThick = oReader.GetInt(); - else if ("style" == sAttributeName) - m_eLineStyle = GetLineStyle2(oReader.GetText2()); - else if ("headStyle" == sAttributeName) - sHeadStyle = oReader.GetText2A(); - else if ("headfill" == sAttributeName) - bHeadFill = oReader.GetBool(); - else if ("headSz" == sAttributeName) - { - const std::string sHeadSz{oReader.GetText2A()}; - - if ("SMALL_SMALL" == sHeadSz) - m_eLineHeadSz = ELineArrowSize::SMALL_SMALL; - else if ("SMALL_MEDIUM" == sHeadSz) - m_eLineHeadSz = ELineArrowSize::SMALL_MEDIUM; - else if ("SMALL_LARGE" == sHeadSz) - m_eLineHeadSz = ELineArrowSize::SMALL_LARGE; - else if ("MEDIUM_SMALL" == sHeadSz) - m_eLineHeadSz = ELineArrowSize::MEDIUM_SMALL; - else if ("MEDIUM_MEDIUM" == sHeadSz) - m_eLineHeadSz = ELineArrowSize::MEDIUM_MEDIUM; - else if ("MEDIUM_LARGE" == sHeadSz) - m_eLineHeadSz = ELineArrowSize::MEDIUM_LARGE; - else if ("LARGE_SMALL" == sHeadSz) - m_eLineHeadSz = ELineArrowSize::LARGE_SMALL; - else if ("LARGE_MEDIUM" == sHeadSz) - m_eLineHeadSz = ELineArrowSize::LARGE_MEDIUM; - else if ("LARGE_LARGE" == sHeadSz) - m_eLineHeadSz = ELineArrowSize::LARGE_LARGE; - else - m_eLineHeadSz = ELineArrowSize::MEDIUM_MEDIUM; - } - else if ("tailStyle" == sAttributeName) - sTailStyle = oReader.GetText2A(); - else if ("tailfill" == sAttributeName) - bTailFill = oReader.GetBool(); - else if ("tailSz" == sAttributeName) - { - const std::string sType{oReader.GetText2A()}; - - if ("SMALL_SMALL" == sType) - m_eLineTailSz = ELineArrowSize::SMALL_SMALL; - else if ("SMALL_MEDIUM" == sType) - m_eLineTailSz = ELineArrowSize::SMALL_MEDIUM; - else if ("SMALL_LARGE" == sType) - m_eLineTailSz = ELineArrowSize::SMALL_LARGE; - else if ("MEDIUM_SMALL" == sType) - m_eLineTailSz = ELineArrowSize::MEDIUM_SMALL; - else if ("MEDIUM_MEDIUM" == sType) - m_eLineTailSz = ELineArrowSize::MEDIUM_MEDIUM; - else if ("MEDIUM_LARGE" == sType) - m_eLineTailSz = ELineArrowSize::MEDIUM_LARGE; - else if ("LARGE_SMALL" == sType) - m_eLineTailSz = ELineArrowSize::LARGE_SMALL; - else if ("LARGE_MEDIUM" == sType) - m_eLineTailSz = ELineArrowSize::LARGE_MEDIUM; - else if ("LARGE_LARGE" == sType) - m_eLineTailSz = ELineArrowSize::LARGE_LARGE; - else - m_eLineTailSz = ELineArrowSize::MEDIUM_MEDIUM; - } - } - END_READ_ATTRIBUTES(oReader) - - if (sHeadStyle.empty()) - m_eLineHead = ELineArrowStyle::NORMAL; - else if ("ARROW" == sHeadStyle) - m_eLineHead = ELineArrowStyle::ARROW; - else if ("SPEAR" == sHeadStyle) - m_eLineHead = ELineArrowStyle::SPEAR; - else if ("CONCAVE_ARROW" == sHeadStyle) - m_eLineHead = ELineArrowStyle::CONCAVE_ARROW; - else if ("EMPTY_DIAMOND" == sHeadStyle) - m_eLineHead = bHeadFill ? ELineArrowStyle::DIAMOND : ELineArrowStyle::EMPTY_DIAMOND; - else if ("EMPTY_CIRCLE" == sHeadStyle) - m_eLineHead = bHeadFill ? ELineArrowStyle::CIRCLE : ELineArrowStyle::EMPTY_CIRCLE; - else if ("EMPTY_BOX" == sHeadStyle) - m_eLineHead = bHeadFill ? ELineArrowStyle::BOX : ELineArrowStyle::EMPTY_BOX; - else - m_eLineHead = ELineArrowStyle::NORMAL; - - if (sTailStyle.empty()) - m_eLineTail = ELineArrowStyle::NORMAL; - else if ("ARROW" == sTailStyle) - m_eLineTail = ELineArrowStyle::ARROW; - else if ("SPEAR" == sTailStyle) - m_eLineTail = ELineArrowStyle::SPEAR; - else if ("CONCAVE_ARROW" == sTailStyle) - m_eLineTail = ELineArrowStyle::CONCAVE_ARROW; - else if ("EMPTY_DIAMOND" == sTailStyle) - m_eLineTail = bTailFill ? ELineArrowStyle::DIAMOND : ELineArrowStyle::EMPTY_DIAMOND; - else if ("EMPTY_CIRCLE" == sTailStyle) - m_eLineTail = bTailFill ? ELineArrowStyle::CIRCLE : ELineArrowStyle::EMPTY_CIRCLE; - else if ("EMPTY_BOX" == sTailStyle) - m_eLineTail = bTailFill ? ELineArrowStyle::BOX : ELineArrowStyle::EMPTY_BOX; - else - m_eLineTail = ELineArrowStyle::NORMAL; - } - else if ("hc:fillBrush" == sNodeName) - m_pFill = new CFill(oReader); - else if ("hp:drawText" == sNodeName) - { - m_nMaxTxtWidth = oReader.GetAttributeInt("lastWidth"); - - const int nChildDepth = oReader.GetDepth(); - std::string sChildNodeName; - while (oReader.ReadNextSiblingNode2(nChildDepth)) - { - sChildNodeName = oReader.GetNameA(); - - if ("hp:textMargin" == sChildNodeName) - { - START_READ_ATTRIBUTES(oReader) - { - if ("left" == sAttributeName) - m_shLeftSpace = oReader.GetInt(); - else if ("right" == sAttributeName) - m_shRightSpace = oReader.GetInt(); - else if ("top" == sAttributeName) - m_shTopSpace = oReader.GetInt(); - else if ("bottom" == sAttributeName) - m_shBottomSpace = oReader.GetInt(); - } - END_READ_ATTRIBUTES(oReader) - } - else if ("hp:subList" == sChildNodeName) - ReadSubList(oReader, nVersion); - } - } - } } CCtrlGeneralShape::~CCtrlGeneralShape() @@ -232,6 +84,151 @@ EShapeType CCtrlGeneralShape::GetShapeType() const return EShapeType::GeneralShape; } +void CCtrlGeneralShape::ParseChildren(CXMLReader& oReader, int nVersion) +{ + bool bHeadFill = false, bTailFill = false; + + const std::string sNodeName{oReader.GetName()}; + + if ("hp:lineShape" == sNodeName) + { + std::string sHeadStyle, sTailStyle; + + START_READ_ATTRIBUTES(oReader) + { + if ("color" == sAttributeName) + m_nLineColor = oReader.GetInt(); + else if ("width" == sAttributeName) + m_nLineThick = oReader.GetInt(); + else if ("style" == sAttributeName) + m_eLineStyle = GetLineStyle2(oReader.GetText()); + else if ("headStyle" == sAttributeName) + sHeadStyle = oReader.GetTextA(); + else if ("headfill" == sAttributeName) + bHeadFill = oReader.GetBool(); + else if ("headSz" == sAttributeName) + { + const std::string sHeadSz{oReader.GetTextA()}; + + if ("SMALL_SMALL" == sHeadSz) + m_eLineHeadSz = ELineArrowSize::SMALL_SMALL; + else if ("SMALL_MEDIUM" == sHeadSz) + m_eLineHeadSz = ELineArrowSize::SMALL_MEDIUM; + else if ("SMALL_LARGE" == sHeadSz) + m_eLineHeadSz = ELineArrowSize::SMALL_LARGE; + else if ("MEDIUM_SMALL" == sHeadSz) + m_eLineHeadSz = ELineArrowSize::MEDIUM_SMALL; + else if ("MEDIUM_MEDIUM" == sHeadSz) + m_eLineHeadSz = ELineArrowSize::MEDIUM_MEDIUM; + else if ("MEDIUM_LARGE" == sHeadSz) + m_eLineHeadSz = ELineArrowSize::MEDIUM_LARGE; + else if ("LARGE_SMALL" == sHeadSz) + m_eLineHeadSz = ELineArrowSize::LARGE_SMALL; + else if ("LARGE_MEDIUM" == sHeadSz) + m_eLineHeadSz = ELineArrowSize::LARGE_MEDIUM; + else if ("LARGE_LARGE" == sHeadSz) + m_eLineHeadSz = ELineArrowSize::LARGE_LARGE; + else + m_eLineHeadSz = ELineArrowSize::MEDIUM_MEDIUM; + } + else if ("tailStyle" == sAttributeName) + sTailStyle = oReader.GetTextA(); + else if ("tailfill" == sAttributeName) + bTailFill = oReader.GetBool(); + else if ("tailSz" == sAttributeName) + { + const std::string sType{oReader.GetTextA()}; + + if ("SMALL_SMALL" == sType) + m_eLineTailSz = ELineArrowSize::SMALL_SMALL; + else if ("SMALL_MEDIUM" == sType) + m_eLineTailSz = ELineArrowSize::SMALL_MEDIUM; + else if ("SMALL_LARGE" == sType) + m_eLineTailSz = ELineArrowSize::SMALL_LARGE; + else if ("MEDIUM_SMALL" == sType) + m_eLineTailSz = ELineArrowSize::MEDIUM_SMALL; + else if ("MEDIUM_MEDIUM" == sType) + m_eLineTailSz = ELineArrowSize::MEDIUM_MEDIUM; + else if ("MEDIUM_LARGE" == sType) + m_eLineTailSz = ELineArrowSize::MEDIUM_LARGE; + else if ("LARGE_SMALL" == sType) + m_eLineTailSz = ELineArrowSize::LARGE_SMALL; + else if ("LARGE_MEDIUM" == sType) + m_eLineTailSz = ELineArrowSize::LARGE_MEDIUM; + else if ("LARGE_LARGE" == sType) + m_eLineTailSz = ELineArrowSize::LARGE_LARGE; + else + m_eLineTailSz = ELineArrowSize::MEDIUM_MEDIUM; + } + } + END_READ_ATTRIBUTES(oReader) + + if (sHeadStyle.empty()) + m_eLineHead = ELineArrowStyle::NORMAL; + else if ("ARROW" == sHeadStyle) + m_eLineHead = ELineArrowStyle::ARROW; + else if ("SPEAR" == sHeadStyle) + m_eLineHead = ELineArrowStyle::SPEAR; + else if ("CONCAVE_ARROW" == sHeadStyle) + m_eLineHead = ELineArrowStyle::CONCAVE_ARROW; + else if ("EMPTY_DIAMOND" == sHeadStyle) + m_eLineHead = bHeadFill ? ELineArrowStyle::DIAMOND : ELineArrowStyle::EMPTY_DIAMOND; + else if ("EMPTY_CIRCLE" == sHeadStyle) + m_eLineHead = bHeadFill ? ELineArrowStyle::CIRCLE : ELineArrowStyle::EMPTY_CIRCLE; + else if ("EMPTY_BOX" == sHeadStyle) + m_eLineHead = bHeadFill ? ELineArrowStyle::BOX : ELineArrowStyle::EMPTY_BOX; + else + m_eLineHead = ELineArrowStyle::NORMAL; + + if (sTailStyle.empty()) + m_eLineTail = ELineArrowStyle::NORMAL; + else if ("ARROW" == sTailStyle) + m_eLineTail = ELineArrowStyle::ARROW; + else if ("SPEAR" == sTailStyle) + m_eLineTail = ELineArrowStyle::SPEAR; + else if ("CONCAVE_ARROW" == sTailStyle) + m_eLineTail = ELineArrowStyle::CONCAVE_ARROW; + else if ("EMPTY_DIAMOND" == sTailStyle) + m_eLineTail = bTailFill ? ELineArrowStyle::DIAMOND : ELineArrowStyle::EMPTY_DIAMOND; + else if ("EMPTY_CIRCLE" == sTailStyle) + m_eLineTail = bTailFill ? ELineArrowStyle::CIRCLE : ELineArrowStyle::EMPTY_CIRCLE; + else if ("EMPTY_BOX" == sTailStyle) + m_eLineTail = bTailFill ? ELineArrowStyle::BOX : ELineArrowStyle::EMPTY_BOX; + else + m_eLineTail = ELineArrowStyle::NORMAL; + } + else if ("hc:fillBrush" == sNodeName) + m_pFill = new CFill(oReader); + else if ("hp:drawText" == sNodeName) + { + m_nMaxTxtWidth = oReader.GetAttributeInt("lastWidth"); + + WHILE_READ_NEXT_NODE_WITH_DEPTH_AND_NAME(oReader, Child) + { + if ("hp:textMargin" == sNodeChildName) + { + START_READ_ATTRIBUTES(oReader) + { + if ("left" == sAttributeName) + m_shLeftSpace = oReader.GetInt(); + else if ("right" == sAttributeName) + m_shRightSpace = oReader.GetInt(); + else if ("top" == sAttributeName) + m_shTopSpace = oReader.GetInt(); + else if ("bottom" == sAttributeName) + m_shBottomSpace = oReader.GetInt(); + } + END_READ_ATTRIBUTES(oReader) + } + else if ("hp:subList" == sNodeChildName) + ReadSubList(oReader, nVersion); + } + END_WHILE + } + else + CCtrlObjElement::ParseChildren(oReader, nVersion); +} + void CCtrlGeneralShape::InitData() { m_eLineStyle = ELineStyle2::NONE; @@ -244,11 +241,8 @@ void CCtrlGeneralShape::ReadSubList(CXMLReader& oReader, int nVersion) // CHWPPargraph* pLatestParagraph = nullptr; - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, "hp:p") { - if ("hp:p" != oReader.GetNameA()) - continue; - CHWPPargraph* pParagraph = new CHWPPargraph(oReader, nVersion); if (nullptr == pParagraph) @@ -260,6 +254,7 @@ void CCtrlGeneralShape::ReadSubList(CXMLReader& oReader, int nVersion) // if (nullptr != pLatestParagraph && 0 != pLatestParagraph->GetCountCtrls() && ECtrlObjectType::ParaText == pLatestParagraph->GetCtrls().back()->GetCtrlType()) // pLatestParagraph->AddCtrl(new CCtrlCharacter(L" _", ECtrlCharType::PARAGRAPH_BREAK)); } + END_WHILE } void CCtrlGeneralShape::SetParent(CHWPPargraph* pParent) diff --git a/HwpFile/HwpDoc/Paragraph/CtrlGeneralShape.h b/HwpFile/HwpDoc/Paragraph/CtrlGeneralShape.h index 1693861d36..fce2957c88 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlGeneralShape.h +++ b/HwpFile/HwpDoc/Paragraph/CtrlGeneralShape.h @@ -65,6 +65,8 @@ public: ECtrlObjectType GetCtrlType() const override; virtual EShapeType GetShapeType() const; + void ParseChildren(CXMLReader& oReader, int nVersion); + void SetParent(CHWPPargraph* pParent); CHWPPargraph* GetParent(); diff --git a/HwpFile/HwpDoc/Paragraph/CtrlNewNumber.cpp b/HwpFile/HwpDoc/Paragraph/CtrlNewNumber.cpp index b9e5cf34bf..cc578321d9 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlNewNumber.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlNewNumber.cpp @@ -28,7 +28,7 @@ CCtrlNewNumber::CCtrlNewNumber(const HWP_STRING& sCtrlID, CXMLReader& oReader, i if ("num" == sAttributeName) m_shNum = oReader.GetInt(); else if ("numType" == sAttributeName) - m_eNumType = ::HWP::GetNumType(oReader.GetText2()); + m_eNumType = ::HWP::GetNumType(oReader.GetText()); //TODO:: проверить данный момент else if ("autoNumFormat" == sAttributeName) m_eNumShape = GetNumberShape2(oReader.GetInt()); diff --git a/HwpFile/HwpDoc/Paragraph/CtrlObjElement.cpp b/HwpFile/HwpDoc/Paragraph/CtrlObjElement.cpp index 55731e8222..81f8df6b23 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlObjElement.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlObjElement.cpp @@ -75,87 +75,87 @@ CCtrlObjElement::CCtrlObjElement(const HWP_STRING& sCtrlID, CXMLReader& oReader, : CCtrlCommon(sCtrlID, oReader, nVersion) { m_shNGrp = oReader.GetAttributeInt("groupLevel"); +} - std::string sNodeName; +void CCtrlObjElement::ParseChildren(CXMLReader& oReader, int nVersion) +{ + const std::string sNodeName{oReader.GetName()}; - WHILE_READ_NEXT_NODE(oReader) + if ("hp:offset" == sNodeName) { - sNodeName = oReader.GetNameA(); - - if ("hp:offset" == sNodeName) + START_READ_ATTRIBUTES(oReader) { - START_READ_ATTRIBUTES(oReader) - { - if ("x" == sAttributeName) - m_nXGrpOffset = oReader.GetInt(); - else if ("y" == sAttributeName) - m_nYGrpOffset = oReader.GetInt(); - } - END_READ_ATTRIBUTES(oReader) - } - - else if ("hp:orgSz" == sNodeName) - { - START_READ_ATTRIBUTES(oReader) - { - if ("width" == sAttributeName) - m_nOrgWidth = oReader.GetInt(); - else if ("height" == sAttributeName) - m_nOrgHeight = oReader.GetInt(); - } - END_READ_ATTRIBUTES(oReader) - } - else if ("hp:curSz" == sNodeName) - { - START_READ_ATTRIBUTES(oReader) - { - if ("width" == sAttributeName) - m_nCurWidth = oReader.GetInt(); - else if ("height" == sAttributeName) - m_nCurHeight = oReader.GetInt(); - } - END_READ_ATTRIBUTES(oReader) - } - else if ("hp:flip" == sNodeName) - { - START_READ_ATTRIBUTES(oReader) - { - if ("horizontal" == sAttributeName) - m_bHorzFlip = oReader.GetBool(); - else if ("vertical" == sAttributeName) - m_bVerFlip = oReader.GetBool(); - } - END_READ_ATTRIBUTES(oReader) - } - else if ("hp:rotationInfo" == sNodeName) - { - START_READ_ATTRIBUTES(oReader) - { - if ("angle" == sAttributeName) - m_shRotat = oReader.GetInt(); - else if ("centerX" == sAttributeName) - m_nXCenter = oReader.GetInt(); - else if ("centerY" == sAttributeName) - m_nYCenter = oReader.GetInt(); - } - END_READ_ATTRIBUTES(oReader) - } - else if ("hp:renderingInfo" == sNodeName) - { - WHILE_READ_NEXT_NODE_WITH_DEPTH_AND_NAME(oReader, Child) - { - // Сначала идёт 1 hc:transMatrix, а после попарно идут hc:scaMatrix с hc:rotMatrix - - if ("hc:transMatrix" != sNodeChildName && - "hc:scaMatrix" != sNodeChildName && - "hc:rotMatrix" != sNodeChildName) - continue; - - m_arMatrixs.push_back(ReadMatrix(oReader)); - } - END_WHILE + if ("x" == sAttributeName) + m_nXGrpOffset = oReader.GetInt(); + else if ("y" == sAttributeName) + m_nYGrpOffset = oReader.GetInt(); } + END_READ_ATTRIBUTES(oReader) } + + else if ("hp:orgSz" == sNodeName) + { + START_READ_ATTRIBUTES(oReader) + { + if ("width" == sAttributeName) + m_nOrgWidth = oReader.GetInt(); + else if ("height" == sAttributeName) + m_nOrgHeight = oReader.GetInt(); + } + END_READ_ATTRIBUTES(oReader) + } + else if ("hp:curSz" == sNodeName) + { + START_READ_ATTRIBUTES(oReader) + { + if ("width" == sAttributeName) + m_nCurWidth = oReader.GetInt(); + else if ("height" == sAttributeName) + m_nCurHeight = oReader.GetInt(); + } + END_READ_ATTRIBUTES(oReader) + } + else if ("hp:flip" == sNodeName) + { + START_READ_ATTRIBUTES(oReader) + { + if ("horizontal" == sAttributeName) + m_bHorzFlip = oReader.GetBool(); + else if ("vertical" == sAttributeName) + m_bVerFlip = oReader.GetBool(); + } + END_READ_ATTRIBUTES(oReader) + } + else if ("hp:rotationInfo" == sNodeName) + { + START_READ_ATTRIBUTES(oReader) + { + if ("angle" == sAttributeName) + m_shRotat = oReader.GetInt(); + else if ("centerX" == sAttributeName) + m_nXCenter = oReader.GetInt(); + else if ("centerY" == sAttributeName) + m_nYCenter = oReader.GetInt(); + } + END_READ_ATTRIBUTES(oReader) + } + else if ("hp:renderingInfo" == sNodeName) + { + WHILE_READ_NEXT_NODE_WITH_DEPTH_AND_NAME(oReader, Child) + { + // Сначала идёт 1 hc:transMatrix, а после попарно идут hc:scaMatrix с hc:rotMatrix + + if ("hc:transMatrix" != sNodeChildName && + "hc:scaMatrix" != sNodeChildName && + "hc:rotMatrix" != sNodeChildName) + continue; + + m_arMatrixs.push_back(ReadMatrix(oReader)); + } + END_WHILE + } + else + CCtrlCommon::ParseChildren(oReader, nVersion); } int CCtrlObjElement::GetCurWidth() const diff --git a/HwpFile/HwpDoc/Paragraph/CtrlObjElement.h b/HwpFile/HwpDoc/Paragraph/CtrlObjElement.h index 4aa9e3f11d..2045c3acab 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlObjElement.h +++ b/HwpFile/HwpDoc/Paragraph/CtrlObjElement.h @@ -46,6 +46,8 @@ public: CCtrlObjElement(const HWP_STRING& sCtrlID, int nSize, CHWPStream& oBuffer, int nOff, int nVersion); CCtrlObjElement(const HWP_STRING& sCtrlID, CXMLReader& oReader, int nVersion); + void ParseChildren(CXMLReader& oReader, int nVersion); + int GetCurWidth() const; int GetCurHeight() const; diff --git a/HwpFile/HwpDoc/Paragraph/CtrlPageNumPos.cpp b/HwpFile/HwpDoc/Paragraph/CtrlPageNumPos.cpp index 0d131e7967..3b077236d1 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlPageNumPos.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlPageNumPos.cpp @@ -60,11 +60,11 @@ CCtrlPageNumPos::CCtrlPageNumPos(const HWP_STRING& sCtrlID, CXMLReader& oReader, START_READ_ATTRIBUTES(oReader) { if ("pos" == sAttributeName) - m_ePos = GetNumPos(oReader.GetText2()); + m_ePos = GetNumPos(oReader.GetText()); else if ("formatType" == sAttributeName) m_eNumShape = GetNumberShape2(oReader.GetInt()); else if ("sideChar" == sAttributeName) - m_sPostfix = oReader.GetText2(); + m_sPostfix = oReader.GetText(); } END_READ_ATTRIBUTES(oReader) diff --git a/HwpFile/HwpDoc/Paragraph/CtrlSectionDef.cpp b/HwpFile/HwpDoc/Paragraph/CtrlSectionDef.cpp index f4f42918d7..7bce2c250a 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlSectionDef.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlSectionDef.cpp @@ -45,53 +45,35 @@ CCtrlSectionDef::CCtrlSectionDef(const HWP_STRING& sCtrlID, CXMLReader& oReader, { std::string sType; - if (oReader.MoveToFirstAttribute()) + START_READ_ATTRIBUTES(oReader) { - std::string sAttributeName; - do + if ("textDirection" == sAttributeName) { - sAttributeName = oReader.GetNameA(); + sType = oReader.GetTextA(); - if ("textDirection" == sAttributeName) - { - sType = oReader.GetText2A(); - - if ("HORIZONTAL" == sType) - m_chTextDirection = 0; - else if ("VERTICAL" == sType) - m_chTextDirection = 1; - } - else if ("spaceColumns" == sAttributeName) - m_shSpaceColumns = oReader.GetInt(); - else if ("tabStop" == sAttributeName) - m_nTabStop = oReader.GetInt(); - else if ("outlineShapeIDRef" == sAttributeName) - m_nOutlineNumberingID = oReader.GetInt(); - }while(oReader.MoveToNextAttribute()); - - oReader.MoveToElement(); + if ("HORIZONTAL" == sType) + m_chTextDirection = 0; + else if ("VERTICAL" == sType) + m_chTextDirection = 1; + } + else if ("spaceColumns" == sAttributeName) + m_shSpaceColumns = oReader.GetInt(); + else if ("tabStop" == sAttributeName) + m_nTabStop = oReader.GetInt(); + else if ("outlineShapeIDRef" == sAttributeName) + m_nOutlineNumberingID = oReader.GetInt(); } + END_READ_ATTRIBUTES(oReader) - std::string sNodeName; - - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_NAME(oReader) { - sNodeName = oReader.GetNameA(); - if ("hp:startNum" == sNodeName) { - if (!oReader.MoveToFirstAttribute()) - continue; - - std::string sAttributeName; - - do + START_READ_ATTRIBUTES(oReader) { - sAttributeName = oReader.GetNameA(); - if ("pageStartsOn" == sAttributeName) { - sType = oReader.GetText2A(); + sType = oReader.GetTextA(); if ("BOTH" == sType) m_chPageStartOn = 0; @@ -108,40 +90,24 @@ CCtrlSectionDef::CCtrlSectionDef(const HWP_STRING& sCtrlID, CXMLReader& oReader, m_shTable = oReader.GetInt(); else if ("equation" == sAttributeName) m_shEquation = oReader.GetInt(); - }while(oReader.MoveToNextAttribute()); - - oReader.MoveToElement(); + } + END_READ_ATTRIBUTES(oReader) } else if ("hp:grid" == sNodeName) { - if (!oReader.MoveToFirstAttribute()) - continue; - - std::string sAttributeName; - - do + START_READ_ATTRIBUTES(oReader) { - sAttributeName = oReader.GetNameA(); - if ("lineGrid" == sAttributeName) m_shLineGrid = oReader.GetInt(); else if ("charGrid" == sAttributeName) m_shCharGrid = oReader.GetInt(); - }while(oReader.MoveToNextAttribute()); - - oReader.MoveToElement(); + } + END_READ_ATTRIBUTES(oReader) } else if ("hp:visibility" == sNodeName) { - if (!oReader.MoveToFirstAttribute()) - continue; - - std::string sAttributeName; - - do + START_READ_ATTRIBUTES(oReader) { - sAttributeName = oReader.GetNameA(); - if ("hideFirstHeader" == sAttributeName) m_bHideHeader = oReader.GetBool(); else if ("hideFirstFooter" == sAttributeName) @@ -150,7 +116,7 @@ CCtrlSectionDef::CCtrlSectionDef(const HWP_STRING& sCtrlID, CXMLReader& oReader, m_bHideMasterPage = oReader.GetBool(); else if ("border" == sAttributeName) { - sType = oReader.GetText2A(); + sType = oReader.GetTextA(); if ("HIDE_FIRST" == sType) { @@ -170,7 +136,7 @@ CCtrlSectionDef::CCtrlSectionDef(const HWP_STRING& sCtrlID, CXMLReader& oReader, } else if ("fill" == sAttributeName) { - sType = oReader.GetText2A(); + sType = oReader.GetTextA(); if ("HIDE_FIRST" == sType) { @@ -192,9 +158,8 @@ CCtrlSectionDef::CCtrlSectionDef(const HWP_STRING& sCtrlID, CXMLReader& oReader, m_bHidePageNumPos = oReader.GetBool(); else if ("hideFirstEmptyLine" == sAttributeName) m_bHideEmptyLine = oReader.GetBool(); - }while(oReader.MoveToNextAttribute()); - - oReader.MoveToElement(); + } + END_READ_ATTRIBUTES(oReader) } else if ("hp:pagePr" == sNodeName) m_pPage = new CPage(oReader); @@ -208,6 +173,7 @@ CCtrlSectionDef::CCtrlSectionDef(const HWP_STRING& sCtrlID, CXMLReader& oReader, //TODO:: добавить реализацию } } + END_WHILE m_bFullFilled = true; } diff --git a/HwpFile/HwpDoc/Paragraph/CtrlShapeArc.cpp b/HwpFile/HwpDoc/Paragraph/CtrlShapeArc.cpp index 01e655a367..9d4d3f7a00 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlShapeArc.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlShapeArc.cpp @@ -22,12 +22,8 @@ CCtrlShapeArc::CCtrlShapeArc(const HWP_STRING& sCtrlID, CXMLReader& oReader, int { m_eType = GetArcType(oReader.GetAttributeInt("type")); - std::string sNodeName; - - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_NAME(oReader) { - sNodeName = oReader.GetNameA(); - if ("hp:center" == sNodeName) { START_READ_ATTRIBUTES(oReader) @@ -61,7 +57,10 @@ CCtrlShapeArc::CCtrlShapeArc(const HWP_STRING& sCtrlID, CXMLReader& oReader, int } END_READ_ATTRIBUTES(oReader) } + else + CCtrlGeneralShape::ParseChildren(oReader, nVersion); } + END_WHILE } EShapeType CCtrlShapeArc::GetShapeType() const diff --git a/HwpFile/HwpDoc/Paragraph/CtrlShapeConnectLine.cpp b/HwpFile/HwpDoc/Paragraph/CtrlShapeConnectLine.cpp index 7e18d57c4b..31745f6fab 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlShapeConnectLine.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlShapeConnectLine.cpp @@ -62,6 +62,8 @@ CCtrlShapeConnectLine::CCtrlShapeConnectLine(const HWP_STRING& sCtrlID, CXMLRead } END_READ_ATTRIBUTES(oReader) } + else + CCtrlGeneralShape::ParseChildren(oReader, nVersion); } END_WHILE } diff --git a/HwpFile/HwpDoc/Paragraph/CtrlShapeCurve.cpp b/HwpFile/HwpDoc/Paragraph/CtrlShapeCurve.cpp index 39d34fd6e2..1c16541c6e 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlShapeCurve.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlShapeCurve.cpp @@ -24,36 +24,41 @@ CCtrlShapeCurve::CCtrlShapeCurve(const HWP_STRING& sCtrlID, CXMLReader& oReader, TPoint oPoint1{0, 0}, oPoint2{0, 0}; HWP_BYTE chSegmentType = 0; - WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, "hp:seg") + WHILE_READ_NEXT_NODE(oReader) { - chSegmentType = 0; - oPoint1 = {0, 0}; - oPoint2 = {0, 0}; - - START_READ_ATTRIBUTES(oReader) + if ("hp:seg" == oReader.GetName()) { - if ("type" == sAttributeName) + chSegmentType = 0; + oPoint1 = {0, 0}; + oPoint2 = {0, 0}; + + START_READ_ATTRIBUTES(oReader) { - const std::string sType{oReader.GetText2A()}; + if ("type" == sAttributeName) + { + const std::string sType{oReader.GetTextA()}; - if ("CURVE" == sType) - chSegmentType = 1; - else if ("LINE" == sType) - chSegmentType = 0; + if ("CURVE" == sType) + chSegmentType = 1; + else if ("LINE" == sType) + chSegmentType = 0; + } + else if ("x1" == sAttributeName) + oPoint1.m_nX = oReader.GetInt(); + else if ("y1" == sAttributeName) + oPoint1.m_nY = oReader.GetInt(); + else if ("x2" == sAttributeName) + oPoint2.m_nX = oReader.GetInt(); + else if ("y2" == sAttributeName) + oPoint2.m_nY = oReader.GetInt(); } - else if ("x1" == sAttributeName) - oPoint1.m_nX = oReader.GetInt(); - else if ("y1" == sAttributeName) - oPoint1.m_nY = oReader.GetInt(); - else if ("x2" == sAttributeName) - oPoint2.m_nX = oReader.GetInt(); - else if ("y2" == sAttributeName) - oPoint2.m_nY = oReader.GetInt(); - } - END_READ_ATTRIBUTES(oReader) + END_READ_ATTRIBUTES(oReader) - m_arSegmentType.push_back(chSegmentType); - m_arPoints.push_back(oPoint1); + m_arSegmentType.push_back(chSegmentType); + m_arPoints.push_back(oPoint1); + } + else + CCtrlGeneralShape::ParseChildren(oReader, nVersion); } END_WHILE diff --git a/HwpFile/HwpDoc/Paragraph/CtrlShapeEllipse.cpp b/HwpFile/HwpDoc/Paragraph/CtrlShapeEllipse.cpp index 3a26304d08..de8abcdb8c 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlShapeEllipse.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlShapeEllipse.cpp @@ -44,7 +44,7 @@ CCtrlShapeEllipse::CCtrlShapeEllipse(const HWP_STRING& sCtrlID, CXMLReader& oRea else if ("hasArcPr" == sAttributeName) m_bHasArcProperty = oReader.GetBool(); else if ("arcType" == sAttributeName) - m_eArcType = GetArcType(oReader.GetText2()); + m_eArcType = GetArcType(oReader.GetText()); } END_READ_ATTRIBUTES(oReader) @@ -127,6 +127,8 @@ CCtrlShapeEllipse::CCtrlShapeEllipse(const HWP_STRING& sCtrlID, CXMLReader& oRea } END_READ_ATTRIBUTES(oReader) } + else + CCtrlGeneralShape::ParseChildren(oReader, nVersion); } END_WHILE } diff --git a/HwpFile/HwpDoc/Paragraph/CtrlShapeLine.cpp b/HwpFile/HwpDoc/Paragraph/CtrlShapeLine.cpp index e92597eab1..a832005dd3 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlShapeLine.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlShapeLine.cpp @@ -46,6 +46,8 @@ CCtrlShapeLine::CCtrlShapeLine(const HWP_STRING& sCtrlID, CXMLReader& oReader, i } END_READ_ATTRIBUTES(oReader) } + else + CCtrlGeneralShape::ParseChildren(oReader, nVersion); } END_WHILE } diff --git a/HwpFile/HwpDoc/Paragraph/CtrlShapeOle.cpp b/HwpFile/HwpDoc/Paragraph/CtrlShapeOle.cpp index 0968510de6..8152281646 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlShapeOle.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlShapeOle.cpp @@ -22,16 +22,21 @@ CCtrlShapeOle::CCtrlShapeOle(const HWP_STRING& sCtrlID, CXMLReader& oReader, int { m_sBinDataID = oReader.GetAttribute("binaryItemIDRef"); - WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, "hc:extent") + WHILE_READ_NEXT_NODE(oReader) { - START_READ_ATTRIBUTES(oReader) + if ("hc:extent" == oReader.GetName()) { - if ("x" == sAttributeName) - m_nExtentX = oReader.GetInt(); - else if ("y" == sAttributeName) - m_nExtentY = oReader.GetInt(); + START_READ_ATTRIBUTES(oReader) + { + if ("x" == sAttributeName) + m_nExtentX = oReader.GetInt(); + else if ("y" == sAttributeName) + m_nExtentY = oReader.GetInt(); + } + END_READ_ATTRIBUTES(oReader) } - END_READ_ATTRIBUTES(oReader) + else + CCtrlGeneralShape::ParseChildren(oReader, nVersion); } END_WHILE } diff --git a/HwpFile/HwpDoc/Paragraph/CtrlShapePic.cpp b/HwpFile/HwpDoc/Paragraph/CtrlShapePic.cpp index 2fc3af9b34..31b218106e 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlShapePic.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlShapePic.cpp @@ -256,7 +256,7 @@ CCtrlShapePic::CCtrlShapePic(const HWP_STRING& sCtrlID, int nSize, CHWPStream& o : CCtrlGeneralShape(sCtrlID, nSize, oBuffer, nOff, nVersion) {} -CCtrlShapePic::CCtrlShapePic(const HWP_STRING& sCtrlID, HWP::CXMLReader& oReader, int nVersion) +CCtrlShapePic::CCtrlShapePic(const HWP_STRING& sCtrlID, CXMLReader& oReader, int nVersion) : CCtrlGeneralShape(sCtrlID, oReader, nVersion) { WHILE_READ_NEXT_NODE_WITH_NAME(oReader) @@ -305,6 +305,9 @@ CCtrlShapePic::CCtrlShapePic(const HWP_STRING& sCtrlID, HWP::CXMLReader& oReader } else if ("hp:effects" == sNodeName) { + if (oReader.GetReader()->IsEmptyNode()) + continue; + WHILE_READ_NEXT_NODE_WITH_DEPTH_AND_NAME(oReader, Child) { if ("hp:shadow" == sNodeChildName) @@ -328,7 +331,7 @@ CCtrlShapePic::CCtrlShapePic(const HWP_STRING& sCtrlID, HWP::CXMLReader& oReader m_chContrast = (HWP_BYTE)oReader.GetInt(); else if ("effect" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("REAL_PIC" == sType) m_chEffect = 0; @@ -338,7 +341,7 @@ CCtrlShapePic::CCtrlShapePic(const HWP_STRING& sCtrlID, HWP::CXMLReader& oReader m_chEffect = 2; } else if ("binaryItemIDRef" == sAttributeName) - m_sBinDataID = oReader.GetText2(); + m_sBinDataID = oReader.GetText(); } END_READ_ATTRIBUTES(oReader) } @@ -353,6 +356,8 @@ CCtrlShapePic::CCtrlShapePic(const HWP_STRING& sCtrlID, HWP::CXMLReader& oReader } END_READ_ATTRIBUTES(oReader) } + else + CCtrlGeneralShape::ParseChildren(oReader, nVersion); } END_WHILE } diff --git a/HwpFile/HwpDoc/Paragraph/CtrlShapePolygon.cpp b/HwpFile/HwpDoc/Paragraph/CtrlShapePolygon.cpp index 8de49245b7..a2c71aaa2c 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlShapePolygon.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlShapePolygon.cpp @@ -22,20 +22,25 @@ CCtrlShapePolygon::CCtrlShapePolygon(const HWP_STRING& sCtrlID, CXMLReader& oRea { TPoint oPoint{0, 0}; - WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, "hc:pt") + WHILE_READ_NEXT_NODE(oReader) { - START_READ_ATTRIBUTES(oReader) + if ("hc:pt" == oReader.GetName()) { - if ("x" == sAttributeName) - oPoint.m_nX = oReader.GetInt(); - else if ("y" == sAttributeName) - oPoint.m_nY = oReader.GetInt(); + START_READ_ATTRIBUTES(oReader) + { + if ("x" == sAttributeName) + oPoint.m_nX = oReader.GetInt(); + else if ("y" == sAttributeName) + oPoint.m_nY = oReader.GetInt(); + } + END_READ_ATTRIBUTES(oReader) + + m_arPoints.push_back(oPoint); + + oPoint = {0, 0}; } - END_READ_ATTRIBUTES(oReader) - - m_arPoints.push_back(oPoint); - - oPoint = {0, 0}; + else + CCtrlGeneralShape::ParseChildren(oReader, nVersion); } END_WHILE diff --git a/HwpFile/HwpDoc/Paragraph/CtrlShapeRect.cpp b/HwpFile/HwpDoc/Paragraph/CtrlShapeRect.cpp index 54ef77b4f4..4ee90cd900 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlShapeRect.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlShapeRect.cpp @@ -44,6 +44,8 @@ CCtrlShapeRect::CCtrlShapeRect(const HWP_STRING& sCtrlID, CXMLReader& oReader, i READ_POINT(2) else if ("hc:pt3" == sNodeName) READ_POINT(3) + else + CCtrlGeneralShape::ParseChildren(oReader, nVersion); } END_WHILE } diff --git a/HwpFile/HwpDoc/Paragraph/CtrlShapeTextArt.cpp b/HwpFile/HwpDoc/Paragraph/CtrlShapeTextArt.cpp index 7d3a211d9a..796b0e6886 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlShapeTextArt.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlShapeTextArt.cpp @@ -49,15 +49,15 @@ CCtrlShapeTextArt::CCtrlShapeTextArt(const HWP_STRING& sCtrlID, CXMLReader& oRea START_READ_ATTRIBUTES(oReader) { if ("fontName" == sAttributeName) - m_sFontName = oReader.GetText2(); + m_sFontName = oReader.GetText(); else if ("fontStyle" == sAttributeName) - m_sFontStyle = oReader.GetText2(); + m_sFontStyle = oReader.GetText(); else if ("fontType" == sAttributeName) - m_sFontType = oReader.GetText2(); + m_sFontType = oReader.GetText(); else if ("textShape" == sAttributeName) - m_sTextShape = oReader.GetText2(); + m_sTextShape = oReader.GetText(); else if ("align" == sAttributeName) - m_sAlign = oReader.GetText2(); + m_sAlign = oReader.GetText(); else if ("lineSpacing" == sAttributeName) m_shLineSpacing = oReader.GetInt(); else if ("spacing" == sAttributeName) @@ -88,6 +88,8 @@ CCtrlShapeTextArt::CCtrlShapeTextArt(const HWP_STRING& sCtrlID, CXMLReader& oRea } END_WHILE } + else + CCtrlGeneralShape::ParseChildren(oReader, nVersion); } END_WHILE } diff --git a/HwpFile/HwpDoc/Paragraph/CtrlShapeVideo.cpp b/HwpFile/HwpDoc/Paragraph/CtrlShapeVideo.cpp index 6e9e816aa6..98c499bfa0 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlShapeVideo.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlShapeVideo.cpp @@ -21,7 +21,7 @@ CCtrlShapeVideo::CCtrlShapeVideo(const HWP_STRING& sCtrlID, CXMLReader& oReader, { if ("type" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("Local" == sType) m_nVideoType = 0; @@ -33,9 +33,13 @@ CCtrlShapeVideo::CCtrlShapeVideo(const HWP_STRING& sCtrlID, CXMLReader& oReader, else if ("imageIDRef" == sAttributeName) m_sThumnailBinID = oReader.GetInt(); else if ("tag" == sAttributeName) - m_sWebURL = oReader.GetText2(); + m_sWebURL = oReader.GetText(); } END_READ_ATTRIBUTES(oReader) + + WHILE_READ_NEXT_NODE(oReader) + CCtrlGeneralShape::ParseChildren(oReader, nVersion); + END_WHILE } EShapeType CCtrlShapeVideo::GetShapeType() const diff --git a/HwpFile/HwpDoc/Paragraph/CtrlTable.cpp b/HwpFile/HwpDoc/Paragraph/CtrlTable.cpp index 1be8bd1735..5ef4f2e5c9 100644 --- a/HwpFile/HwpDoc/Paragraph/CtrlTable.cpp +++ b/HwpFile/HwpDoc/Paragraph/CtrlTable.cpp @@ -74,6 +74,8 @@ CCtrlTable::CCtrlTable(const HWP_STRING& sCtrlID, CXMLReader& oReader, int nVers m_arCells.push_back(new CTblCell(oReader, nVersion)); END_WHILE } + else + CCtrlCommon::ParseChildren(oReader, nVersion); } END_WHILE } diff --git a/HwpFile/HwpDoc/Paragraph/HWPPargraph.cpp b/HwpFile/HwpDoc/Paragraph/HWPPargraph.cpp index e5b5d3b8ca..e45d451067 100644 --- a/HwpFile/HwpDoc/Paragraph/HWPPargraph.cpp +++ b/HwpFile/HwpDoc/Paragraph/HWPPargraph.cpp @@ -52,31 +52,28 @@ CHWPPargraph::CHWPPargraph(CXMLReader& oReader, int nVersion) END_READ_ATTRIBUTES(oReader) int nCharShapeID = 0; - std::string sNodeName; - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_NAME(oReader) { - sNodeName = oReader.GetNameA(); - if ("hp:run" == sNodeName) { nCharShapeID = oReader.GetAttributeInt("charPrIDRef"); - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_DEPTH(oReader, Child) ParseHWPParagraph(oReader, nCharShapeID, nVersion); + END_WHILE } else if ("hp:linesegarray" == sNodeName) { - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_DEPTH_ONE_NAME(oReader, Child, "hp:lineseg") { - if ("hp:lineseg" != oReader.GetNameA()) - continue; - m_pLineSegs = new CLineSeg(oReader, nVersion); break; } + END_WHILE } } + END_WHILE if (m_arP.empty() || ECtrlObjectType::Character != m_arP.back()->GetCtrlType()) m_arP.push_back(new CCtrlCharacter(L" _", ECtrlCharType::PARAGRAPH_BREAK, nCharShapeID)); @@ -92,7 +89,7 @@ bool CHWPPargraph::ParseHWPParagraph(CXMLReader& oReader, int nCharShapeID, int { const size_t unCurrentParaCount = m_arP.size(); - const std::string sNodeName{oReader.GetNameA()}; + const std::string sNodeName{oReader.GetName()}; if ("hp:secPr" == sNodeName) m_arP.push_back(new CCtrlSectionDef(L"dces", oReader, nVersion)); @@ -100,27 +97,25 @@ bool CHWPPargraph::ParseHWPParagraph(CXMLReader& oReader, int nCharShapeID, int { WHILE_READ_NEXT_NODE(oReader) AddCtrl(CCtrl::GetCtrl(oReader, nVersion)); + END_WHILE } else if ("hp:t" == sNodeName) { m_arP.push_back(new CParaText(L"____", oReader.GetText(), 0, nCharShapeID)); - std::string sChildNodeName; - - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_DEPTH_AND_NAME(oReader, Child) { - sChildNodeName = oReader.GetNameA(); - - if ("hp:lineBreak" == sChildNodeName) + if ("hp:lineBreak" == sNodeChildName) m_arP.push_back(new CCtrlCharacter(L" _", ECtrlCharType::LINE_BREAK)); - else if ("hp:hyphen" == sChildNodeName) + else if ("hp:hyphen" == sNodeChildName) m_arP.push_back(new CCtrlCharacter(L" _", ECtrlCharType::HARD_HYPHEN)); - else if ("hp:nbSpace" == sChildNodeName || - "hp:fwSpace" == sChildNodeName) + else if ("hp:nbSpace" == sNodeChildName || + "hp:fwSpace" == sNodeChildName) m_arP.push_back(new CCtrlCharacter(L" _", ECtrlCharType::HARD_SPACE)); - else if ("hp:tab" == sChildNodeName) + else if ("hp:tab" == sNodeChildName) m_arP.push_back(new CCtrlCharacter(L" _", ECtrlCharType::TABULATION)); } + END_WHILE } else if ("hp:tbl" == sNodeName) m_arP.push_back(new CCtrlTable(L" lbt", oReader, nVersion)); @@ -158,14 +153,16 @@ bool CHWPPargraph::ParseHWPParagraph(CXMLReader& oReader, int nCharShapeID, int { WHILE_READ_NEXT_NODE(oReader) { - if ("hp:case" != oReader.GetNameA() && - "hp:default" != oReader.GetNameA()) + if ("hp:case" != oReader.GetName() && + "hp:default" != oReader.GetName()) continue; WHILE_READ_NEXT_NODE(oReader) if (ParseHWPParagraph(oReader, nCharShapeID, nVersion)) return true; + END_WHILE } + END_WHILE } return false; diff --git a/HwpFile/HwpDoc/Section/Page.cpp b/HwpFile/HwpDoc/Section/Page.cpp index e7f875055f..d0f29db5c7 100644 --- a/HwpFile/HwpDoc/Section/Page.cpp +++ b/HwpFile/HwpDoc/Section/Page.cpp @@ -10,14 +10,14 @@ CPage::CPage(CXMLReader& oReader) START_READ_ATTRIBUTES(oReader) { if ("landscape" == sAttributeName) - m_bLandscape = "NARROWLY" == oReader.GetText2A(); + m_bLandscape = "NARROWLY" == oReader.GetTextA(); else if ("width" == sAttributeName) m_nWidth = oReader.GetInt(); else if ("height" == sAttributeName) m_nHeight = oReader.GetInt(); else if ("gutterType" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("LEFT_ONELY" == sType) m_chGutterType = 0; @@ -29,11 +29,8 @@ CPage::CPage(CXMLReader& oReader) } END_READ_ATTRIBUTES(oReader) - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, "hp:margin") { - if ("hp:margin" != oReader.GetNameA()) - continue; - START_READ_ATTRIBUTES(oReader) { if ("left" == sAttributeName) @@ -54,6 +51,7 @@ CPage::CPage(CXMLReader& oReader) } END_READ_ATTRIBUTES(oReader) } + END_WHILE } int CPage::GetWidth() const diff --git a/HwpFile/HwpDoc/Section/PageBorderFill.cpp b/HwpFile/HwpDoc/Section/PageBorderFill.cpp index 1794962d2f..08d1fbec0f 100644 --- a/HwpFile/HwpDoc/Section/PageBorderFill.cpp +++ b/HwpFile/HwpDoc/Section/PageBorderFill.cpp @@ -12,14 +12,14 @@ CPageBorderFill::CPageBorderFill(CXMLReader& oReader, int nVersion) if ("borderFillIDRef" == sAttributeName) m_shBorderFill = oReader.GetInt(); else if ("textBorder" == sAttributeName) - m_bTextBorder = "PAPER" == oReader.GetText2A(); + m_bTextBorder = "PAPER" == oReader.GetTextA(); else if ("headerInside" == sAttributeName) m_bHeaderInside = oReader.GetBool(); else if ("footerInside" == sAttributeName) m_bFooterInside = oReader.GetBool(); else if ("fillArea" == sAttributeName) { - const std::string sType{oReader.GetText2A()}; + const std::string sType{oReader.GetTextA()}; if ("PAPER" == sType) m_chFillArea = 0; @@ -31,11 +31,8 @@ CPageBorderFill::CPageBorderFill(CXMLReader& oReader, int nVersion) } END_READ_ATTRIBUTES(oReader) - WHILE_READ_NEXT_NODE(oReader) + WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, "offset") { - if ("offset" != oReader.GetNameA()) - continue; - START_READ_ATTRIBUTES(oReader) { if ("left" == sAttributeName) @@ -49,6 +46,7 @@ CPageBorderFill::CPageBorderFill(CXMLReader& oReader, int nVersion) } END_READ_ATTRIBUTES(oReader) } + END_WHILE } CPageBorderFill* CPageBorderFill::Parse(int nLevel, int nSize, CHWPStream& oBuffer, int nOff, int nVersion)