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