| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "core/fxcrt/include/fx_ext.h" | 7 #include "core/fxcrt/include/fx_ext.h" |
| 8 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" | 8 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" |
| 9 #include "xfa/fxfa/parser/xfa_basic_imp.h" | 9 #include "xfa/fxfa/parser/xfa_basic_imp.h" |
| 10 #include "xfa/fxfa/parser/xfa_docdata.h" | 10 #include "xfa/fxfa/parser/xfa_docdata.h" |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 m_pRootNode = pNewRoot; | 88 m_pRootNode = pNewRoot; |
| 89 RemovePurgeNode(pNewRoot); | 89 RemovePurgeNode(pNewRoot); |
| 90 } | 90 } |
| 91 IXFA_Notify* CXFA_Document::GetNotify() const { | 91 IXFA_Notify* CXFA_Document::GetNotify() const { |
| 92 return m_pParser->GetNotify(); | 92 return m_pParser->GetNotify(); |
| 93 } | 93 } |
| 94 CXFA_Object* CXFA_Document::GetXFAObject(const CFX_WideStringC& wsNodeName) { | 94 CXFA_Object* CXFA_Document::GetXFAObject(const CFX_WideStringC& wsNodeName) { |
| 95 return GetXFAObject( | 95 return GetXFAObject( |
| 96 FX_HashCode_String_GetW(wsNodeName.GetPtr(), wsNodeName.GetLength())); | 96 FX_HashCode_String_GetW(wsNodeName.GetPtr(), wsNodeName.GetLength())); |
| 97 } | 97 } |
| 98 CXFA_Object* CXFA_Document::GetXFAObject(FX_DWORD dwNodeNameHash) { | 98 CXFA_Object* CXFA_Document::GetXFAObject(uint32_t dwNodeNameHash) { |
| 99 switch (dwNodeNameHash) { | 99 switch (dwNodeNameHash) { |
| 100 case XFA_HASHCODE_Data: { | 100 case XFA_HASHCODE_Data: { |
| 101 CXFA_Node* pDatasetsNode = ToNode(GetXFAObject(XFA_HASHCODE_Datasets)); | 101 CXFA_Node* pDatasetsNode = ToNode(GetXFAObject(XFA_HASHCODE_Datasets)); |
| 102 if (!pDatasetsNode) { | 102 if (!pDatasetsNode) { |
| 103 return NULL; | 103 return NULL; |
| 104 } | 104 } |
| 105 for (CXFA_Node* pDatasetsChild = | 105 for (CXFA_Node* pDatasetsChild = |
| 106 pDatasetsNode->GetFirstChildByClass(XFA_ELEMENT_DataGroup); | 106 pDatasetsNode->GetFirstChildByClass(XFA_ELEMENT_DataGroup); |
| 107 pDatasetsChild; | 107 pDatasetsChild; |
| 108 pDatasetsChild = | 108 pDatasetsChild = |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 case XFA_HASHCODE_Layout: { | 161 case XFA_HASHCODE_Layout: { |
| 162 if (m_pScriptLayout == NULL) { | 162 if (m_pScriptLayout == NULL) { |
| 163 m_pScriptLayout = new CScript_LayoutPseudoModel(this); | 163 m_pScriptLayout = new CScript_LayoutPseudoModel(this); |
| 164 } | 164 } |
| 165 return m_pScriptLayout; | 165 return m_pScriptLayout; |
| 166 } | 166 } |
| 167 default: | 167 default: |
| 168 return m_pRootNode->GetFirstChildByName(dwNodeNameHash); | 168 return m_pRootNode->GetFirstChildByName(dwNodeNameHash); |
| 169 } | 169 } |
| 170 } | 170 } |
| 171 CXFA_Node* CXFA_Document::CreateNode(FX_DWORD dwPacket, XFA_ELEMENT eElement) { | 171 CXFA_Node* CXFA_Document::CreateNode(uint32_t dwPacket, XFA_ELEMENT eElement) { |
| 172 return CreateNode(XFA_GetPacketByID(dwPacket), eElement); | 172 return CreateNode(XFA_GetPacketByID(dwPacket), eElement); |
| 173 } | 173 } |
| 174 CXFA_Node* CXFA_Document::CreateNode(const XFA_PACKETINFO* pPacket, | 174 CXFA_Node* CXFA_Document::CreateNode(const XFA_PACKETINFO* pPacket, |
| 175 XFA_ELEMENT eElement) { | 175 XFA_ELEMENT eElement) { |
| 176 if (pPacket == NULL) { | 176 if (pPacket == NULL) { |
| 177 return NULL; | 177 return NULL; |
| 178 } | 178 } |
| 179 const XFA_ELEMENTINFO* pElement = XFA_GetElementByID(eElement); | 179 const XFA_ELEMENTINFO* pElement = XFA_GetElementByID(eElement); |
| 180 if (pElement && (pElement->dwPackets & pPacket->eName)) { | 180 if (pElement && (pElement->dwPackets & pPacket->eName)) { |
| 181 CXFA_Node* pNode = new CXFA_Node(this, pPacket->eName, pElement->eName); | 181 CXFA_Node* pNode = new CXFA_Node(this, pPacket->eName, pElement->eName); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 194 } | 194 } |
| 195 void CXFA_Document::PurgeNodes() { | 195 void CXFA_Document::PurgeNodes() { |
| 196 FX_POSITION psNode = m_rgPurgeNodes.GetStartPosition(); | 196 FX_POSITION psNode = m_rgPurgeNodes.GetStartPosition(); |
| 197 while (psNode) { | 197 while (psNode) { |
| 198 CXFA_Node* pNode; | 198 CXFA_Node* pNode; |
| 199 m_rgPurgeNodes.GetNextAssoc(psNode, pNode); | 199 m_rgPurgeNodes.GetNextAssoc(psNode, pNode); |
| 200 delete pNode; | 200 delete pNode; |
| 201 } | 201 } |
| 202 m_rgPurgeNodes.RemoveAll(); | 202 m_rgPurgeNodes.RemoveAll(); |
| 203 } | 203 } |
| 204 void CXFA_Document::SetFlag(FX_DWORD dwFlag, FX_BOOL bOn) { | 204 void CXFA_Document::SetFlag(uint32_t dwFlag, FX_BOOL bOn) { |
| 205 if (bOn) { | 205 if (bOn) { |
| 206 m_dwDocFlags |= dwFlag; | 206 m_dwDocFlags |= dwFlag; |
| 207 } else { | 207 } else { |
| 208 m_dwDocFlags &= ~dwFlag; | 208 m_dwDocFlags &= ~dwFlag; |
| 209 } | 209 } |
| 210 } | 210 } |
| 211 FX_BOOL CXFA_Document::IsInteractive() { | 211 FX_BOOL CXFA_Document::IsInteractive() { |
| 212 if (m_dwDocFlags & XFA_DOCFLAG_HasInteractive) { | 212 if (m_dwDocFlags & XFA_DOCFLAG_HasInteractive) { |
| 213 return m_dwDocFlags & XFA_DOCFLAG_Interactive; | 213 return m_dwDocFlags & XFA_DOCFLAG_Interactive; |
| 214 } | 214 } |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 pNode = sIterator.MoveToNext()) { | 352 pNode = sIterator.MoveToNext()) { |
| 353 pNode->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); | 353 pNode->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); |
| 354 } | 354 } |
| 355 } | 355 } |
| 356 } | 356 } |
| 357 void CXFA_Document::DoProtoMerge() { | 357 void CXFA_Document::DoProtoMerge() { |
| 358 CXFA_Node* pTemplateRoot = ToNode(GetXFAObject(XFA_HASHCODE_Template)); | 358 CXFA_Node* pTemplateRoot = ToNode(GetXFAObject(XFA_HASHCODE_Template)); |
| 359 if (!pTemplateRoot) { | 359 if (!pTemplateRoot) { |
| 360 return; | 360 return; |
| 361 } | 361 } |
| 362 CFX_MapPtrTemplate<FX_DWORD, CXFA_Node*> mIDMap; | 362 CFX_MapPtrTemplate<uint32_t, CXFA_Node*> mIDMap; |
| 363 CXFA_NodeSet sUseNodes; | 363 CXFA_NodeSet sUseNodes; |
| 364 CXFA_NodeIterator sIterator(pTemplateRoot); | 364 CXFA_NodeIterator sIterator(pTemplateRoot); |
| 365 for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; | 365 for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; |
| 366 pNode = sIterator.MoveToNext()) { | 366 pNode = sIterator.MoveToNext()) { |
| 367 CFX_WideStringC wsIDVal; | 367 CFX_WideStringC wsIDVal; |
| 368 if (pNode->TryCData(XFA_ATTRIBUTE_Id, wsIDVal) && !wsIDVal.IsEmpty()) { | 368 if (pNode->TryCData(XFA_ATTRIBUTE_Id, wsIDVal) && !wsIDVal.IsEmpty()) { |
| 369 mIDMap[FX_HashCode_String_GetW(wsIDVal.GetPtr(), wsIDVal.GetLength())] = | 369 mIDMap[FX_HashCode_String_GetW(wsIDVal.GetPtr(), wsIDVal.GetLength())] = |
| 370 pNode; | 370 pNode; |
| 371 } | 371 } |
| 372 CFX_WideStringC wsUseVal; | 372 CFX_WideStringC wsUseVal; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 } else { | 410 } else { |
| 411 wsSOM = | 411 wsSOM = |
| 412 CFX_WideStringC((const FX_WCHAR*)wsUseVal, wsUseVal.GetLength()); | 412 CFX_WideStringC((const FX_WCHAR*)wsUseVal, wsUseVal.GetLength()); |
| 413 } | 413 } |
| 414 } | 414 } |
| 415 if (!wsURI.IsEmpty() && wsURI != FX_WSTRC(L".")) { | 415 if (!wsURI.IsEmpty() && wsURI != FX_WSTRC(L".")) { |
| 416 continue; | 416 continue; |
| 417 } | 417 } |
| 418 CXFA_Node* pProtoNode = NULL; | 418 CXFA_Node* pProtoNode = NULL; |
| 419 if (!wsSOM.IsEmpty()) { | 419 if (!wsSOM.IsEmpty()) { |
| 420 FX_DWORD dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | | 420 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | |
| 421 XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent | | 421 XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent | |
| 422 XFA_RESOLVENODE_Siblings; | 422 XFA_RESOLVENODE_Siblings; |
| 423 XFA_RESOLVENODE_RS resoveNodeRS; | 423 XFA_RESOLVENODE_RS resoveNodeRS; |
| 424 int32_t iRet = m_pScriptContext->ResolveObjects(pUseHrefNode, wsSOM, | 424 int32_t iRet = m_pScriptContext->ResolveObjects(pUseHrefNode, wsSOM, |
| 425 resoveNodeRS, dwFlag); | 425 resoveNodeRS, dwFlag); |
| 426 if (iRet > 0 && resoveNodeRS.nodes[0]->IsNode()) { | 426 if (iRet > 0 && resoveNodeRS.nodes[0]->IsNode()) { |
| 427 pProtoNode = resoveNodeRS.nodes[0]->AsNode(); | 427 pProtoNode = resoveNodeRS.nodes[0]->AsNode(); |
| 428 } | 428 } |
| 429 } else if (!wsID.IsEmpty()) { | 429 } else if (!wsID.IsEmpty()) { |
| 430 if (!mIDMap.Lookup( | 430 if (!mIDMap.Lookup( |
| 431 FX_HashCode_String_GetW(wsID.GetPtr(), wsID.GetLength()), | 431 FX_HashCode_String_GetW(wsID.GetPtr(), wsID.GetLength()), |
| 432 pProtoNode)) { | 432 pProtoNode)) { |
| 433 continue; | 433 continue; |
| 434 } | 434 } |
| 435 } | 435 } |
| 436 if (!pProtoNode) { | 436 if (!pProtoNode) { |
| 437 continue; | 437 continue; |
| 438 } | 438 } |
| 439 XFA_ProtoMerge_MergeNode(this, pUseHrefNode, pProtoNode); | 439 XFA_ProtoMerge_MergeNode(this, pUseHrefNode, pProtoNode); |
| 440 } | 440 } |
| 441 } | 441 } |
| OLD | NEW |