Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 1 | TinyXML-2 |
| 2 | ========= |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 3 | |
| 4 | TinyXML is a simple, small, efficient, C++ XML parser that can be |
| 5 | easily integrated into other programs. |
| 6 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 7 | The master is hosted on github: |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 8 | https://github.com/leethomason/tinyxml2 |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 9 | |
Lee Thomason (grinliz) | 6a22be2 | 2012-04-04 12:39:05 -0700 | [diff] [blame] | 10 | The online HTML version of these docs: |
| 11 | http://grinninglizard.com/tinyxml2docs/index.html |
| 12 | |
Lee Thomason (grinliz) | ae209f6 | 2012-04-04 22:00:07 -0700 | [diff] [blame] | 13 | Examples are in the "related pages" tab of the HTML docs. |
Lee Thomason (grinliz) | 6a22be2 | 2012-04-04 12:39:05 -0700 | [diff] [blame] | 14 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 15 | What it does. |
| 16 | ------------- |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 17 | |
| 18 | In brief, TinyXML parses an XML document, and builds from that a |
| 19 | Document Object Model (DOM) that can be read, modified, and saved. |
| 20 | |
| 21 | XML stands for "eXtensible Markup Language." It is a general purpose |
| 22 | human and machine readable markup language to describe arbitrary data. |
| 23 | All those random file formats created to store application data can |
| 24 | all be replaced with XML. One parser for everything. |
| 25 | |
| 26 | http://en.wikipedia.org/wiki/XML |
| 27 | |
| 28 | There are different ways to access and interact with XML data. |
| 29 | TinyXML-2 uses a Document Object Model (DOM), meaning the XML data is parsed |
| 30 | into a C++ objects that can be browsed and manipulated, and then |
| 31 | written to disk or another output stream. You can also construct an XML document |
| 32 | from scratch with C++ objects and write this to disk or another output |
| 33 | stream. You can even use TinyXML-2 to stream XML programmatically from |
| 34 | code without creating a document first. |
| 35 | |
| 36 | TinyXML-2 is designed to be easy and fast to learn. It is one header and |
| 37 | one cpp file. Simply add these to your project and off you go. |
| 38 | There is an example file - xmltest.cpp - to get you started. |
| 39 | |
| 40 | TinyXML-2 is released under the ZLib license, |
| 41 | so you can use it in open source or commercial code. The details |
| 42 | of the license are at the top of every source file. |
| 43 | |
| 44 | TinyXML-2 attempts to be a flexible parser, but with truly correct and |
| 45 | compliant XML output. TinyXML-2 should compile on any reasonably C++ |
| 46 | compliant system. It does not rely on exceptions, RTTI, or the STL. |
| 47 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 48 | What it doesnt do. |
| 49 | ------------------- |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 50 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 51 | TinyXML-2 doesn't parse or use DTDs (Document Type Definitions) or XSLs |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 52 | (eXtensible Stylesheet Language.) There are other parsers out there |
| 53 | that are much more fully |
| 54 | featured. But they are also much bigger, take longer to set up in |
| 55 | your project, have a higher learning curve, and often have a more |
| 56 | restrictive license. If you are working with browsers or have more |
| 57 | complete XML needs, TinyXML-2 is not the parser for you. |
| 58 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 59 | TinyXML-1 vs. TinyXML-2 |
| 60 | ----------------------- |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 61 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 62 | Which should you use? TinyXML-2 uses a similar API to TinyXML-1 and the same |
| 63 | rich test cases. But the implementation of the parser is completely re-written |
| 64 | to make it more appropriate for use in a game. It uses less memory, is faster, |
Lee Thomason | 6f381b7 | 2012-03-02 12:59:39 -0800 | [diff] [blame] | 65 | and uses far few memory allocations. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 66 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 67 | TinyXML-2 has no requirement for STL, but has also dropped all STL support. All |
| 68 | strings are query and set as 'const char*'. This allows the use of internal |
| 69 | allocators, and keeps the code much simpler. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 70 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 71 | Both parsers: |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 72 | |
| 73 | 1. Simple to use with similar APIs. |
| 74 | 2. DOM based parser. |
| 75 | 3. UTF-8 Unicode support. http://en.wikipedia.org/wiki/UTF-8 |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 76 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 77 | Advantages of TinyXML-2 |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 78 | |
| 79 | 1. The focus of all future dev. |
| 80 | 2. Many fewer memory allocation (1/10th to 1/100th), uses less memory |
| 81 | (about 40% of TinyXML-1), and faster. |
| 82 | 3. No STL requirement. |
| 83 | 4. More modern C++, including a proper namespace. |
| 84 | 5. Proper and useful handling of whitespace |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 85 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 86 | Advantages of TinyXML-1 |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 87 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 88 | 1. Can report the location of parsing errors. |
| 89 | 2. Support for some C++ STL conventions: streams and strings |
| 90 | 3. Very mature and well debugged code base. |
| 91 | |
| 92 | Features |
| 93 | -------- |
| 94 | |
| 95 | ### Memory Model |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 96 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 97 | An XMLDocument is a C++ object like any other, that can be on the stack, or |
| 98 | new'd and deleted on the heap. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 99 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 100 | However, any sub-node of the Document, XMLElement, XMLText, etc, can only |
| 101 | be created by calling the appropriate XMLDocument::NewElement, NewText, etc. |
| 102 | method. Although you have pointers to these objects, they are still owned |
| 103 | by the Document. When the Document is deleted, so are all the nodes it contains. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 104 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 105 | ### White Space |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 106 | |
| 107 | Microsoft has an excellent article on white space: http://msdn.microsoft.com/en-us/library/ms256097.aspx |
| 108 | |
Lee Thomason (grinliz) | c5defa6 | 2012-09-08 22:06:14 -0700 | [diff] [blame^] | 109 | By default, TinyXML-2 preserves white space in a (hopefully) sane way that is almost complient with the |
Lee Thomason | c50b6b4 | 2012-03-24 12:51:47 -0700 | [diff] [blame] | 110 | spec.(TinyXML-1 used a completely outdated model.) |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 111 | |
| 112 | As a first step, all newlines / carriage-returns / line-feeds are normalized to a |
| 113 | line-feed character, as required by the XML spec. |
| 114 | |
| 115 | White space in text is preserved. For example: |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 116 | |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 117 | <element> Hello, World</element> |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 118 | |
Lee Thomason | c50b6b4 | 2012-03-24 12:51:47 -0700 | [diff] [blame] | 119 | The leading space before the "Hello" and the double space after the comma are |
| 120 | preserved. Line-feeds are preserved, as in this example: |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 121 | |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 122 | <element> Hello again, |
| 123 | World</element> |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 124 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 125 | However, white space between elements is **not** preserved. Although not strictly |
Lee Thomason | c50b6b4 | 2012-03-24 12:51:47 -0700 | [diff] [blame] | 126 | compliant, tracking and reporting inter-element space is awkward, and not normally |
| 127 | valuable. TinyXML-2 sees these as the same XML: |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 128 | |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 129 | <document> |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 130 | <data>1</data> |
| 131 | <data>2</data> |
| 132 | <data>3</data> |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 133 | </document> |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 134 | |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 135 | <document><data>1</data><data>2</data><data>3</data></document> |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 136 | |
Lee Thomason (grinliz) | c5defa6 | 2012-09-08 22:06:14 -0700 | [diff] [blame^] | 137 | #### Whitespace Collapse |
| 138 | |
| 139 | For some applications, it is preferable to collapse whitespace. TinyXML-2 |
| 140 | supports this with the 'whitespace' parameter to the XMLDocument constructor. |
| 141 | (The default is to preserve whitespace, as described above.) |
| 142 | |
| 143 | However, you may also use COLLAPSE_WHITESPACE, which will: |
| 144 | |
| 145 | * Remove leading and trailing whitespace |
| 146 | * Convert newlines and line-feeds into a space character |
| 147 | * Collapse a run of any number of space characters into a single space character |
| 148 | |
| 149 | This can be useful for text documents stored in XML. |
| 150 | |
| 151 | Note that (currently) there is a performance impact for using COLLAPSE_WHITESPACE. |
| 152 | It essentially causes the XML to be parsed twice. |
| 153 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 154 | ### Entities |
| 155 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 156 | TinyXML-2 recognizes the pre-defined "character entities", meaning special |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 157 | characters. Namely: |
| 158 | |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 159 | & & |
| 160 | < < |
| 161 | > > |
| 162 | " " |
| 163 | ' ' |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 164 | |
| 165 | These are recognized when the XML document is read, and translated to there |
| 166 | UTF-8 equivalents. For instance, text with the XML of: |
| 167 | |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 168 | Far & Away |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 169 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 170 | will have the Value() of "Far & Away" when queried from the XMLText object, |
| 171 | and will be written back to the XML stream/file as an ampersand. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 172 | |
| 173 | Additionally, any character can be specified by its Unicode code point: |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 174 | The syntax " " or " " are both to the non-breaking space characher. |
| 175 | This is called a 'numeric character reference'. Any numeric character reference |
| 176 | that isn't one of the special entities above, will be read, but written as a |
| 177 | regular code point. The output is correct, but the entity syntax isn't preserved. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 178 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 179 | ### Printing |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 180 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 181 | #### Print to file |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 182 | You can directly use the convenience function: |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 183 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 184 | XMLDocument doc; |
| 185 | ... |
Lee Thomason | 77d7f20 | 2012-07-29 18:51:41 -0700 | [diff] [blame] | 186 | doc.SaveFile( "foo.xml" ); |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 187 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 188 | Or the XMLPrinter class: |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 189 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 190 | XMLPrinter printer( fp ); |
| 191 | doc.Print( &printer ); |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 192 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 193 | #### Print to memory |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 194 | Printing to memory is supported by the XMLPrinter. |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 195 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 196 | XMLPrinter printer; |
| 197 | doc->Print( &printer ); |
| 198 | // printer.CStr() has a const char* to the XML |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 199 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 200 | #### Print without an XMLDocument |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 201 | |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 202 | When loading, an XML parser is very useful. However, sometimes |
| 203 | when saving, it just gets in the way. The code is often set up |
| 204 | for streaming, and constructing the DOM is just overhead. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 205 | |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 206 | The Printer supports the streaming case. The following code |
| 207 | prints out a trivially simple XML file without ever creating |
| 208 | an XML document. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 209 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 210 | XMLPrinter printer( fp ); |
| 211 | printer.OpenElement( "foo" ); |
| 212 | printer.PushAttribute( "foo", "bar" ); |
| 213 | printer.CloseElement(); |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 214 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 215 | Examples |
| 216 | -------- |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 217 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 218 | #### Load and parse an XML file. |
| 219 | |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 220 | /* ------ Example 1: Load and parse an XML file. ---- */ |
| 221 | { |
| 222 | XMLDocument doc; |
| 223 | doc.LoadFile( "dream.xml" ); |
| 224 | } |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 225 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 226 | #### Lookup information. |
| 227 | |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 228 | /* ------ Example 2: Lookup information. ---- */ |
| 229 | { |
| 230 | XMLDocument doc; |
| 231 | doc.LoadFile( "dream.xml" ); |
| 232 | |
| 233 | // Structure of the XML file: |
Lee Thomason | c50b6b4 | 2012-03-24 12:51:47 -0700 | [diff] [blame] | 234 | // - Element "PLAY" the root Element, which is the |
| 235 | // FirstChildElement of the Document |
| 236 | // - - Element "TITLE" child of the root PLAY Element |
| 237 | // - - - Text child of the TITLE Element |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 238 | |
Lee Thomason | c50b6b4 | 2012-03-24 12:51:47 -0700 | [diff] [blame] | 239 | // Navigate to the title, using the convenience function, |
| 240 | // with a dangerous lack of error checking. |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 241 | const char* title = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" )->GetText(); |
| 242 | printf( "Name of play (1): %s\n", title ); |
| 243 | |
Lee Thomason | c50b6b4 | 2012-03-24 12:51:47 -0700 | [diff] [blame] | 244 | // Text is just another Node to TinyXML-2. The more |
| 245 | // general way to get to the XMLText: |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 246 | XMLText* textNode = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" )->FirstChild()->ToText(); |
| 247 | title = textNode->Value(); |
| 248 | printf( "Name of play (2): %s\n", title ); |
| 249 | } |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 250 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 251 | Using and Installing |
| 252 | -------------------- |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 253 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 254 | There are 2 files in TinyXML-2: |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 255 | * tinyxml2.cpp |
| 256 | * tinyxml2.h |
| 257 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 258 | And additionally a test file: |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 259 | * xmltest.cpp |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 260 | |
Lee Thomason | 2f6e476 | 2012-04-05 08:52:07 -0700 | [diff] [blame] | 261 | Simply compile and run. There is a visual studio 2010 project included, a simple Makefile, |
| 262 | an XCode project, and a cmake CMakeLists.txt included to help you. The top of tinyxml.h |
| 263 | even has a simple g++ command line if you are are *nix and don't want to use a build system. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 264 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 265 | Documentation |
| 266 | ------------- |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 267 | |
| 268 | The documentation is build with Doxygen, using the 'dox' |
| 269 | configuration file. |
| 270 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 271 | License |
| 272 | ------- |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 273 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 274 | TinyXML-2 is released under the zlib license: |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 275 | |
| 276 | This software is provided 'as-is', without any express or implied |
| 277 | warranty. In no event will the authors be held liable for any |
| 278 | damages arising from the use of this software. |
| 279 | |
| 280 | Permission is granted to anyone to use this software for any |
| 281 | purpose, including commercial applications, and to alter it and |
| 282 | redistribute it freely, subject to the following restrictions: |
| 283 | |
| 284 | 1. The origin of this software must not be misrepresented; you must |
| 285 | not claim that you wrote the original software. If you use this |
| 286 | software in a product, an acknowledgment in the product documentation |
| 287 | would be appreciated but is not required. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 288 | 2. Altered source versions must be plainly marked as such, and |
| 289 | must not be misrepresented as being the original software. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 290 | 3. This notice may not be removed or altered from any source |
| 291 | distribution. |
| 292 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 293 | Contributors |
| 294 | ------------ |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 295 | |
| 296 | Thanks very much to everyone who sends suggestions, bugs, ideas, and |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 297 | encouragement. It all helps, and makes this project fun. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 298 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 299 | The original TinyXML-1 has many contributors, who all deserve thanks |
| 300 | in shaping what is a very successful library. Extra thanks to Yves |
| 301 | Berquin and Andrew Ellerton who were key contributors. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 302 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 303 | TinyXML-2 grew from that effort. Lee Thomason is the original author |
| 304 | of TinyXML-2 (and TinyXML-1) but hopefully TinyXML-2 will be improved |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 305 | by many contributors. |