• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 _FX_XML_H_
8 #define _FX_XML_H_
9 #ifndef _FX_BASIC_H_
10 #include "fx_basic.h"
11 #endif
12 class CXML_AttrItem : public CFX_Object
13 {
14 public:
15     CFX_ByteStringL	m_QSpaceName;
16     CFX_ByteStringL	m_AttrName;
17     CFX_WideStringL	m_Value;
18 
19     void	Empty(IFX_Allocator* pAllocator = NULL)
20     {
21         m_QSpaceName.Empty(pAllocator);
22         m_AttrName.Empty(pAllocator);
23         m_Value.Empty(pAllocator);
24     }
25 };
26 class CXML_AttrMap : public CFX_Object
27 {
28 public:
CXML_AttrMap()29     CXML_AttrMap()
30     {
31         m_pMap = NULL;
32     }
~CXML_AttrMap()33     ~CXML_AttrMap()
34     {
35         RemoveAll(NULL);
36     }
37     const CFX_WideStringL*	Lookup(FX_BSTR space, FX_BSTR name) const;
38     void					SetAt(FX_BSTR space, FX_BSTR name, FX_WSTR value, IFX_Allocator* pAllocator = NULL);
39     void					RemoveAt(FX_BSTR space, FX_BSTR name, IFX_Allocator* pAllocator = NULL);
40     void					RemoveAll(IFX_Allocator* pAllocator = NULL);
41     int						GetSize() const;
42     CXML_AttrItem&			GetAt(int index) const;
43     CFX_ObjectArray<CXML_AttrItem>*	m_pMap;
44 };
45 class CXML_Content : public CFX_Object
46 {
47 public:
CXML_Content()48     CXML_Content() : m_bCDATA(FALSE), m_Content() {}
~CXML_Content()49     ~CXML_Content()
50     {
51         Empty(NULL);
52     }
53     void	Empty(IFX_Allocator* pAllocator = NULL)
54     {
55         m_Content.Empty(pAllocator);
56     }
57     void	Set(FX_BOOL bCDATA, FX_WSTR content, IFX_Allocator* pAllocator = NULL)
58     {
59         m_bCDATA = bCDATA;
60         m_Content.Set(content, pAllocator);
61     }
62     FX_BOOL			m_bCDATA;
63     CFX_WideStringL	m_Content;
64 };
65 class CXML_Element : public CFX_Object
66 {
67 public:
68 
69     static CXML_Element*	Parse(const void* pBuffer, size_t size, FX_BOOL bSaveSpaceChars = FALSE, FX_FILESIZE* pParsedSize = NULL, IFX_Allocator* pAllocator = NULL);
70 
71     static CXML_Element*	Parse(IFX_FileRead *pFile, FX_BOOL bSaveSpaceChars = FALSE, FX_FILESIZE* pParsedSize = NULL, IFX_Allocator* pAllocator = NULL);
72 
73     static CXML_Element*	Parse(IFX_BufferRead *pBuffer, FX_BOOL bSaveSpaceChars = FALSE, FX_FILESIZE* pParsedSize = NULL, IFX_Allocator* pAllocator = NULL);
74 
75     CXML_Element(FX_BSTR qSpace, FX_BSTR tagName, IFX_Allocator* pAllocator = NULL);
76 
77     CXML_Element(FX_BSTR qTagName, IFX_Allocator* pAllocator = NULL);
78 
79     CXML_Element(IFX_Allocator* pAllocator = NULL);
80 
81     ~CXML_Element();
82 
83     void	Empty();
84 
85 
86 
87     CFX_ByteString			GetTagName(FX_BOOL bQualified = FALSE) const;
88     void					GetTagName(CFX_ByteStringL &tagName, FX_BOOL bQualified = FALSE) const;
89 
90     CFX_ByteString			GetNamespace(FX_BOOL bQualified = FALSE) const;
91     void					GetNamespace(CFX_ByteStringL &nameSpace, FX_BOOL bQualified = FALSE) const;
92 
93     CFX_ByteString			GetNamespaceURI(FX_BSTR qName) const;
94     void					GetNamespaceURI(FX_BSTR qName, CFX_ByteStringL &uri) const;
95 
GetParent()96     CXML_Element*			GetParent() const
97     {
98         return m_pParent;
99     }
100 
CountAttrs()101     FX_DWORD				CountAttrs() const
102     {
103         return m_AttrMap.GetSize();
104     }
105 
106     void					GetAttrByIndex(int index, CFX_ByteString &space, CFX_ByteString &name, CFX_WideString &value) const;
107     void					GetAttrByIndex(int index, CFX_ByteStringL &space, CFX_ByteStringL &name, CFX_WideStringL &value) const;
108 
109     FX_BOOL					HasAttr(FX_BSTR qName) const;
110 
111     FX_BOOL					GetAttrValue(FX_BSTR name, CFX_WideString& attribute) const;
GetAttrValue(FX_BSTR name)112     CFX_WideString			GetAttrValue(FX_BSTR name) const
113     {
114         CFX_WideString attr;
115         GetAttrValue(name, attr);
116         return attr;
117     }
118     const CFX_WideStringL*	GetAttrValuePtr(FX_BSTR name) const;
119 
120     FX_BOOL					GetAttrValue(FX_BSTR space, FX_BSTR name, CFX_WideString& attribute) const;
GetAttrValue(FX_BSTR space,FX_BSTR name)121     CFX_WideString			GetAttrValue(FX_BSTR space, FX_BSTR name) const
122     {
123         CFX_WideString attr;
124         GetAttrValue(space, name, attr);
125         return attr;
126     }
127     const CFX_WideStringL*	GetAttrValuePtr(FX_BSTR space, FX_BSTR name) const;
128 
129     FX_BOOL					GetAttrInteger(FX_BSTR name, int& attribute) const;
GetAttrInteger(FX_BSTR name)130     int						GetAttrInteger(FX_BSTR name) const
131     {
132         int attr = 0;
133         GetAttrInteger(name, attr);
134         return attr;
135     }
136 
137     FX_BOOL					GetAttrInteger(FX_BSTR space, FX_BSTR name, int& attribute) const;
GetAttrInteger(FX_BSTR space,FX_BSTR name)138     int						GetAttrInteger(FX_BSTR space, FX_BSTR name) const
139     {
140         int attr = 0;
141         GetAttrInteger(space, name, attr);
142         return attr;
143     }
144 
145     FX_BOOL					GetAttrFloat(FX_BSTR name, FX_FLOAT& attribute) const;
GetAttrFloat(FX_BSTR name)146     FX_FLOAT				GetAttrFloat(FX_BSTR name) const
147     {
148         FX_FLOAT attr = 0;
149         GetAttrFloat(name, attr);
150         return attr;
151     }
152 
153     FX_BOOL					GetAttrFloat(FX_BSTR space, FX_BSTR name, FX_FLOAT& attribute) const;
GetAttrFloat(FX_BSTR space,FX_BSTR name)154     FX_FLOAT				GetAttrFloat(FX_BSTR space, FX_BSTR name) const
155     {
156         FX_FLOAT attr = 0;
157         GetAttrFloat(space, name, attr);
158         return attr;
159     }
160 
161     FX_DWORD				CountChildren() const;
162 
163     enum ChildType { Invalid, Element, Content};
164 
165     ChildType				GetChildType(FX_DWORD index) const;
166 
167     CFX_WideString			GetContent(FX_DWORD index) const;
168     const CFX_WideStringL*	GetContentPtr(FX_DWORD index) const;
169 
170     CXML_Element*			GetElement(FX_DWORD index) const;
171 
GetElement(FX_BSTR space,FX_BSTR tag)172     CXML_Element*			GetElement(FX_BSTR space, FX_BSTR tag) const
173     {
174         return GetElement(space, tag, 0);
175     }
176 
177     FX_DWORD				CountElements(FX_BSTR space, FX_BSTR tag) const;
178 
179     CXML_Element*			GetElement(FX_BSTR space, FX_BSTR tag, int index) const;
180 
181     FX_DWORD				FindElement(CXML_Element *pChild) const;
182 
183 
184 
185 
186     void					SetTag(FX_BSTR qSpace, FX_BSTR tagname);
187 
188     void					SetTag(FX_BSTR qTagName);
189 
190     void					RemoveChildren();
191 
192     void					RemoveChild(FX_DWORD index);
193 
194 
195 protected:
196 
197     CXML_Element*			m_pParent;
198 
199     CFX_ByteStringL			m_QSpaceName;
200 
201     CFX_ByteStringL			m_TagName;
202 
203     CXML_AttrMap			m_AttrMap;
204 
205     CFX_PtrArray			m_Children;
206     friend class CXML_Parser;
207     friend class CXML_Composer;
208 };
209 #endif
210