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

Side by Side Diff: xfa/src/fxfa/parser/xfa_utils.h

Issue 1803723002: Move xfa/src up to xfa/. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Rebase to master Created 4 years, 9 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 #ifndef XFA_SRC_FXFA_PARSER_XFA_UTILS_H_
8 #define XFA_SRC_FXFA_PARSER_XFA_UTILS_H_
9
10 #include "xfa/include/fxfa/fxfa_basic.h"
11 #include "xfa/src/fde/xml/fde_xml.h"
12
13 class CXFA_LocaleValue;
14
15 FX_BOOL XFA_FDEExtension_ResolveNamespaceQualifier(
16 IFDE_XMLElement* pNode,
17 const CFX_WideStringC& wsQualifier,
18 CFX_WideString& wsNamespaceURI);
19 template <class NodeType, class TraverseStrategy>
20 class CXFA_NodeIteratorTemplate {
21 public:
22 CXFA_NodeIteratorTemplate(NodeType* pRootNode = NULL) : m_pRoot(pRootNode) {
23 if (pRootNode) {
24 m_NodeStack.Push(pRootNode);
25 }
26 }
27 FX_BOOL Init(NodeType* pRootNode) {
28 if (!pRootNode) {
29 return FALSE;
30 }
31 m_pRoot = pRootNode;
32 m_NodeStack.RemoveAll();
33 m_NodeStack.Push(pRootNode);
34 return TRUE;
35 }
36 void Clear() { m_NodeStack.RemoveAll(); }
37 void Reset() {
38 Clear();
39 if (m_pRoot) {
40 m_NodeStack.Push(m_pRoot);
41 }
42 }
43 FX_BOOL SetCurrent(NodeType* pCurNode) {
44 m_NodeStack.RemoveAll();
45 if (pCurNode) {
46 CFX_StackTemplate<NodeType*> revStack;
47 NodeType* pNode;
48 for (pNode = pCurNode; pNode && pNode != m_pRoot;
49 pNode = TraverseStrategy::GetParent(pNode)) {
50 revStack.Push(pNode);
51 }
52 if (!pNode) {
53 return FALSE;
54 }
55 revStack.Push(m_pRoot);
56 while (revStack.GetSize()) {
57 m_NodeStack.Push(*revStack.GetTopElement());
58 revStack.Pop();
59 }
60 }
61 return TRUE;
62 }
63 NodeType* GetCurrent() const {
64 return m_NodeStack.GetSize() ? *m_NodeStack.GetTopElement() : NULL;
65 }
66 NodeType* GetRoot() const { return m_pRoot; }
67 NodeType* MoveToPrev() {
68 int32_t nStackLength = m_NodeStack.GetSize();
69 if (nStackLength == 1) {
70 return NULL;
71 } else if (nStackLength > 1) {
72 NodeType* pCurItem = *m_NodeStack.GetTopElement();
73 m_NodeStack.Pop();
74 NodeType* pParentItem = *m_NodeStack.GetTopElement();
75 NodeType* pParentFirstChildItem =
76 TraverseStrategy::GetFirstChild(pParentItem);
77 if (pCurItem == pParentFirstChildItem) {
78 return pParentItem;
79 }
80 NodeType *pPrevItem = pParentFirstChildItem, *pPrevItemNext = NULL;
81 for (; pPrevItem; pPrevItem = pPrevItemNext) {
82 pPrevItemNext = TraverseStrategy::GetNextSibling(pPrevItem);
83 if (!pPrevItemNext || pPrevItemNext == pCurItem) {
84 break;
85 }
86 }
87 m_NodeStack.Push(pPrevItem);
88 } else {
89 m_NodeStack.RemoveAll();
90 if (m_pRoot) {
91 m_NodeStack.Push(m_pRoot);
92 }
93 }
94 if (m_NodeStack.GetSize() > 0) {
95 NodeType* pChildItem = *m_NodeStack.GetTopElement();
96 while ((pChildItem = TraverseStrategy::GetFirstChild(pChildItem)) !=
97 NULL) {
98 while (NodeType* pNextItem =
99 TraverseStrategy::GetNextSibling(pChildItem)) {
100 pChildItem = pNextItem;
101 }
102 m_NodeStack.Push(pChildItem);
103 }
104 return *m_NodeStack.GetTopElement();
105 }
106 return NULL;
107 }
108 NodeType* MoveToNext() {
109 NodeType** ppNode = NULL;
110 NodeType* pCurrent = GetCurrent();
111 while (m_NodeStack.GetSize() > 0) {
112 while ((ppNode = m_NodeStack.GetTopElement())) {
113 if (pCurrent != *ppNode) {
114 return *ppNode;
115 }
116 NodeType* pChild = TraverseStrategy::GetFirstChild(*ppNode);
117 if (pChild == NULL) {
118 break;
119 }
120 m_NodeStack.Push(pChild);
121 }
122 while ((ppNode = m_NodeStack.GetTopElement())) {
123 NodeType* pNext = TraverseStrategy::GetNextSibling(*ppNode);
124 m_NodeStack.Pop();
125 if (m_NodeStack.GetSize() == 0) {
126 break;
127 }
128 if (pNext) {
129 m_NodeStack.Push(pNext);
130 break;
131 }
132 }
133 }
134 return NULL;
135 }
136 NodeType* SkipChildrenAndMoveToNext() {
137 NodeType** ppNode = NULL;
138 while ((ppNode = m_NodeStack.GetTopElement())) {
139 NodeType* pNext = TraverseStrategy::GetNextSibling(*ppNode);
140 m_NodeStack.Pop();
141 if (m_NodeStack.GetSize() == 0) {
142 break;
143 }
144 if (pNext) {
145 m_NodeStack.Push(pNext);
146 break;
147 }
148 }
149 return GetCurrent();
150 }
151
152 protected:
153 NodeType* m_pRoot;
154 CFX_StackTemplate<NodeType*> m_NodeStack;
155 };
156 template <class KeyType>
157 class CXFA_PtrSetTemplate : private CFX_MapPtrToPtr {
158 public:
159 CXFA_PtrSetTemplate() : CFX_MapPtrToPtr(10) {}
160
161 int GetCount() const { return CFX_MapPtrToPtr::GetCount(); }
162
163 FX_BOOL IsEmpty() const { return CFX_MapPtrToPtr::IsEmpty(); }
164
165 FX_BOOL Lookup(KeyType key) const {
166 void* pValue = NULL;
167 return CFX_MapPtrToPtr::Lookup((void*)key, pValue);
168 }
169
170 FX_BOOL operator[](KeyType key) { return Lookup(key); }
171
172 void Add(KeyType key) { CFX_MapPtrToPtr::SetAt((void*)key, (void*)key); }
173
174 FX_BOOL RemoveKey(KeyType key) {
175 return CFX_MapPtrToPtr::RemoveKey((void*)key);
176 }
177
178 void RemoveAll() { CFX_MapPtrToPtr::RemoveAll(); }
179
180 FX_POSITION GetStartPosition() const {
181 return CFX_MapPtrToPtr::GetStartPosition();
182 }
183
184 void GetNextAssoc(FX_POSITION& rNextPosition, KeyType& rKey) const {
185 void* pKey = NULL;
186 void* pValue = NULL;
187 CFX_MapPtrToPtr::GetNextAssoc(rNextPosition, pKey, pValue);
188 rKey = (KeyType)(uintptr_t)pKey;
189 }
190 };
191 class CXFA_Node;
192 class CXFA_WidgetData;
193
194 CXFA_Node* XFA_CreateUIChild(CXFA_Node* pNode, XFA_ELEMENT& eWidgetType);
195 CXFA_LocaleValue XFA_GetLocaleValue(CXFA_WidgetData* pWidgetData);
196 CFX_WideString XFA_NumericLimit(const CFX_WideString& wsValue,
197 int32_t iLead,
198 int32_t iTread);
199 FX_DOUBLE XFA_WideStringToDouble(const CFX_WideString& wsStringVal);
200 FX_DOUBLE XFA_ByteStringToDouble(const CFX_ByteStringC& szStringVal);
201 int32_t XFA_MapRotation(int32_t nRotation);
202
203 FX_BOOL XFA_RecognizeRichText(IFDE_XMLElement* pRichTextXMLNode);
204 void XFA_GetPlainTextFromRichText(IFDE_XMLNode* pXMLNode,
205 CFX_WideString& wsPlainText);
206 FX_BOOL XFA_FieldIsMultiListBox(CXFA_Node* pFieldNode);
207 IFX_Stream* XFA_CreateWideTextRead(const CFX_WideString& wsBuffer);
208 FX_BOOL XFA_IsLayoutElement(XFA_ELEMENT eElement,
209 FX_BOOL bLayoutContainer = FALSE);
210 FX_BOOL XFA_IsTakingupSpace(XFA_ATTRIBUTEENUM ePresence);
211 FX_BOOL XFA_IsFlowingLayout(XFA_ATTRIBUTEENUM eLayout);
212 FX_BOOL XFA_IsHorizontalFlow(XFA_ATTRIBUTEENUM eLayout);
213 void XFA_DataExporter_DealWithDataGroupNode(CXFA_Node* pDataNode);
214 void XFA_DataExporter_RegenerateFormFile(CXFA_Node* pNode,
215 IFX_Stream* pStream,
216 const FX_CHAR* pChecksum = NULL,
217 FX_BOOL bSaveXML = FALSE);
218
219 #endif // XFA_SRC_FXFA_PARSER_XFA_UTILS_H_
OLDNEW
« no previous file with comments | « xfa/src/fxfa/parser/xfa_script_signaturepseudomodel.cpp ('k') | xfa/src/fxfa/parser/xfa_utils_imp.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698