1 | /*
|
---|
2 | Copyright (C) 2005-2006 Feeling Software Inc.
|
---|
3 | MIT License: http://www.opensource.org/licenses/mit-license.php
|
---|
4 | */
|
---|
5 |
|
---|
6 | /**
|
---|
7 | @file FUXmlWriter.h
|
---|
8 | This file defines the FUXmlWriter namespace.
|
---|
9 | */
|
---|
10 |
|
---|
11 | #ifndef _FU_XML_WRITER_H_
|
---|
12 | #define _FU_XML_WRITER_H_
|
---|
13 |
|
---|
14 | #ifdef HAS_LIBXML
|
---|
15 |
|
---|
16 | /**
|
---|
17 | Common XML writing utility functions.
|
---|
18 | Based on top of the LibXML2 library.
|
---|
19 | This whole namespace is considered external and should only be used
|
---|
20 | by the FCollada library.
|
---|
21 |
|
---|
22 | @ingroup FUtils
|
---|
23 | */
|
---|
24 | namespace FUXmlWriter
|
---|
25 | {
|
---|
26 | /** Creates a dangling XML tree node.
|
---|
27 | @param name The name of the new XML tree node.
|
---|
28 | @return The new XML tree node. This pointer should never be NULL. */
|
---|
29 | FCOLLADA_EXPORT xmlNode* CreateNode(const char* name);
|
---|
30 |
|
---|
31 | /** Appends a dangling XML tree child node to a XML tree node.
|
---|
32 | The child XML tree node is added at the end of the parent XML tree node children list.
|
---|
33 | @param parent The parent XML tree node.
|
---|
34 | @param child The child XML tree node. */
|
---|
35 | FCOLLADA_EXPORT void AddChild(xmlNode* parent, xmlNode* child);
|
---|
36 |
|
---|
37 | /** Creates a child XML tree node within a XML tree node.
|
---|
38 | The child XML tree node is added at the end of the parent XML tree node children list.
|
---|
39 | @param parent The parent XML tree node.
|
---|
40 | @param name The name of the new child node.
|
---|
41 | @return The new child XML tree node. */
|
---|
42 | FCOLLADA_EXPORT xmlNode* AddChild(xmlNode* parent, const char* name);
|
---|
43 |
|
---|
44 | /** Creates a child XML tree node within a XML tree node.
|
---|
45 | The child XML tree node is added at the end of the parent XML tree node children list.
|
---|
46 | The given content string is added to the returned child XML tree node.
|
---|
47 | @param parent The parent XML tree node.
|
---|
48 | @param name The name of the new child XML tree node.
|
---|
49 | @param content The content to add to the new child XML tree node.
|
---|
50 | @return The new child XML tree node. */
|
---|
51 | FCOLLADA_EXPORT xmlNode* AddChild(xmlNode* parent, const char* name, const char* content);
|
---|
52 | #ifdef UNICODE
|
---|
53 | FCOLLADA_EXPORT xmlNode* AddChild(xmlNode* parent, const char* name, const fstring& content); /**< See above. */
|
---|
54 | #endif
|
---|
55 | inline xmlNode* AddChild(xmlNode* parent, const char* name, const string& content) { return AddChild(parent, name, content.c_str()); } /**< See above. */
|
---|
56 | inline xmlNode* AddChild(xmlNode* parent, const char* name, FUSStringBuilder& content) { return AddChild(parent, name, content.ToCharPtr()); } /**< See above. */
|
---|
57 |
|
---|
58 | /** Creates a child XML tree node within a XML tree node.
|
---|
59 | The child XML tree node is added at the end of the parent XML tree node children list.
|
---|
60 | The given content value is added, in string-form, to the returned child XML tree node.
|
---|
61 | @param parent The parent XML tree node.
|
---|
62 | @param name The name of the new child XML tree node.
|
---|
63 | @param value A primitive value. This value is stringified and added, as content, to the new child XML tree node.
|
---|
64 | @return The new child XML tree node. */
|
---|
65 | template <typename T> inline xmlNode* AddChild(xmlNode* parent, const char* name, const T& value) { globalSBuilder.set(value); return AddChild(parent, name, globalSBuilder); }
|
---|
66 |
|
---|
67 | /** Appends a dangling XML tree node as a sibling of a XML tree node.
|
---|
68 | Two sibling XML tree nodes have the same parent XML tree node.
|
---|
69 | The dangling XML tree node is added at the end of the parent XML tree node children list.
|
---|
70 | @param sibling The sibling XML tree node. It must have a valid parent XML tree node.
|
---|
71 | @param dangling The dangling XML tree node. */
|
---|
72 | FCOLLADA_EXPORT void AddSibling(xmlNode* sibling, xmlNode* dangling);
|
---|
73 |
|
---|
74 | /** Creates a XML tree node as a sibling of a XML tree node.
|
---|
75 | Two sibling XML tree nodes have the same parent XML tree node.
|
---|
76 | The new XML tree node is added at the end of the parent XML tree node children list.
|
---|
77 | @param sibling The sibling XML tree node. It must have a valid parent XML tree node.
|
---|
78 | @param name The name of the new XML tree node.
|
---|
79 | @return The new sibling XML tree node. */
|
---|
80 | FCOLLADA_EXPORT xmlNode* AddSibling(xmlNode* sibling, const char* name);
|
---|
81 |
|
---|
82 | /** Returns a child XML tree node within a XML tree node.
|
---|
83 | If the child XML tree node with the given name does not exists, it is created and
|
---|
84 | the given content is added to the new XML tree node.
|
---|
85 | @param parent The parent XML tree node.
|
---|
86 | @param name The name of the child XML tree node.
|
---|
87 | @param content The content to add to the child XML tree node, if it must be created.
|
---|
88 | @return The child XML tree node. */
|
---|
89 | FCOLLADA_EXPORT xmlNode* AddChildOnce(xmlNode* parent, const char* name, const char* content=NULL);
|
---|
90 | inline xmlNode* AddChildOnce(xmlNode* parent, const char* name, const string& content) { return AddChildOnce(parent, name, content.c_str()); } /**< See above. */
|
---|
91 | inline xmlNode* AddChildOnce(xmlNode* parent, const char* name, FUSStringBuilder& content) { return AddChildOnce(parent, name, content.ToCharPtr()); } /**< See above. */
|
---|
92 |
|
---|
93 | /** Returns a child XML tree node within a XML tree node.
|
---|
94 | If the child XML tree node with the given name does not exists, it is created and
|
---|
95 | the given content is added to the new XML tree node.
|
---|
96 | @param parent The parent XML tree node.
|
---|
97 | @param name The name of the child XML tree node.
|
---|
98 | @param value A primitive value. If the child XML tree node must be created: this value is stringified and added as content.
|
---|
99 | @return The child XML tree node. */
|
---|
100 | template <typename T> inline xmlNode* AddChildOnce(xmlNode* parent, const char* name, const T& value) { globalSBuilder.set(value); return AddChildOnce(parent, name, globalSBuilder); }
|
---|
101 |
|
---|
102 | /** Appends a content string to a XML tree node.
|
---|
103 | The content string is added at the end of the XML tree node's content, with no special characters added.
|
---|
104 | @param node The XML tree node.
|
---|
105 | @param content The content to add to the XML tree node. */
|
---|
106 | FCOLLADA_EXPORT void AddContent(xmlNode* node, const char* content);
|
---|
107 | #ifdef UNICODE
|
---|
108 | FCOLLADA_EXPORT void AddContent(xmlNode* node, const fstring& content); /**< See above. */
|
---|
109 | #endif
|
---|
110 | inline void AddContent(xmlNode* node, const string& content) { AddContent(node, content.c_str()); } /**< See above. */
|
---|
111 | inline void AddContent(xmlNode* node, FUSStringBuilder& content) { AddContent(node, content.ToCharPtr()); } /**< See above. */
|
---|
112 |
|
---|
113 | /** Appends a primitive value to a XML tree node.
|
---|
114 | The primitive value is added at the end of the XML tree node's content, with no special characters added.
|
---|
115 | @param node The XML tree node.
|
---|
116 | @param value A primitive value. The value is stringified and added as content to the XML tree node. */
|
---|
117 | template <typename T> inline void AddContent(xmlNode* node, const T& value) { globalSBuilder.set(value); return AddContent(node, globalSBuilder); }
|
---|
118 |
|
---|
119 | /** Appends a XML attribute to a XML tree node.
|
---|
120 | A XML attribute appears in the form @<node name="value"/@>.
|
---|
121 | @param node The XML tree node.
|
---|
122 | @param attributeName The name of the XML attribute.
|
---|
123 | @param attributeValue The value of the XML attribute. */
|
---|
124 | FCOLLADA_EXPORT void AddAttribute(xmlNode* node, const char* attributeName, const char* attributeValue);
|
---|
125 | #ifdef UNICODE
|
---|
126 | FCOLLADA_EXPORT void AddAttribute(xmlNode* node, const char* attributeName, const fstring& attributeValue); /**< See above. */
|
---|
127 | #endif
|
---|
128 | inline void AddAttribute(xmlNode* node, const char* attributeName, FUSStringBuilder& attributeValue) { AddAttribute(node, attributeName, attributeValue.ToCharPtr()); } /**< See above. */
|
---|
129 | inline void AddAttribute(xmlNode* node, const char* attributeName, const string& attributeValue) { AddAttribute(node, attributeName, attributeValue.c_str()); } /**< See above. */
|
---|
130 |
|
---|
131 | /** Appends a XML attribute to a XML tree node.
|
---|
132 | A XML attribute appears in the form @<node name="value"@/@>.
|
---|
133 | @param node The XML tree node.
|
---|
134 | @param attributeName The name of the XML attribute.
|
---|
135 | @param attributeValue A primitive value. The value is stringified and set as the value of the XML attribute. */
|
---|
136 | template <typename T> inline void AddAttribute(xmlNode* node, const char* attributeName, const T& attributeValue) { globalSBuilder.set(attributeValue); AddAttribute(node, attributeName, globalSBuilder.ToCharPtr()); }
|
---|
137 |
|
---|
138 | /** Appends a dangling XML tree node to a XML tree node
|
---|
139 | The dangling XML tree node is inserted in lexical order,
|
---|
140 | after all the sibling XML tree node with the same name.
|
---|
141 | @param parent The XML tree node onto which the dangling XML node tree is appended.
|
---|
142 | @param child The dangling XML tree node. */
|
---|
143 | FCOLLADA_EXPORT void AddChildSorted(xmlNode* parent, xmlNode* child);
|
---|
144 |
|
---|
145 | /** Creates a new child XML tree node of a XML tree node
|
---|
146 | The new child XML tree node is inserted in lexical order,
|
---|
147 | after all the sibling XML tree node with the same name.
|
---|
148 | @param parent The XML tree node onto which the new XML node tree is created.
|
---|
149 | @param name The name of the new child XML tree node.
|
---|
150 | @param content A content string to be added to the child XML tree node.
|
---|
151 | @return The new child XML tree node. */
|
---|
152 | FCOLLADA_EXPORT xmlNode* AddChildSorted(xmlNode* parent, const char* name, const char* content=NULL);
|
---|
153 | };
|
---|
154 |
|
---|
155 | #endif // HAS_LIBXML
|
---|
156 |
|
---|
157 | #endif // _FU_XML_WRITER_H_
|
---|