| Index: xfa/fxfa/parser/cxfa_simple_parser.cpp
|
| diff --git a/xfa/fxfa/parser/cxfa_simple_parser.cpp b/xfa/fxfa/parser/cxfa_simple_parser.cpp
|
| index c9edf2daff8293d40884038329bee3f6436d3ae4..0a57b5d02d875f154ddd01fb5dfc2ff14614d4e3 100644
|
| --- a/xfa/fxfa/parser/cxfa_simple_parser.cpp
|
| +++ b/xfa/fxfa/parser/cxfa_simple_parser.cpp
|
| @@ -24,7 +24,6 @@ CXFA_SimpleParser::CXFA_SimpleParser(CXFA_Document* pFactory,
|
| m_bDocumentParser(bDocumentParser) {}
|
|
|
| CXFA_SimpleParser::~CXFA_SimpleParser() {
|
| - CloseParser();
|
| }
|
|
|
| void CXFA_SimpleParser::SetFactory(CXFA_Document* pFactory) {
|
| @@ -57,82 +56,76 @@ static CFDE_XMLNode* XFA_FDEExtension_GetDocumentNode(
|
| }
|
| return nullptr;
|
| }
|
| +
|
| int32_t CXFA_SimpleParser::StartParse(IFX_FileRead* pStream,
|
| XFA_XDPPACKET ePacketID) {
|
| CloseParser();
|
| m_pFileRead = pStream;
|
| - m_pStream = IFX_Stream::CreateStream(
|
| - pStream, FX_STREAMACCESS_Read | FX_STREAMACCESS_Text);
|
| - if (!m_pStream) {
|
| + m_pStream.reset(IFX_Stream::CreateStream(
|
| + pStream, FX_STREAMACCESS_Read | FX_STREAMACCESS_Text));
|
| + if (!m_pStream)
|
| return XFA_PARSESTATUS_StreamErr;
|
| - }
|
| +
|
| 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_pXMLDoc = new CFDE_XMLDoc;
|
| - m_pXMLParser = new CXFA_XMLParser(m_pXMLDoc->GetRoot(), m_pStream);
|
| - if (!m_pXMLDoc->LoadXML(m_pXMLParser)) {
|
| + m_pXMLDoc.reset(new CFDE_XMLDoc);
|
| + m_pXMLParser = new CXFA_XMLParser(m_pXMLDoc->GetRoot(), m_pStream.get());
|
| + if (!m_pXMLDoc->LoadXML(m_pXMLParser))
|
| return XFA_PARSESTATUS_StatusErr;
|
| - }
|
| +
|
| m_ePacketID = ePacketID;
|
| return XFA_PARSESTATUS_Ready;
|
| }
|
| +
|
| int32_t CXFA_SimpleParser::DoParse(IFX_Pause* pPause) {
|
| - if (!m_pXMLDoc || m_ePacketID == XFA_XDPPACKET_UNKNOWN) {
|
| + if (!m_pXMLDoc || m_ePacketID == XFA_XDPPACKET_UNKNOWN)
|
| return XFA_PARSESTATUS_StatusErr;
|
| - }
|
| +
|
| int32_t iRet = m_pXMLDoc->DoLoad(pPause);
|
| - if (iRet < 0) {
|
| + if (iRet < 0)
|
| return XFA_PARSESTATUS_SyntaxErr;
|
| - }
|
| - if (iRet < 100) {
|
| + if (iRet < 100)
|
| return iRet / 2;
|
| - }
|
| - m_pRootNode = ParseAsXDPPacket(XFA_FDEExtension_GetDocumentNode(m_pXMLDoc),
|
| - m_ePacketID);
|
| +
|
| + m_pRootNode = ParseAsXDPPacket(
|
| + XFA_FDEExtension_GetDocumentNode(m_pXMLDoc.get()), m_ePacketID);
|
| m_pXMLDoc->CloseXML();
|
| - if (m_pStream) {
|
| - m_pStream->Release();
|
| - m_pStream = nullptr;
|
| - }
|
| - if (!m_pRootNode) {
|
| + m_pStream.reset();
|
| +
|
| + if (!m_pRootNode)
|
| return XFA_PARSESTATUS_StatusErr;
|
| - }
|
| return XFA_PARSESTATUS_Done;
|
| }
|
| +
|
| int32_t CXFA_SimpleParser::ParseXMLData(const CFX_WideString& wsXML,
|
| CFDE_XMLNode*& pXMLNode,
|
| IFX_Pause* pPause) {
|
| CloseParser();
|
| pXMLNode = nullptr;
|
| - IFX_Stream* pStream = XFA_CreateWideTextRead(wsXML);
|
| - if (!pStream) {
|
| +
|
| + std::unique_ptr<IFX_Stream> pStream(XFA_CreateWideTextRead(wsXML));
|
| + if (!pStream)
|
| return XFA_PARSESTATUS_StreamErr;
|
| - }
|
| - m_pStream = pStream;
|
| - m_pXMLDoc = new CFDE_XMLDoc;
|
| - CXFA_XMLParser* pParser = new CXFA_XMLParser(m_pXMLDoc->GetRoot(), m_pStream);
|
| +
|
| + m_pXMLDoc.reset(new CFDE_XMLDoc);
|
| + CXFA_XMLParser* pParser =
|
| + new CXFA_XMLParser(m_pXMLDoc->GetRoot(), pStream.get());
|
| pParser->m_dwCheckStatus = 0x03;
|
| - if (!m_pXMLDoc->LoadXML(pParser)) {
|
| + if (!m_pXMLDoc->LoadXML(pParser))
|
| return XFA_PARSESTATUS_StatusErr;
|
| - }
|
| +
|
| int32_t iRet = m_pXMLDoc->DoLoad(pPause);
|
| - if (iRet < 0 || iRet >= 100) {
|
| + if (iRet < 0 || iRet >= 100)
|
| m_pXMLDoc->CloseXML();
|
| - }
|
| - if (iRet < 0) {
|
| + if (iRet < 0)
|
| return XFA_PARSESTATUS_SyntaxErr;
|
| - }
|
| - if (iRet < 100) {
|
| + if (iRet < 100)
|
| return iRet / 2;
|
| - }
|
| - if (m_pStream) {
|
| - m_pStream->Release();
|
| - m_pStream = nullptr;
|
| - }
|
| - pXMLNode = XFA_FDEExtension_GetDocumentNode(m_pXMLDoc);
|
| +
|
| + pXMLNode = XFA_FDEExtension_GetDocumentNode(m_pXMLDoc.get());
|
| return XFA_PARSESTATUS_Done;
|
| }
|
|
|
| @@ -187,7 +180,7 @@ CXFA_Node* CXFA_SimpleParser::GetRootNode() const {
|
| }
|
|
|
| CFDE_XMLDoc* CXFA_SimpleParser::GetXMLDoc() const {
|
| - return m_pXMLDoc;
|
| + return m_pXMLDoc.get();
|
| }
|
|
|
| FX_BOOL XFA_FDEExtension_ResolveNamespaceQualifier(
|
| @@ -219,6 +212,7 @@ FX_BOOL XFA_FDEExtension_ResolveNamespaceQualifier(
|
| wsNamespaceURI.clear();
|
| return bRet;
|
| }
|
| +
|
| static inline void XFA_FDEExtension_GetElementTagNamespaceURI(
|
| CFDE_XMLElement* pElement,
|
| CFX_WideString& wsNamespaceURI) {
|
| @@ -229,6 +223,7 @@ static inline void XFA_FDEExtension_GetElementTagNamespaceURI(
|
| wsNamespaceURI.clear();
|
| }
|
| }
|
| +
|
| static FX_BOOL XFA_FDEExtension_MatchNodeName(
|
| CFDE_XMLNode* pNode,
|
| const CFX_WideStringC& wsLocalTagName,
|
| @@ -253,6 +248,7 @@ static FX_BOOL XFA_FDEExtension_MatchNodeName(
|
| }
|
| return wsNodeStr == wsNamespaceURIPrefix;
|
| }
|
| +
|
| static FX_BOOL XFA_FDEExtension_GetAttributeLocalName(
|
| const CFX_WideStringC& wsAttributeName,
|
| CFX_WideString& wsLocalAttrName) {
|
| @@ -266,6 +262,7 @@ static FX_BOOL XFA_FDEExtension_GetAttributeLocalName(
|
| return TRUE;
|
| }
|
| }
|
| +
|
| static FX_BOOL XFA_FDEExtension_ResolveAttribute(
|
| CFDE_XMLElement* pElement,
|
| const CFX_WideStringC& wsAttributeName,
|
| @@ -289,6 +286,7 @@ static FX_BOOL XFA_FDEExtension_ResolveAttribute(
|
| }
|
| return TRUE;
|
| }
|
| +
|
| static FX_BOOL XFA_FDEExtension_FindAttributeWithNS(
|
| CFDE_XMLElement* pElement,
|
| const CFX_WideStringC& wsLocalAttributeName,
|
| @@ -336,6 +334,7 @@ static FX_BOOL XFA_FDEExtension_FindAttributeWithNS(
|
| }
|
| return FALSE;
|
| }
|
| +
|
| CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket(CFDE_XMLNode* pXMLDocumentNode,
|
| XFA_XDPPACKET ePacketID) {
|
| switch (ePacketID) {
|
| @@ -361,6 +360,7 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket(CFDE_XMLNode* pXMLDocumentNode,
|
| return ParseAsXDPPacket_User(pXMLDocumentNode, ePacketID);
|
| }
|
| }
|
| +
|
| CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP(
|
| CFDE_XMLNode* pXMLDocumentNode,
|
| XFA_XDPPACKET ePacketID) {
|
| @@ -499,6 +499,7 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP(
|
| pXFARootNode->SetXMLMappingNode(pXMLDocumentNode);
|
| return pXFARootNode;
|
| }
|
| +
|
| CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Config(
|
| CFDE_XMLNode* pXMLDocumentNode,
|
| XFA_XDPPACKET ePacketID) {
|
| @@ -521,6 +522,7 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Config(
|
| pNode->SetXMLMappingNode(pXMLDocumentNode);
|
| return pNode;
|
| }
|
| +
|
| CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_TemplateForm(
|
| CFDE_XMLNode* pXMLDocumentNode,
|
| XFA_XDPPACKET ePacketID) {
|
| @@ -604,6 +606,7 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_TemplateForm(
|
| }
|
| return pNode;
|
| }
|
| +
|
| static CFDE_XMLNode* XFA_GetDataSetsFromXDP(CFDE_XMLNode* pXMLDocumentNode) {
|
| if (XFA_FDEExtension_MatchNodeName(
|
| pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pName,
|
| @@ -631,6 +634,7 @@ static CFDE_XMLNode* XFA_GetDataSetsFromXDP(CFDE_XMLNode* pXMLDocumentNode) {
|
| }
|
| return nullptr;
|
| }
|
| +
|
| CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Data(
|
| CFDE_XMLNode* pXMLDocumentNode,
|
| XFA_XDPPACKET ePacketID) {
|
| @@ -695,6 +699,7 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Data(
|
| }
|
| return nullptr;
|
| }
|
| +
|
| CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_LocaleConnectionSourceSet(
|
| CFDE_XMLNode* pXMLDocumentNode,
|
| XFA_XDPPACKET ePacketID) {
|
| @@ -754,6 +759,7 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_LocaleConnectionSourceSet(
|
| }
|
| return pNode;
|
| }
|
| +
|
| CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Xdc(
|
| CFDE_XMLNode* pXMLDocumentNode,
|
| XFA_XDPPACKET ePacketID) {
|
| @@ -773,6 +779,7 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Xdc(
|
| }
|
| return nullptr;
|
| }
|
| +
|
| CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_User(
|
| CFDE_XMLNode* pXMLDocumentNode,
|
| XFA_XDPPACKET ePacketID) {
|
| @@ -790,20 +797,24 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_User(
|
| pNode->SetXMLMappingNode(pXMLDocumentNode);
|
| return pNode;
|
| }
|
| +
|
| CXFA_Node* CXFA_SimpleParser::UserPacketLoader(CXFA_Node* pXFANode,
|
| CFDE_XMLNode* pXMLDoc) {
|
| return pXFANode;
|
| }
|
| +
|
| static FX_BOOL XFA_FDEExtension_IsStringAllWhitespace(CFX_WideString wsText) {
|
| wsText.TrimRight(L"\x20\x9\xD\xA");
|
| return wsText.IsEmpty();
|
| }
|
| +
|
| CXFA_Node* CXFA_SimpleParser::DataLoader(CXFA_Node* pXFANode,
|
| CFDE_XMLNode* pXMLDoc,
|
| FX_BOOL bDoTransform) {
|
| ParseDataGroup(pXFANode, pXMLDoc, XFA_XDPPACKET_Datasets);
|
| return pXFANode;
|
| }
|
| +
|
| CXFA_Node* CXFA_SimpleParser::NormalLoader(CXFA_Node* pXFANode,
|
| CFDE_XMLNode* pXMLDoc,
|
| XFA_XDPPACKET ePacketID,
|
| @@ -894,6 +905,7 @@ CXFA_Node* CXFA_SimpleParser::NormalLoader(CXFA_Node* pXFANode,
|
| }
|
| return pXFANode;
|
| }
|
| +
|
| FX_BOOL XFA_RecognizeRichText(CFDE_XMLElement* pRichTextXMLNode) {
|
| if (pRichTextXMLNode) {
|
| CFX_WideString wsNamespaceURI;
|
| @@ -905,6 +917,7 @@ FX_BOOL XFA_RecognizeRichText(CFDE_XMLElement* pRichTextXMLNode) {
|
| }
|
| return FALSE;
|
| }
|
| +
|
| class RichTextNodeVisitor {
|
| public:
|
| static inline CFDE_XMLNode* GetFirstChild(CFDE_XMLNode* pNode) {
|
| @@ -1306,13 +1319,8 @@ void CXFA_SimpleParser::ParseInstruction(CXFA_Node* pXFANode,
|
| }
|
| }
|
| }
|
| +
|
| void CXFA_SimpleParser::CloseParser() {
|
| - if (m_pXMLDoc) {
|
| - m_pXMLDoc->Release();
|
| - m_pXMLDoc = nullptr;
|
| - }
|
| - if (m_pStream) {
|
| - m_pStream->Release();
|
| - m_pStream = nullptr;
|
| - }
|
| + m_pXMLDoc.reset();
|
| + m_pStream.reset();
|
| }
|
|
|