Index: xfa/fde/xml/fde_xml_imp.cpp |
diff --git a/xfa/fde/xml/fde_xml_imp.cpp b/xfa/fde/xml/fde_xml_imp.cpp |
index 6b7bdaaed37339c0f3b17ad682d4a67e825ba2c0..b71d8b8f4fd87e6e035682e8e039cbdd9eefef18 100644 |
--- a/xfa/fde/xml/fde_xml_imp.cpp |
+++ b/xfa/fde/xml/fde_xml_imp.cpp |
@@ -870,45 +870,7 @@ void CFDE_XMLDoc::ReleaseParser() { |
m_pSyntaxParser = nullptr; |
} |
} |
-FX_BOOL CFDE_XMLDoc::LoadXML(IFX_Stream* pXMLStream, |
- int32_t iXMLPlaneSize, |
- int32_t iTextDataSize, |
- FDE_XMLREADERHANDLER* pHandler) { |
- if (!pXMLStream) |
- return FALSE; |
- Reset(TRUE); |
- iXMLPlaneSize = iXMLPlaneSize / 1024; |
- if (iXMLPlaneSize < 1) { |
- iXMLPlaneSize = 1; |
- } |
- iXMLPlaneSize *= 1024; |
- if (iXMLPlaneSize < 4096) { |
- iXMLPlaneSize = 4096; |
- } |
- iTextDataSize = iTextDataSize / 128; |
- if (iTextDataSize < 1) { |
- iTextDataSize = 1; |
- } |
- iTextDataSize *= 128; |
- if (iTextDataSize < 128) { |
- iTextDataSize = 128; |
- } |
- m_pStream = pXMLStream; |
- uint16_t wCodePage = m_pStream->GetCodePage(); |
- if (wCodePage != FX_CODEPAGE_UTF16LE && wCodePage != FX_CODEPAGE_UTF16BE && |
- wCodePage != FX_CODEPAGE_UTF8) { |
- m_pStream->SetCodePage(FX_CODEPAGE_UTF8); |
- } |
- m_pSyntaxParser = new CFDE_XMLSyntaxParser; |
- |
- m_pSyntaxParser->Init(m_pStream, iXMLPlaneSize, iTextDataSize); |
- if (pHandler) |
- m_pXMLParser = new CFDE_XMLSAXParser(pHandler, m_pSyntaxParser); |
- else |
- m_pXMLParser = new CFDE_XMLDOMParser(m_pRoot, m_pSyntaxParser); |
- return TRUE; |
-} |
FX_BOOL CFDE_XMLDoc::LoadXML(CFDE_XMLParser* pXMLParser) { |
if (!pXMLParser) |
return FALSE; |
@@ -1060,237 +1022,6 @@ void CFDE_XMLDoc::SaveXML(IFX_Stream* pXMLStream, FX_BOOL bSaveBOM) { |
pXMLStream->SetLength(iPos); |
} |
} |
-CFDE_XMLDOMParser::CFDE_XMLDOMParser(CFDE_XMLNode* pRoot, |
- CFDE_XMLSyntaxParser* pParser) |
- : m_pParser(pParser), |
- m_pParent(pRoot), |
- m_pChild(nullptr), |
- m_NodeStack(16), |
- m_ws1(), |
- m_ws2() { |
- m_NodeStack.Push(m_pParent); |
-} |
-CFDE_XMLDOMParser::~CFDE_XMLDOMParser() { |
- m_NodeStack.RemoveAll(); |
- m_ws1.clear(); |
- m_ws2.clear(); |
-} |
- |
-int32_t CFDE_XMLDOMParser::DoParser(IFX_Pause* pPause) { |
- FDE_XmlSyntaxResult syntaxParserResult; |
- int32_t iCount = 0; |
- while (TRUE) { |
- syntaxParserResult = m_pParser->DoSyntaxParse(); |
- switch (syntaxParserResult) { |
- case FDE_XmlSyntaxResult::InstructionOpen: |
- break; |
- case FDE_XmlSyntaxResult::InstructionClose: |
- if (m_pChild->GetType() != FDE_XMLNODE_Instruction) { |
- syntaxParserResult = FDE_XmlSyntaxResult::Error; |
- break; |
- } |
- m_pChild = m_pParent; |
- break; |
- case FDE_XmlSyntaxResult::ElementOpen: |
- case FDE_XmlSyntaxResult::ElementBreak: |
- break; |
- case FDE_XmlSyntaxResult::ElementClose: |
- if (m_pChild->GetType() != FDE_XMLNODE_Element) { |
- syntaxParserResult = FDE_XmlSyntaxResult::Error; |
- break; |
- } |
- m_pParser->GetTagName(m_ws1); |
- ((CFDE_XMLElement*)m_pChild)->GetTagName(m_ws2); |
- if (m_ws1.GetLength() > 0 && m_ws1.Compare(m_ws2) != 0) { |
- syntaxParserResult = FDE_XmlSyntaxResult::Error; |
- break; |
- } |
- m_NodeStack.Pop(); |
- if (m_NodeStack.GetSize() < 1) { |
- syntaxParserResult = FDE_XmlSyntaxResult::Error; |
- break; |
- } |
- m_pParent = (CFDE_XMLNode*)*m_NodeStack.GetTopElement(); |
- m_pChild = m_pParent; |
- iCount++; |
- break; |
- case FDE_XmlSyntaxResult::TargetName: |
- m_pParser->GetTargetName(m_ws1); |
- m_pChild = new CFDE_XMLInstruction(m_ws1); |
- m_pParent->InsertChildNode(m_pChild); |
- m_ws1.clear(); |
- break; |
- case FDE_XmlSyntaxResult::TagName: |
- m_pParser->GetTagName(m_ws1); |
- m_pChild = new CFDE_XMLElement(m_ws1); |
- m_pParent->InsertChildNode(m_pChild); |
- m_NodeStack.Push(m_pChild); |
- m_pParent = m_pChild; |
- break; |
- case FDE_XmlSyntaxResult::AttriName: |
- m_pParser->GetAttributeName(m_ws1); |
- break; |
- case FDE_XmlSyntaxResult::AttriValue: |
- if (!m_pChild) { |
- syntaxParserResult = FDE_XmlSyntaxResult::Error; |
- break; |
- } |
- m_pParser->GetAttributeName(m_ws2); |
- if (m_pChild->GetType() == FDE_XMLNODE_Element) { |
- ((CFDE_XMLElement*)m_pChild)->SetString(m_ws1, m_ws2); |
- } else if (m_pChild->GetType() == FDE_XMLNODE_Instruction) { |
- ((CFDE_XMLInstruction*)m_pChild)->SetString(m_ws1, m_ws2); |
- } |
- m_ws1.clear(); |
- break; |
- case FDE_XmlSyntaxResult::Text: |
- m_pParser->GetTextData(m_ws1); |
- m_pChild = new CFDE_XMLText(m_ws1); |
- m_pParent->InsertChildNode(m_pChild); |
- m_pChild = m_pParent; |
- break; |
- case FDE_XmlSyntaxResult::CData: |
- m_pParser->GetTextData(m_ws1); |
- m_pChild = new CFDE_XMLCharData(m_ws1); |
- m_pParent->InsertChildNode(m_pChild); |
- m_pChild = m_pParent; |
- break; |
- case FDE_XmlSyntaxResult::TargetData: |
- if (!m_pChild || m_pChild->GetType() != FDE_XMLNODE_Instruction) { |
- syntaxParserResult = FDE_XmlSyntaxResult::Error; |
- break; |
- } |
- if (!m_ws1.IsEmpty()) { |
- ((CFDE_XMLInstruction*)m_pChild)->AppendData(m_ws1); |
- } |
- m_pParser->GetTargetData(m_ws1); |
- ((CFDE_XMLInstruction*)m_pChild)->AppendData(m_ws1); |
- m_ws1.clear(); |
- break; |
- default: |
- break; |
- } |
- if (syntaxParserResult == FDE_XmlSyntaxResult::Error || |
- syntaxParserResult == FDE_XmlSyntaxResult::EndOfString) { |
- break; |
- } |
- if (iCount > 500 && pPause && pPause->NeedToPauseNow()) |
- break; |
- } |
- return m_pParser->GetStatus(); |
-} |
- |
-CFDE_XMLSAXParser::CFDE_XMLSAXParser(FDE_XMLREADERHANDLER* pHandler, |
- CFDE_XMLSyntaxParser* pParser) |
- : m_pHandler(pHandler), |
- m_pParser(pParser), |
- m_TagStack(16), |
- m_pTagTop(nullptr), |
- m_ws1(), |
- m_ws2() {} |
-CFDE_XMLSAXParser::~CFDE_XMLSAXParser() { |
- m_TagStack.RemoveAll(); |
- m_ws1.clear(); |
- m_ws2.clear(); |
-} |
-int32_t CFDE_XMLSAXParser::DoParser(IFX_Pause* pPause) { |
- FDE_XmlSyntaxResult syntaxParserResult; |
- int32_t iCount = 0; |
- while (TRUE) { |
- syntaxParserResult = m_pParser->DoSyntaxParse(); |
- switch (syntaxParserResult) { |
- case FDE_XmlSyntaxResult::ElementBreak: |
- if (!m_pTagTop) { |
- syntaxParserResult = FDE_XmlSyntaxResult::Error; |
- break; |
- } |
- if (m_pTagTop->eType == FDE_XMLNODE_Element) { |
- m_pHandler->OnTagBreak(m_pHandler, m_pTagTop->wsTagName); |
- } |
- break; |
- case FDE_XmlSyntaxResult::ElementClose: |
- if (!m_pTagTop || m_pTagTop->eType != FDE_XMLNODE_Element) { |
- syntaxParserResult = FDE_XmlSyntaxResult::Error; |
- break; |
- } |
- m_pParser->GetTagName(m_ws1); |
- if (m_ws1.GetLength() > 0 && m_ws1.Compare(m_pTagTop->wsTagName) != 0) { |
- syntaxParserResult = FDE_XmlSyntaxResult::Error; |
- break; |
- } else if (m_ws1.GetLength() == 0) { |
- m_pHandler->OnTagBreak(m_pHandler, m_pTagTop->wsTagName); |
- } |
- m_pHandler->OnTagClose(m_pHandler, m_pTagTop->wsTagName); |
- Pop(); |
- iCount++; |
- break; |
- case FDE_XmlSyntaxResult::TargetName: { |
- m_pParser->GetTargetName(m_ws1); |
- CFDE_XMLTAG xmlTag; |
- xmlTag.wsTagName = m_ws1; |
- xmlTag.eType = FDE_XMLNODE_Instruction; |
- Push(xmlTag); |
- m_pHandler->OnTagEnter(m_pHandler, FDE_XMLNODE_Instruction, |
- m_pTagTop->wsTagName); |
- m_ws1.clear(); |
- } break; |
- case FDE_XmlSyntaxResult::TagName: { |
- m_pParser->GetTargetName(m_ws1); |
- CFDE_XMLTAG xmlTag; |
- xmlTag.wsTagName = m_ws1; |
- xmlTag.eType = FDE_XMLNODE_Element; |
- Push(xmlTag); |
- m_pHandler->OnTagEnter(m_pHandler, FDE_XMLNODE_Element, |
- m_pTagTop->wsTagName); |
- } break; |
- case FDE_XmlSyntaxResult::AttriName: |
- m_pParser->GetTargetName(m_ws1); |
- break; |
- case FDE_XmlSyntaxResult::AttriValue: |
- m_pParser->GetAttributeName(m_ws2); |
- if (!m_pTagTop) { |
- syntaxParserResult = FDE_XmlSyntaxResult::Error; |
- break; |
- } |
- if (m_pTagTop->eType == FDE_XMLNODE_Element) { |
- m_pHandler->OnAttribute(m_pHandler, m_ws1, m_ws2); |
- } |
- m_ws1.clear(); |
- break; |
- case FDE_XmlSyntaxResult::CData: |
- m_pParser->GetTextData(m_ws1); |
- m_pHandler->OnData(m_pHandler, FDE_XMLNODE_CharData, m_ws1); |
- break; |
- case FDE_XmlSyntaxResult::Text: |
- m_pParser->GetTextData(m_ws1); |
- m_pHandler->OnData(m_pHandler, FDE_XMLNODE_Text, m_ws1); |
- break; |
- case FDE_XmlSyntaxResult::TargetData: |
- m_pParser->GetTargetData(m_ws1); |
- m_pHandler->OnData(m_pHandler, FDE_XMLNODE_Instruction, m_ws1); |
- m_ws1.clear(); |
- break; |
- default: |
- break; |
- } |
- if (syntaxParserResult == FDE_XmlSyntaxResult::Error || |
- syntaxParserResult == FDE_XmlSyntaxResult::EndOfString) { |
- break; |
- } |
- if (iCount > 500 && pPause && pPause->NeedToPauseNow()) |
- break; |
- } |
- return m_pParser->GetStatus(); |
-} |
- |
-inline void CFDE_XMLSAXParser::Push(const CFDE_XMLTAG& xmlTag) { |
- m_TagStack.Push(xmlTag); |
- m_pTagTop = m_TagStack.GetTopElement(); |
-} |
-inline void CFDE_XMLSAXParser::Pop() { |
- m_TagStack.Pop(); |
- m_pTagTop = m_TagStack.GetTopElement(); |
-} |
CFDE_BlockBuffer::CFDE_BlockBuffer(int32_t iAllocStep) |
: m_iDataLength(0), |