1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _XFA_UTILS_H_
8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define _XFA_UTILS_H_
9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL XFA_FDEExtension_ResolveNamespaceQualifier(
10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    IFDE_XMLElement* pNode,
11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const CFX_WideStringC& wsQualifier,
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_WideString& wsNamespaceURI);
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntemplate <class NodeType, class TraverseStrategy>
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CXFA_NodeIteratorTemplate {
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_NodeIteratorTemplate(NodeType* pRootNode = NULL) : m_pRoot(pRootNode) {
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pRootNode) {
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_NodeStack.Push(pRootNode);
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL Init(NodeType* pRootNode) {
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!pRootNode) {
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return FALSE;
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pRoot = pRootNode;
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_NodeStack.RemoveAll();
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_NodeStack.Push(pRootNode);
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return TRUE;
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void Clear() { m_NodeStack.RemoveAll(); }
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void Reset() {
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Clear();
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (m_pRoot) {
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_NodeStack.Push(m_pRoot);
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL SetCurrent(NodeType* pCurNode) {
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_NodeStack.RemoveAll();
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pCurNode) {
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CFX_StackTemplate<NodeType*> revStack;
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      NodeType* pNode;
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      for (pNode = pCurNode; pNode && pNode != m_pRoot;
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           pNode = TraverseStrategy::GetParent(pNode)) {
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        revStack.Push(pNode);
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!pNode) {
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return FALSE;
48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      revStack.Push(m_pRoot);
50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      while (revStack.GetSize()) {
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_NodeStack.Push(*revStack.GetTopElement());
52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        revStack.Pop();
53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return TRUE;
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  NodeType* GetCurrent() const {
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return m_NodeStack.GetSize() ? *m_NodeStack.GetTopElement() : NULL;
59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  NodeType* GetRoot() const { return m_pRoot; }
61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  NodeType* MoveToPrev() {
62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t nStackLength = m_NodeStack.GetSize();
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (nStackLength == 1) {
64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return NULL;
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else if (nStackLength > 1) {
66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      NodeType* pCurItem = *m_NodeStack.GetTopElement();
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_NodeStack.Pop();
68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      NodeType* pParentItem = *m_NodeStack.GetTopElement();
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      NodeType* pParentFirstChildItem =
70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          TraverseStrategy::GetFirstChild(pParentItem);
71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pCurItem == pParentFirstChildItem) {
72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return pParentItem;
73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      NodeType *pPrevItem = pParentFirstChildItem, *pPrevItemNext = NULL;
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      for (; pPrevItem; pPrevItem = pPrevItemNext) {
76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pPrevItemNext = TraverseStrategy::GetNextSibling(pPrevItem);
77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (!pPrevItemNext || pPrevItemNext == pCurItem) {
78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_NodeStack.Push(pPrevItem);
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else {
83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_NodeStack.RemoveAll();
84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (m_pRoot) {
85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_NodeStack.Push(m_pRoot);
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (m_NodeStack.GetSize() > 0) {
89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      NodeType* pChildItem = *m_NodeStack.GetTopElement();
90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      while ((pChildItem = TraverseStrategy::GetFirstChild(pChildItem)) !=
91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             NULL) {
92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        while (NodeType* pNextItem =
93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   TraverseStrategy::GetNextSibling(pChildItem)) {
94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pChildItem = pNextItem;
95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_NodeStack.Push(pChildItem);
97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return *m_NodeStack.GetTopElement();
99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return NULL;
101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  NodeType* MoveToNext() {
103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    NodeType** ppNode = NULL;
104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    NodeType* pCurrent = GetCurrent();
105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    while (m_NodeStack.GetSize() > 0) {
106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      while ((ppNode = m_NodeStack.GetTopElement()) != NULL) {
107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pCurrent != *ppNode) {
108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          return *ppNode;
109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        NodeType* pChild = TraverseStrategy::GetFirstChild(*ppNode);
111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pChild == NULL) {
112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_NodeStack.Push(pChild);
115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      while ((ppNode = m_NodeStack.GetTopElement()) != NULL) {
117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        NodeType* pNext = TraverseStrategy::GetNextSibling(*ppNode);
118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_NodeStack.Pop();
119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (m_NodeStack.GetSize() == 0) {
120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pNext) {
123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          m_NodeStack.Push(pNext);
124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return NULL;
129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  NodeType* SkipChildrenAndMoveToNext() {
131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    NodeType** ppNode = NULL;
132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    while ((ppNode = m_NodeStack.GetTopElement()) != NULL) {
133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      NodeType* pNext = TraverseStrategy::GetNextSibling(*ppNode);
134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_NodeStack.Pop();
135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (m_NodeStack.GetSize() == 0) {
136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pNext) {
139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_NodeStack.Push(pNext);
140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return GetCurrent();
144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  NodeType* m_pRoot;
148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_StackTemplate<NodeType*> m_NodeStack;
149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntemplate <class KeyType>
151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CXFA_PtrSetTemplate : private CFX_MapPtrToPtr {
152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_PtrSetTemplate() : CFX_MapPtrToPtr(10) {}
154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetCount() const { return CFX_MapPtrToPtr::GetCount(); }
156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsEmpty() const { return CFX_MapPtrToPtr::IsEmpty(); }
158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL Lookup(KeyType key) const {
160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    void* pValue = NULL;
161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return CFX_MapPtrToPtr::Lookup((void*)key, pValue);
162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL operator[](KeyType key) { return Lookup(key); }
165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void Add(KeyType key) { CFX_MapPtrToPtr::SetAt((void*)key, (void*)key); }
167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL RemoveKey(KeyType key) {
169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return CFX_MapPtrToPtr::RemoveKey((void*)key);
170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void RemoveAll() { CFX_MapPtrToPtr::RemoveAll(); }
173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_POSITION GetStartPosition() const {
175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return CFX_MapPtrToPtr::GetStartPosition();
176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetNextAssoc(FX_POSITION& rNextPosition, KeyType& rKey) const {
179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    void* pKey = NULL;
180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    void* pValue = NULL;
181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_MapPtrToPtr::GetNextAssoc(rNextPosition, pKey, pValue);
182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    rKey = (KeyType)(uintptr_t)pKey;
183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CXFA_Node;
186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CXFA_WidgetData;
187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fxfa_localevalue.h"
188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* XFA_CreateUIChild(CXFA_Node* pNode, XFA_ELEMENT& eWidgetType);
189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_LocaleValue XFA_GetLocaleValue(CXFA_WidgetData* pWidgetData);
190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString XFA_NumericLimit(const CFX_WideString& wsValue,
191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                int32_t iLead,
192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                int32_t iTread);
193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_DOUBLE XFA_WideStringToDouble(const CFX_WideString& wsStringVal);
194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_DOUBLE XFA_ByteStringToDouble(const CFX_ByteStringC& szStringVal);
195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t XFA_MapRotation(int32_t nRotation);
196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef XFA_PARSE_HAS_LINEIDENTIFIER
197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define XFA_PARSE_HAS_LINEIDENTIFIER
198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL XFA_RecognizeRichText(IFDE_XMLElement* pRichTextXMLNode);
200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid XFA_GetPlainTextFromRichText(IFDE_XMLNode* pXMLNode,
201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                  CFX_WideString& wsPlainText);
202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL XFA_FieldIsMultiListBox(CXFA_Node* pFieldNode);
203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIFX_Stream* XFA_CreateWideTextRead(const CFX_WideString& wsBuffer);
204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL XFA_IsLayoutElement(XFA_ELEMENT eElement,
205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            FX_BOOL bLayoutContainer = FALSE);
206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL XFA_IsTakingupSpace(XFA_ATTRIBUTEENUM ePresence);
207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL XFA_IsFlowingLayout(XFA_ATTRIBUTEENUM eLayout);
208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL XFA_IsHorizontalFlow(XFA_ATTRIBUTEENUM eLayout);
209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid XFA_DataExporter_DealWithDataGroupNode(CXFA_Node* pDataNode);
210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid XFA_DataExporter_RegenerateFormFile(CXFA_Node* pNode,
211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         IFX_Stream* pStream,
212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         const FX_CHAR* pChecksum = NULL,
213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         FX_BOOL bSaveXML = FALSE);
214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
215