diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..95818c6
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,239 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>TinyXml: Main Page</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.4 -->
+<div class="qindex"><a class="qindexHL" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a></div>
+<h1>TinyXml Documentation</h1>
+<p>
+<h3 align="center">2.4.0 </h3><h1>TinyXml </h1>
+<p>
+TinyXml is a simple, small, C++ XML parser that can be easily integrating into other programs.<p>
+<h2>What it does. </h2>
+<p>
+In brief, TinyXml parses an XML document, and builds from that a Document Object Model (DOM) that can be read, modified, and saved.<p>
+XML stands for "eXtensible Markup Language." It allows you to create your own document markups. Where HTML does a very good job of marking documents for browsers, XML allows you to define any kind of document markup, for example a document that describes a "to do" list for an organizer application. XML is a very structured and convenient format. All those random file formats created to store application data can all be replaced with XML. One parser for everything.<p>
+The best place for the complete, correct, and quite frankly hard to read spec is at <a href="http://www.w3.org/TR/2004/REC-xml-20040204/">http://www.w3.org/TR/2004/REC-xml-20040204/</a>. An intro to XML (that I really like) can be found at <a href="http://skew.org/xml/tutorial/">http://skew.org/xml/tutorial</a>.<p>
+There are different ways to access and interact with XML data. TinyXml uses a Document Object Model (DOM), meaning the XML data is parsed into a C++ objects that can be browsed and manipulated, and then written to disk or another output stream. You can also construct an XML document from scratch with C++ objects and write this to disk or another output stream.<p>
+TinyXml is designed to be easy and fast to learn. It is two headers and four cpp files. Simply add these to your project and off you go. There is an example file - xmltest.cpp - to get you started.<p>
+TinyXml is released under the ZLib license, so you can use it in open source or commercial code. The details of the license are at the top of every source file.<p>
+TinyXml attempts to be a flexible parser, but with truly correct and compliant XML output. TinyXml should compile on any reasonably C++ compliant system. It does not rely on exceptions or RTTI. It can be compiled with or without STL support. TinyXml fully supports the UTF-8 encoding, and the first 64k character entities.<p>
+<h2>What it doesn't do. </h2>
+<p>
+It doesnt parse or use DTDs (Document Type Definitions) or XSLs (eXtensible Stylesheet Language.) There are other parsers out there (check out www.sourceforge.org, search for XML) that are much more fully featured. But they are also much bigger, take longer to set up in your project, have a higher learning curve, and often have a more restrictive license. If you are working with browsers or have more complete XML needs, TinyXml is not the parser for you.<p>
+The following DTD syntax will not parse at this time in TinyXml:<p>
+<div class="fragment"><pre class="fragment">	&lt;!DOCTYPE Archiv [
+	 &lt;!ELEMENT Comment (#PCDATA)&gt;
+	]&gt;
+</pre></div><p>
+because TinyXml sees this as a !DOCTYPE node with an illegally embedded !ELEMENT node. This may be addressed in the future.<p>
+<h2>Tutorials. </h2>
+<p>
+For the impatient, here is a tutorial to get you going. A great way to get started, but it is worth your time to read this (very short) manual completely.<p>
+<ul>
+<li><a class="el" href="tutorial0.html">TinyXML Tutorial</a></li></ul>
+<p>
+<h2>Code Status. </h2>
+<p>
+TinyXml is mature, tested code. It is very stable. If you find bugs, please file a bug report on the sourceforge web site (www.sourceforge.net/projects/tinyxml). We'll get them straightened out as soon as possible.<p>
+There are some areas of improvement; please check sourceforge if you are interested in working on TinyXml.<p>
+<h2>Features </h2>
+<p>
+<h3>Using STL </h3>
+<p>
+TinyXml can be compiled to use or not use STL. When using STL, TinyXml uses the std::string class, and fully supports std::istream, std::ostream, operator&lt;&lt;, and operator&gt;&gt;. Many API methods have both 'const char*' and 'const std::string&amp;' forms.<p>
+When STL support is compiled out, no STL files are included whatsover. All the string classes are implemented by TinyXml itself. API methods all use the 'const char*' form for input.<p>
+Use the compile time define:<p>
+TIXML_USE_STL<p>
+to compile one version or the other. This can be passed by the compiler, or set as the first line of "tinyxml.h".<p>
+Note: If compiling the test code in Linux, setting the environment variable TINYXML_USE_STL=YES/NO will control STL compilation. In the Windows project file, STL and non STL targets are provided. In your project, its probably easiest to add the line "#define TIXML_USE_STL" as the first line of <a class="el" href="tinyxml_8h-source.html">tinyxml.h</a>.<p>
+<h3>UTF-8 </h3>
+<p>
+TinyXml supports UTF-8 allowing to manipulate XML files in any language. TinyXml also supports "legacy mode" - the encoding used before UTF-8 support and probably best described as "extended ascii".<p>
+Normally, TinyXml will try to detect the correct encoding and use it. However, by setting the value of TIXML_DEFAULT_ENCODING in the header file, TinyXml can be forced to always use one encoding.<p>
+TinyXml will assume Legacy Mode until one of the following occurs: <ol>
+<li>
+If the non-standard but common "UTF-8 lead bytes" (0xef 0xbb 0xbf) begin the file or data stream, TinyXml will read it as UTF-8.  </li>
+<li>
+If the declaration tag is read, and it has an encoding="UTF-8", then TinyXml will read it as UTF-8.  </li>
+<li>
+If the declaration tag is read, and it has no encoding specified, then TinyXml will read it as UTF-8.  </li>
+<li>
+If the declaration tag is read, and it has an encoding="something else", then TinyXml will read it as Legacy Mode. In legacy mode, TinyXml will work as it did before. It's not clear what that mode does exactly, but old content should keep working. </li>
+<li>
+Until one of the above criteria is met, TinyXml runs in Legacy Mode. </li>
+</ol>
+<p>
+What happens if the encoding is incorrectly set or detected? TinyXml will try to read and pass through text seen as improperly encoded. You may get some strange results or mangled characters. You may want to force TinyXml to the correct mode.<p>
+<b> You may force TinyXml to Legacy Mode by using LoadFile( TIXML_ENCODING_LEGACY ) or LoadFile( filename, TIXML_ENCODING_LEGACY ). You may force it to use legacy mode all the time by setting TIXML_DEFAULT_ENCODING = TIXML_ENCODING_LEGACY. Likewise, you may force it to TIXML_ENCODING_UTF8 with the same technique.</b><p>
+For English users, using English XML, UTF-8 is the same as low-ASCII. You don't need to be aware of UTF-8 or change your code in any way. You can think of UTF-8 as a "superset" of ASCII.<p>
+UTF-8 is not a double byte format - but it is a standard encoding of Unicode! TinyXml does not use or directly support wchar, TCHAR, or Microsofts _UNICODE at this time. It is common to see the term "Unicode" improperly refer to UTF-16, a wide byte encoding of unicode. This is a source of confusion.<p>
+For "high-ascii" languages - everything not English, pretty much - TinyXml can handle all languages, at the same time, as long as the XML is encoded in UTF-8. That can be a little tricky, older programs and operating systems tend to use the "default" or "traditional" code page. Many apps (and almost all modern ones) can output UTF-8, but older or stubborn (or just broken) ones still output text in the default code page.<p>
+For example, Japanese systems traditionally use SHIFT-JIS encoding. Text encoded as SHIFT-JIS can not be read by tinyxml. A good text editor can import SHIFT-JIS and then save as UTF-8.<p>
+The <a href="http://skew.org/xml/tutorial/">Skew.org link</a> does a great job covering the encoding issue.<p>
+The test file "utf8test.xml" is an XML containing English, Spanish, Russian, and Simplified Chinese. (Hopefully they are translated correctly). The file "utf8test.gif" is a screen capture of the XML file, rendered in IE. Note that if you don't have the correct fonts (Simplified Chinese or Russian) on your system, you won't see output that matches the GIF file even if you can parse it correctly. Also note that (at least on my Windows machine) console output is in a Western code page, so that Print() or printf() cannot correctly display the file. This is not a bug in TinyXml - just an OS issue. No data is lost or destroyed by TinyXml. The console just doesn't render UTF-8.<p>
+<h3>Entities </h3>
+<p>
+TinyXml recognizes the pre-defined "character entities", meaning special characters. Namely:<p>
+<div class="fragment"><pre class="fragment">	&amp;amp;	&amp;
+	&amp;lt;	&lt;
+	&amp;gt;	&gt;
+	&amp;quot;	"
+	&amp;apos;	'
+</pre></div><p>
+These are recognized when the XML document is read, and translated to there UTF-8 equivalents. For instance, text with the XML of:<p>
+<div class="fragment"><pre class="fragment">	Far &amp;amp; Away
+</pre></div><p>
+will have the Value() of "Far &amp; Away" when queried from the <a class="el" href="classTiXmlText.html">TiXmlText</a> object, and will be written back to the XML stream/file as an ampersand. Older versions of TinyXml "preserved" character entities, but the newer versions will translate them into characters.<p>
+Additionally, any character can be specified by its Unicode code point: The syntax "&amp;#xA0;" or "&amp;#160;" are both to the non-breaking space characher.<p>
+<h3>Streams </h3>
+<p>
+With TIXML_USE_STL on, TiXml has been modified to support both C (FILE) and C++ (operator &lt;&lt;,&gt;&gt;) streams. There are some differences that you may need to be aware of.<p>
+C style output:<ul>
+<li>based on FILE*</li><li>the Print() and SaveFile() methods</li></ul>
+<p>
+Generates formatted output, with plenty of white space, intended to be as human-readable as possible. They are very fast, and tolerant of ill formed XML documents. For example, an XML document that contains 2 root elements and 2 declarations, will still print.<p>
+C style input:<ul>
+<li>based on FILE*</li><li>the Parse() and LoadFile() methods</li></ul>
+<p>
+A fast, tolerant read. Use whenever you don't need the C++ streams.<p>
+C++ style ouput:<ul>
+<li>based on std::ostream</li><li>operator&lt;&lt;</li></ul>
+<p>
+Generates condensed output, intended for network transmission rather than readability. Depending on your system's implementation of the ostream class, these may be somewhat slower. (Or may not.) Not tolerant of ill formed XML: a document should contain the correct one root element. Additional root level elements will not be streamed out.<p>
+C++ style input:<ul>
+<li>based on std::istream</li><li>operator&gt;&gt;</li></ul>
+<p>
+Reads XML from a stream, making it useful for network transmission. The tricky part is knowing when the XML document is complete, since there will almost certainly be other data in the stream. TinyXml will assume the XML data is complete after it reads the root element. Put another way, documents that are ill-constructed with more than one root element will not read correctly. Also note that operator&gt;&gt; is somewhat slower than Parse, due to both implementation of the STL and limitations of TinyXml.<p>
+<h3>White space </h3>
+<p>
+The world simply does not agree on whether white space should be kept, or condensed. For example, pretend the '_' is a space, and look at "Hello____world". HTML, and at least some XML parsers, will interpret this as "Hello_world". They condense white space. Some XML parsers do not, and will leave it as "Hello____world". (Remember to keep pretending the _ is a space.) Others suggest that __Hello___world__ should become Hello___world.<p>
+It's an issue that hasn't been resolved to my satisfaction. TinyXml supports the first 2 approaches. Call <a class="el" href="classTiXmlBase.html#e0">TiXmlBase::SetCondenseWhiteSpace( bool )</a> to set the desired behavior. The default is to condense white space.<p>
+If you change the default, you should call <a class="el" href="classTiXmlBase.html#e0">TiXmlBase::SetCondenseWhiteSpace( bool )</a> before making any calls to Parse XML data, and I don't recommend changing it after it has been set.<p>
+<h3>Handles </h3>
+<p>
+Where browsing an XML document in a robust way, it is important to check for null returns from method calls. An error safe implementation can generate a lot of code like:<p>
+<div class="fragment"><pre class="fragment">TiXmlElement* root = document.FirstChildElement( "Document" );
+if ( root )
+{
+	TiXmlElement* element = root-&gt;FirstChildElement( "Element" );
+	if ( element )
+	{
+		TiXmlElement* child = element-&gt;FirstChildElement( "Child" );
+		if ( child )
+		{
+			TiXmlElement* child2 = child-&gt;NextSiblingElement( "Child" );
+			if ( child2 )
+			{
+				// Finally do something useful.
+</pre></div><p>
+Handles have been introduced to clean this up. Using the <a class="el" href="classTiXmlHandle.html">TiXmlHandle</a> class, the previous code reduces to:<p>
+<div class="fragment"><pre class="fragment">TiXmlHandle docHandle( &amp;document );
+TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).Element();
+if ( child2 )
+{
+	// do something useful
+</pre></div><p>
+Which is much easier to deal with. See <a class="el" href="classTiXmlHandle.html">TiXmlHandle</a> for more information.<p>
+<h3>Row and Column tracking </h3>
+<p>
+Being able to track nodes and attributes back to their origin location in source files can be very important for some applications. Additionally, knowing where parsing errors occured in the original source can be very time saving.<p>
+TinyXml can tracks the row and column origin of all nodes and attributes in a text file. The <a class="el" href="classTiXmlBase.html#a3">TiXmlBase::Row()</a> and <a class="el" href="classTiXmlBase.html#a4">TiXmlBase::Column()</a> methods return the origin of the node in the source text. The correct tabs can be configured in <a class="el" href="classTiXmlDocument.html#a20">TiXmlDocument::SetTabSize()</a>.<p>
+<h2>Using and Installing </h2>
+<p>
+To Compile and Run xmltest:<p>
+A Linux Makefile and a Windows Visual C++ .dsw file is provided. Simply compile and run. It will write the file demotest.xml to your disk and generate output on the screen. It also tests walking the DOM by printing out the number of nodes found using different techniques.<p>
+The Linux makefile is very generic and will probably run on other systems, but is only tested on Linux. You no longer need to run 'make depend'. The dependecies have been hard coded.<p>
+<h3>Windows project file for VC6</h3>
+<p>
+<ul>
+<li>
+tinyxml: tinyxml library, non-STL  </li>
+<li>
+tinyxmlSTL: tinyxml library, STL  </li>
+<li>
+tinyXmlTest: test app, non-STL  </li>
+<li>
+tinyXmlTestSTL: test app, STL  </li>
+</ul>
+<p>
+<h3>Linux Make file</h3>
+<p>
+At the top of the makefile you can set:<p>
+PROFILE, DEBUG, and TINYXML_USE_STL. Details (such that they are) are in the makefile.<p>
+In the tinyxml directory, type "make clean" then "make". The executable file 'xmltest' will be created.<p>
+<h3>To Use in an Application:</h3>
+<p>
+Add tinyxml.cpp, <a class="el" href="tinyxml_8h-source.html">tinyxml.h</a>, tinyxmlerror.cpp, tinyxmlparser.cpp, tinystr.cpp, and <a class="el" href="tinystr_8h-source.html">tinystr.h</a> to your project or make file. That's it! It should compile on any reasonably compliant C++ system. You do not need to enable exceptions or RTTI for TinyXml.<p>
+<h2>How TinyXml works. </h2>
+<p>
+An example is probably the best way to go. Take: <div class="fragment"><pre class="fragment">	&lt;?xml version="1.0" standalone=no&gt;
+	&lt;!-- Our to do list data --&gt;
+	&lt;ToDo&gt;
+		&lt;Item priority="1"&gt; Go to the &lt;bold&gt;Toy store!&lt;/bold&gt;&lt;/Item&gt;
+		&lt;Item priority="2"&gt; Do bills&lt;/Item&gt;
+	&lt;/ToDo&gt;
+</pre></div><p>
+Its not much of a To Do list, but it will do. To read this file (say "demo.xml") you would create a document, and parse it in: <div class="fragment"><pre class="fragment">	TiXmlDocument doc( "demo.xml" );
+	doc.LoadFile();
+</pre></div><p>
+And its ready to go. Now lets look at some lines and how they relate to the DOM.<p>
+<div class="fragment"><pre class="fragment">&lt;?xml version="1.0" standalone=no&gt;
+</pre></div><p>
+The first line is a declaration, and gets turned into the <a class="el" href="classTiXmlDeclaration.html">TiXmlDeclaration</a> class. It will be the first child of the document node.<p>
+This is the only directive/special tag parsed by by TinyXml. Generally directive targs are stored in <a class="el" href="classTiXmlUnknown.html">TiXmlUnknown</a> so the commands wont be lost when it is saved back to disk.<p>
+<div class="fragment"><pre class="fragment">&lt;!-- Our to do list data --&gt;
+</pre></div><p>
+A comment. Will become a <a class="el" href="classTiXmlComment.html">TiXmlComment</a> object.<p>
+<div class="fragment"><pre class="fragment">&lt;ToDo&gt;
+</pre></div><p>
+The "ToDo" tag defines a <a class="el" href="classTiXmlElement.html">TiXmlElement</a> object. This one does not have any attributes, but does contain 2 other elements.<p>
+<div class="fragment"><pre class="fragment">&lt;Item priority="1"&gt; 
+</pre></div><p>
+Creates another <a class="el" href="classTiXmlElement.html">TiXmlElement</a> which is a child of the "ToDo" element. This element has 1 attribute, with the name "priority" and the value "1".<p>
+Go to the<p>
+A <a class="el" href="classTiXmlText.html">TiXmlText</a>. This is a leaf node and cannot contain other nodes. It is a child of the "Item" <a class="el" href="classTiXmlElement.html">TiXmlElement</a>.<p>
+<div class="fragment"><pre class="fragment">&lt;bold&gt;
+</pre></div><p>
+Another <a class="el" href="classTiXmlElement.html">TiXmlElement</a>, this one a child of the "Item" element.<p>
+Etc.<p>
+Looking at the entire object tree, you end up with: <div class="fragment"><pre class="fragment">TiXmlDocument				"demo.xml"
+	TiXmlDeclaration		"version='1.0'" "standalone=no"
+	TiXmlComment			" Our to do list data"
+	TiXmlElement			"ToDo"
+		TiXmlElement		"Item"		Attribtutes: priority = 1
+			TiXmlText		"Go to the "
+			TiXmlElement    "bold"
+				TiXmlText	"Toy store!"
+		TiXmlElement			"Item"		Attributes: priority=2
+			TiXmlText			"Do bills"
+</pre></div><p>
+<h2>Documentation </h2>
+<p>
+The documentation is build with Doxygen, using the 'dox' configuration file.<p>
+<h2>License </h2>
+<p>
+TinyXml is released under the zlib license:<p>
+This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.<p>
+Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:<p>
+1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.<p>
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.<p>
+3. This notice may not be removed or altered from any source distribution.<p>
+<h2>References </h2>
+<p>
+The World Wide Web Consortium is the definitive standard body for XML, and there web pages contain huge amounts of information.<p>
+The definitive spec: <a href="http://www.w3.org/TR/2004/REC-xml-20040204/">http://www.w3.org/TR/2004/REC-xml-20040204/</a><p>
+I also recommend "XML Pocket Reference" by Robert Eckstein and published by OReilly...the book that got the whole thing started.<p>
+<h2>Contributors, Contacts, and a Brief History </h2>
+<p>
+Thanks very much to everyone who sends suggestions, bugs, ideas, and encouragement. It all helps, and makes this project fun. A special thanks to the contributors on the web pages that keep it lively.<p>
+So many people have sent in bugs and ideas, that rather than list here we try to give credit due in the "changes.txt" file.<p>
+TinyXml was originally written be Lee Thomason. (Often the "I" still in the documenation.) Lee reviews changes and releases new versions, with the help of Yves Berquin and the tinyXml community.<p>
+We appreciate your suggestions, and would love to know if you use TinyXml. Hopefully you will enjoy it and find it useful. Please post questions, comments, file bugs, or contact us at:<p>
+www.sourceforge.net/projects/tinyxml<p>
+Lee Thomason, Yves Berquin <hr size="1"><address style="align: right;"><small>Generated on Sat Oct 8 14:15:30 2005 for TinyXml by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
+</body>
+</html>
