| 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),
|
|
|