Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Side by Side Diff: xfa/fxfa/parser/xfa_document_datadescription_imp.cpp

Issue 2122373003: Cleanup xfa_document_datamerge files (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Add else Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "xfa/fxfa/parser/xfa_doclayout.h"
8 #include "xfa/fxfa/parser/xfa_document.h"
9 #include "xfa/fxfa/parser/xfa_localemgr.h"
10 #include "xfa/fxfa/parser/xfa_object.h"
11 #include "xfa/fxfa/parser/xfa_parser.h"
12 #include "xfa/fxfa/parser/xfa_script.h"
13 #include "xfa/fxfa/parser/xfa_utils.h"
14
15 class CXFA_TraverseStrategy_DDGroup {
16 public:
17 static inline CXFA_Node* GetFirstChild(CXFA_Node* pDDGroupNode) {
18 return pDDGroupNode->GetFirstChildByName(XFA_HASHCODE_Group);
19 }
20 static inline CXFA_Node* GetNextSibling(CXFA_Node* pDDGroupNode) {
21 return pDDGroupNode->GetNextSameNameSibling(XFA_HASHCODE_Group);
22 }
23 static inline CXFA_Node* GetParent(CXFA_Node* pDDGroupNode) {
24 return pDDGroupNode->GetNodeItem(XFA_NODEITEM_Parent);
25 }
26 };
27 void XFA_DataDescription_UpdateDataRelation(CXFA_Node* pDataNode,
28 CXFA_Node* pDataDescriptionNode) {
29 ASSERT(pDataDescriptionNode);
30 for (CXFA_Node* pDataChild = pDataNode->GetNodeItem(XFA_NODEITEM_FirstChild);
31 pDataChild;
32 pDataChild = pDataChild->GetNodeItem(XFA_NODEITEM_NextSibling)) {
33 uint32_t dwNameHash = pDataChild->GetNameHash();
34 if (!dwNameHash)
35 continue;
36
37 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_DDGroup>
38 sIterator(pDataDescriptionNode);
39 for (CXFA_Node* pDDGroupNode = sIterator.GetCurrent(); pDDGroupNode;
40 pDDGroupNode = sIterator.MoveToNext()) {
41 if (pDDGroupNode != pDataDescriptionNode) {
42 if (pDDGroupNode->GetElementType() != XFA_Element::DataGroup)
43 continue;
44
45 CFX_WideString wsNamespace;
46 if (!pDDGroupNode->TryNamespace(wsNamespace) ||
47 wsNamespace != FX_WSTRC(L"http://ns.adobe.com/data-description/")) {
48 continue;
49 }
50 }
51 CXFA_Node* pDDNode = pDDGroupNode->GetFirstChildByName(dwNameHash);
52 if (!pDDNode)
53 continue;
54 if (pDDNode->GetElementType() != pDataChild->GetElementType())
55 break;
56
57 pDataChild->SetDataDescriptionNode(pDDNode);
58 XFA_DataDescription_UpdateDataRelation(pDataChild, pDDNode);
59 break;
60 }
61 }
62 }
63 CXFA_Node* XFA_DataDescription_MaybeCreateDataNode(
64 CXFA_Document* pDocument,
65 CXFA_Node* pDataParent,
66 XFA_Element eNodeType,
67 const CFX_WideString& wsName) {
68 if (!pDataParent) {
69 return nullptr;
70 }
71 CXFA_Node* pParentDDNode = pDataParent->GetDataDescriptionNode();
72 if (!pParentDDNode) {
73 CXFA_Node* pDataNode =
74 pDocument->CreateNode(XFA_XDPPACKET_Datasets, eNodeType);
75 ASSERT(pDataNode);
76 pDataNode->SetCData(XFA_ATTRIBUTE_Name, wsName);
77 pDataNode->CreateXMLMappingNode();
78 pDataParent->InsertChild(pDataNode);
79 pDataNode->SetFlag(XFA_NodeFlag_Initialized, false);
80 return pDataNode;
81 } else {
82 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_DDGroup>
83 sIterator(pParentDDNode);
84 for (CXFA_Node* pDDGroupNode = sIterator.GetCurrent(); pDDGroupNode;
85 pDDGroupNode = sIterator.MoveToNext()) {
86 if (pDDGroupNode != pParentDDNode) {
87 if (pDDGroupNode->GetElementType() != XFA_Element::DataGroup) {
88 continue;
89 }
90 CFX_WideString wsNamespace;
91 if (!pDDGroupNode->TryNamespace(wsNamespace) ||
92 wsNamespace != FX_WSTRC(L"http://ns.adobe.com/data-description/")) {
93 continue;
94 }
95 }
96 CXFA_Node* pDDNode =
97 pDDGroupNode->GetFirstChildByName(wsName.AsStringC());
98 if (!pDDNode) {
99 continue;
100 }
101 if (pDDNode->GetElementType() != eNodeType) {
102 break;
103 }
104 CXFA_Node* pDataNode =
105 pDocument->CreateNode(XFA_XDPPACKET_Datasets, eNodeType);
106 ASSERT(pDataNode);
107 pDataNode->SetCData(XFA_ATTRIBUTE_Name, wsName);
108 pDataNode->CreateXMLMappingNode();
109 if (eNodeType == XFA_Element::DataValue &&
110 pDDNode->GetEnum(XFA_ATTRIBUTE_Contains) ==
111 XFA_ATTRIBUTEENUM_MetaData) {
112 pDataNode->SetEnum(XFA_ATTRIBUTE_Contains, XFA_ATTRIBUTEENUM_MetaData);
113 }
114 pDataParent->InsertChild(pDataNode);
115 pDataNode->SetDataDescriptionNode(pDDNode);
116 pDataNode->SetFlag(XFA_NodeFlag_Initialized, false);
117 return pDataNode;
118 }
119 return nullptr;
120 }
121 }
OLDNEW
« no previous file with comments | « xfa/fxfa/parser/xfa_document_datadescription_imp.h ('k') | xfa/fxfa/parser/xfa_document_datamerger_imp.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698