fastdo  0.6.16
全部  命名空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义
elem_utils.hpp
浏览该文件的文档.
1 #ifndef __EIEN__EIENML__ELEMENTUTILS_HPP__
2 #define __EIEN__EIENML__ELEMENTUTILS_HPP__
3 
7 namespace eienml
8 {
11 {
16 };
17 
20 {
26 };
27 
28 // 相关宏 ------------------------------------------------------------------------------------
29 
30 #define DEFINE_NEWDOC_FUNC( cls ) DEFINE_NEWOBJ_FUNC( cls, eienml::Document )
31 #define DEFINE_NEWBLOCK_FUNC( cls ) DEFINE_NEWOBJ_FUNC( cls, eienml::Block )
32 #define DEFINE_NEWELEM_FUNC( cls ) DEFINE_NEWOBJ_FUNC( cls, eienml::Element )
33 #define DEFINE_NEWTEXT_FUNC( cls ) DEFINE_NEWOBJ_FUNC( cls, eienml::TextNode )
34 #define DEFINE_NEWNODE_FUNC( cls ) DEFINE_NEWOBJ_FUNC( cls, eienml::Node )
35 #define DEFINE_NEWOBJ_FUNC( cls, ret ) \
36 inline static ret * NewInstance( void )\
37 {\
38  return new cls();\
39 }
40 
41 // 指针转化
42 #define ClassObj( cls, p ) ( static_cast<cls *>(p) )
43 #define TextNodeObj( p ) ClassObj( eienml::TextNode, (p) )
44 #define BlockObj( p ) ClassObj( eienml::Block, (p) )
45 #define ElementObj( p ) ClassObj( eienml::Element, (p) )
46 #define DocumentObj( p ) ClassObj( eienml::Document, (p) )
47 
48 // 相关类 ------------------------------------------------------------------------------------
49 class ElemPackage;
50 class Element;
51 class Document;
52 
55 {
56 public:
58 
59 protected:
60  Node( void );
61  virtual ~Node( void );
62 
63 public:
64  void delInstance( void );
66  virtual winux::AnsiString toString( int procType = ProcType_Raw ) const;
68  virtual void doWork( void );
69 
70  DEFINE_ATTR_METHOD_VAL( ElemPackage const *, Package, package )
71  DEFINE_ATTR_METHOD_VAL( Element *, Parent, parent )
74  Document * getDocument( void ) const;
75 
76 protected:
77  ElemPackage const * package;
78  Element * parent;
79  NodeType type;
80 };
81 
83 class EIENML_DLL TextNode : public Node
84 {
85 public:
87 
88 protected:
89  TextNode( void );
90  virtual ~TextNode( void );
91 
92 public:
93  virtual winux::AnsiString toString( int procType = ProcType_Raw ) const override;
94  virtual void doWork( void ) override;
95 
96 public:
97  winux::AnsiString value;
98  winux::AnsiString rawTextNode;
99 };
100 
102 class EIENML_DLL Block : public Node
103 {
104 public:
106 
107 protected:
108  Block( void );
109  virtual ~Block( void );
110 
111 public:
112  virtual winux::AnsiString toString( int procType = ProcType_Raw ) const override;
113 
114 public:
115  winux::AnsiString blockTag;
116  winux::AnsiString blockContent;
117  winux::AnsiString rawBlock;
118 };
119 
120 typedef std::map<winux::AnsiString, winux::AnsiString> Attributes;
121 typedef std::vector<Node *> NodeArray;
122 typedef std::vector<Block *> BlockArray;
123 typedef std::vector<Element *> ElementArray;
124 
126 class EIENML_DLL Element : public Node
127 {
128 public:
130 
131 protected:
132  Element( void );
133  virtual ~Element( void );
134 
135 public:
136  virtual winux::AnsiString toString( int procType = ProcType_Raw ) const override;
137  virtual void doWork( void ) override;
139  virtual winux::AnsiString childToString( int procType = ProcType_Raw ) const;
141  virtual void childDoWork( void );
142 
144  virtual winux::AnsiString attrsToString( void ) const;
145 
153  bool addTextToLast( winux::AnsiString const & str, TextNode * * p = NULL );
155  bool addChild( Node * element );
157  void getElements( ElementArray * arr, winux::AnsiString const & tagName );
159  void getBlocks( BlockArray * arr, winux::AnsiString const & blockTag );
161  bool hasAttr( winux::AnsiString const & name ) const;
163  winux::AnsiString getAttr( winux::AnsiString const & name ) const;
165  void setAttr( winux::AnsiString const & name, winux::AnsiString const & value );
167  void delAttr( winux::AnsiString const & name );
169  bool hasChildren( void ) { return !this->children.empty(); }
170 
171 public:
172  Attributes attrs;
173  NodeArray children;
178  bool odd;
179 };
180 
182 class EIENML_DLL OddElement : public Element
183 {
184 public:
186 
187 protected:
188  OddElement( void )
189  {
190  this->odd = true;
191  }
192 };
193 
195 class EIENML_DLL Document : public Element
196 {
197 public:
199 
200 protected:
201  Document( void );
202  virtual ~Document( void );
203 
204 public:
205  virtual winux::AnsiString toString( int procType = ProcType_Raw ) const override;
206  virtual void doWork( void ) override;
207 
208 };
209 
210 } // namespace eienml
211 
212 
213 #endif // __EIEN__EIENML__ELEMENTUTILS_HPP__
XString< char > AnsiString
Definition: utilities.hpp:257
#define DEFINE_ATTR_METHOD_VAL(ty, name, memname)
Definition: utilities.hpp:142
std::vector< Block * > BlockArray
Definition: elem_utils.hpp:122
winux::AnsiString tagName
Tag名称
Definition: elem_utils.hpp:176
std::vector< Element * > ElementArray
Definition: elem_utils.hpp:123
单独元素类(没有尾)
Definition: elem_utils.hpp:182
块节点类
Definition: elem_utils.hpp:102
STL namespace.
#define DEFINE_NEWDOC_FUNC(cls)
Definition: elem_utils.hpp:30
NodeType
节点类型
Definition: elem_utils.hpp:10
去掉元素tag,输出非元素部分
Definition: elem_utils.hpp:24
#define EIENML_DLL
Definition: eienml.hpp:19
元素节点类
Definition: elem_utils.hpp:126
std::vector< Node * > NodeArray
Definition: elem_utils.hpp:121
不处理,原始内容
Definition: elem_utils.hpp:21
winux::AnsiString defAttr
默认属性
Definition: elem_utils.hpp:177
#define DEFINE_NEWELEM_FUNC(cls)
Definition: elem_utils.hpp:32
简单处理,输出符合规则的内容
Definition: elem_utils.hpp:22
ProcType
元素处理种类
Definition: elem_utils.hpp:19
NodeArray children
子节点列表
Definition: elem_utils.hpp:173
展现树形结构
Definition: elem_utils.hpp:23
#define DEFINE_NEWNODE_FUNC(cls)
Definition: elem_utils.hpp:34
文本节点类
Definition: elem_utils.hpp:83
#define DEFINE_ATTR_METHOD_VAL_READONLY(ty, name, memname)
Definition: utilities.hpp:148
#define DEFINE_NEWTEXT_FUNC(cls)
Definition: elem_utils.hpp:33
winux::AnsiString rawElemTail
未解析的原始尾文本
Definition: elem_utils.hpp:175
节点基类
Definition: elem_utils.hpp:54
元素包 - 表示一套标签语言体系的相关要素
Definition: elem_package.hpp:5
bool odd
是否为单独元素(没有尾)
Definition: elem_utils.hpp:178
#define DEFINE_NEWBLOCK_FUNC(cls)
Definition: elem_utils.hpp:31
winux::AnsiString rawElemHead
未解析的原始头文本
Definition: elem_utils.hpp:174
替换处理,输出转换后的内容
Definition: elem_utils.hpp:25
std::map< winux::AnsiString, winux::AnsiString > Attributes
Definition: elem_utils.hpp:120
Attributes attrs
属性列表
Definition: elem_utils.hpp:172
跨平台基础功能库
Definition: archives.hpp:7