summaryrefslogtreecommitdiff
path: root/zenxml
diff options
context:
space:
mode:
Diffstat (limited to 'zenxml')
-rw-r--r--zenxml/LICENSE_1_0.txt23
-rw-r--r--zenxml/doc/annotated.html120
-rw-r--r--zenxml/doc/bc_s.pngbin0 -> 705 bytes
-rw-r--r--zenxml/doc/bdwn.pngbin0 -> 147 bytes
-rw-r--r--zenxml/doc/bind_8h_source.html319
-rw-r--r--zenxml/doc/classes.html120
-rw-r--r--zenxml/doc/classzen_1_1_xml_doc-members.html128
-rw-r--r--zenxml/doc/classzen_1_1_xml_doc.html353
-rw-r--r--zenxml/doc/classzen_1_1_xml_element-members.html133
-rw-r--r--zenxml/doc/classzen_1_1_xml_element.html552
-rw-r--r--zenxml/doc/classzen_1_1_xml_in-members.html129
-rw-r--r--zenxml/doc/classzen_1_1_xml_in.html446
-rw-r--r--zenxml/doc/classzen_1_1_xml_out-members.html124
-rw-r--r--zenxml/doc/classzen_1_1_xml_out.html317
-rw-r--r--zenxml/doc/closed.pngbin0 -> 126 bytes
-rw-r--r--zenxml/doc/cvrt__struc_8h_source.html305
-rw-r--r--zenxml/doc/cvrt__text_8h_source.html276
-rw-r--r--zenxml/doc/dom_8h_source.html346
-rw-r--r--zenxml/doc/doxygen.css1012
-rw-r--r--zenxml/doc/doxygen.pngbin0 -> 3942 bytes
-rw-r--r--zenxml/doc/error_8h_source.html126
-rw-r--r--zenxml/doc/files.html118
-rw-r--r--zenxml/doc/functions.html272
-rw-r--r--zenxml/doc/functions_func.html253
-rw-r--r--zenxml/doc/functions_vars.html125
-rw-r--r--zenxml/doc/hierarchy.html122
-rw-r--r--zenxml/doc/index.html679
-rw-r--r--zenxml/doc/io_8h_source.html213
-rw-r--r--zenxml/doc/jquery.js64
-rw-r--r--zenxml/doc/namespacemembers.html143
-rw-r--r--zenxml/doc/namespacemembers_func.html143
-rw-r--r--zenxml/doc/namespaces.html112
-rw-r--r--zenxml/doc/namespacezen.html613
-rw-r--r--zenxml/doc/nav_f.pngbin0 -> 159 bytes
-rw-r--r--zenxml/doc/nav_h.pngbin0 -> 97 bytes
-rw-r--r--zenxml/doc/open.pngbin0 -> 118 bytes
-rw-r--r--zenxml/doc/parser_8h_source.html687
-rw-r--r--zenxml/doc/search/all_61.html25
-rw-r--r--zenxml/doc/search/all_61.js5
-rw-r--r--zenxml/doc/search/all_63.html25
-rw-r--r--zenxml/doc/search/all_63.js4
-rw-r--r--zenxml/doc/search/all_65.html25
-rw-r--r--zenxml/doc/search/all_65.js4
-rw-r--r--zenxml/doc/search/all_67.html25
-rw-r--r--zenxml/doc/search/all_67.js13
-rw-r--r--zenxml/doc/search/all_6c.html25
-rw-r--r--zenxml/doc/search/all_6c.js6
-rw-r--r--zenxml/doc/search/all_6e.html25
-rw-r--r--zenxml/doc/search/all_6e.js4
-rw-r--r--zenxml/doc/search/all_6f.html25
-rw-r--r--zenxml/doc/search/all_6f.js6
-rw-r--r--zenxml/doc/search/all_70.html25
-rw-r--r--zenxml/doc/search/all_70.js5
-rw-r--r--zenxml/doc/search/all_72.html25
-rw-r--r--zenxml/doc/search/all_72.js9
-rw-r--r--zenxml/doc/search/all_73.html25
-rw-r--r--zenxml/doc/search/all_73.js11
-rw-r--r--zenxml/doc/search/all_77.html25
-rw-r--r--zenxml/doc/search/all_77.js5
-rw-r--r--zenxml/doc/search/all_78.html25
-rw-r--r--zenxml/doc/search/all_78.js13
-rw-r--r--zenxml/doc/search/all_7a.html25
-rw-r--r--zenxml/doc/search/all_7a.js4
-rw-r--r--zenxml/doc/search/classes_78.html25
-rw-r--r--zenxml/doc/search/classes_78.js10
-rw-r--r--zenxml/doc/search/close.pngbin0 -> 273 bytes
-rw-r--r--zenxml/doc/search/functions_61.html25
-rw-r--r--zenxml/doc/search/functions_61.js5
-rw-r--r--zenxml/doc/search/functions_65.html25
-rw-r--r--zenxml/doc/search/functions_65.js4
-rw-r--r--zenxml/doc/search/functions_67.html25
-rw-r--r--zenxml/doc/search/functions_67.js13
-rw-r--r--zenxml/doc/search/functions_6c.html25
-rw-r--r--zenxml/doc/search/functions_6c.js5
-rw-r--r--zenxml/doc/search/functions_6e.html25
-rw-r--r--zenxml/doc/search/functions_6e.js4
-rw-r--r--zenxml/doc/search/functions_6f.html25
-rw-r--r--zenxml/doc/search/functions_6f.js6
-rw-r--r--zenxml/doc/search/functions_70.html25
-rw-r--r--zenxml/doc/search/functions_70.js5
-rw-r--r--zenxml/doc/search/functions_72.html25
-rw-r--r--zenxml/doc/search/functions_72.js8
-rw-r--r--zenxml/doc/search/functions_73.html25
-rw-r--r--zenxml/doc/search/functions_73.js11
-rw-r--r--zenxml/doc/search/functions_77.html25
-rw-r--r--zenxml/doc/search/functions_77.js5
-rw-r--r--zenxml/doc/search/functions_78.html25
-rw-r--r--zenxml/doc/search/functions_78.js6
-rw-r--r--zenxml/doc/search/mag_sel.pngbin0 -> 563 bytes
-rw-r--r--zenxml/doc/search/namespaces_7a.html25
-rw-r--r--zenxml/doc/search/namespaces_7a.js4
-rw-r--r--zenxml/doc/search/nomatches.html12
-rw-r--r--zenxml/doc/search/search.css238
-rw-r--r--zenxml/doc/search/search.js803
-rw-r--r--zenxml/doc/search/search_l.pngbin0 -> 604 bytes
-rw-r--r--zenxml/doc/search/search_m.pngbin0 -> 158 bytes
-rw-r--r--zenxml/doc/search/search_r.pngbin0 -> 612 bytes
-rw-r--r--zenxml/doc/search/variables_63.html25
-rw-r--r--zenxml/doc/search/variables_63.js4
-rw-r--r--zenxml/doc/search/variables_6c.html25
-rw-r--r--zenxml/doc/search/variables_6c.js4
-rw-r--r--zenxml/doc/search/variables_72.html25
-rw-r--r--zenxml/doc/search/variables_72.js4
-rw-r--r--zenxml/doc/structzen_1_1_xml_error-members.html118
-rw-r--r--zenxml/doc/structzen_1_1_xml_error.html136
-rw-r--r--zenxml/doc/structzen_1_1_xml_error.pngbin0 -> 668 bytes
-rw-r--r--zenxml/doc/structzen_1_1_xml_file_error-members.html119
-rw-r--r--zenxml/doc/structzen_1_1_xml_file_error.html144
-rw-r--r--zenxml/doc/structzen_1_1_xml_file_error.pngbin0 -> 447 bytes
-rw-r--r--zenxml/doc/structzen_1_1_xml_parsing_error-members.html120
-rw-r--r--zenxml/doc/structzen_1_1_xml_parsing_error.html147
-rw-r--r--zenxml/doc/structzen_1_1_xml_parsing_error.pngbin0 -> 500 bytes
-rw-r--r--zenxml/doc/tab_a.pngbin0 -> 140 bytes
-rw-r--r--zenxml/doc/tab_b.pngbin0 -> 178 bytes
-rw-r--r--zenxml/doc/tab_h.pngbin0 -> 192 bytes
-rw-r--r--zenxml/doc/tab_s.pngbin0 -> 189 bytes
-rw-r--r--zenxml/doc/tabs.css59
-rw-r--r--zenxml/doc/xml_8h_source.html122
-rw-r--r--zenxml/summary.dox684
-rw-r--r--zenxml/zenxml/bind.h (renamed from zenxml/bind.h)0
-rw-r--r--zenxml/zenxml/cvrt_struc.h (renamed from zenxml/cvrt_struc.h)0
-rw-r--r--zenxml/zenxml/cvrt_text.h (renamed from zenxml/cvrt_text.h)0
-rw-r--r--zenxml/zenxml/dom.h (renamed from zenxml/dom.h)0
-rw-r--r--zenxml/zenxml/error.h (renamed from zenxml/error.h)0
-rw-r--r--zenxml/zenxml/io.h (renamed from zenxml/io.h)0
-rw-r--r--zenxml/zenxml/parser.h (renamed from zenxml/parser.h)0
-rw-r--r--zenxml/zenxml/unit_test.cpp (renamed from zenxml/unit_test.cpp)0
-rw-r--r--zenxml/zenxml/xml.h (renamed from zenxml/xml.h)0
128 files changed, 11303 insertions, 684 deletions
diff --git a/zenxml/LICENSE_1_0.txt b/zenxml/LICENSE_1_0.txt
new file mode 100644
index 00000000..36b7cd93
--- /dev/null
+++ b/zenxml/LICENSE_1_0.txt
@@ -0,0 +1,23 @@
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/zenxml/doc/annotated.html b/zenxml/doc/annotated.html
new file mode 100644
index 00000000..b5e05616
--- /dev/null
+++ b/zenxml/doc/annotated.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Class List</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Class List</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><table>
+ <tr><td class="indexkey"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="indexvalue">The complete XML document </td></tr>
+ <tr><td class="indexkey"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="indexvalue">An XML element </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structzen_1_1_xml_error.html">zen::XmlError</a></td><td class="indexvalue">Exception base class for zen::Xml </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a></td><td class="indexvalue">Exception thrown due to failed file I/O </td></tr>
+ <tr><td class="indexkey"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="indexvalue">Proxy class to conveniently convert XML structure to user data </td></tr>
+ <tr><td class="indexkey"><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td class="indexvalue">Proxy class to conveniently convert user data into XML structure </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a></td><td class="indexvalue">Exception thrown due to an XML parsing error </td></tr>
+</table>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/bc_s.png b/zenxml/doc/bc_s.png
new file mode 100644
index 00000000..51ba0066
--- /dev/null
+++ b/zenxml/doc/bc_s.png
Binary files differ
diff --git a/zenxml/doc/bdwn.png b/zenxml/doc/bdwn.png
new file mode 100644
index 00000000..d0b575b7
--- /dev/null
+++ b/zenxml/doc/bdwn.png
Binary files differ
diff --git a/zenxml/doc/bind_8h_source.html b/zenxml/doc/bind_8h_source.html
new file mode 100644
index 00000000..300a10aa
--- /dev/null
+++ b/zenxml/doc/bind_8h_source.html
@@ -0,0 +1,319 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: bind.h Source File</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">bind.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span>
+<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span>
+<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span>
+<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span>
+<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span>
+<a name="l00006"></a>00006
+<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_BIND_HEADER_9081740816593478258435</span>
+<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_BIND_HEADER_9081740816593478258435</span>
+<a name="l00009"></a>00009 <span class="preprocessor"></span>
+<a name="l00010"></a>00010 <span class="preprocessor">#include &lt;set&gt;</span>
+<a name="l00011"></a>00011 <span class="preprocessor">#include &quot;cvrt_struc.h&quot;</span>
+<a name="l00012"></a>00012 <span class="preprocessor">#include &quot;parser.h&quot;</span>
+<a name="l00013"></a>00013 <span class="preprocessor">#include &quot;io.h&quot;</span>
+<a name="l00014"></a>00014
+<a name="l00015"></a><a class="code" href="namespacezen.html">00015</a> <span class="keyword">namespace </span>zen
+<a name="l00016"></a>00016 {
+<a name="l00022"></a>00022
+<a name="l00023"></a>00023
+<a name="l00032"></a>00032 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt; <span class="keyword">inline</span>
+<a name="l00033"></a><a class="code" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee">00033</a> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee" title="Load XML document from a file.">load</a>(<span class="keyword">const</span> String&amp; filename, <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>&amp; doc) <span class="comment">//throw XmlFileError, XmlParsingError</span>
+<a name="l00034"></a>00034 {
+<a name="l00035"></a>00035 std::string stream = <a class="code" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607" title="Load byte stream from a file.">loadStream</a>(filename); <span class="comment">//throw XmlFileError</span>
+<a name="l00036"></a>00036 <a class="code" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7" title="Load XML document from a byte stream.">parse</a>(stream, doc); <span class="comment">//throw XmlParsingError</span>
+<a name="l00037"></a>00037 }
+<a name="l00038"></a>00038
+<a name="l00039"></a>00039
+<a name="l00041"></a>00041
+<a name="l00051"></a>00051 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt; <span class="keyword">inline</span>
+<a name="l00052"></a><a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">00052</a> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d" title="Save XML document to a file.">save</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>&amp; doc,
+<a name="l00053"></a>00053 <span class="keyword">const</span> String&amp; filename,
+<a name="l00054"></a>00054 <span class="keyword">const</span> std::string&amp; lineBreak = <span class="stringliteral">&quot;\r\n&quot;</span>,
+<a name="l00055"></a>00055 <span class="keyword">const</span> std::string&amp; indent = <span class="stringliteral">&quot; &quot;</span>) <span class="comment">//throw XmlFileError</span>
+<a name="l00056"></a>00056 {
+<a name="l00057"></a>00057 std::string stream = <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(doc, lineBreak, indent); <span class="comment">//throw ()</span>
+<a name="l00058"></a>00058 <a class="code" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2" title="Save byte stream to a file.">saveStream</a>(stream, filename); <span class="comment">//throw XmlFileError</span>
+<a name="l00059"></a>00059 }
+<a name="l00060"></a>00060
+<a name="l00061"></a>00061
+<a name="l00063"></a><a class="code" href="classzen_1_1_xml_out.html">00063</a> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">XmlOut</a>
+<a name="l00064"></a>00064 {
+<a name="l00065"></a>00065 <span class="keyword">public</span>:
+<a name="l00067"></a>00067
+<a name="l00088"></a><a class="code" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">00088</a> <a class="code" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc" title="Construct an output proxy for an XML document.">XmlOut</a>(<a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>&amp; doc) : ref_(&amp;doc.root()) {}
+<a name="l00090"></a>00090
+<a name="l00093"></a><a class="code" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">00093</a> <a class="code" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0" title="Construct an output proxy for a single XML element.">XmlOut</a>(<a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>&amp; element) : ref_(&amp;element) {}
+<a name="l00094"></a>00094
+<a name="l00096"></a>00096
+<a name="l00101"></a>00101 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00102"></a><a class="code" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">00102</a> <a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">XmlOut</a> <a class="code" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831" title="Retrieve a handle to an XML child element for writing.">operator[]</a>(<span class="keyword">const</span> String&amp; name)<span class="keyword"> const</span>
+<a name="l00103"></a>00103 <span class="keyword"> </span>{
+<a name="l00104"></a>00104 <span class="keyword">const</span> std::string utf8name = utfCvrtTo&lt;std::string&gt;(name);
+<a name="l00105"></a>00105 <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* child = ref_-&gt;<a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e" title="Retrieve a child element with the given name.">getChild</a>(utf8name);
+<a name="l00106"></a>00106 <span class="keywordflow">return</span> child ? *child : ref_-&gt;<a class="code" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9" title="Create a new child element and return a reference to it.">addChild</a>(utf8name);
+<a name="l00107"></a>00107 }
+<a name="l00108"></a>00108
+<a name="l00110"></a>00110
+<a name="l00114"></a>00114 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
+<a name="l00115"></a><a class="code" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">00115</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb" title="Write user data to the underlying XML element.">operator()</a>(<span class="keyword">const</span> T&amp; value) { <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(value, *ref_); }
+<a name="l00116"></a>00116
+<a name="l00118"></a>00118
+<a name="l00142"></a>00142 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String, <span class="keyword">class</span> T&gt;
+<a name="l00143"></a><a class="code" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">00143</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805" title="Write user data to an XML attribute.">attribute</a>(<span class="keyword">const</span> String&amp; name, <span class="keyword">const</span> T&amp; value) { ref_-&gt;<a class="code" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421" title="Create or update an XML attribute.">setAttribute</a>(name, value); }
+<a name="l00144"></a>00144
+<a name="l00146"></a><a class="code" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">00146</a> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>&amp; <a class="code" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2" title="Return a reference to the underlying Xml element.">ref</a>() { <span class="keywordflow">return</span> *ref_; }
+<a name="l00147"></a>00147
+<a name="l00148"></a>00148 <span class="keyword">private</span>:
+<a name="l00149"></a>00149 <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* ref_; <span class="comment">//always bound!</span>
+<a name="l00150"></a>00150 };
+<a name="l00151"></a>00151
+<a name="l00152"></a>00152
+<a name="l00154"></a><a class="code" href="classzen_1_1_xml_in.html">00154</a> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">XmlIn</a>
+<a name="l00155"></a>00155 {
+<a name="l00156"></a>00156 <span class="keyword">class </span>ErrorLog;
+<a name="l00157"></a>00157 <span class="keyword">struct </span>ConversionToBool { <span class="keywordtype">int</span> dummy; };
+<a name="l00158"></a>00158
+<a name="l00159"></a>00159 <span class="keyword">public</span>:
+<a name="l00161"></a>00161
+<a name="l00171"></a><a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">00171</a> <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>&amp; doc) : refIndex(0), log(std::make_shared&lt;ErrorLog&gt;()) { refList.push_back(&amp;doc.<a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d" title="Get a const reference to the document&#39;s root element.">root</a>()); }
+<a name="l00173"></a>00173
+<a name="l00176"></a><a class="code" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">00176</a> <a class="code" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430" title="Construct an input proxy for a single XML element, may be nullptr.">XmlIn</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* element) : refIndex(0), log(std::make_shared&lt;ErrorLog&gt;()) { refList.push_back(element); }
+<a name="l00178"></a>00178
+<a name="l00181"></a><a class="code" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">00181</a> <a class="code" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8" title="Construct an input proxy for a single XML element.">XmlIn</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>&amp; element) : refIndex(0), log(std::make_shared&lt;ErrorLog&gt;()) { refList.push_back(&amp;element); }
+<a name="l00182"></a>00182
+<a name="l00184"></a>00184
+<a name="l00189"></a>00189 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00190"></a><a class="code" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">00190</a> <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">XmlIn</a> <a class="code" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d" title="Retrieve a handle to an XML child element for reading.">operator[]</a>(<span class="keyword">const</span> String&amp; name)<span class="keyword"> const</span>
+<a name="l00191"></a>00191 <span class="keyword"> </span>{
+<a name="l00192"></a>00192 std::vector&lt;const XmlElement*&gt; childList;
+<a name="l00193"></a>00193
+<a name="l00194"></a>00194 <span class="keywordflow">if</span> (refIndex &lt; refList.size())
+<a name="l00195"></a>00195 {
+<a name="l00196"></a>00196 <span class="keyword">auto</span> iterPair = refList[refIndex]-&gt;getChildren(name);
+<a name="l00197"></a>00197 std::for_each(iterPair.first, iterPair.second,
+<a name="l00198"></a>00198 [&amp;](<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>&amp; child) { childList.push_back(&amp;child); });
+<a name="l00199"></a>00199 }
+<a name="l00200"></a>00200
+<a name="l00201"></a>00201 <span class="keywordflow">return</span> <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn</a>(childList, childList.empty() ? getChildNameFormatted(name) : std::string(), log);
+<a name="l00202"></a>00202 }
+<a name="l00203"></a>00203
+<a name="l00205"></a>00205
+<a name="l00225"></a><a class="code" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">00225</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4" title="Refer to next sibling element with the same name.">next</a>() { ++refIndex; }
+<a name="l00226"></a>00226
+<a name="l00228"></a>00228
+<a name="l00233"></a>00233 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
+<a name="l00234"></a><a class="code" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">00234</a> <span class="keywordtype">bool</span> operator()(T&amp; value)<span class="keyword"> const</span>
+<a name="l00235"></a>00235 <span class="keyword"> </span>{
+<a name="l00236"></a>00236 <span class="keywordflow">if</span> (refIndex &lt; refList.size())
+<a name="l00237"></a>00237 {
+<a name="l00238"></a>00238 <span class="keywordtype">bool</span> success = <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(*refList[refIndex], value);
+<a name="l00239"></a>00239 <span class="keywordflow">if</span> (!success)
+<a name="l00240"></a>00240 log-&gt;notifyConversionError(getNameFormatted());
+<a name="l00241"></a>00241 <span class="keywordflow">return</span> success;
+<a name="l00242"></a>00242 }
+<a name="l00243"></a>00243 <span class="keywordflow">else</span>
+<a name="l00244"></a>00244 {
+<a name="l00245"></a>00245 log-&gt;notifyMissingElement(getNameFormatted());
+<a name="l00246"></a>00246 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00247"></a>00247 }
+<a name="l00248"></a>00248 }
+<a name="l00249"></a>00249
+<a name="l00251"></a>00251
+<a name="l00268"></a>00268 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String, <span class="keyword">class</span> T&gt;
+<a name="l00269"></a><a class="code" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">00269</a> <span class="keywordtype">bool</span> attribute(<span class="keyword">const</span> String&amp; name, T&amp; value)<span class="keyword"> const</span>
+<a name="l00270"></a>00270 <span class="keyword"> </span>{
+<a name="l00271"></a>00271 <span class="keywordflow">if</span> (refIndex &lt; refList.size())
+<a name="l00272"></a>00272 {
+<a name="l00273"></a>00273 <span class="keywordtype">bool</span> success = refList[refIndex]-&gt;getAttribute(name, value);
+<a name="l00274"></a>00274 <span class="keywordflow">if</span> (!success)
+<a name="l00275"></a>00275 log-&gt;notifyMissingAttribute(getNameFormatted(), utfCvrtTo&lt;std::string&gt;(name));
+<a name="l00276"></a>00276 <span class="keywordflow">return</span> success;
+<a name="l00277"></a>00277 }
+<a name="l00278"></a>00278 <span class="keywordflow">else</span>
+<a name="l00279"></a>00279 {
+<a name="l00280"></a>00280 log-&gt;notifyMissingElement(getNameFormatted());
+<a name="l00281"></a>00281 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00282"></a>00282 }
+<a name="l00283"></a>00283 }
+<a name="l00284"></a>00284
+<a name="l00286"></a><a class="code" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f">00286</a> <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* <span class="keyword">get</span>() <span class="keyword">const</span> { <span class="keywordflow">return</span> refIndex &lt; refList.size() ? refList[refIndex] : <span class="keyword">nullptr</span>; }
+<a name="l00287"></a>00287
+<a name="l00289"></a>00289
+<a name="l00298"></a><a class="code" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">00298</a> operator int ConversionToBool::* ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">get</span>() ? &amp;ConversionToBool::dummy : <span class="keyword">nullptr</span>; }
+<a name="l00299"></a>00299
+<a name="l00301"></a>00301
+<a name="l00320"></a><a class="code" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">00320</a> <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a" title="Notifies errors while mapping the XML to user data.">errorsOccured</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !log-&gt;elementList().empty(); }
+<a name="l00321"></a>00321
+<a name="l00323"></a>00323
+<a name="l00327"></a>00327 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00328"></a><a class="code" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">00328</a> std::vector&lt;String&gt; getErrorsAs()<span class="keyword"> const</span>
+<a name="l00329"></a>00329 <span class="keyword"> </span>{
+<a name="l00330"></a>00330 std::vector&lt;String&gt; output;
+<a name="l00331"></a>00331 <span class="keyword">const</span> <span class="keyword">auto</span>&amp; elements = log-&gt;elementList();
+<a name="l00332"></a>00332 std::transform(elements.begin(), elements.end(), std::back_inserter(output), [](<span class="keyword">const</span> std::string&amp; str) { <span class="keywordflow">return</span> utfCvrtTo&lt;String&gt;(str); });
+<a name="l00333"></a>00333 <span class="keywordflow">return</span> output;
+<a name="l00334"></a>00334 }
+<a name="l00335"></a>00335
+<a name="l00336"></a>00336 <span class="keyword">private</span>:
+<a name="l00337"></a>00337 <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">XmlIn</a>(<span class="keyword">const</span> std::vector&lt;const XmlElement*&gt;&amp; siblingList, <span class="keyword">const</span> std::string&amp; elementNameFmt, <span class="keyword">const</span> std::shared_ptr&lt;ErrorLog&gt;&amp; sharedlog) :
+<a name="l00338"></a>00338 refList(siblingList), refIndex(0), formattedName(elementNameFmt), log(sharedlog)
+<a name="l00339"></a>00339 { assert((!siblingList.empty() &amp;&amp; elementNameFmt.empty()) || (siblingList.empty() &amp;&amp; !elementNameFmt.empty())); }
+<a name="l00340"></a>00340
+<a name="l00341"></a>00341 <span class="keyword">static</span> std::string getNameFormatted(<span class="keyword">const</span> XmlElement&amp; elem) <span class="comment">//&quot;&lt;Root&gt; &lt;Level1&gt; &lt;Level2&gt;&quot;</span>
+<a name="l00342"></a>00342 {
+<a name="l00343"></a>00343 <span class="keywordflow">return</span> (elem.parent() ? getNameFormatted(*elem.parent()) + <span class="stringliteral">&quot; &quot;</span> : std::string()) + <span class="stringliteral">&quot;&lt;&quot;</span> + elem.getNameAs&lt;std::string&gt;() + <span class="stringliteral">&quot;&gt;&quot;</span>;
+<a name="l00344"></a>00344 }
+<a name="l00345"></a>00345
+<a name="l00346"></a>00346 std::string getNameFormatted()<span class="keyword"> const</span>
+<a name="l00347"></a>00347 <span class="keyword"> </span>{
+<a name="l00348"></a>00348 <span class="keywordflow">if</span> (refIndex &lt; refList.size())
+<a name="l00349"></a>00349 {
+<a name="l00350"></a>00350 assert(formattedName.empty());
+<a name="l00351"></a>00351 <span class="keywordflow">return</span> getNameFormatted(*refList[refIndex]);
+<a name="l00352"></a>00352 }
+<a name="l00353"></a>00353 <span class="keywordflow">else</span>
+<a name="l00354"></a>00354 <span class="keywordflow">return</span> formattedName;
+<a name="l00355"></a>00355 }
+<a name="l00356"></a>00356
+<a name="l00357"></a>00357 std::string getChildNameFormatted(<span class="keyword">const</span> std::string&amp; childName)<span class="keyword"> const</span>
+<a name="l00358"></a>00358 <span class="keyword"> </span>{
+<a name="l00359"></a>00359 std::string parentName = getNameFormatted();
+<a name="l00360"></a>00360 <span class="keywordflow">return</span> (parentName.empty() ? std::string() : (parentName + <span class="stringliteral">&quot; &quot;</span>)) + <span class="stringliteral">&quot;&lt;&quot;</span> + childName + <span class="stringliteral">&quot;&gt;&quot;</span>;
+<a name="l00361"></a>00361 }
+<a name="l00362"></a>00362
+<a name="l00363"></a>00363 <span class="keyword">class </span>ErrorLog
+<a name="l00364"></a>00364 {
+<a name="l00365"></a>00365 <span class="keyword">public</span>:
+<a name="l00366"></a>00366 <span class="keywordtype">void</span> notifyConversionError (<span class="keyword">const</span> std::string&amp; formattedName) { insert(formattedName); }
+<a name="l00367"></a>00367 <span class="keywordtype">void</span> notifyMissingElement (<span class="keyword">const</span> std::string&amp; formattedName) { insert(formattedName); }
+<a name="l00368"></a>00368 <span class="keywordtype">void</span> notifyMissingAttribute(<span class="keyword">const</span> std::string&amp; formattedName, <span class="keyword">const</span> std::string&amp; attribName) { insert(formattedName + <span class="stringliteral">&quot; @&quot;</span> + attribName); }
+<a name="l00369"></a>00369
+<a name="l00370"></a>00370 <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; elementList()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> failedElements; }
+<a name="l00371"></a>00371
+<a name="l00372"></a>00372 <span class="keyword">private</span>:
+<a name="l00373"></a>00373 <span class="keywordtype">void</span> insert(<span class="keyword">const</span> std::string&amp; newVal)
+<a name="l00374"></a>00374 {
+<a name="l00375"></a>00375 <span class="keywordflow">if</span> (usedElements.insert(newVal).second)
+<a name="l00376"></a>00376 failedElements.push_back(newVal);
+<a name="l00377"></a>00377 }
+<a name="l00378"></a>00378
+<a name="l00379"></a>00379 std::vector&lt;std::string&gt; failedElements; <span class="comment">//unique list of failed elements</span>
+<a name="l00380"></a>00380 std::set&lt;std::string&gt; usedElements;
+<a name="l00381"></a>00381 };
+<a name="l00382"></a>00382
+<a name="l00383"></a>00383 std::vector&lt;const XmlElement*&gt; refList; <span class="comment">//all sibling elements with same name (all pointers bound!)</span>
+<a name="l00384"></a>00384 <span class="keywordtype">size_t</span> refIndex; <span class="comment">//this sibling&#39;s index in refList</span>
+<a name="l00385"></a>00385 std::string formattedName; <span class="comment">//contains full and formatted element name if (and only if) refList is empty</span>
+<a name="l00386"></a>00386 std::shared_ptr&lt;ErrorLog&gt; log; <span class="comment">//always bound</span>
+<a name="l00387"></a>00387 };
+<a name="l00388"></a>00388 }
+<a name="l00389"></a>00389
+<a name="l00390"></a>00390 <span class="preprocessor">#endif //ZEN_XML_BIND_HEADER_9081740816593478258435</span>
+</pre></div></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/classes.html b/zenxml/doc/classes.html
new file mode 100644
index 00000000..4670ccf3
--- /dev/null
+++ b/zenxml/doc/classes.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Class Index</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li class="current"><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Class Index</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_X">X</a></div>
+<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
+<tr><td rowspan="2" valign="bottom"><a name="letter_X"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;X&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> (<a class="el" href="namespacezen.html">zen</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structzen_1_1_xml_file_error.html">XmlFileError</a> (<a class="el" href="namespacezen.html">zen</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a> (<a class="el" href="namespacezen.html">zen</a>)&#160;&#160;&#160;</td><td></td></tr>
+<tr><td valign="top"><a class="el" href="structzen_1_1_xml_error.html">XmlError</a> (<a class="el" href="namespacezen.html">zen</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a> (<a class="el" href="namespacezen.html">zen</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a> (<a class="el" href="namespacezen.html">zen</a>)&#160;&#160;&#160;</td><td></td></tr>
+<tr><td valign="top"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> (<a class="el" href="namespacezen.html">zen</a>)&#160;&#160;&#160;</td><td></td><td></td><td></td><td></td></tr>
+<tr><td></td><td></td><td></td><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_X">X</a></div>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/classzen_1_1_xml_doc-members.html b/zenxml/doc/classzen_1_1_xml_doc-members.html
new file mode 100644
index 00000000..4a936065
--- /dev/null
+++ b/zenxml/doc/classzen_1_1_xml_doc-members.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Member List</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li>
+ <li class="navelem"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">zen::XmlDoc Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+This is the complete list of members for <a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a>, including all inherited members.<table>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">getEncodingAs</a>() const </td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">getStandaloneAs</a>() const </td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">getVersionAs</a>() const </td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a>() const </td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">root</a>()</td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">setEncoding</a>(const String &amp;encoding)</td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">setStandalone</a>(const String &amp;standalone)</td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">setVersion</a>(const String &amp;version)</td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>()</td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">XmlDoc</a>(String rootName)</td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr>
+</table></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/classzen_1_1_xml_doc.html b/zenxml/doc/classzen_1_1_xml_doc.html
new file mode 100644
index 00000000..80e05844
--- /dev/null
+++ b/zenxml/doc/classzen_1_1_xml_doc.html
@@ -0,0 +1,353 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: zen::XmlDoc Class Reference</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li>
+ <li class="navelem"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zen::XmlDoc Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>The complete XML document.
+ <a href="classzen_1_1_xml_doc.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="dom_8h_source.html">dom.h</a>&gt;</code></p>
+
+<p><a href="classzen_1_1_xml_doc-members.html">List of all members.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:adbed9c31066d456a9cc8c610f15670ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbed9c31066d456a9cc8c610f15670ed"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a> ()</td></tr>
+<tr class="memdesc:adbed9c31066d456a9cc8c610f15670ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor setting up an empty XML document with a standard declaration: &lt;?xml version="1.0" encoding="UTF-8" ?&gt; <br/></td></tr>
+<tr class="memitem:a74ff8434848672fe6483845d04c082df"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a74ff8434848672fe6483845d04c082df"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">XmlDoc</a> (String rootName)</td></tr>
+<tr class="memitem:ad4a9594d93885fc1a12db28e8246648d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4a9594d93885fc1a12db28e8246648d"></a>
+const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a> () const </td></tr>
+<tr class="memdesc:ad4a9594d93885fc1a12db28e8246648d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a const reference to the document's root element. <br/></td></tr>
+<tr class="memitem:a094e156f9d265443e52a527638e88a1e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a094e156f9d265443e52a527638e88a1e"></a>
+<a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">root</a> ()</td></tr>
+<tr class="memdesc:a094e156f9d265443e52a527638e88a1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a reference to the document's root element. <br/></td></tr>
+<tr class="memitem:a7f93dcdc00cdc8d98926cf8e47161665"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a7f93dcdc00cdc8d98926cf8e47161665"><td class="memTemplItemLeft" align="right" valign="top">String&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">getVersionAs</a> () const </td></tr>
+<tr class="memdesc:a7f93dcdc00cdc8d98926cf8e47161665"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the version used in the XML declaration. <a href="#a7f93dcdc00cdc8d98926cf8e47161665"></a><br/></td></tr>
+<tr class="memitem:ab45914339c476e1da35746f5e00dbc64"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:ab45914339c476e1da35746f5e00dbc64"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">setVersion</a> (const String &amp;version)</td></tr>
+<tr class="memdesc:ab45914339c476e1da35746f5e00dbc64"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the version used in the XML declaration. <a href="#ab45914339c476e1da35746f5e00dbc64"></a><br/></td></tr>
+<tr class="memitem:a64ece4a1f3f8c802192b8f31506535da"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a64ece4a1f3f8c802192b8f31506535da"><td class="memTemplItemLeft" align="right" valign="top">String&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">getEncodingAs</a> () const </td></tr>
+<tr class="memdesc:a64ece4a1f3f8c802192b8f31506535da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the encoding used in the XML declaration. <a href="#a64ece4a1f3f8c802192b8f31506535da"></a><br/></td></tr>
+<tr class="memitem:a2ae30bca2f490479f58c272148935a62"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a2ae30bca2f490479f58c272148935a62"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">setEncoding</a> (const String &amp;encoding)</td></tr>
+<tr class="memdesc:a2ae30bca2f490479f58c272148935a62"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the encoding used in the XML declaration. <a href="#a2ae30bca2f490479f58c272148935a62"></a><br/></td></tr>
+<tr class="memitem:ac1bfb9776852dc8195b9ffb4f65452e4"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:ac1bfb9776852dc8195b9ffb4f65452e4"><td class="memTemplItemLeft" align="right" valign="top">String&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">getStandaloneAs</a> () const </td></tr>
+<tr class="memdesc:ac1bfb9776852dc8195b9ffb4f65452e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the standalone string used in the XML declaration. <a href="#ac1bfb9776852dc8195b9ffb4f65452e4"></a><br/></td></tr>
+<tr class="memitem:a4c92f9b8c1bb47247b827d89794590d4"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a4c92f9b8c1bb47247b827d89794590d4"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">setStandalone</a> (const String &amp;standalone)</td></tr>
+<tr class="memdesc:a4c92f9b8c1bb47247b827d89794590d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the standalone string used in the XML declaration. <a href="#a4c92f9b8c1bb47247b827d89794590d4"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>The complete XML document. </p>
+</div><hr/><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="a74ff8434848672fe6483845d04c082df"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">zen::XmlDoc::XmlDoc</a> </td>
+ <td>(</td>
+ <td class="paramtype">String&#160;</td>
+ <td class="paramname"><em>rootName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">rootName</td><td>The name of the XML document's root element. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="a64ece4a1f3f8c802192b8f31506535da"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">String <a class="el" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">zen::XmlDoc::getEncodingAs</a> </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Get the encoding used in the XML declaration. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ac1bfb9776852dc8195b9ffb4f65452e4"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">String <a class="el" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">zen::XmlDoc::getStandaloneAs</a> </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Get the standalone string used in the XML declaration. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a7f93dcdc00cdc8d98926cf8e47161665"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">String <a class="el" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">zen::XmlDoc::getVersionAs</a> </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Get the version used in the XML declaration. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a2ae30bca2f490479f58c272148935a62"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">zen::XmlDoc::setEncoding</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>encoding</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Set the encoding used in the XML declaration. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a4c92f9b8c1bb47247b827d89794590d4"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">zen::XmlDoc::setStandalone</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>standalone</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Set the standalone string used in the XML declaration. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab45914339c476e1da35746f5e00dbc64"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">zen::XmlDoc::setVersion</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>version</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Set the version used in the XML declaration. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/classzen_1_1_xml_element-members.html b/zenxml/doc/classzen_1_1_xml_element-members.html
new file mode 100644
index 00000000..bccd92d1
--- /dev/null
+++ b/zenxml/doc/classzen_1_1_xml_element-members.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Member List</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li>
+ <li class="navelem"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">zen::XmlElement Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+This is the complete list of members for <a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a>, including all inherited members.<table>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">addChild</a>(const String &amp;name)</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">getAttribute</a>(const String &amp;name, T &amp;value) const </td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a>(const String &amp;name) const </td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">getChild</a>(const String &amp;name)</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">getChildren</a>(const String &amp;name) const </td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">getChildren</a>(const String &amp;name)</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2">getChildren</a>() const </td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">getChildren</a>()</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">getNameAs</a>() const </td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">getValue</a>(T &amp;value) const </td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">parent</a>()</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c">parent</a>() const </td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">removeAttribute</a>(const String &amp;name)</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">setAttribute</a>(const String &amp;name, const T &amp;value)</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">setValue</a>(const T &amp;value)</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr>
+</table></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/classzen_1_1_xml_element.html b/zenxml/doc/classzen_1_1_xml_element.html
new file mode 100644
index 00000000..fc87396a
--- /dev/null
+++ b/zenxml/doc/classzen_1_1_xml_element.html
@@ -0,0 +1,552 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: zen::XmlElement Class Reference</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li>
+ <li class="navelem"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zen::XmlElement Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>An XML element.
+ <a href="classzen_1_1_xml_element.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="dom_8h_source.html">dom.h</a>&gt;</code></p>
+
+<p><a href="classzen_1_1_xml_element-members.html">List of all members.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a7c911eb06a59c864197b1a4098728e50"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a7c911eb06a59c864197b1a4098728e50"><td class="memTemplItemLeft" align="right" valign="top">String&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">getNameAs</a> () const </td></tr>
+<tr class="memdesc:a7c911eb06a59c864197b1a4098728e50"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve the name of this XML element. <a href="#a7c911eb06a59c864197b1a4098728e50"></a><br/></td></tr>
+<tr class="memitem:a5ac9d586a5668c2c64e3c06c6203b070"><td class="memTemplParams" colspan="2">template&lt;class T &gt; </td></tr>
+<tr class="memitem:a5ac9d586a5668c2c64e3c06c6203b070"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">getValue</a> (T &amp;value) const </td></tr>
+<tr class="memdesc:a5ac9d586a5668c2c64e3c06c6203b070"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the value of this element as a user type. <a href="#a5ac9d586a5668c2c64e3c06c6203b070"></a><br/></td></tr>
+<tr class="memitem:aaf3a26f6199fc88cce7d9d911ba21b01"><td class="memTemplParams" colspan="2">template&lt;class T &gt; </td></tr>
+<tr class="memitem:aaf3a26f6199fc88cce7d9d911ba21b01"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">setValue</a> (const T &amp;value)</td></tr>
+<tr class="memdesc:aaf3a26f6199fc88cce7d9d911ba21b01"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the value of this element. <a href="#aaf3a26f6199fc88cce7d9d911ba21b01"></a><br/></td></tr>
+<tr class="memitem:af90ac6f435b03ba37cf47ee188c58887"><td class="memTemplParams" colspan="2">template&lt;class String , class T &gt; </td></tr>
+<tr class="memitem:af90ac6f435b03ba37cf47ee188c58887"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">getAttribute</a> (const String &amp;name, T &amp;value) const </td></tr>
+<tr class="memdesc:af90ac6f435b03ba37cf47ee188c58887"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve an attribute by name. <a href="#af90ac6f435b03ba37cf47ee188c58887"></a><br/></td></tr>
+<tr class="memitem:a211a6f037c22a54d3facb7a8347a8421"><td class="memTemplParams" colspan="2">template&lt;class String , class T &gt; </td></tr>
+<tr class="memitem:a211a6f037c22a54d3facb7a8347a8421"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">setAttribute</a> (const String &amp;name, const T &amp;value)</td></tr>
+<tr class="memdesc:a211a6f037c22a54d3facb7a8347a8421"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create or update an XML attribute. <a href="#a211a6f037c22a54d3facb7a8347a8421"></a><br/></td></tr>
+<tr class="memitem:ad9c2ce2e55294c8110825988595e3934"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:ad9c2ce2e55294c8110825988595e3934"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">removeAttribute</a> (const String &amp;name)</td></tr>
+<tr class="memdesc:ad9c2ce2e55294c8110825988595e3934"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove the attribute with the given name. <a href="#ad9c2ce2e55294c8110825988595e3934"></a><br/></td></tr>
+<tr class="memitem:a653caffa6fad89db7d14f67f987ad0f9"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a653caffa6fad89db7d14f67f987ad0f9"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">addChild</a> (const String &amp;name)</td></tr>
+<tr class="memdesc:a653caffa6fad89db7d14f67f987ad0f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a new child element and return a reference to it. <a href="#a653caffa6fad89db7d14f67f987ad0f9"></a><br/></td></tr>
+<tr class="memitem:a3ab82b1720460487f4afabcd115d0c7e"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a3ab82b1720460487f4afabcd115d0c7e"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a> (const String &amp;name) const </td></tr>
+<tr class="memdesc:a3ab82b1720460487f4afabcd115d0c7e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve a child element with the given name. <a href="#a3ab82b1720460487f4afabcd115d0c7e"></a><br/></td></tr>
+<tr class="memitem:a5d672e8ccc7592442ab927bb267af658"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a5d672e8ccc7592442ab927bb267af658"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">getChild</a> (const String &amp;name)</td></tr>
+<tr class="memitem:a2640b438c4984f5eeb8760d82d73c5b8"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a2640b438c4984f5eeb8760d82d73c5b8"><td class="memTemplItemLeft" align="right" valign="top">std::pair&lt; ChildIterConst2, <br class="typebreak"/>
+ChildIterConst2 &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">getChildren</a> (const String &amp;name) const </td></tr>
+<tr class="memdesc:a2640b438c4984f5eeb8760d82d73c5b8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Access all child elements with the given name via STL iterators. <a href="#a2640b438c4984f5eeb8760d82d73c5b8"></a><br/></td></tr>
+<tr class="memitem:ae209dac9655bc36121abb87688ece41d"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:ae209dac9655bc36121abb87688ece41d"><td class="memTemplItemLeft" align="right" valign="top">std::pair&lt; ChildIter2, ChildIter2 &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">getChildren</a> (const String &amp;name)</td></tr>
+<tr class="memitem:a55a6d1849490d82ae900cd9b923908f2"><td class="memItemLeft" align="right" valign="top">std::pair&lt; ChildIterConst, <br class="typebreak"/>
+ChildIterConst &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2">getChildren</a> () const </td></tr>
+<tr class="memdesc:a55a6d1849490d82ae900cd9b923908f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Access all child elements sequentially via STL iterators. <a href="#a55a6d1849490d82ae900cd9b923908f2"></a><br/></td></tr>
+<tr class="memitem:ac59268177d162931f937b6a7f235ad96"><td class="memItemLeft" align="right" valign="top">std::pair&lt; ChildIter, ChildIter &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">getChildren</a> ()</td></tr>
+<tr class="memitem:a4af309f59ef09f46a559f1f0e1eac6c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4af309f59ef09f46a559f1f0e1eac6c1"></a>
+<a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">parent</a> ()</td></tr>
+<tr class="memdesc:a4af309f59ef09f46a559f1f0e1eac6c1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get parent XML element, may be nullptr for root element. <br/></td></tr>
+<tr class="memitem:a7ba1f26be5629f89ba7648d658f7058c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ba1f26be5629f89ba7648d658f7058c"></a>
+const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c">parent</a> () const </td></tr>
+<tr class="memdesc:a7ba1f26be5629f89ba7648d658f7058c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get parent XML element, may be nullptr for root element. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>An XML element. </p>
+</div><hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="a653caffa6fad89db7d14f67f987ad0f9"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a>&amp; <a class="el" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">zen::XmlElement::addChild</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>name</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Create a new child element and return a reference to it. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">name</td><td>The name of the child element to be created. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="af90ac6f435b03ba37cf47ee188c58887"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String , class T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">bool <a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">zen::XmlElement::getAttribute</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T &amp;&#160;</td>
+ <td class="paramname"><em>value</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Retrieve an attribute by name. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ <tr><td class="paramname">T</td><td>String-convertible user data type: e.g. any string class, all built-in arithmetic numbers </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">name</td><td>The name of the attribute to retrieve. </td></tr>
+ <tr><td class="paramname">value</td><td>The value of the attribute converted to T. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>"true" if value was retrieved successfully. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a3ab82b1720460487f4afabcd115d0c7e"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a>* <a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">zen::XmlElement::getChild</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>name</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Retrieve a child element with the given name. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">name</td><td>The name of the child element to be retrieved. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>A pointer to the child element or nullptr if none was found. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5d672e8ccc7592442ab927bb267af658"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a>* <a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">zen::XmlElement::getChild</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>name</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e" title="Retrieve a child element with the given name.">getChild</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2640b438c4984f5eeb8760d82d73c5b8"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">std::pair&lt;ChildIterConst2, ChildIterConst2&gt; <a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">zen::XmlElement::getChildren</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>name</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Access all child elements with the given name via STL iterators. </p>
+<div class="fragment"><pre class="fragment"> <span class="keyword">auto</span> iterPair = elem.getChildren(<span class="stringliteral">&quot;Item&quot;</span>);
+ std::for_each(iterPair.first, iterPair.second,
+ [](<span class="keyword">const</span> XmlElement&amp; child) { ... });
+</pre></div> <dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">name</td><td>The name of the child elements to be retrieved. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>A pair of STL begin/end iterators to access the child elements sequentially. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ae209dac9655bc36121abb87688ece41d"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">std::pair&lt;ChildIter2, ChildIter2&gt; <a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">zen::XmlElement::getChildren</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>name</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8" title="Access all child elements with the given name via STL iterators.">getChildren</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a55a6d1849490d82ae900cd9b923908f2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::pair&lt;ChildIterConst, ChildIterConst&gt; <a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">zen::XmlElement::getChildren</a> </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Access all child elements sequentially via STL iterators. </p>
+<div class="fragment"><pre class="fragment"> <span class="keyword">auto</span> iterPair = elem.getChildren();
+ std::for_each(iterPair.first, iterPair.second,
+ [](<span class="keyword">const</span> XmlElement&amp; child) { ... });
+</pre></div> <dl class="section return"><dt>Returns:</dt><dd>A pair of STL begin/end iterators to access all child elements sequentially. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ac59268177d162931f937b6a7f235ad96"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::pair&lt;ChildIter, ChildIter&gt; <a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">zen::XmlElement::getChildren</a> </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8" title="Access all child elements with the given name via STL iterators.">getChildren</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a7c911eb06a59c864197b1a4098728e50"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">String <a class="el" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">zen::XmlElement::getNameAs</a> </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Retrieve the name of this XML element. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>Name of the XML element. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5ac9d586a5668c2c64e3c06c6203b070"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">bool <a class="el" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">zen::XmlElement::getValue</a> </td>
+ <td>(</td>
+ <td class="paramtype">T &amp;&#160;</td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Get the value of this element as a user type. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">T</td><td>Arbitrary user data type: e.g. any string class, all built-in arithmetic numbers, STL container, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>"true" if Xml element was successfully converted to value, cannot fail for string-like types </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ad9c2ce2e55294c8110825988595e3934"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">zen::XmlElement::removeAttribute</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>name</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Remove the attribute with the given name. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a211a6f037c22a54d3facb7a8347a8421"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String , class T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">zen::XmlElement::setAttribute</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const T &amp;&#160;</td>
+ <td class="paramname"><em>value</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Create or update an XML attribute. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ <tr><td class="paramname">T</td><td>String-convertible user data type: e.g. any string-like type, all built-in arithmetic numbers </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">name</td><td>The name of the attribute to create or update. </td></tr>
+ <tr><td class="paramname">value</td><td>The value to set. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="aaf3a26f6199fc88cce7d9d911ba21b01"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">zen::XmlElement::setValue</a> </td>
+ <td>(</td>
+ <td class="paramtype">const T &amp;&#160;</td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Set the value of this element. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">T</td><td>Arbitrary user data type: e.g. any string-like type, all built-in arithmetic numbers, STL container, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/classzen_1_1_xml_in-members.html b/zenxml/doc/classzen_1_1_xml_in-members.html
new file mode 100644
index 00000000..794b180d
--- /dev/null
+++ b/zenxml/doc/classzen_1_1_xml_in-members.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Member List</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li>
+ <li class="navelem"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">zen::XmlIn Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+This is the complete list of members for <a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a>, including all inherited members.<table>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">attribute</a>(const String &amp;name, T &amp;value) const </td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">errorsOccured</a>() const </td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f">get</a>() const </td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">getErrorsAs</a>() const </td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">next</a>()</td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">operator int ConversionToBool::*</a>() const </td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">operator()</a>(T &amp;value) const </td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">operator[]</a>(const String &amp;name) const </td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a>(const XmlDoc &amp;doc)</td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">XmlIn</a>(const XmlElement *element)</td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">XmlIn</a>(const XmlElement &amp;element)</td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr>
+</table></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/classzen_1_1_xml_in.html b/zenxml/doc/classzen_1_1_xml_in.html
new file mode 100644
index 00000000..f1093061
--- /dev/null
+++ b/zenxml/doc/classzen_1_1_xml_in.html
@@ -0,0 +1,446 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: zen::XmlIn Class Reference</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li>
+ <li class="navelem"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zen::XmlIn Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Proxy class to conveniently convert XML structure to user data.
+ <a href="classzen_1_1_xml_in.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="bind_8h_source.html">bind.h</a>&gt;</code></p>
+
+<p><a href="classzen_1_1_xml_in-members.html">List of all members.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a5b48c9848e6c631a04cec2477ff85c0f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a> (const <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &amp;doc)</td></tr>
+<tr class="memdesc:a5b48c9848e6c631a04cec2477ff85c0f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct an input proxy for an XML document. <a href="#a5b48c9848e6c631a04cec2477ff85c0f"></a><br/></td></tr>
+<tr class="memitem:ae072660cde71fd4695c04d074098b430"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">XmlIn</a> (const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> *element)</td></tr>
+<tr class="memdesc:ae072660cde71fd4695c04d074098b430"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct an input proxy for a single XML element, may be nullptr. <a href="#ae072660cde71fd4695c04d074098b430"></a><br/></td></tr>
+<tr class="memitem:a33de75412df69cb25e0fd8b3bc70c9f8"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">XmlIn</a> (const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &amp;element)</td></tr>
+<tr class="memdesc:a33de75412df69cb25e0fd8b3bc70c9f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct an input proxy for a single XML element. <a href="#a33de75412df69cb25e0fd8b3bc70c9f8"></a><br/></td></tr>
+<tr class="memitem:a9b38167835a28eac9a2297f35f51e53d"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a9b38167835a28eac9a2297f35f51e53d"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">operator[]</a> (const String &amp;name) const </td></tr>
+<tr class="memdesc:a9b38167835a28eac9a2297f35f51e53d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve a handle to an XML child element for reading. <a href="#a9b38167835a28eac9a2297f35f51e53d"></a><br/></td></tr>
+<tr class="memitem:a60cf2678c989621545d27745dcafa4a4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">next</a> ()</td></tr>
+<tr class="memdesc:a60cf2678c989621545d27745dcafa4a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Refer to next sibling element with the same name. <a href="#a60cf2678c989621545d27745dcafa4a4"></a><br/></td></tr>
+<tr class="memitem:a98cc59f687c89549381e76105f8fb506"><td class="memTemplParams" colspan="2">template&lt;class T &gt; </td></tr>
+<tr class="memitem:a98cc59f687c89549381e76105f8fb506"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">operator()</a> (T &amp;value) const </td></tr>
+<tr class="memdesc:a98cc59f687c89549381e76105f8fb506"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read user data from the underlying XML element. <a href="#a98cc59f687c89549381e76105f8fb506"></a><br/></td></tr>
+<tr class="memitem:a971cd7054c551c4460d5220f6ec5cf01"><td class="memTemplParams" colspan="2">template&lt;class String , class T &gt; </td></tr>
+<tr class="memitem:a971cd7054c551c4460d5220f6ec5cf01"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">attribute</a> (const String &amp;name, T &amp;value) const </td></tr>
+<tr class="memdesc:a971cd7054c551c4460d5220f6ec5cf01"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read user data from an XML attribute. <a href="#a971cd7054c551c4460d5220f6ec5cf01"></a><br/></td></tr>
+<tr class="memitem:a647b468b7c6c95b25f2e43627184177f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a647b468b7c6c95b25f2e43627184177f"></a>
+const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f">get</a> () const </td></tr>
+<tr class="memdesc:a647b468b7c6c95b25f2e43627184177f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a pointer to the underlying Xml element, may be nullptr. <br/></td></tr>
+<tr class="memitem:a954950849b52557369932ab2a8b4ad72"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">operator int ConversionToBool::*</a> () const </td></tr>
+<tr class="memdesc:a954950849b52557369932ab2a8b4ad72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Test whether the underlying XML element exists. <a href="#a954950849b52557369932ab2a8b4ad72"></a><br/></td></tr>
+<tr class="memitem:a33b5dd504d3165aa3f923f6b33e9991a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">errorsOccured</a> () const </td></tr>
+<tr class="memdesc:a33b5dd504d3165aa3f923f6b33e9991a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Notifies errors while mapping the XML to user data. <a href="#a33b5dd504d3165aa3f923f6b33e9991a"></a><br/></td></tr>
+<tr class="memitem:a84bb497d3b3fc753d054e52c4823c05e"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a84bb497d3b3fc753d054e52c4823c05e"><td class="memTemplItemLeft" align="right" valign="top">std::vector&lt; String &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">getErrorsAs</a> () const </td></tr>
+<tr class="memdesc:a84bb497d3b3fc753d054e52c4823c05e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a list of XML element and attribute names which failed to convert to user data. <a href="#a84bb497d3b3fc753d054e52c4823c05e"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Proxy class to conveniently convert XML structure to user data. </p>
+</div><hr/><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="a5b48c9848e6c631a04cec2477ff85c0f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">zen::XmlIn::XmlIn</a> </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &amp;&#160;</td>
+ <td class="paramname"><em>doc</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Construct an input proxy for an XML document. </p>
+<div class="fragment"><pre class="fragment"> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc;
+ ... <span class="comment">//load document</span>
+ <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> in(doc);
+ in[<span class="stringliteral">&quot;elem1&quot;</span>](value1); <span class="comment">//</span>
+ in[<span class="stringliteral">&quot;elem2&quot;</span>](value2); <span class="comment">//read data from XML elements into variables &quot;value1&quot;, &quot;value2&quot;, &quot;value3&quot;</span>
+ in[<span class="stringliteral">&quot;elem3&quot;</span>](value3); <span class="comment">//</span>
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="ae072660cde71fd4695c04d074098b430"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">zen::XmlIn::XmlIn</a> </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> *&#160;</td>
+ <td class="paramname"><em>element</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Construct an input proxy for a single XML element, may be nullptr. </p>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn(const XmlDoc&amp; doc)</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a33de75412df69cb25e0fd8b3bc70c9f8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">zen::XmlIn::XmlIn</a> </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &amp;&#160;</td>
+ <td class="paramname"><em>element</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Construct an input proxy for a single XML element. </p>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn(const XmlDoc&amp; doc)</a> </dd></dl>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="a971cd7054c551c4460d5220f6ec5cf01"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String , class T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">bool <a class="el" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">zen::XmlIn::attribute</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T &amp;&#160;</td>
+ <td class="paramname"><em>value</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Read user data from an XML attribute. </p>
+<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">zen::readText()</a> for type T.</p>
+<div class="fragment"><pre class="fragment"> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc;
+ ... <span class="comment">//load document</span>
+ <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> in(doc);
+ in[<span class="stringliteral">&quot;elem&quot;</span>].attribute(<span class="stringliteral">&quot;attr1&quot;</span>, value1); <span class="comment">//</span>
+ in[<span class="stringliteral">&quot;elem&quot;</span>].attribute(<span class="stringliteral">&quot;attr2&quot;</span>, value2); <span class="comment">//read data from XML attributes into variables &quot;value1&quot;, &quot;value2&quot;, &quot;value3&quot;</span>
+ in[<span class="stringliteral">&quot;elem&quot;</span>].attribute(<span class="stringliteral">&quot;attr3&quot;</span>, value3); <span class="comment">//</span>
+</pre></div><dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ <tr><td class="paramname">T</td><td>String-convertible user data type: e.g. any string-like type, all built-in arithmetic numbers </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>"true" if the attribute was found and the conversion to the output value was successful. </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887" title="Retrieve an attribute by name.">XmlElement::getAttribute()</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a33b5dd504d3165aa3f923f6b33e9991a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool <a class="el" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">zen::XmlIn::errorsOccured</a> </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Notifies errors while mapping the XML to user data. </p>
+<p>Error logging is shared by each hiearchy of <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">XmlIn</a> proxy instances that are created from each other. Consequently it doesn't matter which instance you query for errors: </p>
+<div class="fragment"><pre class="fragment"> <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn</a> in(doc);
+ <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn</a> inItem = in[<span class="stringliteral">&quot;item1&quot;</span>];
+
+ <span class="keywordtype">int</span> value = 0;
+ inItem(value); <span class="comment">//let&#39;s assume this conversion failed</span>
+
+ assert(in.errorsOccured() == inItem.errorsOccured());
+ assert(in.getErrorsAs&lt;std::string&gt;() == inItem.getErrorsAs&lt;std::string&gt;());
+</pre></div><p>Note that error logging is <b>NOT</b> global, but owned by all instances of a hierarchy of <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">XmlIn</a> proxies. Therefore it's safe to use unrelated <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">XmlIn</a> proxies in multiple threads. <br/>
+<br/>
+ However be aware that the chain of connected proxy instances will be broken once you call <a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f" title="Return a pointer to the underlying Xml element, may be nullptr.">XmlIn::get()</a> to retrieve the underlying pointer. Errors that occur when working with this pointer are not logged by the original set of related instances. </p>
+
+</div>
+</div>
+<a class="anchor" id="a84bb497d3b3fc753d054e52c4823c05e"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt;String&gt; <a class="el" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">zen::XmlIn::getErrorsAs</a> </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Get a list of XML element and attribute names which failed to convert to user data. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>A list of XML element and attribute names, empty list if no errors occured. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a60cf2678c989621545d27745dcafa4a4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">zen::XmlIn::next</a> </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Refer to next sibling element with the same name. </p>
+<p><b>Example:</b> Loop over all XML child elements named "Item" </p>
+<div class="fragment"><pre class="fragment"> &lt;?xml version="1.0" encoding="UTF-8"?&gt;
+ &lt;Root&gt;
+ &lt;Item&gt;1&lt;/Item&gt;
+ &lt;Item&gt;3&lt;/Item&gt;
+ &lt;Item&gt;5&lt;/Item&gt;
+ &lt;/Root&gt;</pre></div><div class="fragment"><pre class="fragment"> <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> in(doc);
+ ...
+ <span class="keywordflow">for</span> (<a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> child = in[<span class="stringliteral">&quot;Item&quot;</span>]; child; child.<a class="code" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4" title="Refer to next sibling element with the same name.">next</a>())
+ {
+ ...
+ }
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="a954950849b52557369932ab2a8b4ad72"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">zen::XmlIn::operator int ConversionToBool::* </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Test whether the underlying XML element exists. </p>
+<div class="fragment"><pre class="fragment"> <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn</a> in(doc);
+ <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn</a> child = in[<span class="stringliteral">&quot;elem1&quot;</span>];
+ <span class="keywordflow">if</span> (child)
+ ...
+</pre></div><p> Use member pointer as implicit conversion to bool (C++ Templates - Vandevoorde/Josuttis; chapter 20) </p>
+
+</div>
+</div>
+<a class="anchor" id="a98cc59f687c89549381e76105f8fb506"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">bool zen::XmlIn::operator() </td>
+ <td>(</td>
+ <td class="paramtype">T &amp;&#160;</td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Read user data from the underlying XML element. </p>
+<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">zen::readText()</a> or <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">zen::readStruc()</a> for type T. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">T</td><td>User type that receives the data </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>"true" if data was read successfully </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a9b38167835a28eac9a2297f35f51e53d"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a> zen::XmlIn::operator[] </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>name</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Retrieve a handle to an XML child element for reading. </p>
+<p>It is <b>not</b> an error if the child element does not exist, but only later if a conversion to user data is attempted. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">name</td><td>The name of the child element </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/classzen_1_1_xml_out-members.html b/zenxml/doc/classzen_1_1_xml_out-members.html
new file mode 100644
index 00000000..368b094f
--- /dev/null
+++ b/zenxml/doc/classzen_1_1_xml_out-members.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Member List</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li>
+ <li class="navelem"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">zen::XmlOut Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+This is the complete list of members for <a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a>, including all inherited members.<table>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">attribute</a>(const String &amp;name, const T &amp;value)</td><td><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">operator()</a>(const T &amp;value)</td><td><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">operator[]</a>(const String &amp;name) const </td><td><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">ref</a>()</td><td><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">XmlOut</a>(XmlDoc &amp;doc)</td><td><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">XmlOut</a>(XmlElement &amp;element)</td><td><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td></td></tr>
+</table></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/classzen_1_1_xml_out.html b/zenxml/doc/classzen_1_1_xml_out.html
new file mode 100644
index 00000000..e7fea1d5
--- /dev/null
+++ b/zenxml/doc/classzen_1_1_xml_out.html
@@ -0,0 +1,317 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: zen::XmlOut Class Reference</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li>
+ <li class="navelem"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zen::XmlOut Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Proxy class to conveniently convert user data into XML structure.
+ <a href="classzen_1_1_xml_out.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="bind_8h_source.html">bind.h</a>&gt;</code></p>
+
+<p><a href="classzen_1_1_xml_out-members.html">List of all members.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ad8b1ccb8f3d4e7b0ab2598597ea50bcc"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">XmlOut</a> (<a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &amp;doc)</td></tr>
+<tr class="memdesc:ad8b1ccb8f3d4e7b0ab2598597ea50bcc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct an output proxy for an XML document. <a href="#ad8b1ccb8f3d4e7b0ab2598597ea50bcc"></a><br/></td></tr>
+<tr class="memitem:aa80be3a56f70a58d2730a763166088c0"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">XmlOut</a> (<a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &amp;element)</td></tr>
+<tr class="memdesc:aa80be3a56f70a58d2730a763166088c0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct an output proxy for a single XML element. <a href="#aa80be3a56f70a58d2730a763166088c0"></a><br/></td></tr>
+<tr class="memitem:a00f883d3f9d60535b06b5ae609dc8831"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a00f883d3f9d60535b06b5ae609dc8831"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">operator[]</a> (const String &amp;name) const </td></tr>
+<tr class="memdesc:a00f883d3f9d60535b06b5ae609dc8831"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve a handle to an XML child element for writing. <a href="#a00f883d3f9d60535b06b5ae609dc8831"></a><br/></td></tr>
+<tr class="memitem:a09ca9144515e3c109b36062b0475c8eb"><td class="memTemplParams" colspan="2">template&lt;class T &gt; </td></tr>
+<tr class="memitem:a09ca9144515e3c109b36062b0475c8eb"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">operator()</a> (const T &amp;value)</td></tr>
+<tr class="memdesc:a09ca9144515e3c109b36062b0475c8eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write user data to the underlying XML element. <a href="#a09ca9144515e3c109b36062b0475c8eb"></a><br/></td></tr>
+<tr class="memitem:acaf9b71fe1d907dd63dd4b91e2e03805"><td class="memTemplParams" colspan="2">template&lt;class String , class T &gt; </td></tr>
+<tr class="memitem:acaf9b71fe1d907dd63dd4b91e2e03805"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">attribute</a> (const String &amp;name, const T &amp;value)</td></tr>
+<tr class="memdesc:acaf9b71fe1d907dd63dd4b91e2e03805"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write user data to an XML attribute. <a href="#acaf9b71fe1d907dd63dd4b91e2e03805"></a><br/></td></tr>
+<tr class="memitem:aec117344e8a534382e8d5e76711f97b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec117344e8a534382e8d5e76711f97b2"></a>
+<a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">ref</a> ()</td></tr>
+<tr class="memdesc:aec117344e8a534382e8d5e76711f97b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a reference to the underlying Xml element. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Proxy class to conveniently convert user data into XML structure. </p>
+</div><hr/><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="ad8b1ccb8f3d4e7b0ab2598597ea50bcc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">zen::XmlOut::XmlOut</a> </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &amp;&#160;</td>
+ <td class="paramname"><em>doc</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Construct an output proxy for an XML document. </p>
+<div class="fragment"><pre class="fragment"> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc;
+
+ <a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc);
+ out[<span class="stringliteral">&quot;elem1&quot;</span>]( 1); <span class="comment">//</span>
+ out[<span class="stringliteral">&quot;elem2&quot;</span>]( 2); <span class="comment">//write data into XML elements</span>
+ out[<span class="stringliteral">&quot;elem3&quot;</span>](-3); <span class="comment">//</span>
+
+ <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d" title="Save XML document to a file.">save</a>(doc, <span class="stringliteral">&quot;out.xml&quot;</span>); <span class="comment">//throw XmlFileError</span>
+</pre></div><p> Output: </p>
+<div class="fragment"><pre class="fragment"> &lt;?xml version="1.0" encoding="UTF-8"?&gt;
+ &lt;Root&gt;
+ &lt;elem1&gt;1&lt;/elem1&gt;
+ &lt;elem2&gt;2&lt;/elem2&gt;
+ &lt;elem3&gt;-3&lt;/elem3&gt;
+ &lt;/Root&gt;</pre></div>
+</div>
+</div>
+<a class="anchor" id="aa80be3a56f70a58d2730a763166088c0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">zen::XmlOut::XmlOut</a> </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &amp;&#160;</td>
+ <td class="paramname"><em>element</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Construct an output proxy for a single XML element. </p>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc" title="Construct an output proxy for an XML document.">XmlOut(XmlDoc&amp; doc)</a> </dd></dl>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="acaf9b71fe1d907dd63dd4b91e2e03805"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String , class T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">zen::XmlOut::attribute</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const T &amp;&#160;</td>
+ <td class="paramname"><em>value</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Write user data to an XML attribute. </p>
+<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">zen::writeText()</a> for type T. </p>
+<div class="fragment"><pre class="fragment"> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc;
+
+ <a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc);
+ out[<span class="stringliteral">&quot;elem&quot;</span>].attribute(<span class="stringliteral">&quot;attr1&quot;</span>, 1); <span class="comment">//</span>
+ out[<span class="stringliteral">&quot;elem&quot;</span>].attribute(<span class="stringliteral">&quot;attr2&quot;</span>, 2); <span class="comment">//write data into XML attributes</span>
+ out[<span class="stringliteral">&quot;elem&quot;</span>].attribute(<span class="stringliteral">&quot;attr3&quot;</span>, -3); <span class="comment">//</span>
+
+ <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d" title="Save XML document to a file.">save</a>(doc, <span class="stringliteral">&quot;out.xml&quot;</span>); <span class="comment">//throw XmlFileError</span>
+</pre></div><p> Output: </p>
+<div class="fragment"><pre class="fragment"> &lt;?xml version="1.0" encoding="UTF-8"?&gt;
+ &lt;Root&gt;
+ &lt;elem attr1="1" attr2="2" attr3="-3"/&gt;
+ &lt;/Root&gt;</pre></div><dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ <tr><td class="paramname">T</td><td>String-convertible user data type: e.g. any string-like type, all built-in arithmetic numbers </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421" title="Create or update an XML attribute.">XmlElement::setAttribute()</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a09ca9144515e3c109b36062b0475c8eb"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void zen::XmlOut::operator() </td>
+ <td>(</td>
+ <td class="paramtype">const T &amp;&#160;</td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Write user data to the underlying XML element. </p>
+<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">zen::writeText()</a> or <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">zen::writeStruc()</a> for type T. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">T</td><td>User type that is converted into an XML element value. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a00f883d3f9d60535b06b5ae609dc8831"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a> zen::XmlOut::operator[] </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>name</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Retrieve a handle to an XML child element for writing. </p>
+<p>The child element will be created if it is not yet existing. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">name</td><td>The name of the child element </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/closed.png b/zenxml/doc/closed.png
new file mode 100644
index 00000000..b7d4bd9f
--- /dev/null
+++ b/zenxml/doc/closed.png
Binary files differ
diff --git a/zenxml/doc/cvrt__struc_8h_source.html b/zenxml/doc/cvrt__struc_8h_source.html
new file mode 100644
index 00000000..6bd4e7af
--- /dev/null
+++ b/zenxml/doc/cvrt__struc_8h_source.html
@@ -0,0 +1,305 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: cvrt_struc.h Source File</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">cvrt_struc.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span>
+<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span>
+<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span>
+<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span>
+<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span>
+<a name="l00006"></a>00006
+<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743</span>
+<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743</span>
+<a name="l00009"></a>00009 <span class="preprocessor"></span>
+<a name="l00010"></a>00010 <span class="preprocessor">#include &quot;dom.h&quot;</span>
+<a name="l00011"></a>00011
+<a name="l00012"></a>00012 <span class="keyword">namespace </span>zen
+<a name="l00013"></a>00013 {
+<a name="l00020"></a>00020
+<a name="l00021"></a>00021
+<a name="l00026"></a>00026 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(<span class="keyword">const</span> XmlElement&amp; input, T&amp; value);
+<a name="l00028"></a>00028
+<a name="l00032"></a>00032 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(<span class="keyword">const</span> T&amp; value, XmlElement&amp; output);
+<a name="l00033"></a>00033
+<a name="l00034"></a>00034
+<a name="l00035"></a>00035
+<a name="l00036"></a>00036
+<a name="l00037"></a>00037
+<a name="l00038"></a>00038
+<a name="l00039"></a>00039
+<a name="l00040"></a>00040
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042
+<a name="l00043"></a>00043
+<a name="l00044"></a>00044
+<a name="l00045"></a>00045
+<a name="l00046"></a>00046
+<a name="l00047"></a>00047
+<a name="l00048"></a>00048
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <span class="comment">//------------------------------ implementation -------------------------------------</span>
+<a name="l00051"></a>00051 <span class="keyword">namespace </span>impl_2384343
+<a name="l00052"></a>00052 {
+<a name="l00053"></a>00053 ZEN_INIT_DETECT_MEMBER_TYPE(value_type);
+<a name="l00054"></a>00054 ZEN_INIT_DETECT_MEMBER_TYPE(iterator);
+<a name="l00055"></a>00055 ZEN_INIT_DETECT_MEMBER_TYPE(const_iterator);
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 ZEN_INIT_DETECT_MEMBER(begin) <span class="comment">//</span>
+<a name="l00058"></a>00058 ZEN_INIT_DETECT_MEMBER(end) <span class="comment">//we don&#39;t know the exact declaration of the member attribute: may be in a base class!</span>
+<a name="l00059"></a>00059 ZEN_INIT_DETECT_MEMBER(insert) <span class="comment">//</span>
+<a name="l00060"></a>00060 }
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062 template &lt;typename T&gt;
+<a name="l00063"></a>00063 struct IsStlContainer :
+<a name="l00064"></a>00064 StaticBool&lt;
+<a name="l00065"></a>00065 impl_2384343::HasMemberType_value_type &lt;T&gt;::value&amp;&amp;
+<a name="l00066"></a>00066 impl_2384343::HasMemberType_iterator &lt;T&gt;::value&amp;&amp;
+<a name="l00067"></a>00067 impl_2384343::HasMemberType_const_iterator&lt;T&gt;::value&amp;&amp;
+<a name="l00068"></a>00068 impl_2384343::HasMember_begin &lt;T&gt;::value&amp;&amp;
+<a name="l00069"></a>00069 impl_2384343::HasMember_end &lt;T&gt;::value&amp;&amp;
+<a name="l00070"></a>00070 impl_2384343::HasMember_insert &lt;T&gt;::value&gt; {};
+<a name="l00071"></a>00071
+<a name="l00072"></a>00072
+<a name="l00073"></a>00073 <span class="keyword">namespace </span>impl_2384343
+<a name="l00074"></a>00074 {
+<a name="l00075"></a>00075 ZEN_INIT_DETECT_MEMBER_TYPE(first_type);
+<a name="l00076"></a>00076 ZEN_INIT_DETECT_MEMBER_TYPE(second_type);
+<a name="l00077"></a>00077
+<a name="l00078"></a>00078 ZEN_INIT_DETECT_MEMBER(first) <span class="comment">//we don&#39;t know the exact declaration of the member attribute: may be in a base class!</span>
+<a name="l00079"></a>00079 ZEN_INIT_DETECT_MEMBER(second) <span class="comment">//</span>
+<a name="l00080"></a>00080 }
+<a name="l00081"></a>00081
+<a name="l00082"></a>00082 template &lt;typename T&gt;
+<a name="l00083"></a>00083 struct IsStlPair :
+<a name="l00084"></a>00084 StaticBool&lt;
+<a name="l00085"></a>00085 impl_2384343::HasMemberType_first_type &lt;T&gt;::value&amp;&amp;
+<a name="l00086"></a>00086 impl_2384343::HasMemberType_second_type&lt;T&gt;::value&amp;&amp;
+<a name="l00087"></a>00087 impl_2384343::HasMember_first &lt;T&gt;::value&amp;&amp;
+<a name="l00088"></a>00088 impl_2384343::HasMember_second &lt;T&gt;::value&gt; {};
+<a name="l00089"></a>00089
+<a name="l00090"></a>00090 <span class="comment">//######################################################################################</span>
+<a name="l00091"></a>00091
+<a name="l00092"></a>00092 <span class="comment">//Conversion from arbitrary types to an XML element</span>
+<a name="l00093"></a>00093 <span class="keyword">enum</span> ValueType
+<a name="l00094"></a>00094 {
+<a name="l00095"></a>00095 VALUE_TYPE_STL_CONTAINER,
+<a name="l00096"></a>00096 VALUE_TYPE_STL_PAIR,
+<a name="l00097"></a>00097 VALUE_TYPE_OTHER,
+<a name="l00098"></a>00098 };
+<a name="l00099"></a>00099
+<a name="l00100"></a>00100 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
+<a name="l00101"></a>00101 <span class="keyword">struct </span>GetValueType : StaticEnum&lt;ValueType,
+<a name="l00102"></a>00102 GetTextType&lt;T&gt;::value != TEXT_TYPE_OTHER ? VALUE_TYPE_OTHER : <span class="comment">//some string classes are also STL containers, so check this first</span>
+<a name="l00103"></a>00103 IsStlContainer&lt;T&gt;::value ? VALUE_TYPE_STL_CONTAINER :
+<a name="l00104"></a>00104 IsStlPair&lt;T&gt;::value ? VALUE_TYPE_STL_PAIR :
+<a name="l00105"></a>00105 VALUE_TYPE_OTHER&gt; {};
+<a name="l00106"></a>00106
+<a name="l00107"></a>00107
+<a name="l00108"></a>00108 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, ValueType type&gt;
+<a name="l00109"></a>00109 <span class="keyword">struct </span>ConvertElement;
+<a name="l00110"></a>00110 <span class="comment">/* -&gt; expected interface</span>
+<a name="l00111"></a>00111 <span class="comment">{</span>
+<a name="l00112"></a>00112 <span class="comment"> void writeStruc(const T&amp; value, XmlElement&amp; output) const;</span>
+<a name="l00113"></a>00113 <span class="comment"> bool readStruc(const XmlElement&amp; input, T&amp; value) const;</span>
+<a name="l00114"></a>00114 <span class="comment">};</span>
+<a name="l00115"></a>00115 <span class="comment">*/</span>
+<a name="l00116"></a>00116
+<a name="l00117"></a>00117
+<a name="l00118"></a>00118 <span class="comment">//partial specialization: handle conversion for all STL-container types!</span>
+<a name="l00119"></a>00119 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
+<a name="l00120"></a>00120 <span class="keyword">struct </span>ConvertElement&lt;T, VALUE_TYPE_STL_CONTAINER&gt;
+<a name="l00121"></a>00121 {
+<a name="l00122"></a>00122 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(<span class="keyword">const</span> T&amp; value, XmlElement&amp; output)<span class="keyword"> const</span>
+<a name="l00123"></a>00123 <span class="keyword"> </span>{
+<a name="l00124"></a>00124 std::for_each(value.begin(), value.end(),
+<a name="l00125"></a>00125 [&amp;](<span class="keyword">const</span> <span class="keyword">typename</span> T::value_type &amp; childVal)
+<a name="l00126"></a>00126 {
+<a name="l00127"></a>00127 XmlElement&amp; newChild = output.addChild(<span class="stringliteral">&quot;Item&quot;</span>);
+<a name="l00128"></a>00128 <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">zen::writeStruc</a>(childVal, newChild);
+<a name="l00129"></a>00129 });
+<a name="l00130"></a>00130 }
+<a name="l00131"></a>00131 <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(<span class="keyword">const</span> XmlElement&amp; input, T&amp; value)<span class="keyword"> const</span>
+<a name="l00132"></a>00132 <span class="keyword"> </span>{
+<a name="l00133"></a>00133 <span class="keywordtype">bool</span> success = <span class="keyword">true</span>;
+<a name="l00134"></a>00134 value.clear();
+<a name="l00135"></a>00135
+<a name="l00136"></a>00136 <span class="keyword">auto</span> iterPair = input.getChildren(<span class="stringliteral">&quot;Item&quot;</span>);
+<a name="l00137"></a>00137 <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter = iterPair.first; iter != iterPair.second; ++iter)
+<a name="l00138"></a>00138 {
+<a name="l00139"></a>00139 <span class="keyword">typename</span> T::value_type childVal; <span class="comment">//MSVC 2010 bug: cannot put this into a lambda body</span>
+<a name="l00140"></a>00140 <span class="keywordflow">if</span> (<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">zen::readStruc</a>(*iter, childVal))
+<a name="l00141"></a>00141 value.insert(value.end(), childVal);
+<a name="l00142"></a>00142 <span class="keywordflow">else</span>
+<a name="l00143"></a>00143 success = <span class="keyword">false</span>;
+<a name="l00144"></a>00144 }
+<a name="l00145"></a>00145 <span class="keywordflow">return</span> success;
+<a name="l00146"></a>00146 }
+<a name="l00147"></a>00147 };
+<a name="l00148"></a>00148
+<a name="l00149"></a>00149
+<a name="l00150"></a>00150 <span class="comment">//partial specialization: handle conversion for std::pair</span>
+<a name="l00151"></a>00151 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
+<a name="l00152"></a>00152 <span class="keyword">struct </span>ConvertElement&lt;T, VALUE_TYPE_STL_PAIR&gt;
+<a name="l00153"></a>00153 {
+<a name="l00154"></a>00154 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(<span class="keyword">const</span> T&amp; value, XmlElement&amp; output)<span class="keyword"> const</span>
+<a name="l00155"></a>00155 <span class="keyword"> </span>{
+<a name="l00156"></a>00156 XmlElement&amp; child1 = output.addChild(<span class="stringliteral">&quot;one&quot;</span>); <span class="comment">//don&#39;t use &quot;1st/2nd&quot;, this will confuse a few pedantic XML parsers</span>
+<a name="l00157"></a>00157 <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">zen::writeStruc</a>(value.first, child1);
+<a name="l00158"></a>00158
+<a name="l00159"></a>00159 XmlElement&amp; child2 = output.addChild(<span class="stringliteral">&quot;two&quot;</span>);
+<a name="l00160"></a>00160 <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">zen::writeStruc</a>(value.second, child2);
+<a name="l00161"></a>00161 }
+<a name="l00162"></a>00162 <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(<span class="keyword">const</span> XmlElement&amp; input, T&amp; value)<span class="keyword"> const</span>
+<a name="l00163"></a>00163 <span class="keyword"> </span>{
+<a name="l00164"></a>00164 <span class="keywordtype">bool</span> success = <span class="keyword">true</span>;
+<a name="l00165"></a>00165 <span class="keyword">const</span> XmlElement* child1 = input.getChild(<span class="stringliteral">&quot;one&quot;</span>);
+<a name="l00166"></a>00166 <span class="keywordflow">if</span> (!child1 || !<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">zen::readStruc</a>(*child1, value.first))
+<a name="l00167"></a>00167 success = <span class="keyword">false</span>;
+<a name="l00168"></a>00168
+<a name="l00169"></a>00169 <span class="keyword">const</span> XmlElement* child2 = input.getChild(<span class="stringliteral">&quot;two&quot;</span>);
+<a name="l00170"></a>00170 <span class="keywordflow">if</span> (!child2 || !<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">zen::readStruc</a>(*child2, value.second))
+<a name="l00171"></a>00171 success = <span class="keyword">false</span>;
+<a name="l00172"></a>00172
+<a name="l00173"></a>00173 <span class="keywordflow">return</span> success;
+<a name="l00174"></a>00174 }
+<a name="l00175"></a>00175 };
+<a name="l00176"></a>00176
+<a name="l00177"></a>00177
+<a name="l00178"></a>00178 <span class="comment">//partial specialization: not a pure structured type, try text conversion (thereby respect user specializations of writeText()/readText())</span>
+<a name="l00179"></a>00179 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
+<a name="l00180"></a>00180 <span class="keyword">struct </span>ConvertElement&lt;T, VALUE_TYPE_OTHER&gt;
+<a name="l00181"></a>00181 {
+<a name="l00182"></a>00182 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(<span class="keyword">const</span> T&amp; value, XmlElement&amp; output)<span class="keyword"> const</span>
+<a name="l00183"></a>00183 <span class="keyword"> </span>{
+<a name="l00184"></a>00184 std::string tmp;
+<a name="l00185"></a>00185 <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(value, tmp);
+<a name="l00186"></a>00186 output.setValue(tmp);
+<a name="l00187"></a>00187 }
+<a name="l00188"></a>00188 <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(<span class="keyword">const</span> XmlElement&amp; input, T&amp; value)<span class="keyword"> const</span>
+<a name="l00189"></a>00189 <span class="keyword"> </span>{
+<a name="l00190"></a>00190 std::string rawStr;
+<a name="l00191"></a>00191 input.getValue(rawStr);
+<a name="l00192"></a>00192 <span class="keywordflow">return</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(rawStr, value);
+<a name="l00193"></a>00193 }
+<a name="l00194"></a>00194 };
+<a name="l00195"></a>00195
+<a name="l00196"></a>00196
+<a name="l00197"></a>00197 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">inline</span>
+<a name="l00198"></a><a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">00198</a> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(<span class="keyword">const</span> T&amp; value, <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>&amp; output)
+<a name="l00199"></a>00199 {
+<a name="l00200"></a>00200 ConvertElement&lt;T, GetValueType&lt;T&gt;::value&gt;().<a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(value, output);
+<a name="l00201"></a>00201 }
+<a name="l00202"></a>00202
+<a name="l00203"></a>00203
+<a name="l00204"></a>00204 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">inline</span>
+<a name="l00205"></a><a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">00205</a> <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>&amp; input, T&amp; value)
+<a name="l00206"></a>00206 {
+<a name="l00207"></a>00207 <span class="keywordflow">return</span> ConvertElement&lt;T, GetValueType&lt;T&gt;::value&gt;().<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(input, value);
+<a name="l00208"></a>00208 }
+<a name="l00209"></a>00209 }
+<a name="l00210"></a>00210
+<a name="l00211"></a>00211 <span class="preprocessor">#endif //ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743</span>
+</pre></div></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/cvrt__text_8h_source.html b/zenxml/doc/cvrt__text_8h_source.html
new file mode 100644
index 00000000..d10a3b8f
--- /dev/null
+++ b/zenxml/doc/cvrt__text_8h_source.html
@@ -0,0 +1,276 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: cvrt_text.h Source File</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">cvrt_text.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span>
+<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span>
+<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span>
+<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span>
+<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span>
+<a name="l00006"></a>00006
+<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434</span>
+<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434</span>
+<a name="l00009"></a>00009 <span class="preprocessor"></span>
+<a name="l00010"></a>00010 <span class="preprocessor">#include &lt;zen/utf.h&gt;</span>
+<a name="l00011"></a>00011 <span class="preprocessor">#include &lt;zen/string_tools.h&gt;</span>
+<a name="l00012"></a>00012
+<a name="l00013"></a>00013 <span class="keyword">namespace </span>zen
+<a name="l00014"></a>00014 {
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062
+<a name="l00067"></a>00067 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(<span class="keyword">const</span> std::string&amp; input, T&amp; value);
+<a name="l00069"></a>00069
+<a name="l00073"></a>00073 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(<span class="keyword">const</span> T&amp; value, std::string&amp; output);
+<a name="l00074"></a>00074
+<a name="l00075"></a>00075
+<a name="l00076"></a>00076 <span class="comment">/* Different classes of data types:</span>
+<a name="l00077"></a>00077 <span class="comment"></span>
+<a name="l00078"></a>00078 <span class="comment">-----------------------------</span>
+<a name="l00079"></a>00079 <span class="comment">| structured | readStruc/writeStruc - e.g. string-convertible types, STL containers, std::pair, structured user types</span>
+<a name="l00080"></a>00080 <span class="comment">| ------------------------- |</span>
+<a name="l00081"></a>00081 <span class="comment">| | to-string-convertible | | readText/writeText - e.g. string-like types, all built-in arithmetic numbers, bool</span>
+<a name="l00082"></a>00082 <span class="comment">| | --------------- | |</span>
+<a name="l00083"></a>00083 <span class="comment">| | | string-like | | | utfCvrtTo - e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ...</span>
+<a name="l00084"></a>00084 <span class="comment">| | --------------- | |</span>
+<a name="l00085"></a>00085 <span class="comment">| ------------------------- |</span>
+<a name="l00086"></a>00086 <span class="comment">-----------------------------</span>
+<a name="l00087"></a>00087 <span class="comment">*/</span>
+<a name="l00088"></a>00088
+<a name="l00089"></a>00089
+<a name="l00090"></a>00090
+<a name="l00091"></a>00091
+<a name="l00092"></a>00092
+<a name="l00093"></a>00093
+<a name="l00094"></a>00094
+<a name="l00095"></a>00095
+<a name="l00096"></a>00096
+<a name="l00097"></a>00097
+<a name="l00098"></a>00098
+<a name="l00099"></a>00099
+<a name="l00100"></a>00100
+<a name="l00101"></a>00101
+<a name="l00102"></a>00102
+<a name="l00103"></a>00103 <span class="comment">//------------------------------ implementation -------------------------------------</span>
+<a name="l00104"></a>00104
+<a name="l00105"></a>00105 <span class="comment">//Conversion from arbitrary types to text (for use with XML elements and attributes)</span>
+<a name="l00106"></a>00106 <span class="keyword">enum</span> TextType
+<a name="l00107"></a>00107 {
+<a name="l00108"></a>00108 TEXT_TYPE_BOOL,
+<a name="l00109"></a>00109 TEXT_TYPE_NUMBER,
+<a name="l00110"></a>00110 TEXT_TYPE_STRING,
+<a name="l00111"></a>00111 TEXT_TYPE_OTHER,
+<a name="l00112"></a>00112 };
+<a name="l00113"></a>00113
+<a name="l00114"></a>00114 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
+<a name="l00115"></a>00115 <span class="keyword">struct </span>GetTextType : StaticEnum&lt;TextType,
+<a name="l00116"></a>00116 IsSameType&lt;T, bool&gt;::value ? TEXT_TYPE_BOOL :
+<a name="l00117"></a>00117 IsStringLike&lt;T&gt;::value ? TEXT_TYPE_STRING : <span class="comment">//string before number to correctly handle char/wchar_t -&gt; this was an issue with Loki only!</span>
+<a name="l00118"></a>00118 IsArithmetic&lt;T&gt;::value ? TEXT_TYPE_NUMBER : <span class="comment">//</span>
+<a name="l00119"></a>00119 TEXT_TYPE_OTHER&gt; {};
+<a name="l00120"></a>00120
+<a name="l00121"></a>00121 <span class="comment">//######################################################################################</span>
+<a name="l00122"></a>00122
+<a name="l00123"></a>00123 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, TextType type&gt;
+<a name="l00124"></a>00124 <span class="keyword">struct </span>ConvertText;
+<a name="l00125"></a>00125 <span class="comment">/* -&gt; expected interface</span>
+<a name="l00126"></a>00126 <span class="comment">{</span>
+<a name="l00127"></a>00127 <span class="comment"> void writeText(const T&amp; value, std::string&amp; output) const;</span>
+<a name="l00128"></a>00128 <span class="comment"> bool readText(const std::string&amp; input, T&amp; value) const;</span>
+<a name="l00129"></a>00129 <span class="comment">};</span>
+<a name="l00130"></a>00130 <span class="comment">*/</span>
+<a name="l00131"></a>00131
+<a name="l00132"></a>00132 <span class="comment">//partial specialization: type bool</span>
+<a name="l00133"></a>00133 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
+<a name="l00134"></a>00134 <span class="keyword">struct </span>ConvertText&lt;T, TEXT_TYPE_BOOL&gt;
+<a name="l00135"></a>00135 {
+<a name="l00136"></a>00136 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(<span class="keywordtype">bool</span> value, std::string&amp; output)<span class="keyword"> const</span>
+<a name="l00137"></a>00137 <span class="keyword"> </span>{
+<a name="l00138"></a>00138 output = value ? <span class="stringliteral">&quot;true&quot;</span> : <span class="stringliteral">&quot;false&quot;</span>;
+<a name="l00139"></a>00139 }
+<a name="l00140"></a>00140 <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(<span class="keyword">const</span> std::string&amp; input, <span class="keywordtype">bool</span>&amp; value)<span class="keyword"> const</span>
+<a name="l00141"></a>00141 <span class="keyword"> </span>{
+<a name="l00142"></a>00142 std::string tmp = input;
+<a name="l00143"></a>00143 zen::trim(tmp);
+<a name="l00144"></a>00144 <span class="keywordflow">if</span> (tmp == <span class="stringliteral">&quot;true&quot;</span>)
+<a name="l00145"></a>00145 value = <span class="keyword">true</span>;
+<a name="l00146"></a>00146 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tmp == <span class="stringliteral">&quot;false&quot;</span>)
+<a name="l00147"></a>00147 value = <span class="keyword">false</span>;
+<a name="l00148"></a>00148 <span class="keywordflow">else</span>
+<a name="l00149"></a>00149 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00150"></a>00150 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00151"></a>00151 }
+<a name="l00152"></a>00152 };
+<a name="l00153"></a>00153
+<a name="l00154"></a>00154 <span class="comment">//partial specialization: handle conversion for all built-in arithmetic types!</span>
+<a name="l00155"></a>00155 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
+<a name="l00156"></a>00156 <span class="keyword">struct </span>ConvertText&lt;T, TEXT_TYPE_NUMBER&gt;
+<a name="l00157"></a>00157 {
+<a name="l00158"></a>00158 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(<span class="keyword">const</span> T&amp; value, std::string&amp; output)<span class="keyword"> const</span>
+<a name="l00159"></a>00159 <span class="keyword"> </span>{
+<a name="l00160"></a>00160 output = numberTo&lt;std::string&gt;(value);
+<a name="l00161"></a>00161 }
+<a name="l00162"></a>00162 <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(<span class="keyword">const</span> std::string&amp; input, T&amp; value)<span class="keyword"> const</span>
+<a name="l00163"></a>00163 <span class="keyword"> </span>{
+<a name="l00164"></a>00164 value = stringTo&lt;T&gt;(input);
+<a name="l00165"></a>00165 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00166"></a>00166 }
+<a name="l00167"></a>00167 };
+<a name="l00168"></a>00168
+<a name="l00169"></a>00169 <span class="comment">//partial specialization: handle conversion for all string-like types!</span>
+<a name="l00170"></a>00170 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
+<a name="l00171"></a>00171 <span class="keyword">struct </span>ConvertText&lt;T, TEXT_TYPE_STRING&gt;
+<a name="l00172"></a>00172 {
+<a name="l00173"></a>00173 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(<span class="keyword">const</span> T&amp; value, std::string&amp; output)<span class="keyword"> const</span>
+<a name="l00174"></a>00174 <span class="keyword"> </span>{
+<a name="l00175"></a>00175 output = utfCvrtTo&lt;std::string&gt;(value);
+<a name="l00176"></a>00176 }
+<a name="l00177"></a>00177 <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(<span class="keyword">const</span> std::string&amp; input, T&amp; value)<span class="keyword"> const</span>
+<a name="l00178"></a>00178 <span class="keyword"> </span>{
+<a name="l00179"></a>00179 value = utfCvrtTo&lt;T&gt;(input);
+<a name="l00180"></a>00180 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00181"></a>00181 }
+<a name="l00182"></a>00182 };
+<a name="l00183"></a>00183
+<a name="l00184"></a>00184
+<a name="l00185"></a>00185 <span class="comment">//partial specialization: unknown type</span>
+<a name="l00186"></a>00186 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
+<a name="l00187"></a>00187 <span class="keyword">struct </span>ConvertText&lt;T, TEXT_TYPE_OTHER&gt;
+<a name="l00188"></a>00188 {
+<a name="l00189"></a>00189 <span class="comment">//###########################################################################################################################################</span>
+<a name="l00190"></a>00190 assert_static(<span class="keyword">sizeof</span>(T) == -1);
+<a name="l00191"></a>00191 <span class="comment">/*</span>
+<a name="l00192"></a>00192 <span class="comment"> ATTENTION: The data type T is yet unknown to the zen::Xml framework!</span>
+<a name="l00193"></a>00193 <span class="comment"></span>
+<a name="l00194"></a>00194 <span class="comment"> Please provide a specialization for T of the following two functions in order to handle conversions to XML elements and attributes</span>
+<a name="l00195"></a>00195 <span class="comment"></span>
+<a name="l00196"></a>00196 <span class="comment"> template &lt;&gt; void zen::writeText(const T&amp; value, std::string&amp; output)</span>
+<a name="l00197"></a>00197 <span class="comment"> template &lt;&gt; bool zen::readText(const std::string&amp; input, T&amp; value)</span>
+<a name="l00198"></a>00198 <span class="comment"></span>
+<a name="l00199"></a>00199 <span class="comment"> If T is structured and cannot be converted to a text representation specialize these two functions to allow at least for conversions to XML elements:</span>
+<a name="l00200"></a>00200 <span class="comment"></span>
+<a name="l00201"></a>00201 <span class="comment"> template &lt;&gt; void zen::writeStruc(const T&amp; value, XmlElement&amp; output)</span>
+<a name="l00202"></a>00202 <span class="comment"> template &lt;&gt; bool zen::readStruc(const XmlElement&amp; input, T&amp; value)</span>
+<a name="l00203"></a>00203 <span class="comment"> */</span>
+<a name="l00204"></a>00204 <span class="comment">//###########################################################################################################################################</span>
+<a name="l00205"></a>00205 };
+<a name="l00206"></a>00206
+<a name="l00207"></a>00207
+<a name="l00208"></a>00208 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">inline</span>
+<a name="l00209"></a><a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">00209</a> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(<span class="keyword">const</span> T&amp; value, std::string&amp; output)
+<a name="l00210"></a>00210 {
+<a name="l00211"></a>00211 ConvertText&lt;T, GetTextType&lt;T&gt;::value&gt;().<a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(value, output);
+<a name="l00212"></a>00212 }
+<a name="l00213"></a>00213
+<a name="l00214"></a>00214
+<a name="l00215"></a>00215 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">inline</span>
+<a name="l00216"></a><a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">00216</a> <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(<span class="keyword">const</span> std::string&amp; input, T&amp; value)
+<a name="l00217"></a>00217 {
+<a name="l00218"></a>00218 <span class="keywordflow">return</span> ConvertText&lt;T, GetTextType&lt;T&gt;::value&gt;().<a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(input, value);
+<a name="l00219"></a>00219 }
+<a name="l00220"></a>00220 }
+<a name="l00221"></a>00221
+<a name="l00222"></a>00222 <span class="preprocessor">#endif //ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434</span>
+</pre></div></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/dom_8h_source.html b/zenxml/doc/dom_8h_source.html
new file mode 100644
index 00000000..e81e00a9
--- /dev/null
+++ b/zenxml/doc/dom_8h_source.html
@@ -0,0 +1,346 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: dom.h Source File</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">dom.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span>
+<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span>
+<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span>
+<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span>
+<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span>
+<a name="l00006"></a>00006
+<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_DOM_HEADER_82085720723894567204564256</span>
+<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_DOM_HEADER_82085720723894567204564256</span>
+<a name="l00009"></a>00009 <span class="preprocessor"></span>
+<a name="l00010"></a>00010 <span class="preprocessor">#include &lt;string&gt;</span>
+<a name="l00011"></a>00011 <span class="preprocessor">#include &lt;vector&gt;</span>
+<a name="l00012"></a>00012 <span class="preprocessor">#include &lt;memory&gt;</span>
+<a name="l00013"></a>00013 <span class="preprocessor">#include &lt;map&gt;</span>
+<a name="l00014"></a>00014 <span class="preprocessor">#include &quot;cvrt_text.h&quot;</span> <span class="comment">//&quot;readText/writeText&quot;</span>
+<a name="l00015"></a>00015
+<a name="l00016"></a>00016 <span class="keyword">namespace </span>zen
+<a name="l00017"></a>00017 {
+<a name="l00018"></a>00018 <span class="keyword">class </span>XmlDoc;
+<a name="l00019"></a>00019
+<a name="l00021"></a><a class="code" href="classzen_1_1_xml_element.html">00021</a> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>
+<a name="l00022"></a>00022 {
+<a name="l00023"></a>00023 <span class="keyword">struct </span>PrivateConstruction {};
+<a name="l00024"></a>00024 <span class="keyword">public</span>:
+<a name="l00025"></a>00025 <span class="comment">//Construct an empty XML element</span>
+<a name="l00026"></a>00026 <span class="comment">//This constructor should be private, however std::make_shared() requires public access</span>
+<a name="l00027"></a>00027 <span class="comment">//Therefore at least prevent users from calling it via private dummy type PrivateConstruction</span>
+<a name="l00028"></a>00028 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00029"></a>00029 <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>(<span class="keyword">const</span> String&amp; name, <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* parentElement, PrivateConstruction) : name_(utfCvrtTo&lt;std::string&gt;(name)), parent_(parentElement) {}
+<a name="l00030"></a>00030
+<a name="l00032"></a>00032
+<a name="l00036"></a>00036 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00037"></a><a class="code" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">00037</a> String <a class="code" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50" title="Retrieve the name of this XML element.">getNameAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo&lt;String&gt;(name_); }
+<a name="l00038"></a>00038
+<a name="l00040"></a>00040
+<a name="l00044"></a>00044 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
+<a name="l00045"></a><a class="code" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">00045</a> <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070" title="Get the value of this element as a user type.">getValue</a>(T&amp; value)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(*<span class="keyword">this</span>, value); }
+<a name="l00046"></a>00046
+<a name="l00048"></a>00048
+<a name="l00051"></a>00051 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
+<a name="l00052"></a><a class="code" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">00052</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01" title="Set the value of this element.">setValue</a>(<span class="keyword">const</span> T&amp; value) { <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(value, *<span class="keyword">this</span>); }
+<a name="l00053"></a>00053
+<a name="l00055"></a>00055
+<a name="l00062"></a>00062 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String, <span class="keyword">class</span> T&gt;
+<a name="l00063"></a><a class="code" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">00063</a> <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887" title="Retrieve an attribute by name.">getAttribute</a>(<span class="keyword">const</span> String&amp; name, T&amp; value)<span class="keyword"> const</span>
+<a name="l00064"></a>00064 <span class="keyword"> </span>{
+<a name="l00065"></a>00065 <span class="keyword">auto</span> it = attributes.find(utfCvrtTo&lt;std::string&gt;(name));
+<a name="l00066"></a>00066 <span class="keywordflow">return</span> it == attributes.end() ? <span class="keyword">false</span> : <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(it-&gt;second, value);
+<a name="l00067"></a>00067 }
+<a name="l00068"></a>00068
+<a name="l00070"></a>00070
+<a name="l00076"></a>00076 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String, <span class="keyword">class</span> T&gt;
+<a name="l00077"></a><a class="code" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">00077</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421" title="Create or update an XML attribute.">setAttribute</a>(<span class="keyword">const</span> String&amp; name, <span class="keyword">const</span> T&amp; value)
+<a name="l00078"></a>00078 {
+<a name="l00079"></a>00079 std::string attrValue;
+<a name="l00080"></a>00080 <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(value, attrValue);
+<a name="l00081"></a>00081 attributes[utfCvrtTo&lt;std::string&gt;(name)] = attrValue;
+<a name="l00082"></a>00082 }
+<a name="l00083"></a>00083
+<a name="l00085"></a>00085
+<a name="l00088"></a>00088 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00089"></a><a class="code" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">00089</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934" title="Remove the attribute with the given name.">removeAttribute</a>(<span class="keyword">const</span> String&amp; name) { attributes.erase(utfCvrtTo&lt;std::string&gt;(name)); }
+<a name="l00090"></a>00090
+<a name="l00092"></a>00092
+<a name="l00096"></a>00096 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00097"></a><a class="code" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">00097</a> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>&amp; <a class="code" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9" title="Create a new child element and return a reference to it.">addChild</a>(<span class="keyword">const</span> String&amp; name)
+<a name="l00098"></a>00098 {
+<a name="l00099"></a>00099 std::string utf8Name = utfCvrtTo&lt;std::string&gt;(name);
+<a name="l00100"></a>00100 <span class="keyword">auto</span> newElement = std::make_shared&lt;XmlElement&gt;(utf8Name, <span class="keyword">this</span>, PrivateConstruction());
+<a name="l00101"></a>00101 childElements.push_back(newElement);
+<a name="l00102"></a>00102 childElementsSorted.insert(std::make_pair(utf8Name, newElement));
+<a name="l00103"></a>00103 <span class="keywordflow">return</span> *newElement;
+<a name="l00104"></a>00104 }
+<a name="l00105"></a>00105
+<a name="l00107"></a>00107
+<a name="l00112"></a>00112 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00113"></a><a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">00113</a> <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e" title="Retrieve a child element with the given name.">getChild</a>(<span class="keyword">const</span> String&amp; name)<span class="keyword"> const</span>
+<a name="l00114"></a>00114 <span class="keyword"> </span>{
+<a name="l00115"></a>00115 <span class="keyword">auto</span> it = childElementsSorted.find(utfCvrtTo&lt;std::string&gt;(name));
+<a name="l00116"></a>00116 <span class="keywordflow">return</span> it == childElementsSorted.end() ? <span class="keyword">nullptr</span> : &amp;*(it-&gt;second);
+<a name="l00117"></a>00117 }
+<a name="l00118"></a>00118
+<a name="l00120"></a>00120 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00121"></a><a class="code" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">00121</a> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e" title="Retrieve a child element with the given name.">getChild</a>(<span class="keyword">const</span> String&amp; name)
+<a name="l00122"></a>00122 {
+<a name="l00123"></a>00123 <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>*<span class="keyword">&gt;</span>(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;<a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e" title="Retrieve a child element with the given name.">getChild</a>(name));
+<a name="l00124"></a>00124 }
+<a name="l00125"></a>00125
+<a name="l00126"></a>00126 <span class="keyword">template</span> &lt; <span class="keyword">class </span>IterTy, <span class="comment">//underlying iterator type</span>
+<a name="l00127"></a>00127 <span class="keyword">class </span>T, <span class="comment">//target object type</span>
+<a name="l00128"></a>00128 <span class="keyword">class </span>AccessPolicy &gt; <span class="comment">//access policy: see AccessPtrMap</span>
+<a name="l00129"></a>00129 <span class="keyword">class </span>PtrIter : <span class="keyword">public</span> std::iterator&lt;std::input_iterator_tag, T&gt;, <span class="keyword">private</span> AccessPolicy <span class="comment">//get rid of shared_ptr indirection</span>
+<a name="l00130"></a>00130 {
+<a name="l00131"></a>00131 <span class="keyword">public</span>:
+<a name="l00132"></a>00132 PtrIter(IterTy it) : it_(it) {}
+<a name="l00133"></a>00133 PtrIter(<span class="keyword">const</span> PtrIter&amp; other) : it_(other.it_) {}
+<a name="l00134"></a>00134 PtrIter&amp; operator++() { ++it_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
+<a name="l00135"></a>00135 PtrIter operator++(<span class="keywordtype">int</span>) { PtrIter tmp(*<span class="keyword">this</span>); operator++(); <span class="keywordflow">return</span> tmp; }
+<a name="l00136"></a>00136 <span class="keyword">inline</span> <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> PtrIter&amp; lhs, <span class="keyword">const</span> PtrIter&amp; rhs) { <span class="keywordflow">return</span> lhs.it_ == rhs.it_; }
+<a name="l00137"></a>00137 <span class="keyword">inline</span> <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> PtrIter&amp; lhs, <span class="keyword">const</span> PtrIter&amp; rhs) { <span class="keywordflow">return</span> !(lhs == rhs); }
+<a name="l00138"></a>00138 T&amp; operator* () { <span class="keywordflow">return</span> AccessPolicy::template objectRef&lt;T&gt;(it_); }
+<a name="l00139"></a>00139 T* operator-&gt;() { <span class="keywordflow">return</span> &amp;AccessPolicy::template objectRef&lt;T&gt;(it_); }
+<a name="l00140"></a>00140 <span class="keyword">private</span>:
+<a name="l00141"></a>00141 IterTy it_;
+<a name="l00142"></a>00142 };
+<a name="l00143"></a>00143
+<a name="l00144"></a>00144 <span class="keyword">struct </span>AccessPtrMap
+<a name="l00145"></a>00145 {
+<a name="l00146"></a>00146 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> IterTy&gt;
+<a name="l00147"></a>00147 T&amp; objectRef(<span class="keyword">const</span> IterTy&amp; it) { <span class="keywordflow">return</span> *(it-&gt;second); }
+<a name="l00148"></a>00148 };
+<a name="l00149"></a>00149
+<a name="l00150"></a>00150 <span class="keyword">typedef</span> PtrIter&lt;std::multimap&lt;std::string, std::shared_ptr&lt;XmlElement&gt;&gt;::iterator, XmlElement, AccessPtrMap&gt; ChildIter2;
+<a name="l00151"></a>00151 <span class="keyword">typedef</span> PtrIter&lt;std::multimap&lt;std::string, std::shared_ptr&lt;XmlElement&gt;&gt;::const_iterator, <span class="keyword">const</span> XmlElement, AccessPtrMap&gt; ChildIterConst2;
+<a name="l00152"></a>00152
+<a name="l00154"></a>00154
+<a name="l00163"></a>00163 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00164"></a><a class="code" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">00164</a> std::pair&lt;ChildIterConst2, ChildIterConst2&gt; <a class="code" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8" title="Access all child elements with the given name via STL iterators.">getChildren</a>(<span class="keyword">const</span> String&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> childElementsSorted.equal_range(utfCvrtTo&lt;std::string&gt;(name)); }
+<a name="l00165"></a>00165
+<a name="l00167"></a>00167 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00168"></a><a class="code" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">00168</a> std::pair&lt;ChildIter2, ChildIter2&gt; <a class="code" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">getChildren</a>(<span class="keyword">const</span> String&amp; name) { <span class="keywordflow">return</span> childElementsSorted.equal_range(utfCvrtTo&lt;std::string&gt;(name)); }
+<a name="l00169"></a>00169
+<a name="l00170"></a>00170 <span class="keyword">struct </span>AccessPtrVec
+<a name="l00171"></a>00171 {
+<a name="l00172"></a>00172 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> IterTy&gt;
+<a name="l00173"></a>00173 T&amp; objectRef(<span class="keyword">const</span> IterTy&amp; it) { <span class="keywordflow">return</span> **it; }
+<a name="l00174"></a>00174 };
+<a name="l00175"></a>00175
+<a name="l00176"></a>00176 <span class="keyword">typedef</span> PtrIter&lt;std::vector&lt;std::shared_ptr&lt;XmlElement&gt;&gt;::iterator, XmlElement, AccessPtrVec&gt; ChildIter;
+<a name="l00177"></a>00177 <span class="keyword">typedef</span> PtrIter&lt;std::vector&lt;std::shared_ptr&lt;XmlElement&gt;&gt;::const_iterator, <span class="keyword">const</span> XmlElement, AccessPtrVec&gt; ChildIterConst;
+<a name="l00178"></a>00178
+<a name="l00180"></a>00180
+<a name="l00188"></a><a class="code" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2">00188</a> std::pair&lt;ChildIterConst, ChildIterConst&gt; <a class="code" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2" title="Access all child elements sequentially via STL iterators.">getChildren</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> std::make_pair(childElements.begin(), childElements.end()); }
+<a name="l00189"></a>00189
+<a name="l00191"></a><a class="code" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">00191</a> std::pair&lt;ChildIter, ChildIter&gt; <a class="code" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">getChildren</a>() { <span class="keywordflow">return</span> std::make_pair(childElements.begin(), childElements.end()); }
+<a name="l00192"></a>00192
+<a name="l00194"></a><a class="code" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">00194</a> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1" title="Get parent XML element, may be nullptr for root element.">parent</a>() { <span class="keywordflow">return</span> parent_; };
+<a name="l00196"></a><a class="code" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c">00196</a> <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c" title="Get parent XML element, may be nullptr for root element.">parent</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parent_; };
+<a name="l00197"></a>00197
+<a name="l00198"></a>00198
+<a name="l00199"></a>00199 <span class="keyword">typedef</span> std::map&lt;std::string, std::string&gt;::const_iterator AttrIter;
+<a name="l00200"></a>00200
+<a name="l00201"></a>00201 <span class="comment">/* -&gt; disabled documentation extraction</span>
+<a name="l00202"></a>00202 <span class="comment"> \brief Get all attributes associated with the element.</span>
+<a name="l00203"></a>00203 <span class="comment"> \code</span>
+<a name="l00204"></a>00204 <span class="comment"> auto iterPair = elem.getAttributes();</span>
+<a name="l00205"></a>00205 <span class="comment"> for (auto it = iterPair.first; it != iterPair.second; ++it)</span>
+<a name="l00206"></a>00206 <span class="comment"> std::cout &lt;&lt; &quot;name: &quot; &lt;&lt; it-&gt;first &lt;&lt; &quot; value: &quot; &lt;&lt; it-&gt;second &lt;&lt; &quot;\n&quot;;</span>
+<a name="l00207"></a>00207 <span class="comment"> \endcode</span>
+<a name="l00208"></a>00208 <span class="comment"> \return A pair of STL begin/end iterators to access all attributes sequentially as a list of name/value pairs of std::string.</span>
+<a name="l00209"></a>00209 <span class="comment"> */</span>
+<a name="l00210"></a>00210 std::pair&lt;AttrIter, AttrIter&gt; getAttributes()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> std::make_pair(attributes.begin(), attributes.end()); }
+<a name="l00211"></a>00211
+<a name="l00212"></a>00212 <span class="comment">//Transactionally swap two elements. -&gt; disabled documentation extraction</span>
+<a name="l00213"></a>00213 <span class="keywordtype">void</span> swap(XmlElement&amp; other)
+<a name="l00214"></a>00214 {
+<a name="l00215"></a>00215 name_ .swap(other.name_);
+<a name="l00216"></a>00216 value_ .swap(other.value_);
+<a name="l00217"></a>00217 attributes.swap(other.attributes);
+<a name="l00218"></a>00218 childElements.swap(other.childElements);
+<a name="l00219"></a>00219 childElementsSorted.swap(other.childElementsSorted);
+<a name="l00220"></a>00220 <span class="comment">//std::swap(parent_, other.parent_); -&gt; parent is physical location; update children&#39;s parent reference instead:</span>
+<a name="l00221"></a>00221 std::for_each( childElements.begin(), childElements.end(), [&amp;](<span class="keyword">const</span> std::shared_ptr&lt;XmlElement&gt;&amp; child) { child-&gt;parent_ = <span class="keyword">this</span>; });
+<a name="l00222"></a>00222 std::for_each(other.childElements.begin(), other.childElements.end(), [&amp;](<span class="keyword">const</span> std::shared_ptr&lt;XmlElement&gt;&amp; child) { child-&gt;parent_ = &amp;other; });
+<a name="l00223"></a>00223 }
+<a name="l00224"></a>00224
+<a name="l00225"></a>00225 <span class="keyword">private</span>:
+<a name="l00226"></a>00226 <span class="keyword">friend</span> <span class="keyword">class </span>XmlDoc;
+<a name="l00227"></a>00227
+<a name="l00228"></a>00228 XmlElement(<span class="keyword">const</span> XmlElement&amp;); <span class="comment">//not implemented</span>
+<a name="l00229"></a>00229 XmlElement&amp; operator=(<span class="keyword">const</span> XmlElement&amp;); <span class="comment">//</span>
+<a name="l00230"></a>00230
+<a name="l00231"></a>00231 std::string name_;
+<a name="l00232"></a>00232 std::string value_;
+<a name="l00233"></a>00233 std::map&lt;std::string, std::string&gt; attributes;
+<a name="l00234"></a>00234 std::vector&lt;std::shared_ptr&lt;XmlElement&gt;&gt; childElements; <span class="comment">//all child elements in order of creation</span>
+<a name="l00235"></a>00235 std::multimap&lt;std::string, std::shared_ptr&lt;XmlElement&gt;&gt; childElementsSorted; <span class="comment">//alternate key: sorted by element name</span>
+<a name="l00236"></a>00236 XmlElement* parent_;
+<a name="l00237"></a>00237 };
+<a name="l00238"></a>00238
+<a name="l00239"></a>00239
+<a name="l00240"></a>00240 <span class="comment">//XmlElement::setValue&lt;T&gt;() calls zen::writeStruc() which calls XmlElement::setValue() ... =&gt; these two specializations end the circle</span>
+<a name="l00241"></a>00241 <span class="keyword">template</span> &lt;&gt; <span class="keyword">inline</span>
+<a name="l00242"></a>00242 <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01" title="Set the value of this element.">XmlElement::setValue</a>(<span class="keyword">const</span> std::string&amp; value) { value_ = value; }
+<a name="l00243"></a>00243
+<a name="l00244"></a>00244 <span class="keyword">template</span> &lt;&gt; <span class="keyword">inline</span>
+<a name="l00245"></a>00245 <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070" title="Get the value of this element as a user type.">XmlElement::getValue</a>(std::string&amp; value)<span class="keyword"> const </span>{ value = value_; <span class="keywordflow">return</span> <span class="keyword">true</span>; }
+<a name="l00246"></a>00246
+<a name="l00247"></a>00247
+<a name="l00249"></a><a class="code" href="classzen_1_1_xml_doc.html">00249</a> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>
+<a name="l00250"></a>00250 {
+<a name="l00251"></a>00251 <span class="keyword">public</span>:
+<a name="l00253"></a><a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">00253</a> <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed" title="Default constructor setting up an empty XML document with a standard declaration: &lt;...">XmlDoc</a>() : version_(<span class="stringliteral">&quot;1.0&quot;</span>), encoding_(<span class="stringliteral">&quot;UTF-8&quot;</span>), rootElement(<span class="stringliteral">&quot;Root&quot;</span>, nullptr, <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>::PrivateConstruction()) {}
+<a name="l00254"></a>00254
+<a name="l00255"></a>00255 <span class="comment">//Setup an empty XML document</span>
+<a name="l00260"></a>00260 <span class="comment"></span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00261"></a><a class="code" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">00261</a> <a class="code" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">XmlDoc</a>(String rootName) : version_(<span class="stringliteral">&quot;1.0&quot;</span>), encoding_(<span class="stringliteral">&quot;UTF-8&quot;</span>), rootElement(rootName, nullptr, <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>::PrivateConstruction()) {}
+<a name="l00262"></a>00262
+<a name="l00264"></a><a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">00264</a> <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>&amp; <a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d" title="Get a const reference to the document&#39;s root element.">root</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rootElement; }
+<a name="l00266"></a><a class="code" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">00266</a> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>&amp; <a class="code" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e" title="Get a reference to the document&#39;s root element.">root</a>() { <span class="keywordflow">return</span> rootElement; }
+<a name="l00267"></a>00267
+<a name="l00269"></a>00269
+<a name="l00272"></a>00272 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00273"></a><a class="code" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">00273</a> String <a class="code" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665" title="Get the version used in the XML declaration.">getVersionAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo&lt;String&gt;(version_); }
+<a name="l00274"></a>00274
+<a name="l00276"></a>00276
+<a name="l00279"></a>00279 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00280"></a><a class="code" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">00280</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64" title="Set the version used in the XML declaration.">setVersion</a>(<span class="keyword">const</span> String&amp; version) { version_ = utfCvrtTo&lt;std::string&gt;(version); }
+<a name="l00281"></a>00281
+<a name="l00283"></a>00283
+<a name="l00286"></a>00286 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00287"></a><a class="code" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">00287</a> String <a class="code" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da" title="Get the encoding used in the XML declaration.">getEncodingAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo&lt;String&gt;(encoding_); }
+<a name="l00288"></a>00288
+<a name="l00290"></a>00290
+<a name="l00293"></a>00293 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00294"></a><a class="code" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">00294</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62" title="Set the encoding used in the XML declaration.">setEncoding</a>(<span class="keyword">const</span> String&amp; encoding) { encoding_ = utfCvrtTo&lt;std::string&gt;(encoding); }
+<a name="l00295"></a>00295
+<a name="l00297"></a>00297
+<a name="l00300"></a>00300 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00301"></a><a class="code" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">00301</a> String <a class="code" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4" title="Get the standalone string used in the XML declaration.">getStandaloneAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo&lt;String&gt;(standalone_); }
+<a name="l00302"></a>00302
+<a name="l00304"></a>00304
+<a name="l00307"></a>00307 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00308"></a><a class="code" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">00308</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4" title="Set the standalone string used in the XML declaration.">setStandalone</a>(<span class="keyword">const</span> String&amp; standalone) { standalone_ = utfCvrtTo&lt;std::string&gt;(standalone); }
+<a name="l00309"></a>00309
+<a name="l00310"></a>00310 <span class="keyword">private</span>:
+<a name="l00311"></a>00311 <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed" title="Default constructor setting up an empty XML document with a standard declaration: &lt;...">XmlDoc</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>&amp;); <span class="comment">//not implemented, thanks to XmlElement::parent_</span>
+<a name="l00312"></a>00312 <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>&amp;); <span class="comment">//</span>
+<a name="l00313"></a>00313
+<a name="l00314"></a>00314 std::string version_;
+<a name="l00315"></a>00315 std::string encoding_;
+<a name="l00316"></a>00316 std::string standalone_;
+<a name="l00317"></a>00317
+<a name="l00318"></a>00318 <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a> rootElement;
+<a name="l00319"></a>00319 };
+<a name="l00320"></a>00320
+<a name="l00321"></a>00321 }
+<a name="l00322"></a>00322
+<a name="l00323"></a>00323 <span class="preprocessor">#endif //ZEN_XML_DOM_HEADER_82085720723894567204564256</span>
+</pre></div></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/doxygen.css b/zenxml/doc/doxygen.css
new file mode 100644
index 00000000..c151fde3
--- /dev/null
+++ b/zenxml/doc/doxygen.css
@@ -0,0 +1,1012 @@
+/* The standard CSS for doxygen */
+
+body, table, div, p, dl {
+ font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
+ font-size: 13px;
+ line-height: 1.3;
+}
+
+/* @group Heading Levels */
+
+h1 {
+ font-size: 150%;
+}
+
+.title {
+ font-size: 150%;
+ font-weight: bold;
+ margin: 10px 2px;
+}
+
+h2 {
+ font-size: 120%;
+}
+
+h3 {
+ font-size: 100%;
+}
+
+dt {
+ font-weight: bold;
+}
+
+div.multicol {
+ -moz-column-gap: 1em;
+ -webkit-column-gap: 1em;
+ -moz-column-count: 3;
+ -webkit-column-count: 3;
+}
+
+p.startli, p.startdd, p.starttd {
+ margin-top: 2px;
+}
+
+p.endli {
+ margin-bottom: 0px;
+}
+
+p.enddd {
+ margin-bottom: 4px;
+}
+
+p.endtd {
+ margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+span.legend {
+ font-size: 70%;
+ text-align: center;
+}
+
+h3.version {
+ font-size: 90%;
+ text-align: center;
+}
+
+div.qindex, div.navtab{
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+}
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 140%;
+}
+
+div.navtab {
+ margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+ color: #3D578C;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #4665A2;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #9CAFD4;
+ color: #ffffff;
+ border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+ color: #ffffff;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited {
+ color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited {
+ color: #4665A2;
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+.fragment {
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+}
+
+div.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding: 0.2em;
+ border: solid thin #333;
+ border-radius: 0.5em;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ box-shadow: 2px 2px 3px #999;
+ -webkit-box-shadow: 2px 2px 3px #999;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+ background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background-color: white;
+ color: black;
+ margin: 0;
+}
+
+div.contents {
+ margin-top: 10px;
+ margin-left: 8px;
+ margin-right: 8px;
+}
+
+td.indexkey {
+ background-color: #EBEFF6;
+ font-weight: bold;
+ border: 1px solid #C4CFE5;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+td.indexvalue {
+ background-color: #EBEFF6;
+ border: 1px solid #C4CFE5;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl {
+ vertical-align: middle;
+}
+
+div.center {
+ text-align: center;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px;
+}
+
+div.center img {
+ border: 0px;
+}
+
+address.footer {
+ text-align: right;
+ padding-right: 12px;
+}
+
+img.footer {
+ border: 0px;
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+blockquote {
+ background-color: #F7F8FB;
+ border-left: 2px solid #9CAFD4;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+ background: #EBEFF6;
+ font-weight: bold;
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+ height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #F9FAFC;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memItemLeft, .memItemRight, .memTemplParams {
+ border-top: 1px solid #C4CFE5;
+}
+
+.memItemLeft, .memTemplItemLeft {
+ white-space: nowrap;
+}
+
+.memItemRight {
+ width: 100%;
+}
+
+.memTemplParams {
+ color: #4665A2;
+ white-space: nowrap;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+ font-size: 80%;
+ color: #4665A2;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.mempage {
+ width: 100%;
+}
+
+.memitem {
+ padding: 0;
+ margin-bottom: 10px;
+ margin-right: 5px;
+}
+
+.memname {
+ white-space: nowrap;
+ font-weight: bold;
+ margin-left: 6px;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 0px 6px 0px;
+ color: #253555;
+ font-weight: bold;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ /* opera specific markup */
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ border-top-right-radius: 8px;
+ border-top-left-radius: 8px;
+ /* firefox specific markup */
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ -moz-border-radius-topright: 8px;
+ -moz-border-radius-topleft: 8px;
+ /* webkit specific markup */
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ -webkit-border-top-right-radius: 8px;
+ -webkit-border-top-left-radius: 8px;
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 2px 5px;
+ background-color: #FBFCFD;
+ border-top-width: 0;
+ /* opera specific markup */
+ border-bottom-left-radius: 8px;
+ border-bottom-right-radius: 8px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ /* firefox specific markup */
+ -moz-border-radius-bottomleft: 8px;
+ -moz-border-radius-bottomright: 8px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7);
+ /* webkit specific markup */
+ -webkit-border-bottom-left-radius: 8px;
+ -webkit-border-bottom-right-radius: 8px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7));
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+
+.params, .retval, .exception, .tparams {
+ border-spacing: 6px 2px;
+}
+
+.params .paramname, .retval .paramname {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.params .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir {
+ font-family: "courier new",courier,monospace;
+ vertical-align: top;
+}
+
+
+
+
+/* @end */
+
+/* @group Directory (tree) */
+
+/* for the tree view */
+
+.ftvtree {
+ font-family: sans-serif;
+ margin: 0px;
+}
+
+/* these are for tree view when used as main index */
+
+.directory {
+ font-size: 9pt;
+ font-weight: bold;
+ margin: 5px;
+}
+
+.directory h3 {
+ margin: 0px;
+ margin-top: 1em;
+ font-size: 11pt;
+}
+
+/*
+The following two styles can be used to replace the root node title
+with an image of your choice. Simply uncomment the next two styles,
+specify the name of your image and be sure to set 'height' to the
+proper pixel height of your image.
+*/
+
+/*
+.directory h3.swap {
+ height: 61px;
+ background-repeat: no-repeat;
+ background-image: url("yourimage.gif");
+}
+.directory h3.swap span {
+ display: none;
+}
+*/
+
+.directory > h3 {
+ margin-top: 0;
+}
+
+.directory p {
+ margin: 0px;
+ white-space: nowrap;
+}
+
+.directory div {
+ display: none;
+ margin: 0px;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+/* these are for tree view when not used as main index */
+
+.directory-alt {
+ font-size: 100%;
+ font-weight: bold;
+}
+
+.directory-alt h3 {
+ margin: 0px;
+ margin-top: 1em;
+ font-size: 11pt;
+}
+
+.directory-alt > h3 {
+ margin-top: 0;
+}
+
+.directory-alt p {
+ margin: 0px;
+ white-space: nowrap;
+}
+
+.directory-alt div {
+ display: none;
+ margin: 0px;
+}
+
+.directory-alt img {
+ vertical-align: -30%;
+}
+
+/* @end */
+
+div.dynheader {
+ margin-top: 8px;
+}
+
+address {
+ font-style: normal;
+ color: #2A3D61;
+}
+
+table.doxtable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+table.fieldtable {
+ width: 100%;
+ margin-bottom: 10px;
+ border: 1px solid #A8B8D9;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ vertical-align: top;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid #A8B8D9;
+ width: 100%;
+}
+
+.fieldtable tr:last-child td {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ font-size: 90%;
+ color: #253555;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+ top: 0px;
+ left: 10px;
+ height: 36px;
+ background-image: url('tab_b.png');
+ z-index: 101;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.navpath ul
+{
+ font-size: 11px;
+ background-image:url('tab_b.png');
+ background-repeat:repeat-x;
+ height:30px;
+ line-height:30px;
+ color:#8AA0CC;
+ border:solid 1px #C2CDE4;
+ overflow:hidden;
+ margin:0px;
+ padding:0px;
+}
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+}
+
+.navpath li.navelem a:hover
+{
+ color:#6884BD;
+}
+
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+ font-size: 8pt;
+}
+
+
+div.summary
+{
+ float: right;
+ font-size: 8pt;
+ padding-right: 5px;
+ width: 50%;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+div.ingroups
+{
+ margin-left: 5px;
+ font-size: 8pt;
+ padding-left: 5px;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ margin: 0px;
+ border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 7px;
+}
+
+dl
+{
+ padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+ border-left:4px solid;
+ padding: 0 0 0 6px;
+}
+
+dl.note
+{
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+ border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+ border-color: #00D000;
+}
+
+dl.deprecated
+{
+ border-color: #505050;
+}
+
+dl.todo
+{
+ border-color: #00C0E0;
+}
+
+dl.test
+{
+ border-color: #3030E0;
+}
+
+dl.bug
+{
+ border-color: #C08050;
+}
+
+dl.section dd {
+ margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectname
+{
+ font: 300% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 2px 0px;
+}
+
+#projectbrief
+{
+ font: 120% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+ text-align: center;
+}
+
+.dotgraph
+{
+ text-align: center;
+}
+
+.mscgraph
+{
+ text-align: center;
+}
+
+.caption
+{
+ font-weight: bold;
+}
+
+div.zoom
+{
+ border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:#334975;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+}
+
+dl.citelist dd {
+ margin:2px 0;
+ padding:5px 0;
+}
+
+div.toc {
+ padding: 14px 25px;
+ background-color: #F4F6FA;
+ border: 1px solid #D8DFEE;
+ border-radius: 7px 7px 7px 7px;
+ float: right;
+ height: auto;
+ margin: 0 20px 10px 10px;
+ width: 200px;
+}
+
+div.toc li {
+ background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+ font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-top: 2px;
+}
+
+div.toc h3 {
+ font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: #4665A2;
+ border-bottom: 0 none;
+ margin: 0;
+}
+
+div.toc ul {
+ list-style: none outside none;
+ border: medium none;
+ padding: 0px;
+}
+
+div.toc li.level1 {
+ margin-left: 0px;
+}
+
+div.toc li.level2 {
+ margin-left: 15px;
+}
+
+div.toc li.level3 {
+ margin-left: 30px;
+}
+
+div.toc li.level4 {
+ margin-left: 45px;
+}
+
+
+@media print
+{
+ #top { display: none; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+ pre.fragment
+ {
+ overflow: visible;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ }
+}
+
diff --git a/zenxml/doc/doxygen.png b/zenxml/doc/doxygen.png
new file mode 100644
index 00000000..635ed52f
--- /dev/null
+++ b/zenxml/doc/doxygen.png
Binary files differ
diff --git a/zenxml/doc/error_8h_source.html b/zenxml/doc/error_8h_source.html
new file mode 100644
index 00000000..8986a17b
--- /dev/null
+++ b/zenxml/doc/error_8h_source.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: error.h Source File</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">error.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span>
+<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span>
+<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span>
+<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span>
+<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span>
+<a name="l00006"></a>00006
+<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_ERROR_HEADER_018734618433021489473214873214</span>
+<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_ERROR_HEADER_018734618433021489473214873214</span>
+<a name="l00009"></a>00009 <span class="preprocessor"></span>
+<a name="l00010"></a>00010 <span class="keyword">namespace </span>zen
+<a name="l00011"></a>00011 {
+<a name="l00013"></a><a class="code" href="structzen_1_1_xml_error.html">00013</a> <span class="keyword">struct </span><a class="code" href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml.">XmlError</a>
+<a name="l00014"></a>00014 {
+<a name="l00015"></a>00015 <span class="keyword">virtual</span> ~<a class="code" href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml.">XmlError</a>() {}
+<a name="l00016"></a>00016 };
+<a name="l00017"></a>00017 }
+<a name="l00018"></a>00018
+<a name="l00019"></a>00019 <span class="preprocessor">#endif //ZEN_XML_ERROR_HEADER_018734618433021489473214873214</span>
+</pre></div></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/files.html b/zenxml/doc/files.html
new file mode 100644
index 00000000..31fcf4fd
--- /dev/null
+++ b/zenxml/doc/files.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: File List</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">File List</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all documented files with brief descriptions:</div><table>
+ <tr><td class="indexkey"><b>bind.h</b> <a href="bind_8h_source.html">[code]</a></td><td class="indexvalue">Map user data types to XML </td></tr>
+ <tr><td class="indexkey"><b>cvrt_struc.h</b> <a href="cvrt__struc_8h_source.html">[code]</a></td><td class="indexvalue">Handle conversion of arbitrary types to and from XML elements. See comments in <a class="el" href="cvrt__text_8h_source.html" title="Handle conversion of string-convertible types to and from std::string.">cvrt_text.h</a> </td></tr>
+ <tr><td class="indexkey"><b>cvrt_text.h</b> <a href="cvrt__text_8h_source.html">[code]</a></td><td class="indexvalue">Handle conversion of string-convertible types to and from std::string </td></tr>
+ <tr><td class="indexkey"><b>dom.h</b> <a href="dom_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>error.h</b> <a href="error_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>io.h</b> <a href="io_8h_source.html">[code]</a></td><td class="indexvalue">Save and load byte streams from files </td></tr>
+ <tr><td class="indexkey"><b>parser.h</b> <a href="parser_8h_source.html">[code]</a></td><td class="indexvalue">Convert an XML document object model (class XmlDoc) to and from a byte stream representation </td></tr>
+ <tr><td class="indexkey"><b>xml.h</b> <a href="xml_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+</table>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/functions.html b/zenxml/doc/functions.html
new file mode 100644
index 00000000..956af32d
--- /dev/null
+++ b/zenxml/doc/functions.html
@@ -0,0 +1,272 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Class Members</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li class="current"><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="#index_a"><span>a</span></a></li>
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_e"><span>e</span></a></li>
+ <li><a href="#index_g"><span>g</span></a></li>
+ <li><a href="#index_l"><span>l</span></a></li>
+ <li><a href="#index_n"><span>n</span></a></li>
+ <li><a href="#index_o"><span>o</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_x"><span>x</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>addChild()
+: <a class="el" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">zen::XmlElement</a>
+</li>
+<li>attribute()
+: <a class="el" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">zen::XmlIn</a>
+, <a class="el" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">zen::XmlOut</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>col
+: <a class="el" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">zen::XmlParsingError</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>errorsOccured()
+: <a class="el" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">zen::XmlIn</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>get()
+: <a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f">zen::XmlIn</a>
+</li>
+<li>getAttribute()
+: <a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">zen::XmlElement</a>
+</li>
+<li>getChild()
+: <a class="el" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">zen::XmlElement</a>
+</li>
+<li>getChildren()
+: <a class="el" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">zen::XmlElement</a>
+</li>
+<li>getEncodingAs()
+: <a class="el" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">zen::XmlDoc</a>
+</li>
+<li>getErrorsAs()
+: <a class="el" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">zen::XmlIn</a>
+</li>
+<li>getNameAs()
+: <a class="el" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">zen::XmlElement</a>
+</li>
+<li>getStandaloneAs()
+: <a class="el" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">zen::XmlDoc</a>
+</li>
+<li>getValue()
+: <a class="el" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">zen::XmlElement</a>
+</li>
+<li>getVersionAs()
+: <a class="el" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">zen::XmlDoc</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>lastError
+: <a class="el" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">zen::XmlFileError</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>next()
+: <a class="el" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">zen::XmlIn</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>operator int ConversionToBool::*()
+: <a class="el" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">zen::XmlIn</a>
+</li>
+<li>operator()()
+: <a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">zen::XmlOut</a>
+, <a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">zen::XmlIn</a>
+</li>
+<li>operator[]()
+: <a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">zen::XmlOut</a>
+, <a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">zen::XmlIn</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>parent()
+: <a class="el" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">zen::XmlElement</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>ref()
+: <a class="el" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">zen::XmlOut</a>
+</li>
+<li>removeAttribute()
+: <a class="el" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">zen::XmlElement</a>
+</li>
+<li>root()
+: <a class="el" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">zen::XmlDoc</a>
+</li>
+<li>row
+: <a class="el" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">zen::XmlParsingError</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>setAttribute()
+: <a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">zen::XmlElement</a>
+</li>
+<li>setEncoding()
+: <a class="el" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">zen::XmlDoc</a>
+</li>
+<li>setStandalone()
+: <a class="el" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">zen::XmlDoc</a>
+</li>
+<li>setValue()
+: <a class="el" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">zen::XmlElement</a>
+</li>
+<li>setVersion()
+: <a class="el" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">zen::XmlDoc</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>XmlDoc()
+: <a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">zen::XmlDoc</a>
+</li>
+<li>XmlIn()
+: <a class="el" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">zen::XmlIn</a>
+</li>
+<li>XmlOut()
+: <a class="el" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">zen::XmlOut</a>
+</li>
+</ul>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/functions_func.html b/zenxml/doc/functions_func.html
new file mode 100644
index 00000000..be8e5716
--- /dev/null
+++ b/zenxml/doc/functions_func.html
@@ -0,0 +1,253 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Class Members - Functions</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li class="current"><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="#index_a"><span>a</span></a></li>
+ <li><a href="#index_e"><span>e</span></a></li>
+ <li><a href="#index_g"><span>g</span></a></li>
+ <li><a href="#index_n"><span>n</span></a></li>
+ <li><a href="#index_o"><span>o</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_x"><span>x</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>addChild()
+: <a class="el" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">zen::XmlElement</a>
+</li>
+<li>attribute()
+: <a class="el" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">zen::XmlIn</a>
+, <a class="el" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">zen::XmlOut</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>errorsOccured()
+: <a class="el" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">zen::XmlIn</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>get()
+: <a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f">zen::XmlIn</a>
+</li>
+<li>getAttribute()
+: <a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">zen::XmlElement</a>
+</li>
+<li>getChild()
+: <a class="el" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">zen::XmlElement</a>
+</li>
+<li>getChildren()
+: <a class="el" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">zen::XmlElement</a>
+</li>
+<li>getEncodingAs()
+: <a class="el" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">zen::XmlDoc</a>
+</li>
+<li>getErrorsAs()
+: <a class="el" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">zen::XmlIn</a>
+</li>
+<li>getNameAs()
+: <a class="el" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">zen::XmlElement</a>
+</li>
+<li>getStandaloneAs()
+: <a class="el" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">zen::XmlDoc</a>
+</li>
+<li>getValue()
+: <a class="el" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">zen::XmlElement</a>
+</li>
+<li>getVersionAs()
+: <a class="el" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">zen::XmlDoc</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>next()
+: <a class="el" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">zen::XmlIn</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>operator int ConversionToBool::*()
+: <a class="el" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">zen::XmlIn</a>
+</li>
+<li>operator()()
+: <a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">zen::XmlOut</a>
+, <a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">zen::XmlIn</a>
+</li>
+<li>operator[]()
+: <a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">zen::XmlOut</a>
+, <a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">zen::XmlIn</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>parent()
+: <a class="el" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">zen::XmlElement</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>ref()
+: <a class="el" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">zen::XmlOut</a>
+</li>
+<li>removeAttribute()
+: <a class="el" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">zen::XmlElement</a>
+</li>
+<li>root()
+: <a class="el" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">zen::XmlDoc</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>setAttribute()
+: <a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">zen::XmlElement</a>
+</li>
+<li>setEncoding()
+: <a class="el" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">zen::XmlDoc</a>
+</li>
+<li>setStandalone()
+: <a class="el" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">zen::XmlDoc</a>
+</li>
+<li>setValue()
+: <a class="el" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">zen::XmlElement</a>
+</li>
+<li>setVersion()
+: <a class="el" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">zen::XmlDoc</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>XmlDoc()
+: <a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">zen::XmlDoc</a>
+</li>
+<li>XmlIn()
+: <a class="el" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">zen::XmlIn</a>
+</li>
+<li>XmlOut()
+: <a class="el" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">zen::XmlOut</a>
+</li>
+</ul>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/functions_vars.html b/zenxml/doc/functions_vars.html
new file mode 100644
index 00000000..ba8364ef
--- /dev/null
+++ b/zenxml/doc/functions_vars.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Class Members - Variables</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li class="current"><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>col
+: <a class="el" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">zen::XmlParsingError</a>
+</li>
+<li>lastError
+: <a class="el" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">zen::XmlFileError</a>
+</li>
+<li>row
+: <a class="el" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">zen::XmlParsingError</a>
+</li>
+</ul>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/hierarchy.html b/zenxml/doc/hierarchy.html
new file mode 100644
index 00000000..363c134b
--- /dev/null
+++ b/zenxml/doc/hierarchy.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Class Hierarchy</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li class="current"><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Class Hierarchy</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><ul>
+<li><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></li>
+<li><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></li>
+<li><a class="el" href="structzen_1_1_xml_error.html">zen::XmlError</a><ul>
+<li><a class="el" href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a></li>
+<li><a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a></li>
+</ul>
+</li>
+<li><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></li>
+<li><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></li>
+</ul>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/index.html b/zenxml/doc/index.html
new file mode 100644
index 00000000..d7245a6b
--- /dev/null
+++ b/zenxml/doc/index.html
@@ -0,0 +1,679 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Overview</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li class="current"><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Overview </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><ul>
+<li><a class="el" href="index.html#sec_Rationale">Rationale</a> </li>
+<li><a class="el" href="index.html#sec_Quick_Start">Quick Start</a> </li>
+<li><a class="el" href="index.html#sec_Supported_Platforms">Supported Platforms</a> </li>
+<li><a class="el" href="index.html#sec_Flexible_Programming_Model">Flexible Programming Model</a> </li>
+<li><a class="el" href="index.html#sec_Structured_XML_element_access">Structured XML element access</a> </li>
+<li><a class="el" href="index.html#sec_Access_XML_attributes">Access XML attributes</a> </li>
+<li><a class="el" href="index.html#sec_Automatic_conversion_built_in">Automatic conversion for built-in arithmetic types</a> </li>
+<li><a class="el" href="index.html#sec_Automatic_conversion_string">Automatic conversion for string-like types</a> </li>
+<li><a class="el" href="index.html#sec_Automatic_conversion_STL">Automatic conversion for STL container types</a> </li>
+<li><a class="el" href="index.html#sec_Support_user_defined">Support for user-defined types</a> </li>
+<li><a class="el" href="index.html#sec_Structured_user_types">Structured user types</a> </li>
+<li><a class="el" href="index.html#sec_Type_Safety">Type Safety</a></li>
+</ul>
+<h2><a class="anchor" id="sec_Rationale"></a>
+Rationale</h2>
+<p>zen::Xml is an XML library serializing structured user data in a convenient way. Using compile-time information gathered by techniques of template metaprogramming it minimizes the manual overhead required and frees the user from implementing fundamental type conversions by himself. Basic data types such as</p>
+<ul>
+<li><b>all</b> built-in arithmetic numbers,</li>
+<li><b>all</b> kinds of string classes and "string-like" types,</li>
+<li><b>all</b> types defined as STL containers</li>
+</ul>
+<p>are handled automatically. Thereby a large number of recurring problems is solved by the library:</p>
+<ul>
+<li>generic number to string conversions</li>
+<li>generic char to wchar_t conversions (UTF) for custom string classes in a platform independent manner</li>
+<li>serialization of arbitrary STL container types</li>
+<li>simple integration: header-only, no extra dependencies, fully portable</li>
+<li>support arbitrary string classes everywhere: for file names, XML element names, attribute names, values, ...</li>
+<li>XML library built on C++11 with focus on elegance, minimal code size, flexibility and performance</li>
+<li>easily extensible API: allow for internationalization, fine-granular error handling, and custom file I/O</li>
+</ul>
+<p>The design follows the philosophy of the Loki library: <br/>
+ <a href="http://loki-lib.sourceforge.net/index.php?n=Main.Philosophy">http://loki-lib.sourceforge.net/index.php?n=Main.Philosophy</a></p>
+<h2><a class="anchor" id="sec_Quick_Start"></a>
+Quick Start</h2>
+<p>1. Download zen::Xml: <a href="http://sourceforge.net/projects/zenxml">http://sourceforge.net/projects/zenxml</a></p>
+<p>2. Setup a preprocessor macro for your project to identify the platform (this is only required if you use C-stream-based file IO) </p>
+<div class="fragment"><pre class="fragment"> ZEN_PLATFORM_WINDOWS
+ or
+ ZEN_PLATFORM_OTHER
+</pre></div><p>3. For optimal performance define this global macro in release build: (following convention of the <code>assert</code> macro) </p>
+<div class="fragment"><pre class="fragment"> NDEBUG
+</pre></div><p>4. Include the main header: </p>
+<div class="fragment"><pre class="fragment"><span class="preprocessor">#include &lt;zenxml/xml.h&gt;</span>
+</pre></div><p>5. Start serializing user data:</p>
+<div class="fragment"><pre class="fragment"><span class="keywordtype">size_t</span> a = 10;
+<span class="keywordtype">double</span> b = 2.0;
+<span class="keywordtype">int</span> c = -1;
+</pre></div><div class="fragment"><pre class="fragment"><a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc; <span class="comment">//empty XML document</span>
+
+<a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc); <span class="comment">//the simplest way to fill the document is to use a data output proxy</span>
+out[<span class="stringliteral">&quot;elem1&quot;</span>](a); <span class="comment">//</span>
+out[<span class="stringliteral">&quot;elem2&quot;</span>](b); <span class="comment">//map data types to XML elements</span>
+out[<span class="stringliteral">&quot;elem3&quot;</span>](c); <span class="comment">//</span>
+
+<span class="keywordflow">try</span>
+{
+ <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d" title="Save XML document to a file.">save</a>(doc, <span class="stringliteral">&quot;file.xml&quot;</span>); <span class="comment">//throw zen::XmlFileError</span>
+}
+<span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">zen::XmlFileError</a>&amp; e) { <span class="comment">/* handle error */</span> }
+</pre></div><p>The following XML file will be created: </p>
+<div class="fragment"><pre class="fragment">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;Root&gt;
+ &lt;elem1&gt;10&lt;/elem1&gt;
+ &lt;elem2&gt;2.000000&lt;/elem2&gt;
+ &lt;elem3&gt;-1&lt;/elem3&gt;
+&lt;/Root&gt;
+</pre></div><p>Load an XML file and map its content to user data: </p>
+<div class="fragment"><pre class="fragment"><a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc; <span class="comment">//empty XML document</span>
+
+<span class="keywordflow">try</span>
+{
+ <a class="code" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee" title="Load XML document from a file.">load</a>(<span class="stringliteral">&quot;file.xml&quot;</span>, doc); <span class="comment">//throw XmlFileError, XmlParsingError</span>
+}
+<span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml.">zen::XmlError</a>&amp; e) { <span class="comment">/* handle error */</span> }
+
+<a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> in(doc); <span class="comment">//the simplest way to read the document is to use a data input proxy</span>
+in[<span class="stringliteral">&quot;elem1&quot;</span>](a); <span class="comment">//</span>
+in[<span class="stringliteral">&quot;elem2&quot;</span>](b); <span class="comment">//map XML elements into user data</span>
+in[<span class="stringliteral">&quot;elem3&quot;</span>](c); <span class="comment">//</span>
+
+<span class="comment">//check for mapping errors, i.e. missing elements or conversion errors: you may consider these as warnings only</span>
+<span class="keywordflow">if</span> (in.errorsOccured())
+{
+ std::vector&lt;std::wstring&gt; failedElements = in.getErrorsAs&lt;std::wstring&gt;();
+ <span class="comment">/* generate error message showing the XML element names that failed to convert */</span>
+}
+</pre></div><h2><a class="anchor" id="sec_Supported_Platforms"></a>
+Supported Platforms</h2>
+<p>zen::Xml is written in a platform independent manner and runs on any rudimentary C++11 compliant compiler. It has been tested successfully under:</p>
+<ul>
+<li>Windows:<ol type="1">
+<li>Visual C++ 2010 - 32 bit</li>
+<li>Visual C++ 2010 - 64 bit</li>
+<li>MinGW: GCC 4.5.2 - 32 bit</li>
+</ol>
+</li>
+</ul>
+<ul>
+<li>Linux:<ol type="1">
+<li>GCC 4.5.2 - 32 bit</li>
+<li>GCC 4.5.2 - 64 bit</li>
+</ol>
+</li>
+</ul>
+<ul>
+<li>Mac OS X:<ol type="1">
+<li>Clang 3.2 - 64 bit</li>
+</ol>
+</li>
+</ul>
+<p><b>Note:</b> In order to enable C++11 features in GCC it is required to specify either of the following compiler options: </p>
+<div class="fragment"><pre class="fragment">-std=c++11
+-std=c++0x
+-std=gnu++0x
+</pre></div><h2><a class="anchor" id="sec_Flexible_Programming_Model"></a>
+Flexible Programming Model</h2>
+<p>Depending on what granularity of control is required in a particular application, zen::Xml allows the user to choose between full control or simplicity. <br/>
+<br/>
+ The library is structured into the following parts, each of which can be used in isolation: <br/>
+<br/>
+ <b>&lt;File&gt;</b> <br/>
+ |<br/>
+ | <a class="el" href="io_8h_source.html" title="Save and load byte streams from files.">io.h</a><br/>
+ |<br/>
+ <b>&lt;Byte Stream&gt;</b><br/>
+ |<br/>
+ | <a class="el" href="parser_8h_source.html" title="Convert an XML document object model (class XmlDoc) to and from a byte stream representation.">parser.h</a><br/>
+ |<br/>
+ <b>&lt;Document Object Model&gt;</b><br/>
+ |<br/>
+ | <a class="el" href="bind_8h_source.html" title="Map user data types to XML.">bind.h</a><br/>
+ |<br/>
+ <b>&lt;C++ user data&gt;</b> <br/>
+<br/>
+</p>
+<ul>
+<li>Save an XML document to memory <div class="fragment"><pre class="fragment"><a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc;
+ ... <span class="comment">//fill it</span>
+std::string stream = <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(doc); <span class="comment">//throw ()</span>
+<span class="comment">/* you now have a binary XML stream */</span>
+
+<a class="code" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2" title="Save byte stream to a file.">saveStream</a>(stream, <span class="stringliteral">&quot;file.xml&quot;</span>); <span class="comment">//throw XmlFileError</span>
+<span class="comment">//if all you need is to store XmlDoc in a file direcly you can use zen::save() instead</span>
+</pre></div></li>
+</ul>
+<ul>
+<li>Load XML document from memory <div class="fragment"><pre class="fragment"><span class="comment">//get XML byte stream:</span>
+std::string stream = <a class="code" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607" title="Load byte stream from a file.">loadStream</a>(<span class="stringliteral">&quot;file.xml&quot;</span>); <span class="comment">//throw XmlFileError</span>
+
+<a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc;
+<span class="comment">//parse byte stream into an XML document:</span>
+<a class="code" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7" title="Load XML document from a byte stream.">parse</a>(stream, doc); <span class="comment">//throw XmlParsingError</span>
+<span class="comment">//if all you need is to load an XmlDoc from a file you can use zen::load() directly</span>
+</pre></div></li>
+</ul>
+<ul>
+<li>Fine-granular error checking with the data input proxy <div class="fragment"><pre class="fragment"><a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> in(doc);
+<span class="comment">//map XML elements into user data</span>
+<span class="keywordflow">if</span> (!in[<span class="stringliteral">&quot;elem1&quot;</span>](a))
+ <span class="keywordflow">throw</span> MyCustomException();
+<span class="keywordflow">if</span> (!in[<span class="stringliteral">&quot;elem2&quot;</span>](b))
+ <span class="keywordflow">throw</span> MyCustomException();
+<span class="keywordflow">if</span> (!in[<span class="stringliteral">&quot;elem3&quot;</span>](c))
+ <span class="keywordflow">throw</span> MyCustomException();
+
+<span class="comment">//if (in.errorsOccured()) ... &lt;- not required here: contains the same conversion errors checked manually before</span>
+</pre></div></li>
+</ul>
+<ul>
+<li>Access the Document Object Model directly (without input/output proxy) <br/>
+<br/>
+ The full power of type conversions which is available via the input/output proxy classes <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> and <a class="el" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> is also available for the document object model! <div class="fragment"><pre class="fragment"><span class="keyword">using namespace </span>zen;
+
+<a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a> doc;
+
+<a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>&amp; child = doc.<a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d" title="Get a const reference to the document&#39;s root element.">root</a>().<a class="code" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9" title="Create a new child element and return a reference to it.">addChild</a>(<span class="stringliteral">&quot;elem1&quot;</span>);
+child.<a class="code" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01" title="Set the value of this element.">setValue</a>(1234);
+
+<a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d" title="Save XML document to a file.">save</a>(doc, <span class="stringliteral">&quot;file.xml&quot;</span>); <span class="comment">//throw XmlFileError</span>
+</pre></div> <br/>
+ <div class="fragment"><pre class="fragment"><span class="keyword">using namespace </span>zen;
+
+<a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a> doc;
+<a class="code" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee" title="Load XML document from a file.">load</a>(<span class="stringliteral">&quot;file.xml&quot;</span>, doc); <span class="comment">//throw XmlFileError, XmlParsingError</span>
+
+<a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* child = doc.<a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d" title="Get a const reference to the document&#39;s root element.">root</a>().<a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e" title="Retrieve a child element with the given name.">getChild</a>(<span class="stringliteral">&quot;elem1&quot;</span>);
+<span class="keywordflow">if</span> (child)
+{
+ <span class="keywordtype">int</span> value = -1;
+ <span class="keywordflow">if</span> (!child-&gt;getValue(value))
+ ... <span class="comment">//handle conversion error</span>
+}
+<span class="keywordflow">else</span>
+ ... <span class="comment">//XML element not found</span>
+</pre></div></li>
+</ul>
+<h2><a class="anchor" id="sec_Structured_XML_element_access"></a>
+Structured XML element access</h2>
+<div class="fragment"><pre class="fragment"><span class="comment">//write a value into one deeply nested XML element - note the different types used seamlessly: char[], wchar_t[], char, wchar_t, int</span>
+<a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc);
+out[<span class="stringliteral">&quot;elemento1&quot;</span>][L<span class="stringliteral">&quot;элемент2&quot;</span>][L<span class="stringliteral">&quot;要素3&quot;</span>][L<span class="stringliteral">&quot;στοιχείο4&quot;</span>][<span class="stringliteral">&quot;elem5&quot;</span>][L<span class="stringliteral">&quot;元素6&quot;</span>][L<span class="stringliteral">&#39;元&#39;</span>][<span class="charliteral">&#39;z&#39;</span>](-1234);
+</pre></div><p>The resulting XML: </p>
+<div class="fragment"><pre class="fragment">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;Root&gt;
+ &lt;elemento1&gt;
+ &lt;элемент2&gt;
+ &lt;要素3&gt;
+ &lt;στοιχείο4&gt;
+ &lt;elem5&gt;
+ &lt;元素6&gt;
+ &lt;元&gt;
+ &lt;z&gt;-1234&lt;/z&gt;
+ &lt;/元&gt;
+ &lt;/元素6&gt;
+ &lt;/elem5&gt;
+ &lt;/στοιχείο4&gt;
+ &lt;/要素3&gt;
+ &lt;/элемент2&gt;
+ &lt;/elemento1&gt;
+&lt;/Root&gt;
+</pre></div><h2><a class="anchor" id="sec_Access_XML_attributes"></a>
+Access XML attributes</h2>
+<div class="fragment"><pre class="fragment"><a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc;
+
+<a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc);
+out[<span class="stringliteral">&quot;elem&quot;</span>].attribute(<span class="stringliteral">&quot;attr1&quot;</span>, -1); <span class="comment">//</span>
+out[<span class="stringliteral">&quot;elem&quot;</span>].attribute(<span class="stringliteral">&quot;attr2&quot;</span>, 2.1); <span class="comment">//write data into XML attributes</span>
+out[<span class="stringliteral">&quot;elem&quot;</span>].attribute(<span class="stringliteral">&quot;attr3&quot;</span>, <span class="keyword">true</span>); <span class="comment">//</span>
+
+<a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d" title="Save XML document to a file.">save</a>(doc, <span class="stringliteral">&quot;file.xml&quot;</span>); <span class="comment">//throw XmlFileError</span>
+</pre></div><p>The resulting XML: </p>
+<div class="fragment"><pre class="fragment">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;Root&gt;
+ &lt;elem attr1="-1" attr2="2.1" attr3="true"/&gt;
+&lt;/Root&gt;
+</pre></div><h2><a class="anchor" id="sec_Automatic_conversion_built_in"></a>
+Automatic conversion for built-in arithmetic types</h2>
+<p>All built-in arithmetic types and <code>bool</code> are detected at compile time and a proper conversion is applied. Common conversions for integer-like types such as <code>int</code>, <code>long</code>, <code>long long</code>, ect. as well as floating point types are optimized for maximum performance.</p>
+<div class="fragment"><pre class="fragment"><a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc);
+
+out[<span class="stringliteral">&quot;int&quot;</span>] (-1234);
+out[<span class="stringliteral">&quot;double&quot;</span>](1.23);
+out[<span class="stringliteral">&quot;float&quot;</span>] (4.56f);
+out[<span class="stringliteral">&quot;ulong&quot;</span>] (1234UL);
+out[<span class="stringliteral">&quot;bool&quot;</span>] (<span class="keyword">false</span>);
+</pre></div><p>The resulting XML: </p>
+<div class="fragment"><pre class="fragment">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;Root&gt;
+ &lt;int&gt;-1234&lt;/int&gt;
+ &lt;double&gt;1.23&lt;/double&gt;
+ &lt;float&gt;4.56&lt;/float&gt;
+ &lt;ulong&gt;1234&lt;/ulong&gt;
+ &lt;bool&gt;false&lt;/bool&gt;
+&lt;/Root&gt;
+</pre></div><h2><a class="anchor" id="sec_Automatic_conversion_string"></a>
+Automatic conversion for string-like types</h2>
+<p>The document object model of zen::Xml internally stores all names and values as a std::string. Consequently everything that is not a std::string but is "string-like" is UTF-converted into a std::string representation. By default zen::Xml accepts all character arrays like <code>char[]</code>, <code>wchar_t[]</code>, <code>char*</code>, <code>wchar_t*</code>, single characters like <code>char</code>, <code>wchar_t</code>, standard string classes like <code>std::string</code>, <code>std::wstring</code> and user-defined string classes. If the input string is based on <code>char</code>, it will simply be copied and thereby preserves any local encodings. If the input string is based on <code>wchar_t</code> it will be converted to an UTF-8 encoded <code>std::string</code>. The correct <code>wchar_t</code> encoding of the system will be detected at compile time, for example UTF-16 on Windows, UTF-32 on most Linux distributions.</p>
+<p><b>Note:</b> User-defined string classes are automatically supported if they fulfill the following <b>string concept</b> by defining:</p>
+<ol type="1">
+<li>A typedef named <code>value_type</code> for the underlying character type: must be <code>char</code> or <code>wchar_t</code> </li>
+<li>A member function <code>c_str()</code> returning something that can be converted into a <code>const value_type*</code></li>
+<li>A member function <code>length()</code> returning the number of characters returned by <code>c_str()</code></li>
+</ol>
+<div class="fragment"><pre class="fragment">std::string elem1 = <span class="stringliteral">&quot;elemento1&quot;</span>;
+std::wstring elem2 = L<span class="stringliteral">&quot;элемент2&quot;</span>;
+wxString elem3 = L<span class="stringliteral">&quot;要素3&quot;</span>;
+MyString elem4 = L<span class="stringliteral">&quot;στοιχείο4&quot;</span>;
+
+<a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc);
+
+out[<span class="stringliteral">&quot;string&quot;</span>] (elem1);
+out[<span class="stringliteral">&quot;wstring&quot;</span>] (elem2);
+out[<span class="stringliteral">&quot;wxString&quot;</span>] (elem3);
+out[<span class="stringliteral">&quot;MyString&quot;</span>] (elem4);
+out[<span class="stringliteral">&quot;char[6]&quot;</span>] (<span class="stringliteral">&quot;elem5&quot;</span>);
+out[<span class="stringliteral">&quot;wchar_t[4]&quot;</span>](L<span class="stringliteral">&quot;元素6&quot;</span>);
+out[<span class="stringliteral">&quot;wchar_t&quot;</span>] (L<span class="stringliteral">&#39;元&#39;</span>);
+out[<span class="stringliteral">&quot;char&quot;</span>] (<span class="charliteral">&#39;z&#39;</span>);
+</pre></div><p>The resulting XML: </p>
+<div class="fragment"><pre class="fragment">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;Root&gt;
+ &lt;string&gt;elemento1&lt;/string&gt;
+ &lt;wstring&gt;элемент2&lt;/wstring&gt;
+ &lt;wxString&gt;要素3&lt;/wxString&gt;
+ &lt;MyString&gt;στοιχείο4&lt;/MyString&gt;
+ &lt;char[6]&gt;elem5&lt;/char[6]&gt;
+ &lt;wchar_t[4]&gt;元素6&lt;/wchar_t[4]&gt;
+ &lt;wchar_t&gt;元&lt;/wchar_t&gt;
+ &lt;char&gt;z&lt;/char&gt;
+&lt;/Root&gt;
+</pre></div><h2><a class="anchor" id="sec_Automatic_conversion_STL"></a>
+Automatic conversion for STL container types</h2>
+<ul>
+<li>User-defined STL compatible types are automatically supported if they fulfill the following <b>container concept</b> by defining:<ol type="1">
+<li>A typedef named <code>value_type</code> for the underlying element type of the container</li>
+<li>A typedef named <code>iterator</code> for a non-const iterator into the container</li>
+<li>A typedef named <code>const_iterator</code> for a const iterator into the container <br/>
+<br/>
+</li>
+<li>A member function <code>begin()</code> returning an iterator pointing to the first element in the container</li>
+<li>A member function <code>end()</code> returning an iterator pointing just after the last element in the container</li>
+<li>A member function <code>insert()</code> with the signature <code>iterator insert(iterator position, const value_type&amp; x)</code></li>
+<li>A member function <code>clear()</code> removing all elements from the container</li>
+</ol>
+</li>
+</ul>
+<ul>
+<li>In order to support combinations of user types and STL containers such as <code>std::vector&lt;MyType&gt;</code> or <code>std::vector&lt;std::list&lt;MyType&gt;&gt;</code> it is sufficient to only integrate <code>MyType</code> into zen::Xml. <br/>
+ See <a class="el" href="index.html#sec_Support_user_defined">Support for user-defined types</a></li>
+</ul>
+<div class="fragment"><pre class="fragment">std::deque &lt;float&gt; testDeque;
+std::list &lt;size_t&gt; testList;
+std::map &lt;double, char&gt; testMap;
+std::multimap&lt;short, double&gt; testMultiMap;
+std::set &lt;int&gt; testSet;
+std::multiset&lt;std::string&gt; testMultiSet;
+std::vector &lt;wchar_t&gt; testVector;
+std::vector &lt;std::list&lt;wchar_t&gt;&gt; testVectorList;
+std::pair &lt;char, wchar_t&gt; testPair;
+
+<span class="comment">/* fill container */</span>
+
+<a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc);
+
+out[<span class="stringliteral">&quot;deque&quot;</span>] (testDeque);
+out[<span class="stringliteral">&quot;list&quot;</span>] (testList);
+out[<span class="stringliteral">&quot;map&quot;</span>] (testMap);
+out[<span class="stringliteral">&quot;multimap&quot;</span>] (testMultiMap);
+out[<span class="stringliteral">&quot;set&quot;</span>] (testSet);
+out[<span class="stringliteral">&quot;multiset&quot;</span>] (testMultiSet);
+out[<span class="stringliteral">&quot;vector&quot;</span>] (testVector);
+out[<span class="stringliteral">&quot;vect_list&quot;</span>](testVectorList);
+out[<span class="stringliteral">&quot;pair&quot;</span> ] (testPair);
+</pre></div><p>The resulting XML: </p>
+<div class="fragment"><pre class="fragment">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;Root&gt;
+ &lt;deque&gt;
+ &lt;Item&gt;1.234&lt;/Item&gt;
+ &lt;Item&gt;5.678&lt;/Item&gt;
+ &lt;/deque&gt;
+ &lt;list&gt;
+ &lt;Item&gt;1&lt;/Item&gt;
+ &lt;Item&gt;2&lt;/Item&gt;
+ &lt;/list&gt;
+ &lt;map&gt;
+ &lt;Item&gt;
+ &lt;one&gt;1.1&lt;/one&gt;
+ &lt;two&gt;a&lt;/two&gt;
+ &lt;/Item&gt;
+ &lt;Item&gt;
+ &lt;one&gt;2.2&lt;/one&gt;
+ &lt;two&gt;b&lt;/two&gt;
+ &lt;/Item&gt;
+ &lt;/map&gt;
+ &lt;multimap&gt;
+ &lt;Item&gt;
+ &lt;one&gt;3&lt;/one&gt;
+ &lt;two&gt;99&lt;/two&gt;
+ &lt;/Item&gt;
+ &lt;Item&gt;
+ &lt;one&gt;3&lt;/one&gt;
+ &lt;two&gt;100&lt;/two&gt;
+ &lt;/Item&gt;
+ &lt;Item&gt;
+ &lt;one&gt;4&lt;/one&gt;
+ &lt;two&gt;101&lt;/two&gt;
+ &lt;/Item&gt;
+ &lt;/multimap&gt;
+ &lt;set&gt;
+ &lt;Item&gt;1&lt;/Item&gt;
+ &lt;Item&gt;2&lt;/Item&gt;
+ &lt;/set&gt;
+ &lt;multiset&gt;
+ &lt;Item&gt;1&lt;/Item&gt;
+ &lt;Item&gt;1&lt;/Item&gt;
+ &lt;Item&gt;2&lt;/Item&gt;
+ &lt;/multiset&gt;
+ &lt;vector&gt;
+ &lt;Item&gt;Ä&lt;/Item&gt;
+ &lt;Item&gt;Ö&lt;/Item&gt;
+ &lt;/vector&gt;
+ &lt;vect_list&gt;
+ &lt;Item&gt;
+ &lt;Item&gt;ä&lt;/Item&gt;
+ &lt;Item&gt;ö&lt;/Item&gt;
+ &lt;Item&gt;ü&lt;/Item&gt;
+ &lt;/Item&gt;
+ &lt;Item&gt;
+ &lt;Item&gt;ä&lt;/Item&gt;
+ &lt;Item&gt;ö&lt;/Item&gt;
+ &lt;Item&gt;ü&lt;/Item&gt;
+ &lt;/Item&gt;
+ &lt;/vect_list&gt;
+ &lt;pair&gt;
+ &lt;one&gt;a&lt;/one&gt;
+ &lt;two&gt;â&lt;/two&gt;
+ &lt;/pair&gt;
+&lt;/Root&gt;
+</pre></div><h2><a class="anchor" id="sec_Support_user_defined"></a>
+Support for user-defined types</h2>
+<p>User types can be integrated into zen::Xml by providing specializations of <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">zen::readText()</a> and <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">zen::writeText()</a> or <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">zen::readStruc()</a> and <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">zen::writeStruc()</a>. The first pair should be used for all non-structured types that can be represented as a simple text string. This specialization is then used to convert the type to XML elements and XML attributes. The second pair should be specialized for structured types that require an XML representation as a hierarchy of elements. This specialization is used when converting the type to XML elements only. <br/>
+<br/>
+ See section <a class="el" href="index.html#sec_Type_Safety">Type Safety</a> for a discussion of type categories. <br/>
+<br/>
+ <b>Example: Specialization for an enum type</b> </p>
+<div class="fragment"><pre class="fragment"><span class="keyword">enum</span> UnitTime
+{
+ UNIT_SECOND,
+ UNIT_MINUTE,
+ UNIT_HOUR
+};
+
+<span class="keyword">namespace </span>zen
+{
+<span class="keyword">template</span> &lt;&gt; <span class="keyword">inline</span>
+<span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(<span class="keyword">const</span> UnitTime&amp; value, std::string&amp; output)
+{
+ <span class="keywordflow">switch</span> (value)
+ {
+ <span class="keywordflow">case</span> UNIT_SECOND: output = <span class="stringliteral">&quot;second&quot;</span>; <span class="keywordflow">break</span>;
+ <span class="keywordflow">case</span> UNIT_MINUTE: output = <span class="stringliteral">&quot;minute&quot;</span>; <span class="keywordflow">break</span>;
+ <span class="keywordflow">case</span> UNIT_HOUR: output = <span class="stringliteral">&quot;hour&quot;</span> ; <span class="keywordflow">break</span>;
+ }
+}
+
+<span class="keyword">template</span> &lt;&gt; <span class="keyword">inline</span>
+<span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(<span class="keyword">const</span> std::string&amp; input, UnitTime&amp; value)
+{
+ std::string tmp = input;
+ zen::trim(tmp);
+ <span class="keywordflow">if</span> (tmp == <span class="stringliteral">&quot;second&quot;</span>)
+ value = UNIT_SECOND;
+ <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tmp == <span class="stringliteral">&quot;minute&quot;</span>)
+ value = UNIT_MINUTE;
+ <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tmp == <span class="stringliteral">&quot;hour&quot;</span>)
+ value = UNIT_HOUR;
+ <span class="keywordflow">else</span>
+ <span class="keywordflow">return</span> <span class="keyword">false</span>;
+ <span class="keywordflow">return</span> <span class="keyword">true</span>;
+}
+}
+</pre></div><p><b>Example: Brute-force specialization for an enum type</b> </p>
+<div class="fragment"><pre class="fragment"><span class="keyword">namespace </span>zen
+{
+<span class="keyword">template</span> &lt;&gt; <span class="keyword">inline</span>
+<span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(<span class="keyword">const</span> EnumType&amp; value, std::string&amp; output)
+{
+ output = zen::numberTo&lt;std::string&gt;(<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(value)); <span class="comment">//treat enum like an integer</span>
+}
+
+<span class="keyword">template</span> &lt;&gt; <span class="keyword">inline</span>
+<span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(<span class="keyword">const</span> std::string&amp; input, EnumType&amp; value)
+{
+ value = <span class="keyword">static_cast&lt;</span>EnumType<span class="keyword">&gt;</span>(zen::stringTo&lt;int&gt;(input)); <span class="comment">//treat enum like an integer</span>
+ <span class="keywordflow">return</span> <span class="keyword">true</span>;
+}
+}
+</pre></div><p><b>Example: Specialization for a structured user type</b> </p>
+<div class="fragment"><pre class="fragment"><span class="keyword">struct </span>Config
+{
+ <span class="keywordtype">int</span> a;
+ std::wstring b;
+};
+
+<span class="keyword">namespace </span>zen
+{
+<span class="keyword">template</span> &lt;&gt; <span class="keyword">inline</span>
+<span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(<span class="keyword">const</span> Config&amp; value, XmlElement&amp; output)
+{
+ XmlOut out(output);
+ out[<span class="stringliteral">&quot;number&quot;</span> ](value.a);
+ out[<span class="stringliteral">&quot;address&quot;</span>](value.b);
+}
+
+<span class="keyword">template</span> &lt;&gt; <span class="keyword">inline</span>
+<span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(<span class="keyword">const</span> XmlElement&amp; input, Config&amp; value)
+{
+ XmlIn in(input);
+ <span class="keywordtype">bool</span> rv1 = in[<span class="stringliteral">&quot;number&quot;</span> ](value.a);
+ <span class="keywordtype">bool</span> rv2 = in[<span class="stringliteral">&quot;address&quot;</span>](value.b);
+ <span class="keywordflow">return</span> rv1 &amp;&amp; rv2;
+}
+}
+
+<span class="keywordtype">int</span> main()
+{
+ Config cfg = { 2, L<span class="stringliteral">&quot;Abc 3&quot;</span> };
+
+ std::vector&lt;Config&gt; cfgList;
+ cfgList.push_back(cfg);
+
+ <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc;
+ <a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc); <span class="comment">//write to Xml via output proxy</span>
+ out[<span class="stringliteral">&quot;config&quot;</span>](cfgList);
+ <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d" title="Save XML document to a file.">save</a>(doc, <span class="stringliteral">&quot;file.xml&quot;</span>); <span class="comment">//throw XmlFileError</span>
+}
+</pre></div><p>The resulting XML: </p>
+<div class="fragment"><pre class="fragment">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;Root&gt;
+ &lt;config&gt;
+ &lt;Item&gt;
+ &lt;number&gt;2&lt;/number&gt;
+ &lt;address&gt;Abc 3&lt;/address&gt;
+ &lt;/Item&gt;
+ &lt;/config&gt;
+&lt;/Root&gt;
+</pre></div><h2><a class="anchor" id="sec_Structured_user_types"></a>
+Structured user types</h2>
+<p>Although it is possible to enable conversion of structured user types by specializing <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">zen::readStruc()</a> and <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">zen::writeStruc()</a> (see <a class="el" href="index.html#sec_Support_user_defined">Support for user-defined types</a>), this approach has one drawback: If a mapping error occurs when converting an XML element to structured user data, for example a child-element is missing, the input proxy class <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> is only able to detect that the whole conversion failed. It cannot say which child-elements in particular failed to convert. <br/>
+<br/>
+ Therefore it may be appropriate to convert structured types by calling subroutines in order to enable fine-granular logging:</p>
+<div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> readConfig(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a>&amp; in, Config&amp; cfg)
+{
+ in[<span class="stringliteral">&quot;number&quot;</span> ](value.a); <span class="comment">//failed conversions will now be logged for each single item by XmlIn</span>
+ in[<span class="stringliteral">&quot;address&quot;</span>](value.b); <span class="comment">//instead of only once for the complete Config type!</span>
+}
+
+
+<span class="keywordtype">void</span> loadConfig(<span class="keyword">const</span> wxString&amp; filename, Config&amp; cfg)
+{
+ <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc; <span class="comment">//empty XML document</span>
+
+ <span class="keywordflow">try</span>
+ {
+ <a class="code" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee" title="Load XML document from a file.">load</a>(filename, doc); <span class="comment">//throw XmlFileError, XmlParsingError</span>
+ }
+ <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml.">zen::XmlError</a>&amp; e) { <span class="comment">/* handle error */</span> }
+
+ <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> in(doc);
+
+ <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> inConfig = in[<span class="stringliteral">&quot;config&quot;</span>]; <span class="comment">//get input proxy for child element &quot;config&quot;</span>
+
+ readConfig(inConfig, cfg); <span class="comment">//map child element to user data by calling subroutine</span>
+
+ <span class="comment">//check for mapping errors: errors occuring in subroutines are considered, too!</span>
+ <span class="keywordflow">if</span> (in.errorsOccured())
+ <span class="comment">/* show mapping errors */</span>
+}
+</pre></div><h2><a class="anchor" id="sec_Type_Safety"></a>
+Type Safety</h2>
+<p>zen::Xml heavily uses methods of compile-time introspection in order to free the user from managing basic type conversions by himself. Thereby it is important to find the right balance between automatic conversions and type safety so that program correctness is not compromised. In the context of XML processing three fundamental type categories can be recognized:</p>
+<ul>
+<li><b>string-like types</b>: <code>std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ...</code></li>
+<li><b>to-string-convertible types</b>: any string-like type, all built-in arithmetic numbers, <code>bool</code></li>
+<li><b>structured types</b>: any to-string-convertible type, STL containers, <code>std::pair</code>, structured user types</li>
+</ul>
+<p>These categories can be seen as a sequence of inclusive sets: </p>
+<div class="fragment"><pre class="fragment">-----------------------------
+| structured | Used as: XML element value
+| ------------------------- | Conversion via: readStruc(), writeStruc() - may be specialized for user-defined types!
+| | to-string-convertible | | Used as: XML element/attribute value
+| | --------------- | | Conversion via: readText(), writeText() - may be specialized for user-defined types!
+| | | string-like | | | Used as: XML element/attribute value or element name
+| | --------------- | | Conversion via: utfCvrtTo&lt;&gt;()
+| ------------------------- |
+-----------------------------
+</pre></div><p>A practical implication of this design is that conversions that do not make sense in a particular context simply lead to compile-time errors: </p>
+<div class="fragment"><pre class="fragment"><a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc);
+out[L<span class="charliteral">&#39;Z&#39;</span>](someValue); <span class="comment">//fine: a wchar_t is acceptable as an element name</span>
+out[1234](someValue); <span class="comment">//compiler error: an integer is NOT &quot;string-like&quot;!</span>
+</pre></div><p> <br/>
+ </p>
+<div class="fragment"><pre class="fragment"><span class="keywordtype">int</span> i = 0;
+std::vector&lt;int&gt; v;
+
+<a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc);
+out[<span class="stringliteral">&quot;elem1&quot;</span>](i); <span class="comment">//fine: both i and v can be converted to an XML element</span>
+out[<span class="stringliteral">&quot;elem2&quot;</span>](v); <span class="comment">//</span>
+
+out[<span class="stringliteral">&quot;elem&quot;</span>].attribute(<span class="stringliteral">&quot;attr1&quot;</span>, i); <span class="comment">//fine: an integer can be converted to an XML attribute</span>
+out[<span class="stringliteral">&quot;elem&quot;</span>].attribute(<span class="stringliteral">&quot;attr2&quot;</span>, v); <span class="comment">//compiler error: a std::vector&lt;int&gt; is NOT &quot;to-string-convertible&quot;!</span>
+</pre></div><dl class="section author"><dt>Author:</dt><dd><b>Zenju</b> <br/>
+<br/>
+ <b>Email:</b> zenju AT gmx DOT de </dd></dl>
+</div></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/io_8h_source.html b/zenxml/doc/io_8h_source.html
new file mode 100644
index 00000000..09ec749d
--- /dev/null
+++ b/zenxml/doc/io_8h_source.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: io.h Source File</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">io.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span>
+<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span>
+<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span>
+<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span>
+<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span>
+<a name="l00006"></a>00006
+<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_IO_HEADER_8917640501480763248343343</span>
+<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_IO_HEADER_8917640501480763248343343</span>
+<a name="l00009"></a>00009 <span class="preprocessor"></span>
+<a name="l00010"></a>00010 <span class="preprocessor">#include &lt;cstdio&gt;</span>
+<a name="l00011"></a>00011 <span class="preprocessor">#include &lt;cerrno&gt;</span>
+<a name="l00012"></a>00012 <span class="preprocessor">#include &lt;zen/scope_guard.h&gt;</span>
+<a name="l00013"></a>00013 <span class="preprocessor">#include &lt;zen/utf.h&gt;</span>
+<a name="l00014"></a>00014 <span class="preprocessor">#include &quot;error.h&quot;</span>
+<a name="l00015"></a>00015
+<a name="l00016"></a>00016 <span class="keyword">namespace </span>zen
+<a name="l00017"></a>00017 {
+<a name="l00023"></a>00023 <span class="preprocessor">#if !defined(ZEN_PLATFORM_WINDOWS) &amp;&amp; !defined(ZEN_PLATFORM_OTHER)</span>
+<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#error Please specify your platform: #define ZEN_PLATFORM_WINDOWS or ZEN_PLATFORM_OTHER</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span>
+<a name="l00028"></a><a class="code" href="structzen_1_1_xml_file_error.html">00028</a> <span class="keyword">struct </span><a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a> : <span class="keyword">public</span> <a class="code" href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml.">XmlError</a>
+<a name="l00029"></a>00029 {
+<a name="l00030"></a>00030 <span class="keyword">typedef</span> <span class="keywordtype">int</span> ErrorCode;
+<a name="l00031"></a>00031
+<a name="l00032"></a>00032 <span class="keyword">explicit</span> <a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a>(ErrorCode ec) : <a class="code" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f" title="Native error code: errno.">lastError</a>(ec) {}
+<a name="l00034"></a><a class="code" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">00034</a> ErrorCode <a class="code" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f" title="Native error code: errno.">lastError</a>;
+<a name="l00035"></a>00035 };
+<a name="l00036"></a>00036
+<a name="l00037"></a>00037
+<a name="l00038"></a>00038 <span class="preprocessor">#ifdef ZEN_PLATFORM_WINDOWS</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="keyword">namespace </span>implemenation <span class="comment">//sad but true</span>
+<a name="l00040"></a>00040 {
+<a name="l00041"></a>00041 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt; <span class="keyword">inline</span>
+<a name="l00042"></a>00042 FILE* fopen(<span class="keyword">const</span> String&amp; filename, <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* mode)
+<a name="l00043"></a>00043 {
+<a name="l00044"></a>00044 <span class="preprocessor">#ifdef _MSC_VER</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span> FILE* handle = <span class="keyword">nullptr</span>;
+<a name="l00046"></a>00046 errno_t rv = ::_wfopen_s(&amp;handle, utfCvrtTo&lt;std::wstring&gt;(filename).c_str(), mode); <span class="comment">//more secure?</span>
+<a name="l00047"></a>00047 (void)rv;
+<a name="l00048"></a>00048 <span class="keywordflow">return</span> handle;
+<a name="l00049"></a>00049 <span class="preprocessor">#else</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span> return ::_wfopen(utfCvrtTo&lt;std::wstring&gt;(filename).c_str(), mode);
+<a name="l00051"></a>00051 <span class="preprocessor">#endif</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span>}
+<a name="l00053"></a>00053 }
+<a name="l00054"></a>00054 <span class="preprocessor">#endif</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span>
+<a name="l00056"></a>00056
+<a name="l00058"></a>00058
+<a name="l00064"></a>00064 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00065"></a><a class="code" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">00065</a> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2" title="Save byte stream to a file.">saveStream</a>(<span class="keyword">const</span> std::string&amp; stream, <span class="keyword">const</span> String&amp; filename) <span class="comment">//throw XmlFileError</span>
+<a name="l00066"></a>00066 {
+<a name="l00067"></a>00067 <span class="preprocessor">#ifdef ZEN_PLATFORM_WINDOWS</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span> FILE* handle = implemenation::fopen(utfCvrtTo&lt;std::wstring&gt;(filename).c_str(), L<span class="stringliteral">&quot;wb&quot;</span>);
+<a name="l00069"></a>00069 <span class="preprocessor">#else</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span> FILE* handle = ::fopen(utfCvrtTo&lt;std::string&gt;(filename).c_str(), <span class="stringliteral">&quot;w&quot;</span>);
+<a name="l00071"></a>00071 <span class="preprocessor">#endif</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span> <span class="keywordflow">if</span> (handle == <span class="keyword">nullptr</span>)
+<a name="l00073"></a>00073 <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a>(errno);
+<a name="l00074"></a>00074 ZEN_ON_SCOPE_EXIT(::fclose(handle));
+<a name="l00075"></a>00075
+<a name="l00076"></a>00076 <span class="keyword">const</span> <span class="keywordtype">size_t</span> bytesWritten = ::fwrite(stream.c_str(), 1, stream.size(), handle);
+<a name="l00077"></a>00077 <span class="keywordflow">if</span> (::ferror(handle) != 0)
+<a name="l00078"></a>00078 <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a>(errno);
+<a name="l00079"></a>00079
+<a name="l00080"></a>00080 (void)bytesWritten;
+<a name="l00081"></a>00081 assert(bytesWritten == stream.size());
+<a name="l00082"></a>00082 }
+<a name="l00083"></a>00083
+<a name="l00084"></a>00084
+<a name="l00086"></a>00086
+<a name="l00092"></a>00092 <span class="keyword">template</span> &lt;<span class="keyword">class</span> String&gt;
+<a name="l00093"></a><a class="code" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">00093</a> std::string <a class="code" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607" title="Load byte stream from a file.">loadStream</a>(<span class="keyword">const</span> String&amp; filename) <span class="comment">//throw XmlFileError</span>
+<a name="l00094"></a>00094 {
+<a name="l00095"></a>00095 <span class="preprocessor">#ifdef ZEN_PLATFORM_WINDOWS</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span> FILE* handle = implemenation::fopen(utfCvrtTo&lt;std::wstring&gt;(filename).c_str(), L<span class="stringliteral">&quot;rb&quot;</span>);
+<a name="l00097"></a>00097 <span class="preprocessor">#else</span>
+<a name="l00098"></a>00098 <span class="preprocessor"></span> FILE* handle = ::fopen(utfCvrtTo&lt;std::string&gt;(filename).c_str(), <span class="stringliteral">&quot;r&quot;</span>);
+<a name="l00099"></a>00099 <span class="preprocessor">#endif</span>
+<a name="l00100"></a>00100 <span class="preprocessor"></span> <span class="keywordflow">if</span> (handle == <span class="keyword">nullptr</span>)
+<a name="l00101"></a>00101 <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a>(errno);
+<a name="l00102"></a>00102 ZEN_ON_SCOPE_EXIT(::fclose(handle));
+<a name="l00103"></a>00103
+<a name="l00104"></a>00104 std::string stream;
+<a name="l00105"></a>00105 <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockSize = 64 * 1024;
+<a name="l00106"></a>00106 <span class="keywordflow">do</span>
+<a name="l00107"></a>00107 {
+<a name="l00108"></a>00108 stream.resize(stream.size() + blockSize); <span class="comment">//let&#39;s pray std::string implements exponential growth!</span>
+<a name="l00109"></a>00109
+<a name="l00110"></a>00110 <span class="keyword">const</span> <span class="keywordtype">size_t</span> bytesRead = ::fread(&amp;*(stream.begin() + stream.size() - blockSize), 1, blockSize, handle);
+<a name="l00111"></a>00111 <span class="keywordflow">if</span> (::ferror(handle))
+<a name="l00112"></a>00112 <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a>(errno);
+<a name="l00113"></a>00113 <span class="keywordflow">if</span> (bytesRead &gt; blockSize)
+<a name="l00114"></a>00114 <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a>(0);
+<a name="l00115"></a>00115 <span class="keywordflow">if</span> (bytesRead &lt; blockSize)
+<a name="l00116"></a>00116 stream.resize(stream.size() - (blockSize - bytesRead)); <span class="comment">//caveat: unsigned arithmetics</span>
+<a name="l00117"></a>00117 }
+<a name="l00118"></a>00118 <span class="keywordflow">while</span> (!::feof(handle));
+<a name="l00119"></a>00119
+<a name="l00120"></a>00120 <span class="keywordflow">return</span> stream;
+<a name="l00121"></a>00121 }
+<a name="l00122"></a>00122 }
+<a name="l00123"></a>00123
+<a name="l00124"></a>00124 <span class="preprocessor">#endif //ZEN_XML_IO_HEADER_8917640501480763248343343</span>
+</pre></div></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/jquery.js b/zenxml/doc/jquery.js
new file mode 100644
index 00000000..90b3a2bc
--- /dev/null
+++ b/zenxml/doc/jquery.js
@@ -0,0 +1,64 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){
+var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ * Copyright 2009, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0)
+{I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function()
+{G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
+
+/*
+ * jQuery hashchange event - v1.3 - 7/21/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);
+/*
+ * jQuery UI 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ */
+jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ * ui.core.js
+ */
+(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0))
+{s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;
+/**
+ * jQuery.ScrollTo - Easy element scrolling using jQuery.
+ * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com
+ * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php).
+ * Date: 2/8/2008
+ * @author Ariel Flesler
+ * @version 1.3.2
+ */
+;(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
+
diff --git a/zenxml/doc/namespacemembers.html b/zenxml/doc/namespacemembers.html
new file mode 100644
index 00000000..fe4340e5
--- /dev/null
+++ b/zenxml/doc/namespacemembers.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Namespace Members</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="namespaces.html"><span>Namespace&#160;List</span></a></li>
+ <li class="current"><a href="namespacemembers.html"><span>Namespace&#160;Members</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="namespacemembers.html"><span>All</span></a></li>
+ <li><a href="namespacemembers_func.html"><span>Functions</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all documented namespace members with links to the namespaces they belong to:</div><ul>
+<li>load()
+: <a class="el" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee">zen</a>
+</li>
+<li>loadStream()
+: <a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">zen</a>
+</li>
+<li>parse()
+: <a class="el" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7">zen</a>
+</li>
+<li>readStruc()
+: <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen</a>
+</li>
+<li>readText()
+: <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">zen</a>
+</li>
+<li>save()
+: <a class="el" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">zen</a>
+</li>
+<li>saveStream()
+: <a class="el" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">zen</a>
+</li>
+<li>serialize()
+: <a class="el" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">zen</a>
+</li>
+<li>writeStruc()
+: <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen</a>
+</li>
+<li>writeText()
+: <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">zen</a>
+</li>
+</ul>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/namespacemembers_func.html b/zenxml/doc/namespacemembers_func.html
new file mode 100644
index 00000000..dd473af8
--- /dev/null
+++ b/zenxml/doc/namespacemembers_func.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Namespace Members</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="namespaces.html"><span>Namespace&#160;List</span></a></li>
+ <li class="current"><a href="namespacemembers.html"><span>Namespace&#160;Members</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="namespacemembers.html"><span>All</span></a></li>
+ <li class="current"><a href="namespacemembers_func.html"><span>Functions</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>load()
+: <a class="el" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee">zen</a>
+</li>
+<li>loadStream()
+: <a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">zen</a>
+</li>
+<li>parse()
+: <a class="el" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7">zen</a>
+</li>
+<li>readStruc()
+: <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen</a>
+</li>
+<li>readText()
+: <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">zen</a>
+</li>
+<li>save()
+: <a class="el" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">zen</a>
+</li>
+<li>saveStream()
+: <a class="el" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">zen</a>
+</li>
+<li>serialize()
+: <a class="el" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">zen</a>
+</li>
+<li>writeStruc()
+: <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen</a>
+</li>
+<li>writeText()
+: <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">zen</a>
+</li>
+</ul>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/namespaces.html b/zenxml/doc/namespaces.html
new file mode 100644
index 00000000..6a17ec0a
--- /dev/null
+++ b/zenxml/doc/namespaces.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Namespace List</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="namespaces.html"><span>Namespace&#160;List</span></a></li>
+ <li><a href="namespacemembers.html"><span>Namespace&#160;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Namespace List</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all documented namespaces with brief descriptions:</div><table>
+ <tr><td class="indexkey"><a class="el" href="namespacezen.html">zen</a></td><td class="indexvalue">The zen::Xml namespace </td></tr>
+</table>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/namespacezen.html b/zenxml/doc/namespacezen.html
new file mode 100644
index 00000000..c05f255c
--- /dev/null
+++ b/zenxml/doc/namespacezen.html
@@ -0,0 +1,613 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: zen Namespace Reference</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="namespaces.html"><span>Namespace&#160;List</span></a></li>
+ <li><a href="namespacemembers.html"><span>Namespace&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zen Namespace Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>The zen::Xml namespace.
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Proxy class to conveniently convert user data into XML structure. <a href="classzen_1_1_xml_out.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Proxy class to conveniently convert XML structure to user data. <a href="classzen_1_1_xml_in.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An XML element. <a href="classzen_1_1_xml_element.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The complete XML document. <a href="classzen_1_1_xml_doc.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_error.html">XmlError</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Exception base class for zen::Xml. <a href="structzen_1_1_xml_error.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_file_error.html">XmlFileError</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Exception thrown due to failed file I/O. <a href="structzen_1_1_xml_file_error.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Exception thrown due to an XML parsing error. <a href="structzen_1_1_xml_parsing_error.html#details">More...</a><br/></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a900c1fb290f0eedc24354c487145dbee"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a900c1fb290f0eedc24354c487145dbee"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee">load</a> (const String &amp;filename, <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &amp;doc)</td></tr>
+<tr class="memdesc:a900c1fb290f0eedc24354c487145dbee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Load XML document from a file. <a href="#a900c1fb290f0eedc24354c487145dbee"></a><br/></td></tr>
+<tr class="memitem:adeeb6b2318097382ae47aa939fc15d4d"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:adeeb6b2318097382ae47aa939fc15d4d"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a> (const <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &amp;doc, const String &amp;filename, const std::string &amp;lineBreak=&quot;\r\n&quot;, const std::string &amp;indent=&quot; &quot;)</td></tr>
+<tr class="memdesc:adeeb6b2318097382ae47aa939fc15d4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Save XML document to a file. <a href="#adeeb6b2318097382ae47aa939fc15d4d"></a><br/></td></tr>
+<tr class="memitem:a2bdcecfe7435ef11cedbce47d4e72ee1"><td class="memTemplParams" colspan="2">template&lt;class T &gt; </td></tr>
+<tr class="memitem:a2bdcecfe7435ef11cedbce47d4e72ee1"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a> (const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &amp;input, T &amp;value)</td></tr>
+<tr class="memdesc:a2bdcecfe7435ef11cedbce47d4e72ee1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert XML element to structured user data. <a href="#a2bdcecfe7435ef11cedbce47d4e72ee1"></a><br/></td></tr>
+<tr class="memitem:a29ddb823fe0a195f19a64448881b8bf6"><td class="memTemplParams" colspan="2">template&lt;class T &gt; </td></tr>
+<tr class="memitem:a29ddb823fe0a195f19a64448881b8bf6"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a> (const T &amp;value, <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &amp;output)</td></tr>
+<tr class="memdesc:a29ddb823fe0a195f19a64448881b8bf6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert structured user data into an XML element. <a href="#a29ddb823fe0a195f19a64448881b8bf6"></a><br/></td></tr>
+<tr class="memitem:acaf85ab94b61882f957afcd355386bff"><td class="memTemplParams" colspan="2">template&lt;class T &gt; </td></tr>
+<tr class="memitem:acaf85ab94b61882f957afcd355386bff"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a> (const std::string &amp;input, T &amp;value)</td></tr>
+<tr class="memdesc:acaf85ab94b61882f957afcd355386bff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert text to user data - used by XML elements and attributes. <a href="#acaf85ab94b61882f957afcd355386bff"></a><br/></td></tr>
+<tr class="memitem:a2ce2998296871fc2f4718ceceb22a23f"><td class="memTemplParams" colspan="2">template&lt;class T &gt; </td></tr>
+<tr class="memitem:a2ce2998296871fc2f4718ceceb22a23f"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a> (const T &amp;value, std::string &amp;output)</td></tr>
+<tr class="memdesc:a2ce2998296871fc2f4718ceceb22a23f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert user data into text - used by XML elements and attributes. <a href="#a2ce2998296871fc2f4718ceceb22a23f"></a><br/></td></tr>
+<tr class="memitem:a4ba7bbaa14a787b07fc13da9145aabe2"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a4ba7bbaa14a787b07fc13da9145aabe2"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">saveStream</a> (const std::string &amp;stream, const String &amp;filename)</td></tr>
+<tr class="memdesc:a4ba7bbaa14a787b07fc13da9145aabe2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Save byte stream to a file. <a href="#a4ba7bbaa14a787b07fc13da9145aabe2"></a><br/></td></tr>
+<tr class="memitem:a04fe23c3bd9b7d03309620b5ea763607"><td class="memTemplParams" colspan="2">template&lt;class String &gt; </td></tr>
+<tr class="memitem:a04fe23c3bd9b7d03309620b5ea763607"><td class="memTemplItemLeft" align="right" valign="top">std::string&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">loadStream</a> (const String &amp;filename)</td></tr>
+<tr class="memdesc:a04fe23c3bd9b7d03309620b5ea763607"><td class="mdescLeft">&#160;</td><td class="mdescRight">Load byte stream from a file. <a href="#a04fe23c3bd9b7d03309620b5ea763607"></a><br/></td></tr>
+<tr class="memitem:afaa4920e275078e6c8009fbdf58b57ee"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a> (const <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &amp;doc, const std::string &amp;lineBreak=&quot;\r\n&quot;, const std::string &amp;indent=&quot; &quot;)</td></tr>
+<tr class="memdesc:afaa4920e275078e6c8009fbdf58b57ee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Save XML document as a byte stream. <a href="#afaa4920e275078e6c8009fbdf58b57ee"></a><br/></td></tr>
+<tr class="memitem:a6cf1ec0b57fc1ae9aa95761800e67ec7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7">parse</a> (const std::string &amp;stream, <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &amp;doc)</td></tr>
+<tr class="memdesc:a6cf1ec0b57fc1ae9aa95761800e67ec7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Load XML document from a byte stream. <a href="#a6cf1ec0b57fc1ae9aa95761800e67ec7"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>The zen::Xml namespace. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a900c1fb290f0eedc24354c487145dbee"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee">zen::load</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>filename</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XmlDoc &amp;&#160;</td>
+ <td class="paramname"><em>doc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Load XML document from a file. </p>
+<p>Convenience function that does nothing more than calling <a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607" title="Load byte stream from a file.">loadStream()</a> and <a class="el" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7" title="Load XML document from a byte stream.">parse()</a>.</p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">filename</td><td>Input file name </td></tr>
+ <tr><td class="paramname">doc</td><td>The XML document to load </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="exception"><dt><b>Exceptions:</b></dt><dd>
+ <table class="exception">
+ <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a></td><td></td></tr>
+ <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error.">XmlParsingError</a></td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a04fe23c3bd9b7d03309620b5ea763607"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string <a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">zen::loadStream</a> </td>
+ <td>(</td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>filename</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Load byte stream from a file. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">filename</td><td>Input file name </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>Output byte stream </dd></dl>
+<dl class="exception"><dt><b>Exceptions:</b></dt><dd>
+ <table class="exception">
+ <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a></td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a6cf1ec0b57fc1ae9aa95761800e67ec7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7">zen::parse</a> </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>stream</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XmlDoc &amp;&#160;</td>
+ <td class="paramname"><em>doc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Load XML document from a byte stream. </p>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">stream</td><td>Input byte stream </td></tr>
+ <tr><td class="paramname">doc</td><td>Output XML document </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="exception"><dt><b>Exceptions:</b></dt><dd>
+ <table class="exception">
+ <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error.">XmlParsingError</a></td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a2bdcecfe7435ef11cedbce47d4e72ee1"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">bool <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen::readStruc</a> </td>
+ <td>(</td>
+ <td class="paramtype">const XmlElement &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T &amp;&#160;</td>
+ <td class="paramname"><em>value</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Convert XML element to structured user data. </p>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">input</td><td>The input XML element. </td></tr>
+ <tr><td class="paramname">value</td><td>Conversion target value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>"true" if value was read successfully. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="acaf85ab94b61882f957afcd355386bff"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">bool <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">zen::readText</a> </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T &amp;&#160;</td>
+ <td class="paramname"><em>value</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Convert text to user data - used by XML elements and attributes. </p>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">input</td><td>Input text. </td></tr>
+ <tr><td class="paramname">value</td><td>Conversion target value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>"true" if value was read successfully. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="adeeb6b2318097382ae47aa939fc15d4d"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">zen::save</a> </td>
+ <td>(</td>
+ <td class="paramtype">const XmlDoc &amp;&#160;</td>
+ <td class="paramname"><em>doc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>filename</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>lineBreak</em> = <code>&quot;\r\n&quot;</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>indent</em> = <code>&quot;&#160;&#160;&#160;&#160;&quot;</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Save XML document to a file. </p>
+<p>Convenience function that does nothing more than calling <a class="el" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize()</a> and <a class="el" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2" title="Save byte stream to a file.">saveStream()</a>.</p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">doc</td><td>The XML document to save </td></tr>
+ <tr><td class="paramname">filename</td><td>Output file name </td></tr>
+ <tr><td class="paramname">lineBreak</td><td>Line break, default: carriage return + new line </td></tr>
+ <tr><td class="paramname">indent</td><td>Indentation, default: four space characters </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="exception"><dt><b>Exceptions:</b></dt><dd>
+ <table class="exception">
+ <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a></td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a4ba7bbaa14a787b07fc13da9145aabe2"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class String &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">zen::saveStream</a> </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>stream</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const String &amp;&#160;</td>
+ <td class="paramname"><em>filename</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Save byte stream to a file. </p>
+<dl class=""><dt><b>Template Parameters:</b></dt><dd>
+ <table class="">
+ <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">stream</td><td>Input byte stream </td></tr>
+ <tr><td class="paramname">filename</td><td>Output file name </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="exception"><dt><b>Exceptions:</b></dt><dd>
+ <table class="exception">
+ <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a></td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="afaa4920e275078e6c8009fbdf58b57ee"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string <a class="el" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">zen::serialize</a> </td>
+ <td>(</td>
+ <td class="paramtype">const XmlDoc &amp;&#160;</td>
+ <td class="paramname"><em>doc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>lineBreak</em> = <code>&quot;\r\n&quot;</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>indent</em> = <code>&quot;&#160;&#160;&#160;&#160;&quot;</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Save XML document as a byte stream. </p>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">doc</td><td>Input XML document </td></tr>
+ <tr><td class="paramname">lineBreak</td><td>Line break, default: carriage return + new line </td></tr>
+ <tr><td class="paramname">indent</td><td>Indentation, default: four space characters </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>Output byte stream </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a29ddb823fe0a195f19a64448881b8bf6"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen::writeStruc</a> </td>
+ <td>(</td>
+ <td class="paramtype">const T &amp;&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XmlElement &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Convert structured user data into an XML element. </p>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">value</td><td>The value to be converted. </td></tr>
+ <tr><td class="paramname">output</td><td>The output XML element. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a2ce2998296871fc2f4718ceceb22a23f"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">zen::writeText</a> </td>
+ <td>(</td>
+ <td class="paramtype">const T &amp;&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::string &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Convert user data into text - used by XML elements and attributes. </p>
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">value</td><td>The value to be converted. </td></tr>
+ <tr><td class="paramname">output</td><td>Output text. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/nav_f.png b/zenxml/doc/nav_f.png
new file mode 100644
index 00000000..1b07a162
--- /dev/null
+++ b/zenxml/doc/nav_f.png
Binary files differ
diff --git a/zenxml/doc/nav_h.png b/zenxml/doc/nav_h.png
new file mode 100644
index 00000000..01f5fa6a
--- /dev/null
+++ b/zenxml/doc/nav_h.png
Binary files differ
diff --git a/zenxml/doc/open.png b/zenxml/doc/open.png
new file mode 100644
index 00000000..7b35d2c2
--- /dev/null
+++ b/zenxml/doc/open.png
Binary files differ
diff --git a/zenxml/doc/parser_8h_source.html b/zenxml/doc/parser_8h_source.html
new file mode 100644
index 00000000..97bdc7e3
--- /dev/null
+++ b/zenxml/doc/parser_8h_source.html
@@ -0,0 +1,687 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: parser.h Source File</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">parser.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span>
+<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span>
+<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span>
+<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span>
+<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span>
+<a name="l00006"></a>00006
+<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_PARSER_HEADER_81248670213764583021432</span>
+<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_PARSER_HEADER_81248670213764583021432</span>
+<a name="l00009"></a>00009 <span class="preprocessor"></span>
+<a name="l00010"></a>00010 <span class="preprocessor">#include &lt;cstdio&gt;</span>
+<a name="l00011"></a>00011 <span class="preprocessor">#include &lt;cstddef&gt;</span> <span class="comment">//ptrdiff_t; req. on Linux</span>
+<a name="l00012"></a>00012 <span class="preprocessor">#include &lt;zen/string_traits.h&gt;</span>
+<a name="l00013"></a>00013 <span class="preprocessor">#include &quot;dom.h&quot;</span>
+<a name="l00014"></a>00014 <span class="preprocessor">#include &quot;error.h&quot;</span>
+<a name="l00015"></a>00015
+<a name="l00016"></a>00016 <span class="keyword">namespace </span>zen
+<a name="l00017"></a>00017 {
+<a name="l00023"></a>00023
+<a name="l00024"></a>00024
+<a name="l00030"></a>00030 std::string <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(<span class="keyword">const</span> XmlDoc&amp; doc,
+<a name="l00031"></a>00031 <span class="keyword">const</span> std::string&amp; lineBreak = <span class="stringliteral">&quot;\r\n&quot;</span>,
+<a name="l00032"></a>00032 <span class="keyword">const</span> std::string&amp; indent = <span class="stringliteral">&quot; &quot;</span>); <span class="comment">//throw ()</span>
+<a name="l00033"></a>00033
+<a name="l00035"></a><a class="code" href="structzen_1_1_xml_parsing_error.html">00035</a> <span class="keyword">struct </span><a class="code" href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error.">XmlParsingError</a> : <span class="keyword">public</span> <a class="code" href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml.">XmlError</a>
+<a name="l00036"></a>00036 {
+<a name="l00037"></a>00037 <a class="code" href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error.">XmlParsingError</a>(<span class="keywordtype">size_t</span> rowNo, <span class="keywordtype">size_t</span> colNo) : <a class="code" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e" title="Input file row where the parsing error occured (zero-based)">row</a>(rowNo), <a class="code" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd" title="Input file column where the parsing error occured (zero-based)">col</a>(colNo) {}
+<a name="l00039"></a><a class="code" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">00039</a> <span class="keywordtype">size_t</span> <a class="code" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e" title="Input file row where the parsing error occured (zero-based)">row</a>; <span class="comment">//beginning with 0</span>
+<a name="l00041"></a><a class="code" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">00041</a> <span class="comment"></span> <span class="keywordtype">size_t</span> <a class="code" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd" title="Input file column where the parsing error occured (zero-based)">col</a>; <span class="comment">//</span>
+<a name="l00042"></a>00042 };
+<a name="l00043"></a>00043
+<a name="l00044"></a>00044
+<a name="l00046"></a>00046
+<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7" title="Load XML document from a byte stream.">parse</a>(<span class="keyword">const</span> std::string&amp; stream, <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>&amp; doc); <span class="comment">//throw XmlParsingError</span>
+<a name="l00052"></a>00052
+<a name="l00053"></a>00053
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057
+<a name="l00058"></a>00058
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063
+<a name="l00064"></a>00064
+<a name="l00065"></a>00065
+<a name="l00066"></a>00066
+<a name="l00067"></a>00067
+<a name="l00068"></a>00068
+<a name="l00069"></a>00069
+<a name="l00070"></a>00070
+<a name="l00071"></a>00071
+<a name="l00072"></a>00072 <span class="comment">//---------------------------- implementation ----------------------------</span>
+<a name="l00073"></a>00073 <span class="comment">//see: http://www.w3.org/TR/xml/</span>
+<a name="l00074"></a>00074
+<a name="l00075"></a>00075 <span class="keyword">namespace </span>implementation
+<a name="l00076"></a>00076 {
+<a name="l00077"></a>00077 <span class="keyword">inline</span>
+<a name="l00078"></a>00078 std::pair&lt;char, char&gt; hexify(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c)
+<a name="l00079"></a>00079 {
+<a name="l00080"></a>00080 <span class="keyword">auto</span> hexifyDigit = [](<span class="keywordtype">int</span> num) -&gt; <span class="keywordtype">char</span> <span class="comment">//input [0, 15], output 0-9, A-F</span>
+<a name="l00081"></a>00081 {
+<a name="l00082"></a>00082 assert(0 &lt;= num&amp;&amp; num &lt;= 15); <span class="comment">//guaranteed by design below!</span>
+<a name="l00083"></a>00083 <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span><span class="keyword">&gt;</span>(num &lt;= 9 ? <span class="comment">//no signed/unsigned char problem here!</span>
+<a name="l00084"></a>00084 <span class="charliteral">&#39;0&#39;</span> + num :
+<a name="l00085"></a>00085 <span class="charliteral">&#39;A&#39;</span> + (num - 10));
+<a name="l00086"></a>00086 };
+<a name="l00087"></a>00087 <span class="keywordflow">return</span> std::make_pair(hexifyDigit(c / 16), hexifyDigit(c % 16));
+<a name="l00088"></a>00088 }
+<a name="l00089"></a>00089
+<a name="l00090"></a>00090
+<a name="l00091"></a>00091 <span class="keyword">inline</span>
+<a name="l00092"></a>00092 <span class="keywordtype">char</span> unhexify(<span class="keywordtype">char</span> high, <span class="keywordtype">char</span> low)
+<a name="l00093"></a>00093 {
+<a name="l00094"></a>00094 <span class="keyword">auto</span> unhexifyDigit = [](<span class="keywordtype">char</span> hex) -&gt; <span class="keywordtype">int</span> <span class="comment">//input 0-9, a-f, A-F; output range: [0, 15]</span>
+<a name="l00095"></a>00095 {
+<a name="l00096"></a>00096 <span class="keywordflow">if</span> (<span class="charliteral">&#39;0&#39;</span> &lt;= hex &amp;&amp; hex &lt;= <span class="charliteral">&#39;9&#39;</span>) <span class="comment">//no signed/unsigned char problem here!</span>
+<a name="l00097"></a>00097 <span class="keywordflow">return</span> hex - <span class="charliteral">&#39;0&#39;</span>;
+<a name="l00098"></a>00098 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="charliteral">&#39;A&#39;</span> &lt;= hex &amp;&amp; hex &lt;= <span class="charliteral">&#39;F&#39;</span>)
+<a name="l00099"></a>00099 <span class="keywordflow">return</span> (hex - <span class="charliteral">&#39;A&#39;</span>) + 10;
+<a name="l00100"></a>00100 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="charliteral">&#39;a&#39;</span> &lt;= hex &amp;&amp; hex &lt;= <span class="charliteral">&#39;f&#39;</span>)
+<a name="l00101"></a>00101 <span class="keywordflow">return</span> (hex - <span class="charliteral">&#39;a&#39;</span>) + 10;
+<a name="l00102"></a>00102 assert(<span class="keyword">false</span>);
+<a name="l00103"></a>00103 <span class="keywordflow">return</span> 0;
+<a name="l00104"></a>00104 };
+<a name="l00105"></a>00105 <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">&gt;</span>(16 * unhexifyDigit(high) + unhexifyDigit(low)); <span class="comment">//[!] convert to unsigned char first, then to char (which may be signed)</span>
+<a name="l00106"></a>00106 };
+<a name="l00107"></a>00107
+<a name="l00108"></a>00108
+<a name="l00109"></a>00109 <span class="keyword">template</span> &lt;<span class="keyword">class</span> Predicate&gt; <span class="keyword">inline</span>
+<a name="l00110"></a>00110 std::string normalize(<span class="keyword">const</span> std::string&amp; str, Predicate pred) <span class="comment">//pred: unary function taking a char, return true if value shall be encoded as hex</span>
+<a name="l00111"></a>00111 {
+<a name="l00112"></a>00112 std::string output;
+<a name="l00113"></a>00113 std::for_each(str.begin(), str.end(),
+<a name="l00114"></a>00114 [&amp;](<span class="keywordtype">char</span> c)
+<a name="l00115"></a>00115 {
+<a name="l00116"></a>00116 <span class="keywordflow">if</span> (c == <span class="charliteral">&#39;&amp;&#39;</span>) <span class="comment">//</span>
+<a name="l00117"></a>00117 output += <span class="stringliteral">&quot;&amp;amp;&quot;</span>;
+<a name="l00118"></a>00118 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">&#39;&lt;&#39;</span>) <span class="comment">//normalization mandatory: http://www.w3.org/TR/xml/#syntax</span>
+<a name="l00119"></a>00119 output += <span class="stringliteral">&quot;&amp;lt;&quot;</span>;
+<a name="l00120"></a>00120 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">&#39;&gt;&#39;</span>) <span class="comment">//</span>
+<a name="l00121"></a>00121 output += <span class="stringliteral">&quot;&amp;gt;&quot;</span>;
+<a name="l00122"></a>00122 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pred(c))
+<a name="l00123"></a>00123 {
+<a name="l00124"></a>00124 <span class="keywordflow">if</span> (c == <span class="charliteral">&#39;\&#39;&#39;</span>)
+<a name="l00125"></a>00125 output += <span class="stringliteral">&quot;&amp;apos;&quot;</span>;
+<a name="l00126"></a>00126 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">&#39;\&quot;&#39;</span>)
+<a name="l00127"></a>00127 output += <span class="stringliteral">&quot;&amp;quot;&quot;</span>;
+<a name="l00128"></a>00128 <span class="keywordflow">else</span>
+<a name="l00129"></a>00129 {
+<a name="l00130"></a>00130 output += <span class="stringliteral">&quot;&amp;#x&quot;</span>;
+<a name="l00131"></a>00131 <span class="keyword">const</span> <span class="keyword">auto</span> hexDigits = hexify(c); <span class="comment">//hexify beats &quot;printNumber&lt;std::string&gt;(&quot;&amp;#x%02X;&quot;, c)&quot; by a nice factor of 3!</span>
+<a name="l00132"></a>00132 output += hexDigits.first;
+<a name="l00133"></a>00133 output += hexDigits.second;
+<a name="l00134"></a>00134 output += <span class="charliteral">&#39;;&#39;</span>;
+<a name="l00135"></a>00135 }
+<a name="l00136"></a>00136 }
+<a name="l00137"></a>00137 <span class="keywordflow">else</span>
+<a name="l00138"></a>00138 output += c;
+<a name="l00139"></a>00139 });
+<a name="l00140"></a>00140 <span class="keywordflow">return</span> output;
+<a name="l00141"></a>00141 }
+<a name="l00142"></a>00142
+<a name="l00143"></a>00143 <span class="keyword">inline</span>
+<a name="l00144"></a>00144 std::string normalizeName(<span class="keyword">const</span> std::string&amp; str)
+<a name="l00145"></a>00145 {
+<a name="l00146"></a>00146 <span class="keywordflow">return</span> normalize(str, [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> isWhiteSpace(c) || c == <span class="charliteral">&#39;=&#39;</span> || c == <span class="charliteral">&#39;/&#39;</span> || c == <span class="charliteral">&#39;\&#39;&#39;</span> || c == <span class="charliteral">&#39;\&quot;&#39;</span>; });
+<a name="l00147"></a>00147 }
+<a name="l00148"></a>00148
+<a name="l00149"></a>00149 <span class="keyword">inline</span>
+<a name="l00150"></a>00150 std::string normalizeElementValue(<span class="keyword">const</span> std::string&amp; str)
+<a name="l00151"></a>00151 {
+<a name="l00152"></a>00152 <span class="keywordflow">return</span> normalize(str, [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">&gt;</span>(c) &lt; 32; });
+<a name="l00153"></a>00153 }
+<a name="l00154"></a>00154
+<a name="l00155"></a>00155 <span class="keyword">inline</span>
+<a name="l00156"></a>00156 std::string normalizeAttribValue(<span class="keyword">const</span> std::string&amp; str)
+<a name="l00157"></a>00157 {
+<a name="l00158"></a>00158 <span class="keywordflow">return</span> normalize(str, [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">&gt;</span>(c) &lt; 32 || c == <span class="charliteral">&#39;\&#39;&#39;</span> || c == <span class="charliteral">&#39;\&quot;&#39;</span>; });
+<a name="l00159"></a>00159 }
+<a name="l00160"></a>00160
+<a name="l00161"></a>00161
+<a name="l00162"></a>00162 <span class="keyword">template</span> &lt;<span class="keyword">class</span> CharIterator, <span class="keywordtype">size_t</span> N&gt; <span class="keyword">inline</span>
+<a name="l00163"></a>00163 <span class="keywordtype">bool</span> checkEntity(CharIterator&amp; first, CharIterator last, <span class="keyword">const</span> <span class="keywordtype">char</span> (&amp;placeholder)[N])
+<a name="l00164"></a>00164 {
+<a name="l00165"></a>00165 assert(placeholder[N - 1] == 0);
+<a name="l00166"></a>00166 <span class="keyword">const</span> ptrdiff_t strLen = N - 1; <span class="comment">//don&#39;t count null-terminator</span>
+<a name="l00167"></a>00167 <span class="keywordflow">if</span> (last - first &gt;= strLen &amp;&amp; std::equal(first, first + strLen, placeholder))
+<a name="l00168"></a>00168 {
+<a name="l00169"></a>00169 first += strLen - 1;
+<a name="l00170"></a>00170 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00171"></a>00171 }
+<a name="l00172"></a>00172 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00173"></a>00173 }
+<a name="l00174"></a>00174
+<a name="l00175"></a>00175
+<a name="l00176"></a>00176 <span class="keyword">namespace</span>
+<a name="l00177"></a>00177 {
+<a name="l00178"></a>00178 std::string denormalize(<span class="keyword">const</span> std::string&amp; str)
+<a name="l00179"></a>00179 {
+<a name="l00180"></a>00180 std::string output;
+<a name="l00181"></a>00181 <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = str.begin(); it != str.end(); ++it)
+<a name="l00182"></a>00182 {
+<a name="l00183"></a>00183 <span class="keyword">const</span> <span class="keywordtype">char</span> c = *it;
+<a name="l00184"></a>00184
+<a name="l00185"></a>00185 <span class="keywordflow">if</span> (c == <span class="charliteral">&#39;&amp;&#39;</span>)
+<a name="l00186"></a>00186 {
+<a name="l00187"></a>00187 <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">&quot;&amp;amp;&quot;</span>))
+<a name="l00188"></a>00188 output += <span class="charliteral">&#39;&amp;&#39;</span>;
+<a name="l00189"></a>00189 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">&quot;&amp;lt;&quot;</span>))
+<a name="l00190"></a>00190 output += <span class="charliteral">&#39;&lt;&#39;</span>;
+<a name="l00191"></a>00191 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">&quot;&amp;gt;&quot;</span>))
+<a name="l00192"></a>00192 output += <span class="charliteral">&#39;&gt;&#39;</span>;
+<a name="l00193"></a>00193 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">&quot;&amp;apos;&quot;</span>))
+<a name="l00194"></a>00194 output += <span class="charliteral">&#39;\&#39;&#39;</span>;
+<a name="l00195"></a>00195 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">&quot;&amp;quot;&quot;</span>))
+<a name="l00196"></a>00196 output += <span class="charliteral">&#39;\&quot;&#39;</span>;
+<a name="l00197"></a>00197 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (str.end() - it &gt;= 6 &amp;&amp;
+<a name="l00198"></a>00198 it[1] == <span class="charliteral">&#39;#&#39;</span> &amp;&amp;
+<a name="l00199"></a>00199 it[2] == <span class="charliteral">&#39;x&#39;</span> &amp;&amp;
+<a name="l00200"></a>00200 it[5] == <span class="charliteral">&#39;;&#39;</span>)
+<a name="l00201"></a>00201 {
+<a name="l00202"></a>00202 output += unhexify(it[3], it[4]); <span class="comment">//unhexify beats &quot;::sscanf(&amp;it[3], &quot;%02X&quot;, &amp;tmp)&quot; by a factor of 3000 for ~250000 calls!!!</span>
+<a name="l00203"></a>00203 it += 5;
+<a name="l00204"></a>00204 }
+<a name="l00205"></a>00205 <span class="keywordflow">else</span>
+<a name="l00206"></a>00206 output += c; <span class="comment">//unexpected char!</span>
+<a name="l00207"></a>00207 }
+<a name="l00208"></a>00208 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">&#39;\r&#39;</span>) <span class="comment">//map all end-of-line characters to \n http://www.w3.org/TR/xml/#sec-line-ends</span>
+<a name="l00209"></a>00209 {
+<a name="l00210"></a>00210 <span class="keyword">auto</span> itNext = it + 1;
+<a name="l00211"></a>00211 <span class="keywordflow">if</span> (itNext != str.end() &amp;&amp; *itNext == <span class="charliteral">&#39;\n&#39;</span>)
+<a name="l00212"></a>00212 ++it;
+<a name="l00213"></a>00213 output += <span class="charliteral">&#39;\n&#39;</span>;
+<a name="l00214"></a>00214 }
+<a name="l00215"></a>00215 <span class="keywordflow">else</span>
+<a name="l00216"></a>00216 output += c;
+<a name="l00217"></a>00217 };
+<a name="l00218"></a>00218 <span class="keywordflow">return</span> output;
+<a name="l00219"></a>00219 }
+<a name="l00220"></a>00220
+<a name="l00221"></a>00221
+<a name="l00222"></a>00222 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(<span class="keyword">const</span> XmlElement&amp; element, std::string&amp; stream,
+<a name="l00223"></a>00223 <span class="keyword">const</span> std::string&amp; lineBreak,
+<a name="l00224"></a>00224 <span class="keyword">const</span> std::string&amp; indent,
+<a name="l00225"></a>00225 <span class="keywordtype">size_t</span> indentLevel)
+<a name="l00226"></a>00226 {
+<a name="l00227"></a>00227 <span class="keyword">const</span> std::string&amp; nameFmt = normalizeName(element.getNameAs&lt;std::string&gt;());
+<a name="l00228"></a>00228
+<a name="l00229"></a>00229 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indentLevel; ++i)
+<a name="l00230"></a>00230 stream += indent;
+<a name="l00231"></a>00231
+<a name="l00232"></a>00232 stream += <span class="charliteral">&#39;&lt;&#39;</span> + nameFmt;
+<a name="l00233"></a>00233
+<a name="l00234"></a>00234 <span class="keyword">auto</span> attr = element.getAttributes();
+<a name="l00235"></a>00235 <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = attr.first; it != attr.second; ++it)
+<a name="l00236"></a>00236 stream += <span class="charliteral">&#39; &#39;</span> + normalizeName(it-&gt;first) + <span class="stringliteral">&quot;=\&quot;&quot;</span> + normalizeAttribValue(it-&gt;second) + <span class="charliteral">&#39;\&quot;&#39;</span>;
+<a name="l00237"></a>00237
+<a name="l00238"></a>00238 <span class="comment">//no support for mixed-mode content</span>
+<a name="l00239"></a>00239 <span class="keyword">auto</span> iterPair = element.getChildren();
+<a name="l00240"></a>00240 <span class="keywordflow">if</span> (iterPair.first != iterPair.second) <span class="comment">//structured element</span>
+<a name="l00241"></a>00241 {
+<a name="l00242"></a>00242 stream += <span class="charliteral">&#39;&gt;&#39;</span> + lineBreak;
+<a name="l00243"></a>00243
+<a name="l00244"></a>00244 std::for_each(iterPair.first, iterPair.second,
+<a name="l00245"></a>00245 [&amp;](<span class="keyword">const</span> XmlElement &amp; el) { <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(el, stream, lineBreak, indent, indentLevel + 1); });
+<a name="l00246"></a>00246
+<a name="l00247"></a>00247 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indentLevel; ++i)
+<a name="l00248"></a>00248 stream += indent;
+<a name="l00249"></a>00249 stream += <span class="stringliteral">&quot;&lt;/&quot;</span> + nameFmt + <span class="charliteral">&#39;&gt;&#39;</span> + lineBreak;
+<a name="l00250"></a>00250 }
+<a name="l00251"></a>00251 <span class="keywordflow">else</span>
+<a name="l00252"></a>00252 {
+<a name="l00253"></a>00253 std::string value;
+<a name="l00254"></a>00254 element.getValue(value);
+<a name="l00255"></a>00255
+<a name="l00256"></a>00256 <span class="keywordflow">if</span> (!value.empty()) <span class="comment">//value element</span>
+<a name="l00257"></a>00257 stream += <span class="charliteral">&#39;&gt;&#39;</span> + normalizeElementValue(value) + <span class="stringliteral">&quot;&lt;/&quot;</span> + nameFmt + <span class="charliteral">&#39;&gt;&#39;</span> + lineBreak;
+<a name="l00258"></a>00258 <span class="keywordflow">else</span> <span class="comment">//empty element</span>
+<a name="l00259"></a>00259 stream += <span class="stringliteral">&quot;/&gt;&quot;</span> + lineBreak;
+<a name="l00260"></a>00260 }
+<a name="l00261"></a>00261 }
+<a name="l00262"></a>00262
+<a name="l00263"></a>00263 std::string <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(<span class="keyword">const</span> XmlDoc&amp; doc,
+<a name="l00264"></a>00264 <span class="keyword">const</span> std::string&amp; lineBreak,
+<a name="l00265"></a>00265 <span class="keyword">const</span> std::string&amp; indent)
+<a name="l00266"></a>00266 {
+<a name="l00267"></a>00267 std::string version = doc.getVersionAs&lt;std::string&gt;();
+<a name="l00268"></a>00268 <span class="keywordflow">if</span> (!version.empty())
+<a name="l00269"></a>00269 version = <span class="stringliteral">&quot; version=\&quot;&quot;</span> + normalizeAttribValue(version) + <span class="charliteral">&#39;\&quot;&#39;</span>;
+<a name="l00270"></a>00270
+<a name="l00271"></a>00271 std::string encoding = doc.getEncodingAs&lt;std::string&gt;();
+<a name="l00272"></a>00272 <span class="keywordflow">if</span> (!encoding.empty())
+<a name="l00273"></a>00273 encoding = <span class="stringliteral">&quot; encoding=\&quot;&quot;</span> + normalizeAttribValue(encoding) + <span class="charliteral">&#39;\&quot;&#39;</span>;
+<a name="l00274"></a>00274
+<a name="l00275"></a>00275 std::string standalone = doc.getStandaloneAs&lt;std::string&gt;();
+<a name="l00276"></a>00276 <span class="keywordflow">if</span> (!standalone.empty())
+<a name="l00277"></a>00277 standalone = <span class="stringliteral">&quot; standalone=\&quot;&quot;</span> + normalizeAttribValue(standalone) + <span class="charliteral">&#39;\&quot;&#39;</span>;
+<a name="l00278"></a>00278
+<a name="l00279"></a>00279 std::string output = <span class="stringliteral">&quot;&lt;?xml&quot;</span> + version + encoding + standalone + <span class="stringliteral">&quot;?&gt;&quot;</span> + lineBreak;
+<a name="l00280"></a>00280 <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(doc.root(), output, lineBreak, indent, 0);
+<a name="l00281"></a>00281 <span class="keywordflow">return</span> output;
+<a name="l00282"></a>00282 }
+<a name="l00283"></a>00283 }
+<a name="l00284"></a>00284 }
+<a name="l00285"></a>00285
+<a name="l00286"></a>00286 <span class="keyword">inline</span>
+<a name="l00287"></a><a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">00287</a> std::string <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>&amp; doc,
+<a name="l00288"></a>00288 <span class="keyword">const</span> std::string&amp; lineBreak,
+<a name="l00289"></a>00289 <span class="keyword">const</span> std::string&amp; indent) { <span class="keywordflow">return</span> implementation::serialize(doc, lineBreak, indent); }
+<a name="l00290"></a>00290
+<a name="l00291"></a>00291 <span class="comment">/*</span>
+<a name="l00292"></a>00292 <span class="comment">Grammar for XML parser</span>
+<a name="l00293"></a>00293 <span class="comment">-------------------------------</span>
+<a name="l00294"></a>00294 <span class="comment">document-expression:</span>
+<a name="l00295"></a>00295 <span class="comment"> &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;</span>
+<a name="l00296"></a>00296 <span class="comment"> element-expression:</span>
+<a name="l00297"></a>00297 <span class="comment"></span>
+<a name="l00298"></a>00298 <span class="comment">element-expression:</span>
+<a name="l00299"></a>00299 <span class="comment"> &lt;string attributes-expression/&gt;</span>
+<a name="l00300"></a>00300 <span class="comment"> &lt;string attributes-expression&gt; pm-expression &lt;/string&gt;</span>
+<a name="l00301"></a>00301 <span class="comment"></span>
+<a name="l00302"></a>00302 <span class="comment">element-list-expression:</span>
+<a name="l00303"></a>00303 <span class="comment"> &lt;empty&gt;</span>
+<a name="l00304"></a>00304 <span class="comment"> element-expression element-list-expression</span>
+<a name="l00305"></a>00305 <span class="comment"></span>
+<a name="l00306"></a>00306 <span class="comment">attributes-expression:</span>
+<a name="l00307"></a>00307 <span class="comment"> &lt;empty&gt;</span>
+<a name="l00308"></a>00308 <span class="comment"> string=&quot;string&quot; attributes-expression</span>
+<a name="l00309"></a>00309 <span class="comment"></span>
+<a name="l00310"></a>00310 <span class="comment">pm-expression:</span>
+<a name="l00311"></a>00311 <span class="comment"> string</span>
+<a name="l00312"></a>00312 <span class="comment"> element-list-expression</span>
+<a name="l00313"></a>00313 <span class="comment">*/</span>
+<a name="l00314"></a>00314
+<a name="l00315"></a>00315 <span class="keyword">namespace </span>implementation
+<a name="l00316"></a>00316 {
+<a name="l00317"></a>00317 <span class="keyword">struct </span>Token
+<a name="l00318"></a>00318 {
+<a name="l00319"></a>00319 <span class="keyword">enum</span> Type
+<a name="l00320"></a>00320 {
+<a name="l00321"></a>00321 TK_LESS,
+<a name="l00322"></a>00322 TK_GREATER,
+<a name="l00323"></a>00323 TK_LESS_SLASH,
+<a name="l00324"></a>00324 TK_SLASH_GREATER,
+<a name="l00325"></a>00325 TK_EQUAL,
+<a name="l00326"></a>00326 TK_QUOTE,
+<a name="l00327"></a>00327 TK_DECL_BEGIN,
+<a name="l00328"></a>00328 TK_DECL_END,
+<a name="l00329"></a>00329 TK_NAME,
+<a name="l00330"></a>00330 TK_END
+<a name="l00331"></a>00331 };
+<a name="l00332"></a>00332
+<a name="l00333"></a>00333 Token(Type t) : type(t) {}
+<a name="l00334"></a>00334 Token(<span class="keyword">const</span> std::string&amp; txt) : type(TK_NAME), name(txt) {}
+<a name="l00335"></a>00335
+<a name="l00336"></a>00336 Type type;
+<a name="l00337"></a>00337 std::string name; <span class="comment">//filled if type == TK_NAME</span>
+<a name="l00338"></a>00338 };
+<a name="l00339"></a>00339
+<a name="l00340"></a>00340 <span class="keyword">class </span>Scanner
+<a name="l00341"></a>00341 {
+<a name="l00342"></a>00342 <span class="keyword">public</span>:
+<a name="l00343"></a>00343 Scanner(<span class="keyword">const</span> std::string&amp; stream) : stream_(stream), pos(stream_.begin())
+<a name="l00344"></a>00344 {
+<a name="l00345"></a>00345 <span class="keywordflow">if</span> (zen::startsWith(stream_, BYTE_ORDER_MARK_UTF8))
+<a name="l00346"></a>00346 pos += strLength(BYTE_ORDER_MARK_UTF8);
+<a name="l00347"></a>00347
+<a name="l00348"></a>00348 tokens.push_back(std::make_pair(<span class="stringliteral">&quot;&lt;?xml&quot;</span>, Token::TK_DECL_BEGIN));
+<a name="l00349"></a>00349 tokens.push_back(std::make_pair(<span class="stringliteral">&quot;?&gt;&quot;</span>, Token::TK_DECL_END));
+<a name="l00350"></a>00350 tokens.push_back(std::make_pair(<span class="stringliteral">&quot;&lt;/&quot;</span>, Token::TK_LESS_SLASH));
+<a name="l00351"></a>00351 tokens.push_back(std::make_pair(<span class="stringliteral">&quot;/&gt;&quot;</span>, Token::TK_SLASH_GREATER));
+<a name="l00352"></a>00352 tokens.push_back(std::make_pair(<span class="stringliteral">&quot;&lt;&quot;</span> , Token::TK_LESS)); <span class="comment">//evaluate after TK_DECL_BEGIN!</span>
+<a name="l00353"></a>00353 tokens.push_back(std::make_pair(<span class="stringliteral">&quot;&gt;&quot;</span> , Token::TK_GREATER));
+<a name="l00354"></a>00354 tokens.push_back(std::make_pair(<span class="stringliteral">&quot;=&quot;</span> , Token::TK_EQUAL));
+<a name="l00355"></a>00355 tokens.push_back(std::make_pair(<span class="stringliteral">&quot;\&quot;&quot;</span>, Token::TK_QUOTE));
+<a name="l00356"></a>00356 tokens.push_back(std::make_pair(<span class="stringliteral">&quot;\&#39;&quot;</span>, Token::TK_QUOTE));
+<a name="l00357"></a>00357 }
+<a name="l00358"></a>00358
+<a name="l00359"></a>00359 Token nextToken() <span class="comment">//throw XmlParsingError</span>
+<a name="l00360"></a>00360 {
+<a name="l00361"></a>00361 <span class="comment">//skip whitespace</span>
+<a name="l00362"></a>00362 pos = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> !zen::isWhiteSpace(c); });
+<a name="l00363"></a>00363
+<a name="l00364"></a>00364 <span class="keywordflow">if</span> (pos == stream_.end())
+<a name="l00365"></a>00365 <span class="keywordflow">return</span> Token::TK_END;
+<a name="l00366"></a>00366
+<a name="l00367"></a>00367 <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = tokens.begin(); it != tokens.end(); ++it)
+<a name="l00368"></a>00368 <span class="keywordflow">if</span> (startsWith(pos, it-&gt;first))
+<a name="l00369"></a>00369 {
+<a name="l00370"></a>00370 pos += it-&gt;first.size();
+<a name="l00371"></a>00371 <span class="keywordflow">return</span> it-&gt;second;
+<a name="l00372"></a>00372 }
+<a name="l00373"></a>00373
+<a name="l00374"></a>00374 <span class="keyword">auto</span> nameEnd = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c)
+<a name="l00375"></a>00375 {
+<a name="l00376"></a>00376 <span class="keywordflow">return</span> c == <span class="charliteral">&#39;&lt;&#39;</span> ||
+<a name="l00377"></a>00377 c == <span class="charliteral">&#39;&gt;&#39;</span> ||
+<a name="l00378"></a>00378 c == <span class="charliteral">&#39;=&#39;</span> ||
+<a name="l00379"></a>00379 c == <span class="charliteral">&#39;/&#39;</span> ||
+<a name="l00380"></a>00380 c == <span class="charliteral">&#39;\&#39;&#39;</span> ||
+<a name="l00381"></a>00381 c == <span class="charliteral">&#39;\&quot;&#39;</span> ||
+<a name="l00382"></a>00382 zen::isWhiteSpace(c);
+<a name="l00383"></a>00383 });
+<a name="l00384"></a>00384
+<a name="l00385"></a>00385 <span class="keywordflow">if</span> (nameEnd != pos)
+<a name="l00386"></a>00386 {
+<a name="l00387"></a>00387 std::string name(&amp;*pos, nameEnd - pos);
+<a name="l00388"></a>00388 pos = nameEnd;
+<a name="l00389"></a>00389 <span class="keywordflow">return</span> implementation::denormalize(name);
+<a name="l00390"></a>00390 }
+<a name="l00391"></a>00391
+<a name="l00392"></a>00392 <span class="comment">//unknown token</span>
+<a name="l00393"></a>00393 <span class="keywordflow">throw</span> XmlParsingError(posRow(), posCol());
+<a name="l00394"></a>00394 }
+<a name="l00395"></a>00395
+<a name="l00396"></a>00396 std::string extractElementValue()
+<a name="l00397"></a>00397 {
+<a name="l00398"></a>00398 <span class="keyword">auto</span> it = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c)
+<a name="l00399"></a>00399 {
+<a name="l00400"></a>00400 <span class="keywordflow">return</span> c == <span class="charliteral">&#39;&lt;&#39;</span> ||
+<a name="l00401"></a>00401 c == <span class="charliteral">&#39;&gt;&#39;</span>;
+<a name="l00402"></a>00402 });
+<a name="l00403"></a>00403 std::string output(pos, it);
+<a name="l00404"></a>00404 pos = it;
+<a name="l00405"></a>00405 <span class="keywordflow">return</span> implementation::denormalize(output);
+<a name="l00406"></a>00406 }
+<a name="l00407"></a>00407
+<a name="l00408"></a>00408 std::string extractAttributeValue()
+<a name="l00409"></a>00409 {
+<a name="l00410"></a>00410 <span class="keyword">auto</span> it = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c)
+<a name="l00411"></a>00411 {
+<a name="l00412"></a>00412 <span class="keywordflow">return</span> c == <span class="charliteral">&#39;&lt;&#39;</span> ||
+<a name="l00413"></a>00413 c == <span class="charliteral">&#39;&gt;&#39;</span> ||
+<a name="l00414"></a>00414 c == <span class="charliteral">&#39;\&#39;&#39;</span> ||
+<a name="l00415"></a>00415 c == <span class="charliteral">&#39;\&quot;&#39;</span>;
+<a name="l00416"></a>00416 });
+<a name="l00417"></a>00417 std::string output(pos, it);
+<a name="l00418"></a>00418 pos = it;
+<a name="l00419"></a>00419 <span class="keywordflow">return</span> implementation::denormalize(output);
+<a name="l00420"></a>00420 }
+<a name="l00421"></a>00421
+<a name="l00422"></a>00422 <span class="keywordtype">size_t</span> posRow() const <span class="comment">//current row beginning with 0</span>
+<a name="l00423"></a>00423 {
+<a name="l00424"></a>00424 <span class="keyword">const</span> <span class="keywordtype">size_t</span> crSum = std::count(stream_.begin(), pos, <span class="charliteral">&#39;\r&#39;</span>); <span class="comment">//carriage returns</span>
+<a name="l00425"></a>00425 <span class="keyword">const</span> <span class="keywordtype">size_t</span> nlSum = std::count(stream_.begin(), pos, <span class="charliteral">&#39;\n&#39;</span>); <span class="comment">//new lines</span>
+<a name="l00426"></a>00426 assert(crSum == 0 || nlSum == 0 || crSum == nlSum);
+<a name="l00427"></a>00427 <span class="keywordflow">return</span> std::max(crSum, nlSum); <span class="comment">//be compatible with Linux/Mac/Win</span>
+<a name="l00428"></a>00428 }
+<a name="l00429"></a>00429
+<a name="l00430"></a>00430 <span class="keywordtype">size_t</span> posCol() const <span class="comment">//current col beginning with 0</span>
+<a name="l00431"></a>00431 {
+<a name="l00432"></a>00432 <span class="comment">//seek beginning of line</span>
+<a name="l00433"></a>00433 <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = pos; it != stream_.begin(); )
+<a name="l00434"></a>00434 {
+<a name="l00435"></a>00435 --it;
+<a name="l00436"></a>00436 <span class="keywordflow">if</span> (*it == <span class="charliteral">&#39;\r&#39;</span> || *it == <span class="charliteral">&#39;\n&#39;</span>)
+<a name="l00437"></a>00437 <span class="keywordflow">return</span> pos - it - 1;
+<a name="l00438"></a>00438 }
+<a name="l00439"></a>00439 <span class="keywordflow">return</span> pos - stream_.begin();
+<a name="l00440"></a>00440 }
+<a name="l00441"></a>00441
+<a name="l00442"></a>00442 <span class="keyword">private</span>:
+<a name="l00443"></a>00443 Scanner(<span class="keyword">const</span> Scanner&amp;);
+<a name="l00444"></a>00444 Scanner&amp; operator=(<span class="keyword">const</span> Scanner&amp;);
+<a name="l00445"></a>00445
+<a name="l00446"></a>00446 <span class="keywordtype">bool</span> startsWith(std::string::const_iterator it, <span class="keyword">const</span> std::string&amp; prefix)<span class="keyword"> const</span>
+<a name="l00447"></a>00447 <span class="keyword"> </span>{
+<a name="l00448"></a>00448 <span class="keywordflow">if</span> (stream_.end() - it &lt; static_cast&lt;ptrdiff_t&gt;(prefix.size()))
+<a name="l00449"></a>00449 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00450"></a>00450 <span class="keywordflow">return</span> std::equal(prefix.begin(), prefix.end(), it);
+<a name="l00451"></a>00451 }
+<a name="l00452"></a>00452
+<a name="l00453"></a>00453 <span class="keyword">typedef</span> std::vector&lt;std::pair&lt;std::string, Token::Type&gt; &gt; TokenList;
+<a name="l00454"></a>00454 TokenList tokens;
+<a name="l00455"></a>00455
+<a name="l00456"></a>00456 <span class="keyword">const</span> std::string stream_;
+<a name="l00457"></a>00457 std::string::const_iterator pos;
+<a name="l00458"></a>00458 };
+<a name="l00459"></a>00459
+<a name="l00460"></a>00460
+<a name="l00461"></a>00461 <span class="keyword">class </span>XmlParser
+<a name="l00462"></a>00462 {
+<a name="l00463"></a>00463 <span class="keyword">public</span>:
+<a name="l00464"></a>00464 XmlParser(<span class="keyword">const</span> std::string&amp; stream) :
+<a name="l00465"></a>00465 scn(stream),
+<a name="l00466"></a>00466 tk(scn.nextToken()) {}
+<a name="l00467"></a>00467
+<a name="l00468"></a>00468 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7" title="Load XML document from a byte stream.">parse</a>(XmlDoc&amp; doc) <span class="comment">//throw XmlParsingError</span>
+<a name="l00469"></a>00469 {
+<a name="l00470"></a>00470 <span class="comment">//declaration (optional)</span>
+<a name="l00471"></a>00471 <span class="keywordflow">if</span> (token().type == Token::TK_DECL_BEGIN)
+<a name="l00472"></a>00472 {
+<a name="l00473"></a>00473 nextToken();
+<a name="l00474"></a>00474
+<a name="l00475"></a>00475 <span class="keywordflow">while</span> (token().type == Token::TK_NAME)
+<a name="l00476"></a>00476 {
+<a name="l00477"></a>00477 std::string attribName = token().name;
+<a name="l00478"></a>00478 nextToken();
+<a name="l00479"></a>00479
+<a name="l00480"></a>00480 consumeToken(Token::TK_EQUAL);
+<a name="l00481"></a>00481 expectToken(Token::TK_QUOTE);
+<a name="l00482"></a>00482 std::string attribValue = scn.extractAttributeValue();
+<a name="l00483"></a>00483 nextToken();
+<a name="l00484"></a>00484
+<a name="l00485"></a>00485 consumeToken(Token::TK_QUOTE);
+<a name="l00486"></a>00486
+<a name="l00487"></a>00487 <span class="keywordflow">if</span> (attribName == <span class="stringliteral">&quot;version&quot;</span>)
+<a name="l00488"></a>00488 doc.setVersion(attribValue);
+<a name="l00489"></a>00489 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (attribName == <span class="stringliteral">&quot;encoding&quot;</span>)
+<a name="l00490"></a>00490 doc.setEncoding(attribValue);
+<a name="l00491"></a>00491 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (attribName == <span class="stringliteral">&quot;standalone&quot;</span>)
+<a name="l00492"></a>00492 doc.setStandalone(attribValue);
+<a name="l00493"></a>00493 }
+<a name="l00494"></a>00494 consumeToken(Token::TK_DECL_END);
+<a name="l00495"></a>00495 }
+<a name="l00496"></a>00496
+<a name="l00497"></a>00497 XmlDoc dummy;
+<a name="l00498"></a>00498 XmlElement&amp; elemTmp = dummy.root();
+<a name="l00499"></a>00499 parseChildElements(elemTmp);
+<a name="l00500"></a>00500
+<a name="l00501"></a>00501 <span class="keyword">auto</span> iterPair = elemTmp.getChildren();
+<a name="l00502"></a>00502 <span class="keywordflow">if</span> (iterPair.first != iterPair.second)
+<a name="l00503"></a>00503 doc.root().swap(*iterPair.first);
+<a name="l00504"></a>00504
+<a name="l00505"></a>00505 expectToken(Token::TK_END);
+<a name="l00506"></a>00506 };
+<a name="l00507"></a>00507
+<a name="l00508"></a>00508 <span class="keyword">private</span>:
+<a name="l00509"></a>00509 XmlParser(<span class="keyword">const</span> XmlParser&amp;);
+<a name="l00510"></a>00510 XmlParser&amp; operator=(<span class="keyword">const</span> XmlParser&amp;);
+<a name="l00511"></a>00511
+<a name="l00512"></a>00512 <span class="keywordtype">void</span> parseChildElements(XmlElement&amp; parent)
+<a name="l00513"></a>00513 {
+<a name="l00514"></a>00514 <span class="keywordflow">while</span> (token().type == Token::TK_LESS)
+<a name="l00515"></a>00515 {
+<a name="l00516"></a>00516 nextToken();
+<a name="l00517"></a>00517
+<a name="l00518"></a>00518 expectToken(Token::TK_NAME);
+<a name="l00519"></a>00519 std::string elementName = token().name;
+<a name="l00520"></a>00520 nextToken();
+<a name="l00521"></a>00521
+<a name="l00522"></a>00522 XmlElement&amp; newElement = parent.addChild(elementName);
+<a name="l00523"></a>00523
+<a name="l00524"></a>00524 parseAttributes(newElement);
+<a name="l00525"></a>00525
+<a name="l00526"></a>00526 <span class="keywordflow">if</span> (token().type == Token::TK_SLASH_GREATER) <span class="comment">//empty element</span>
+<a name="l00527"></a>00527 {
+<a name="l00528"></a>00528 nextToken();
+<a name="l00529"></a>00529 <span class="keywordflow">continue</span>;
+<a name="l00530"></a>00530 }
+<a name="l00531"></a>00531
+<a name="l00532"></a>00532 expectToken(Token::TK_GREATER);
+<a name="l00533"></a>00533 std::string elementValue = scn.extractElementValue();
+<a name="l00534"></a>00534 nextToken();
+<a name="l00535"></a>00535
+<a name="l00536"></a>00536 <span class="comment">//no support for mixed-mode content</span>
+<a name="l00537"></a>00537 <span class="keywordflow">if</span> (token().type == Token::TK_LESS) <span class="comment">//structured element</span>
+<a name="l00538"></a>00538 parseChildElements(newElement);
+<a name="l00539"></a>00539 <span class="keywordflow">else</span> <span class="comment">//value element</span>
+<a name="l00540"></a>00540 newElement.setValue(elementValue);
+<a name="l00541"></a>00541
+<a name="l00542"></a>00542 consumeToken(Token::TK_LESS_SLASH);
+<a name="l00543"></a>00543
+<a name="l00544"></a>00544 <span class="keywordflow">if</span> (token().type != Token::TK_NAME ||
+<a name="l00545"></a>00545 elementName != token().name)
+<a name="l00546"></a>00546 <span class="keywordflow">throw</span> XmlParsingError(scn.posRow(), scn.posCol());
+<a name="l00547"></a>00547 nextToken();
+<a name="l00548"></a>00548
+<a name="l00549"></a>00549 consumeToken(Token::TK_GREATER);
+<a name="l00550"></a>00550 }
+<a name="l00551"></a>00551 };
+<a name="l00552"></a>00552
+<a name="l00553"></a>00553 <span class="keywordtype">void</span> parseAttributes(XmlElement&amp; element)
+<a name="l00554"></a>00554 {
+<a name="l00555"></a>00555 <span class="keywordflow">while</span> (token().type == Token::TK_NAME)
+<a name="l00556"></a>00556 {
+<a name="l00557"></a>00557 std::string attribName = token().name;
+<a name="l00558"></a>00558 nextToken();
+<a name="l00559"></a>00559
+<a name="l00560"></a>00560 consumeToken(Token::TK_EQUAL);
+<a name="l00561"></a>00561 expectToken(Token::TK_QUOTE);
+<a name="l00562"></a>00562 std::string attribValue = scn.extractAttributeValue();
+<a name="l00563"></a>00563 nextToken();
+<a name="l00564"></a>00564
+<a name="l00565"></a>00565 consumeToken(Token::TK_QUOTE);
+<a name="l00566"></a>00566 element.setAttribute(attribName, attribValue);
+<a name="l00567"></a>00567 }
+<a name="l00568"></a>00568 }
+<a name="l00569"></a>00569
+<a name="l00570"></a>00570 <span class="keyword">const</span> Token&amp; token()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> tk; }
+<a name="l00571"></a>00571 <span class="keywordtype">void</span> nextToken() { tk = scn.nextToken(); }
+<a name="l00572"></a>00572
+<a name="l00573"></a>00573 <span class="keywordtype">void</span> consumeToken(Token::Type t) <span class="comment">//throw XmlParsingError</span>
+<a name="l00574"></a>00574 {
+<a name="l00575"></a>00575 expectToken(t); <span class="comment">//throw XmlParsingError</span>
+<a name="l00576"></a>00576 nextToken();
+<a name="l00577"></a>00577 }
+<a name="l00578"></a>00578
+<a name="l00579"></a>00579 <span class="keywordtype">void</span> expectToken(Token::Type t) <span class="comment">//throw XmlParsingError</span>
+<a name="l00580"></a>00580 {
+<a name="l00581"></a>00581 <span class="keywordflow">if</span> (token().type != t)
+<a name="l00582"></a>00582 <span class="keywordflow">throw</span> XmlParsingError(scn.posRow(), scn.posCol());
+<a name="l00583"></a>00583 }
+<a name="l00584"></a>00584
+<a name="l00585"></a>00585 Scanner scn;
+<a name="l00586"></a>00586 Token tk;
+<a name="l00587"></a>00587 };
+<a name="l00588"></a>00588 }
+<a name="l00589"></a>00589
+<a name="l00590"></a>00590 <span class="keyword">inline</span>
+<a name="l00591"></a><a class="code" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7">00591</a> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7" title="Load XML document from a byte stream.">parse</a>(<span class="keyword">const</span> std::string&amp; stream, <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>&amp; doc) <span class="comment">//throw XmlParsingError</span>
+<a name="l00592"></a>00592 {
+<a name="l00593"></a>00593 implementation::XmlParser(stream).parse(doc); <span class="comment">//throw XmlParsingError</span>
+<a name="l00594"></a>00594 }
+<a name="l00595"></a>00595 }
+<a name="l00596"></a>00596
+<a name="l00597"></a>00597 <span class="preprocessor">#endif //ZEN_XML_PARSER_HEADER_81248670213764583021432</span>
+</pre></div></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/search/all_61.html b/zenxml/doc/search/all_61.html
new file mode 100644
index 00000000..a3164d55
--- /dev/null
+++ b/zenxml/doc/search/all_61.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_61.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/all_61.js b/zenxml/doc/search/all_61.js
new file mode 100644
index 00000000..2b7cd296
--- /dev/null
+++ b/zenxml/doc/search/all_61.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['addchild',['addChild',['../classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9',1,'zen::XmlElement']]],
+ ['attribute',['attribute',['../classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805',1,'zen::XmlOut::attribute()'],['../classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01',1,'zen::XmlIn::attribute()']]]
+];
diff --git a/zenxml/doc/search/all_63.html b/zenxml/doc/search/all_63.html
new file mode 100644
index 00000000..56b5ad1e
--- /dev/null
+++ b/zenxml/doc/search/all_63.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_63.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/all_63.js b/zenxml/doc/search/all_63.js
new file mode 100644
index 00000000..3c8f3573
--- /dev/null
+++ b/zenxml/doc/search/all_63.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['col',['col',['../structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd',1,'zen::XmlParsingError']]]
+];
diff --git a/zenxml/doc/search/all_65.html b/zenxml/doc/search/all_65.html
new file mode 100644
index 00000000..66cc8348
--- /dev/null
+++ b/zenxml/doc/search/all_65.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_65.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/all_65.js b/zenxml/doc/search/all_65.js
new file mode 100644
index 00000000..46ba186a
--- /dev/null
+++ b/zenxml/doc/search/all_65.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['errorsoccured',['errorsOccured',['../classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a',1,'zen::XmlIn']]]
+];
diff --git a/zenxml/doc/search/all_67.html b/zenxml/doc/search/all_67.html
new file mode 100644
index 00000000..41a459ae
--- /dev/null
+++ b/zenxml/doc/search/all_67.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_67.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/all_67.js b/zenxml/doc/search/all_67.js
new file mode 100644
index 00000000..029444b8
--- /dev/null
+++ b/zenxml/doc/search/all_67.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+ ['get',['get',['../classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f',1,'zen::XmlIn']]],
+ ['getattribute',['getAttribute',['../classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887',1,'zen::XmlElement']]],
+ ['getchild',['getChild',['../classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e',1,'zen::XmlElement::getChild(const String &amp;name) const '],['../classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658',1,'zen::XmlElement::getChild(const String &amp;name)']]],
+ ['getchildren',['getChildren',['../classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8',1,'zen::XmlElement::getChildren(const String &amp;name) const '],['../classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d',1,'zen::XmlElement::getChildren(const String &amp;name)'],['../classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2',1,'zen::XmlElement::getChildren() const '],['../classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96',1,'zen::XmlElement::getChildren()']]],
+ ['getencodingas',['getEncodingAs',['../classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da',1,'zen::XmlDoc']]],
+ ['geterrorsas',['getErrorsAs',['../classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e',1,'zen::XmlIn']]],
+ ['getnameas',['getNameAs',['../classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50',1,'zen::XmlElement']]],
+ ['getstandaloneas',['getStandaloneAs',['../classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4',1,'zen::XmlDoc']]],
+ ['getvalue',['getValue',['../classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070',1,'zen::XmlElement']]],
+ ['getversionas',['getVersionAs',['../classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665',1,'zen::XmlDoc']]]
+];
diff --git a/zenxml/doc/search/all_6c.html b/zenxml/doc/search/all_6c.html
new file mode 100644
index 00000000..f6383cc2
--- /dev/null
+++ b/zenxml/doc/search/all_6c.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/all_6c.js b/zenxml/doc/search/all_6c.js
new file mode 100644
index 00000000..0e6b8f02
--- /dev/null
+++ b/zenxml/doc/search/all_6c.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['lasterror',['lastError',['../structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f',1,'zen::XmlFileError']]],
+ ['load',['load',['../namespacezen.html#a900c1fb290f0eedc24354c487145dbee',1,'zen']]],
+ ['loadstream',['loadStream',['../namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607',1,'zen']]]
+];
diff --git a/zenxml/doc/search/all_6e.html b/zenxml/doc/search/all_6e.html
new file mode 100644
index 00000000..1f92ee5b
--- /dev/null
+++ b/zenxml/doc/search/all_6e.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/all_6e.js b/zenxml/doc/search/all_6e.js
new file mode 100644
index 00000000..250e97da
--- /dev/null
+++ b/zenxml/doc/search/all_6e.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['next',['next',['../classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4',1,'zen::XmlIn']]]
+];
diff --git a/zenxml/doc/search/all_6f.html b/zenxml/doc/search/all_6f.html
new file mode 100644
index 00000000..61827e82
--- /dev/null
+++ b/zenxml/doc/search/all_6f.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/all_6f.js b/zenxml/doc/search/all_6f.js
new file mode 100644
index 00000000..4152ba50
--- /dev/null
+++ b/zenxml/doc/search/all_6f.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['_2a',['*',['../classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72',1,'zen::XmlIn']]],
+ ['operator_28_29',['operator()',['../classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb',1,'zen::XmlOut::operator()()'],['../classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506',1,'zen::XmlIn::operator()()']]],
+ ['operator_5b_5d',['operator[]',['../classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831',1,'zen::XmlOut::operator[]()'],['../classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d',1,'zen::XmlIn::operator[]()']]]
+];
diff --git a/zenxml/doc/search/all_70.html b/zenxml/doc/search/all_70.html
new file mode 100644
index 00000000..0340151b
--- /dev/null
+++ b/zenxml/doc/search/all_70.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_70.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/all_70.js b/zenxml/doc/search/all_70.js
new file mode 100644
index 00000000..b293cd99
--- /dev/null
+++ b/zenxml/doc/search/all_70.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['parent',['parent',['../classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1',1,'zen::XmlElement::parent()'],['../classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c',1,'zen::XmlElement::parent() const ']]],
+ ['parse',['parse',['../namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7',1,'zen']]]
+];
diff --git a/zenxml/doc/search/all_72.html b/zenxml/doc/search/all_72.html
new file mode 100644
index 00000000..0ab18d65
--- /dev/null
+++ b/zenxml/doc/search/all_72.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_72.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/all_72.js b/zenxml/doc/search/all_72.js
new file mode 100644
index 00000000..86fadf65
--- /dev/null
+++ b/zenxml/doc/search/all_72.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['readstruc',['readStruc',['../namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1',1,'zen']]],
+ ['readtext',['readText',['../namespacezen.html#acaf85ab94b61882f957afcd355386bff',1,'zen']]],
+ ['ref',['ref',['../classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2',1,'zen::XmlOut']]],
+ ['removeattribute',['removeAttribute',['../classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934',1,'zen::XmlElement']]],
+ ['root',['root',['../classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d',1,'zen::XmlDoc::root() const '],['../classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e',1,'zen::XmlDoc::root()']]],
+ ['row',['row',['../structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e',1,'zen::XmlParsingError']]]
+];
diff --git a/zenxml/doc/search/all_73.html b/zenxml/doc/search/all_73.html
new file mode 100644
index 00000000..1ec8f174
--- /dev/null
+++ b/zenxml/doc/search/all_73.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_73.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/all_73.js b/zenxml/doc/search/all_73.js
new file mode 100644
index 00000000..a062befe
--- /dev/null
+++ b/zenxml/doc/search/all_73.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+ ['save',['save',['../namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d',1,'zen']]],
+ ['savestream',['saveStream',['../namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2',1,'zen']]],
+ ['serialize',['serialize',['../namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee',1,'zen']]],
+ ['setattribute',['setAttribute',['../classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421',1,'zen::XmlElement']]],
+ ['setencoding',['setEncoding',['../classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62',1,'zen::XmlDoc']]],
+ ['setstandalone',['setStandalone',['../classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4',1,'zen::XmlDoc']]],
+ ['setvalue',['setValue',['../classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01',1,'zen::XmlElement']]],
+ ['setversion',['setVersion',['../classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64',1,'zen::XmlDoc']]]
+];
diff --git a/zenxml/doc/search/all_77.html b/zenxml/doc/search/all_77.html
new file mode 100644
index 00000000..73323d31
--- /dev/null
+++ b/zenxml/doc/search/all_77.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_77.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/all_77.js b/zenxml/doc/search/all_77.js
new file mode 100644
index 00000000..5e349623
--- /dev/null
+++ b/zenxml/doc/search/all_77.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['writestruc',['writeStruc',['../namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6',1,'zen']]],
+ ['writetext',['writeText',['../namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f',1,'zen']]]
+];
diff --git a/zenxml/doc/search/all_78.html b/zenxml/doc/search/all_78.html
new file mode 100644
index 00000000..10780d66
--- /dev/null
+++ b/zenxml/doc/search/all_78.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_78.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/all_78.js b/zenxml/doc/search/all_78.js
new file mode 100644
index 00000000..371f5dde
--- /dev/null
+++ b/zenxml/doc/search/all_78.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+ ['xmldoc',['XmlDoc',['../classzen_1_1_xml_doc.html',1,'zen']]],
+ ['xmldoc',['XmlDoc',['../classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed',1,'zen::XmlDoc::XmlDoc()'],['../classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df',1,'zen::XmlDoc::XmlDoc(String rootName)']]],
+ ['xmlelement',['XmlElement',['../classzen_1_1_xml_element.html',1,'zen']]],
+ ['xmlerror',['XmlError',['../structzen_1_1_xml_error.html',1,'zen']]],
+ ['xmlfileerror',['XmlFileError',['../structzen_1_1_xml_file_error.html',1,'zen']]],
+ ['xmlin',['XmlIn',['../classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f',1,'zen::XmlIn::XmlIn(const XmlDoc &amp;doc)'],['../classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430',1,'zen::XmlIn::XmlIn(const XmlElement *element)'],['../classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8',1,'zen::XmlIn::XmlIn(const XmlElement &amp;element)']]],
+ ['xmlin',['XmlIn',['../classzen_1_1_xml_in.html',1,'zen']]],
+ ['xmlout',['XmlOut',['../classzen_1_1_xml_out.html',1,'zen']]],
+ ['xmlout',['XmlOut',['../classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc',1,'zen::XmlOut::XmlOut(XmlDoc &amp;doc)'],['../classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0',1,'zen::XmlOut::XmlOut(XmlElement &amp;element)']]],
+ ['xmlparsingerror',['XmlParsingError',['../structzen_1_1_xml_parsing_error.html',1,'zen']]]
+];
diff --git a/zenxml/doc/search/all_7a.html b/zenxml/doc/search/all_7a.html
new file mode 100644
index 00000000..0593a62d
--- /dev/null
+++ b/zenxml/doc/search/all_7a.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_7a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/all_7a.js b/zenxml/doc/search/all_7a.js
new file mode 100644
index 00000000..14074229
--- /dev/null
+++ b/zenxml/doc/search/all_7a.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['zen',['zen',['../namespacezen.html',1,'']]]
+];
diff --git a/zenxml/doc/search/classes_78.html b/zenxml/doc/search/classes_78.html
new file mode 100644
index 00000000..dfce8ecc
--- /dev/null
+++ b/zenxml/doc/search/classes_78.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_78.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/classes_78.js b/zenxml/doc/search/classes_78.js
new file mode 100644
index 00000000..fa78dcd3
--- /dev/null
+++ b/zenxml/doc/search/classes_78.js
@@ -0,0 +1,10 @@
+var searchData=
+[
+ ['xmldoc',['XmlDoc',['../classzen_1_1_xml_doc.html',1,'zen']]],
+ ['xmlelement',['XmlElement',['../classzen_1_1_xml_element.html',1,'zen']]],
+ ['xmlerror',['XmlError',['../structzen_1_1_xml_error.html',1,'zen']]],
+ ['xmlfileerror',['XmlFileError',['../structzen_1_1_xml_file_error.html',1,'zen']]],
+ ['xmlin',['XmlIn',['../classzen_1_1_xml_in.html',1,'zen']]],
+ ['xmlout',['XmlOut',['../classzen_1_1_xml_out.html',1,'zen']]],
+ ['xmlparsingerror',['XmlParsingError',['../structzen_1_1_xml_parsing_error.html',1,'zen']]]
+];
diff --git a/zenxml/doc/search/close.png b/zenxml/doc/search/close.png
new file mode 100644
index 00000000..9342d3df
--- /dev/null
+++ b/zenxml/doc/search/close.png
Binary files differ
diff --git a/zenxml/doc/search/functions_61.html b/zenxml/doc/search/functions_61.html
new file mode 100644
index 00000000..7f395337
--- /dev/null
+++ b/zenxml/doc/search/functions_61.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_61.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/functions_61.js b/zenxml/doc/search/functions_61.js
new file mode 100644
index 00000000..2b7cd296
--- /dev/null
+++ b/zenxml/doc/search/functions_61.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['addchild',['addChild',['../classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9',1,'zen::XmlElement']]],
+ ['attribute',['attribute',['../classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805',1,'zen::XmlOut::attribute()'],['../classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01',1,'zen::XmlIn::attribute()']]]
+];
diff --git a/zenxml/doc/search/functions_65.html b/zenxml/doc/search/functions_65.html
new file mode 100644
index 00000000..a77debae
--- /dev/null
+++ b/zenxml/doc/search/functions_65.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_65.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/functions_65.js b/zenxml/doc/search/functions_65.js
new file mode 100644
index 00000000..46ba186a
--- /dev/null
+++ b/zenxml/doc/search/functions_65.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['errorsoccured',['errorsOccured',['../classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a',1,'zen::XmlIn']]]
+];
diff --git a/zenxml/doc/search/functions_67.html b/zenxml/doc/search/functions_67.html
new file mode 100644
index 00000000..d0ab42a3
--- /dev/null
+++ b/zenxml/doc/search/functions_67.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_67.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/functions_67.js b/zenxml/doc/search/functions_67.js
new file mode 100644
index 00000000..029444b8
--- /dev/null
+++ b/zenxml/doc/search/functions_67.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+ ['get',['get',['../classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f',1,'zen::XmlIn']]],
+ ['getattribute',['getAttribute',['../classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887',1,'zen::XmlElement']]],
+ ['getchild',['getChild',['../classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e',1,'zen::XmlElement::getChild(const String &amp;name) const '],['../classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658',1,'zen::XmlElement::getChild(const String &amp;name)']]],
+ ['getchildren',['getChildren',['../classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8',1,'zen::XmlElement::getChildren(const String &amp;name) const '],['../classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d',1,'zen::XmlElement::getChildren(const String &amp;name)'],['../classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2',1,'zen::XmlElement::getChildren() const '],['../classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96',1,'zen::XmlElement::getChildren()']]],
+ ['getencodingas',['getEncodingAs',['../classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da',1,'zen::XmlDoc']]],
+ ['geterrorsas',['getErrorsAs',['../classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e',1,'zen::XmlIn']]],
+ ['getnameas',['getNameAs',['../classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50',1,'zen::XmlElement']]],
+ ['getstandaloneas',['getStandaloneAs',['../classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4',1,'zen::XmlDoc']]],
+ ['getvalue',['getValue',['../classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070',1,'zen::XmlElement']]],
+ ['getversionas',['getVersionAs',['../classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665',1,'zen::XmlDoc']]]
+];
diff --git a/zenxml/doc/search/functions_6c.html b/zenxml/doc/search/functions_6c.html
new file mode 100644
index 00000000..da371cfa
--- /dev/null
+++ b/zenxml/doc/search/functions_6c.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_6c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/functions_6c.js b/zenxml/doc/search/functions_6c.js
new file mode 100644
index 00000000..93c6b2bd
--- /dev/null
+++ b/zenxml/doc/search/functions_6c.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['load',['load',['../namespacezen.html#a900c1fb290f0eedc24354c487145dbee',1,'zen']]],
+ ['loadstream',['loadStream',['../namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607',1,'zen']]]
+];
diff --git a/zenxml/doc/search/functions_6e.html b/zenxml/doc/search/functions_6e.html
new file mode 100644
index 00000000..d734dd07
--- /dev/null
+++ b/zenxml/doc/search/functions_6e.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_6e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/functions_6e.js b/zenxml/doc/search/functions_6e.js
new file mode 100644
index 00000000..250e97da
--- /dev/null
+++ b/zenxml/doc/search/functions_6e.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['next',['next',['../classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4',1,'zen::XmlIn']]]
+];
diff --git a/zenxml/doc/search/functions_6f.html b/zenxml/doc/search/functions_6f.html
new file mode 100644
index 00000000..222f0f83
--- /dev/null
+++ b/zenxml/doc/search/functions_6f.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_6f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/functions_6f.js b/zenxml/doc/search/functions_6f.js
new file mode 100644
index 00000000..4152ba50
--- /dev/null
+++ b/zenxml/doc/search/functions_6f.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['_2a',['*',['../classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72',1,'zen::XmlIn']]],
+ ['operator_28_29',['operator()',['../classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb',1,'zen::XmlOut::operator()()'],['../classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506',1,'zen::XmlIn::operator()()']]],
+ ['operator_5b_5d',['operator[]',['../classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831',1,'zen::XmlOut::operator[]()'],['../classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d',1,'zen::XmlIn::operator[]()']]]
+];
diff --git a/zenxml/doc/search/functions_70.html b/zenxml/doc/search/functions_70.html
new file mode 100644
index 00000000..c62125ed
--- /dev/null
+++ b/zenxml/doc/search/functions_70.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_70.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/functions_70.js b/zenxml/doc/search/functions_70.js
new file mode 100644
index 00000000..b293cd99
--- /dev/null
+++ b/zenxml/doc/search/functions_70.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['parent',['parent',['../classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1',1,'zen::XmlElement::parent()'],['../classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c',1,'zen::XmlElement::parent() const ']]],
+ ['parse',['parse',['../namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7',1,'zen']]]
+];
diff --git a/zenxml/doc/search/functions_72.html b/zenxml/doc/search/functions_72.html
new file mode 100644
index 00000000..a4336f7c
--- /dev/null
+++ b/zenxml/doc/search/functions_72.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_72.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/functions_72.js b/zenxml/doc/search/functions_72.js
new file mode 100644
index 00000000..86b2b142
--- /dev/null
+++ b/zenxml/doc/search/functions_72.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['readstruc',['readStruc',['../namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1',1,'zen']]],
+ ['readtext',['readText',['../namespacezen.html#acaf85ab94b61882f957afcd355386bff',1,'zen']]],
+ ['ref',['ref',['../classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2',1,'zen::XmlOut']]],
+ ['removeattribute',['removeAttribute',['../classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934',1,'zen::XmlElement']]],
+ ['root',['root',['../classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d',1,'zen::XmlDoc::root() const '],['../classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e',1,'zen::XmlDoc::root()']]]
+];
diff --git a/zenxml/doc/search/functions_73.html b/zenxml/doc/search/functions_73.html
new file mode 100644
index 00000000..774d577f
--- /dev/null
+++ b/zenxml/doc/search/functions_73.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_73.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/functions_73.js b/zenxml/doc/search/functions_73.js
new file mode 100644
index 00000000..a062befe
--- /dev/null
+++ b/zenxml/doc/search/functions_73.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+ ['save',['save',['../namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d',1,'zen']]],
+ ['savestream',['saveStream',['../namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2',1,'zen']]],
+ ['serialize',['serialize',['../namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee',1,'zen']]],
+ ['setattribute',['setAttribute',['../classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421',1,'zen::XmlElement']]],
+ ['setencoding',['setEncoding',['../classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62',1,'zen::XmlDoc']]],
+ ['setstandalone',['setStandalone',['../classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4',1,'zen::XmlDoc']]],
+ ['setvalue',['setValue',['../classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01',1,'zen::XmlElement']]],
+ ['setversion',['setVersion',['../classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64',1,'zen::XmlDoc']]]
+];
diff --git a/zenxml/doc/search/functions_77.html b/zenxml/doc/search/functions_77.html
new file mode 100644
index 00000000..8fe97554
--- /dev/null
+++ b/zenxml/doc/search/functions_77.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_77.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/functions_77.js b/zenxml/doc/search/functions_77.js
new file mode 100644
index 00000000..5e349623
--- /dev/null
+++ b/zenxml/doc/search/functions_77.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['writestruc',['writeStruc',['../namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6',1,'zen']]],
+ ['writetext',['writeText',['../namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f',1,'zen']]]
+];
diff --git a/zenxml/doc/search/functions_78.html b/zenxml/doc/search/functions_78.html
new file mode 100644
index 00000000..2b33d25e
--- /dev/null
+++ b/zenxml/doc/search/functions_78.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_78.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/functions_78.js b/zenxml/doc/search/functions_78.js
new file mode 100644
index 00000000..b9817184
--- /dev/null
+++ b/zenxml/doc/search/functions_78.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['xmldoc',['XmlDoc',['../classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed',1,'zen::XmlDoc::XmlDoc()'],['../classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df',1,'zen::XmlDoc::XmlDoc(String rootName)']]],
+ ['xmlin',['XmlIn',['../classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f',1,'zen::XmlIn::XmlIn(const XmlDoc &amp;doc)'],['../classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430',1,'zen::XmlIn::XmlIn(const XmlElement *element)'],['../classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8',1,'zen::XmlIn::XmlIn(const XmlElement &amp;element)']]],
+ ['xmlout',['XmlOut',['../classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc',1,'zen::XmlOut::XmlOut(XmlDoc &amp;doc)'],['../classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0',1,'zen::XmlOut::XmlOut(XmlElement &amp;element)']]]
+];
diff --git a/zenxml/doc/search/mag_sel.png b/zenxml/doc/search/mag_sel.png
new file mode 100644
index 00000000..81f6040a
--- /dev/null
+++ b/zenxml/doc/search/mag_sel.png
Binary files differ
diff --git a/zenxml/doc/search/namespaces_7a.html b/zenxml/doc/search/namespaces_7a.html
new file mode 100644
index 00000000..c8f3629d
--- /dev/null
+++ b/zenxml/doc/search/namespaces_7a.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="namespaces_7a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/namespaces_7a.js b/zenxml/doc/search/namespaces_7a.js
new file mode 100644
index 00000000..14074229
--- /dev/null
+++ b/zenxml/doc/search/namespaces_7a.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['zen',['zen',['../namespacezen.html',1,'']]]
+];
diff --git a/zenxml/doc/search/nomatches.html b/zenxml/doc/search/nomatches.html
new file mode 100644
index 00000000..b1ded27e
--- /dev/null
+++ b/zenxml/doc/search/nomatches.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/search.css b/zenxml/doc/search/search.css
new file mode 100644
index 00000000..d18c1da8
--- /dev/null
+++ b/zenxml/doc/search/search.css
@@ -0,0 +1,238 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+ float: left;
+}
+
+#MSearchBox {
+ white-space : nowrap;
+ position: absolute;
+ float: none;
+ display: inline;
+ margin-top: 8px;
+ right: 0px;
+ width: 170px;
+ z-index: 102;
+ background-color: white;
+}
+
+#MSearchBox .left
+{
+ display:block;
+ position:absolute;
+ left:10px;
+ width:20px;
+ height:19px;
+ background:url('search_l.png') no-repeat;
+ background-position:right;
+}
+
+#MSearchSelect {
+ display:block;
+ position:absolute;
+ width:20px;
+ height:19px;
+}
+
+.left #MSearchSelect {
+ left:4px;
+}
+
+.right #MSearchSelect {
+ right:5px;
+}
+
+#MSearchField {
+ display:block;
+ position:absolute;
+ height:19px;
+ background:url('search_m.png') repeat-x;
+ border:none;
+ width:116px;
+ margin-left:20px;
+ padding-left:4px;
+ color: #909090;
+ outline: none;
+ font: 9pt Arial, Verdana, sans-serif;
+}
+
+#FSearchBox #MSearchField {
+ margin-left:15px;
+}
+
+#MSearchBox .right {
+ display:block;
+ position:absolute;
+ right:10px;
+ top:0px;
+ width:20px;
+ height:19px;
+ background:url('search_r.png') no-repeat;
+ background-position:left;
+}
+
+#MSearchClose {
+ display: none;
+ position: absolute;
+ top: 4px;
+ background : none;
+ border: none;
+ margin: 0px 4px 0px 0px;
+ padding: 0px 0px;
+ outline: none;
+}
+
+.left #MSearchClose {
+ left: 6px;
+}
+
+.right #MSearchClose {
+ right: 2px;
+}
+
+.MSearchBoxActive #MSearchField {
+ color: #000000;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #90A5CE;
+ background-color: #F9FAFC;
+ z-index: 1;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+ font: 8pt Arial, Verdana, sans-serif;
+ padding-left: 2px;
+ padding-right: 12px;
+ border: 0px;
+}
+
+span.SelectionMark {
+ margin-right: 4px;
+ font-family: monospace;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem {
+ display: block;
+ outline-style: none;
+ color: #000000;
+ text-decoration: none;
+ padding-left: 6px;
+ padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+ color: #000000;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem:hover {
+ color: #FFFFFF;
+ background-color: #3D578C;
+ outline-style: none;
+ text-decoration: none;
+ cursor: pointer;
+ display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+ width: 60ex;
+ height: 15em;
+}
+
+#MSearchResultsWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #000;
+ background-color: #EEF1F7;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+ clear:both;
+ padding-bottom: 15px;
+}
+
+.SREntry {
+ font-size: 10pt;
+ padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+ font-size: 8pt;
+ padding: 1px 5px;
+}
+
+body.SRPage {
+ margin: 5px 2px;
+}
+
+.SRChildren {
+ padding-left: 3ex; padding-bottom: .5em
+}
+
+.SRPage .SRChildren {
+ display: none;
+}
+
+.SRSymbol {
+ font-weight: bold;
+ color: #425E97;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRScope {
+ display: block;
+ color: #425E97;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+ text-decoration: underline;
+}
+
+span.SRScope {
+ padding-left: 4px;
+}
+
+.SRPage .SRStatus {
+ padding: 2px 5px;
+ font-size: 8pt;
+ font-style: italic;
+}
+
+.SRResult {
+ display: none;
+}
+
+DIV.searchresults {
+ margin-left: 10px;
+ margin-right: 10px;
+}
diff --git a/zenxml/doc/search/search.js b/zenxml/doc/search/search.js
new file mode 100644
index 00000000..e2269bf9
--- /dev/null
+++ b/zenxml/doc/search/search.js
@@ -0,0 +1,803 @@
+// Search script generated by doxygen
+// Copyright (C) 2009 by Dimitri van Heesch.
+
+// The code in this file is loosly based on main.js, part of Natural Docs,
+// which is Copyright (C) 2003-2008 Greg Valure
+// Natural Docs is licensed under the GPL.
+
+var indexSectionsWithContent =
+{
+ 0: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101010100001011101100011010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ 1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ 2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ 3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100010100001011101100011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ 4: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000001000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+};
+
+var indexSectionNames =
+{
+ 0: "all",
+ 1: "classes",
+ 2: "namespaces",
+ 3: "functions",
+ 4: "variables"
+};
+
+function convertToId(search)
+{
+ var result = '';
+ for (i=0;i<search.length;i++)
+ {
+ var c = search.charAt(i);
+ var cn = c.charCodeAt(0);
+ if (c.match(/[a-z0-9]/))
+ {
+ result+=c;
+ }
+ else if (cn<16)
+ {
+ result+="_0"+cn.toString(16);
+ }
+ else
+ {
+ result+="_"+cn.toString(16);
+ }
+ }
+ return result;
+}
+
+function getXPos(item)
+{
+ var x = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ x += item.offsetLeft;
+ item = item.offsetParent;
+ }
+ }
+ return x;
+}
+
+function getYPos(item)
+{
+ var y = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ y += item.offsetTop;
+ item = item.offsetParent;
+ }
+ }
+ return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+ Parameters:
+ name - The name of the global variable that will be
+ storing this instance. Is needed to be able to set timeouts.
+ resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, inFrame, label)
+{
+ if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
+
+ // ---------- Instance variables
+ this.name = name;
+ this.resultsPath = resultsPath;
+ this.keyTimeout = 0;
+ this.keyTimeoutLength = 500;
+ this.closeSelectionTimeout = 300;
+ this.lastSearchValue = "";
+ this.lastResultsPage = "";
+ this.hideTimeout = 0;
+ this.searchIndex = 0;
+ this.searchActive = false;
+ this.insideFrame = inFrame;
+ this.searchLabel = label;
+
+ // ----------- DOM Elements
+
+ this.DOMSearchField = function()
+ { return document.getElementById("MSearchField"); }
+
+ this.DOMSearchSelect = function()
+ { return document.getElementById("MSearchSelect"); }
+
+ this.DOMSearchSelectWindow = function()
+ { return document.getElementById("MSearchSelectWindow"); }
+
+ this.DOMPopupSearchResults = function()
+ { return document.getElementById("MSearchResults"); }
+
+ this.DOMPopupSearchResultsWindow = function()
+ { return document.getElementById("MSearchResultsWindow"); }
+
+ this.DOMSearchClose = function()
+ { return document.getElementById("MSearchClose"); }
+
+ this.DOMSearchBox = function()
+ { return document.getElementById("MSearchBox"); }
+
+ // ------------ Event Handlers
+
+ // Called when focus is added or removed from the search field.
+ this.OnSearchFieldFocus = function(isActive)
+ {
+ this.Activate(isActive);
+ }
+
+ this.OnSearchSelectShow = function()
+ {
+ var searchSelectWindow = this.DOMSearchSelectWindow();
+ var searchField = this.DOMSearchSelect();
+
+ if (this.insideFrame)
+ {
+ var left = getXPos(searchField);
+ var top = getYPos(searchField);
+ left += searchField.offsetWidth + 6;
+ top += searchField.offsetHeight;
+
+ // show search selection popup
+ searchSelectWindow.style.display='block';
+ left -= searchSelectWindow.offsetWidth;
+ searchSelectWindow.style.left = left + 'px';
+ searchSelectWindow.style.top = top + 'px';
+ }
+ else
+ {
+ var left = getXPos(searchField);
+ var top = getYPos(searchField);
+ top += searchField.offsetHeight;
+
+ // show search selection popup
+ searchSelectWindow.style.display='block';
+ searchSelectWindow.style.left = left + 'px';
+ searchSelectWindow.style.top = top + 'px';
+ }
+
+ // stop selection hide timer
+ if (this.hideTimeout)
+ {
+ clearTimeout(this.hideTimeout);
+ this.hideTimeout=0;
+ }
+ return false; // to avoid "image drag" default event
+ }
+
+ this.OnSearchSelectHide = function()
+ {
+ this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+ this.closeSelectionTimeout);
+ }
+
+ // Called when the content of the search field is changed.
+ this.OnSearchFieldChange = function(evt)
+ {
+ if (this.keyTimeout) // kill running timer
+ {
+ clearTimeout(this.keyTimeout);
+ this.keyTimeout = 0;
+ }
+
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 || e.keyCode==13)
+ {
+ if (e.shiftKey==1)
+ {
+ this.OnSearchSelectShow();
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ child.focus();
+ return;
+ }
+ }
+ return;
+ }
+ else if (window.frames.MSearchResults.searchResults)
+ {
+ var elem = window.frames.MSearchResults.searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+ }
+ else if (e.keyCode==27) // Escape out of the search field
+ {
+ this.DOMSearchField().blur();
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ this.Activate(false);
+ return;
+ }
+
+ // strip whitespaces
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+ if (searchValue != this.lastSearchValue) // search value has changed
+ {
+ if (searchValue != "") // non-empty search
+ {
+ // set timer for search update
+ this.keyTimeout = setTimeout(this.name + '.Search()',
+ this.keyTimeoutLength);
+ }
+ else // empty search field
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ }
+ }
+ }
+
+ this.SelectItemCount = function(id)
+ {
+ var count=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ this.SelectItemSet = function(id)
+ {
+ var i,j=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ var node = child.firstChild;
+ if (j==id)
+ {
+ node.innerHTML='&#8226;';
+ }
+ else
+ {
+ node.innerHTML='&#160;';
+ }
+ j++;
+ }
+ }
+ }
+
+ // Called when an search filter selection is made.
+ // set item with index id as the active item
+ this.OnSelectItem = function(id)
+ {
+ this.searchIndex = id;
+ this.SelectItemSet(id);
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+ if (searchValue!="" && this.searchActive) // something was found -> do a search
+ {
+ this.Search();
+ }
+ }
+
+ this.OnSearchSelectKey = function(evt)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+ {
+ this.searchIndex++;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==38 && this.searchIndex>0) // Up
+ {
+ this.searchIndex--;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==13 || e.keyCode==27)
+ {
+ this.OnSelectItem(this.searchIndex);
+ this.CloseSelectionWindow();
+ this.DOMSearchField().focus();
+ }
+ return false;
+ }
+
+ // --------- Actions
+
+ // Closes the results window.
+ this.CloseResultsWindow = function()
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.Activate(false);
+ }
+
+ this.CloseSelectionWindow = function()
+ {
+ this.DOMSearchSelectWindow().style.display = 'none';
+ }
+
+ // Performs a search.
+ this.Search = function()
+ {
+ this.keyTimeout = 0;
+
+ // strip leading whitespace
+ var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+ var code = searchValue.toLowerCase().charCodeAt(0);
+ var hexCode;
+ if (code<16)
+ {
+ hexCode="0"+code.toString(16);
+ }
+ else
+ {
+ hexCode=code.toString(16);
+ }
+
+ var resultsPage;
+ var resultsPageWithSearch;
+ var hasResultsPage;
+
+ if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1')
+ {
+ resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
+ resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+ hasResultsPage = true;
+ }
+ else // nothing available for this search term
+ {
+ resultsPage = this.resultsPath + '/nomatches.html';
+ resultsPageWithSearch = resultsPage;
+ hasResultsPage = false;
+ }
+
+ window.frames.MSearchResults.location = resultsPageWithSearch;
+ var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+ if (domPopupSearchResultsWindow.style.display!='block')
+ {
+ var domSearchBox = this.DOMSearchBox();
+ this.DOMSearchClose().style.display = 'inline';
+ if (this.insideFrame)
+ {
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ domPopupSearchResultsWindow.style.position = 'relative';
+ domPopupSearchResultsWindow.style.display = 'block';
+ var width = document.body.clientWidth - 8; // the -8 is for IE :-(
+ domPopupSearchResultsWindow.style.width = width + 'px';
+ domPopupSearchResults.style.width = width + 'px';
+ }
+ else
+ {
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+ var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;
+ domPopupSearchResultsWindow.style.display = 'block';
+ left -= domPopupSearchResults.offsetWidth;
+ domPopupSearchResultsWindow.style.top = top + 'px';
+ domPopupSearchResultsWindow.style.left = left + 'px';
+ }
+ }
+
+ this.lastSearchValue = searchValue;
+ this.lastResultsPage = resultsPage;
+ }
+
+ // -------- Activation Functions
+
+ // Activates or deactivates the search panel, resetting things to
+ // their default values if necessary.
+ this.Activate = function(isActive)
+ {
+ if (isActive || // open it
+ this.DOMPopupSearchResultsWindow().style.display == 'block'
+ )
+ {
+ this.DOMSearchBox().className = 'MSearchBoxActive';
+
+ var searchField = this.DOMSearchField();
+
+ if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+ {
+ searchField.value = '';
+ this.searchActive = true;
+ }
+ }
+ else if (!isActive) // directly remove the panel
+ {
+ this.DOMSearchBox().className = 'MSearchBoxInactive';
+ this.DOMSearchField().value = this.searchLabel;
+ this.searchActive = false;
+ this.lastSearchValue = ''
+ this.lastResultsPage = '';
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+ // The number of matches from the last run of <Search()>.
+ this.lastMatchCount = 0;
+ this.lastKey = 0;
+ this.repeatOn = false;
+
+ // Toggles the visibility of the passed element ID.
+ this.FindChildElement = function(id)
+ {
+ var parentElement = document.getElementById(id);
+ var element = parentElement.firstChild;
+
+ while (element && element!=parentElement)
+ {
+ if (element.nodeName == 'DIV' && element.className == 'SRChildren')
+ {
+ return element;
+ }
+
+ if (element.nodeName == 'DIV' && element.hasChildNodes())
+ {
+ element = element.firstChild;
+ }
+ else if (element.nextSibling)
+ {
+ element = element.nextSibling;
+ }
+ else
+ {
+ do
+ {
+ element = element.parentNode;
+ }
+ while (element && element!=parentElement && !element.nextSibling);
+
+ if (element && element!=parentElement)
+ {
+ element = element.nextSibling;
+ }
+ }
+ }
+ }
+
+ this.Toggle = function(id)
+ {
+ var element = this.FindChildElement(id);
+ if (element)
+ {
+ if (element.style.display == 'block')
+ {
+ element.style.display = 'none';
+ }
+ else
+ {
+ element.style.display = 'block';
+ }
+ }
+ }
+
+ // Searches for the passed string. If there is no parameter,
+ // it takes it from the URL query.
+ //
+ // Always returns true, since other documents may try to call it
+ // and that may or may not be possible.
+ this.Search = function(search)
+ {
+ if (!search) // get search word from URL
+ {
+ search = window.location.search;
+ search = search.substring(1); // Remove the leading '?'
+ search = unescape(search);
+ }
+
+ search = search.replace(/^ +/, ""); // strip leading spaces
+ search = search.replace(/ +$/, ""); // strip trailing spaces
+ search = search.toLowerCase();
+ search = convertToId(search);
+
+ var resultRows = document.getElementsByTagName("div");
+ var matches = 0;
+
+ var i = 0;
+ while (i < resultRows.length)
+ {
+ var row = resultRows.item(i);
+ if (row.className == "SRResult")
+ {
+ var rowMatchName = row.id.toLowerCase();
+ rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+ if (search.length<=rowMatchName.length &&
+ rowMatchName.substr(0, search.length)==search)
+ {
+ row.style.display = 'block';
+ matches++;
+ }
+ else
+ {
+ row.style.display = 'none';
+ }
+ }
+ i++;
+ }
+ document.getElementById("Searching").style.display='none';
+ if (matches == 0) // no results
+ {
+ document.getElementById("NoMatches").style.display='block';
+ }
+ else // at least one result
+ {
+ document.getElementById("NoMatches").style.display='none';
+ }
+ this.lastMatchCount = matches;
+ return true;
+ }
+
+ // return the first item with index index or higher that is visible
+ this.NavNext = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index++;
+ }
+ return focusItem;
+ }
+
+ this.NavPrev = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index--;
+ }
+ return focusItem;
+ }
+
+ this.ProcessKeys = function(e)
+ {
+ if (e.type == "keydown")
+ {
+ this.repeatOn = false;
+ this.lastKey = e.keyCode;
+ }
+ else if (e.type == "keypress")
+ {
+ if (!this.repeatOn)
+ {
+ if (this.lastKey) this.repeatOn = true;
+ return false; // ignore first keypress after keydown
+ }
+ }
+ else if (e.type == "keyup")
+ {
+ this.lastKey = 0;
+ this.repeatOn = false;
+ }
+ return this.lastKey!=0;
+ }
+
+ this.Nav = function(evt,itemIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ var newIndex = itemIndex-1;
+ var focusItem = this.NavPrev(newIndex);
+ if (focusItem)
+ {
+ var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+ if (child && child.style.display == 'block') // children visible
+ {
+ var n=0;
+ var tmpElem;
+ while (1) // search for last child
+ {
+ tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+ if (tmpElem)
+ {
+ focusItem = tmpElem;
+ }
+ else // found it!
+ {
+ break;
+ }
+ n++;
+ }
+ }
+ }
+ if (focusItem)
+ {
+ focusItem.focus();
+ }
+ else // return focus to search field
+ {
+ parent.document.getElementById("MSearchField").focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = itemIndex+1;
+ var focusItem;
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem && elem.style.display == 'block') // children visible
+ {
+ focusItem = document.getElementById('Item'+itemIndex+'_c0');
+ }
+ if (!focusItem) focusItem = this.NavNext(newIndex);
+ if (focusItem) focusItem.focus();
+ }
+ else if (this.lastKey==39) // Right
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'block';
+ }
+ else if (this.lastKey==37) // Left
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'none';
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+
+ this.NavChild = function(evt,itemIndex,childIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ if (childIndex>0)
+ {
+ var newIndex = childIndex-1;
+ document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+ }
+ else // already at first child, jump to parent
+ {
+ document.getElementById('Item'+itemIndex).focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = childIndex+1;
+ var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+ if (!elem) // last child, jump to parent next parent
+ {
+ elem = this.NavNext(itemIndex+1);
+ }
+ if (elem)
+ {
+ elem.focus();
+ }
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+}
+
+function setKeyActions(elem,action)
+{
+ elem.setAttribute('onkeydown',action);
+ elem.setAttribute('onkeypress',action);
+ elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+ elem.setAttribute('class',attr);
+ elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+ var results = document.getElementById("SRResults");
+ for (var e=0; e<searchData.length; e++)
+ {
+ var id = searchData[e][0];
+ var srResult = document.createElement('div');
+ srResult.setAttribute('id','SR_'+id);
+ setClassAttr(srResult,'SRResult');
+ var srEntry = document.createElement('div');
+ setClassAttr(srEntry,'SREntry');
+ var srLink = document.createElement('a');
+ srLink.setAttribute('id','Item'+e);
+ setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+ setClassAttr(srLink,'SRSymbol');
+ srLink.innerHTML = searchData[e][1][0];
+ srEntry.appendChild(srLink);
+ if (searchData[e][1].length==2) // single result
+ {
+ srLink.setAttribute('href',searchData[e][1][1][0]);
+ if (searchData[e][1][1][1])
+ {
+ srLink.setAttribute('target','_parent');
+ }
+ var srScope = document.createElement('span');
+ setClassAttr(srScope,'SRScope');
+ srScope.innerHTML = searchData[e][1][1][2];
+ srEntry.appendChild(srScope);
+ }
+ else // multiple results
+ {
+ srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+ var srChildren = document.createElement('div');
+ setClassAttr(srChildren,'SRChildren');
+ for (var c=0; c<searchData[e][1].length-1; c++)
+ {
+ var srChild = document.createElement('a');
+ srChild.setAttribute('id','Item'+e+'_c'+c);
+ setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+ setClassAttr(srChild,'SRScope');
+ srChild.setAttribute('href',searchData[e][1][c+1][0]);
+ if (searchData[e][1][c+1][1])
+ {
+ srChild.setAttribute('target','_parent');
+ }
+ srChild.innerHTML = searchData[e][1][c+1][2];
+ srChildren.appendChild(srChild);
+ }
+ srEntry.appendChild(srChildren);
+ }
+ srResult.appendChild(srEntry);
+ results.appendChild(srResult);
+ }
+}
+
diff --git a/zenxml/doc/search/search_l.png b/zenxml/doc/search/search_l.png
new file mode 100644
index 00000000..c872f4da
--- /dev/null
+++ b/zenxml/doc/search/search_l.png
Binary files differ
diff --git a/zenxml/doc/search/search_m.png b/zenxml/doc/search/search_m.png
new file mode 100644
index 00000000..b429a16b
--- /dev/null
+++ b/zenxml/doc/search/search_m.png
Binary files differ
diff --git a/zenxml/doc/search/search_r.png b/zenxml/doc/search/search_r.png
new file mode 100644
index 00000000..97ee8b43
--- /dev/null
+++ b/zenxml/doc/search/search_r.png
Binary files differ
diff --git a/zenxml/doc/search/variables_63.html b/zenxml/doc/search/variables_63.html
new file mode 100644
index 00000000..c649c81f
--- /dev/null
+++ b/zenxml/doc/search/variables_63.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_63.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/variables_63.js b/zenxml/doc/search/variables_63.js
new file mode 100644
index 00000000..3c8f3573
--- /dev/null
+++ b/zenxml/doc/search/variables_63.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['col',['col',['../structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd',1,'zen::XmlParsingError']]]
+];
diff --git a/zenxml/doc/search/variables_6c.html b/zenxml/doc/search/variables_6c.html
new file mode 100644
index 00000000..6016f5cc
--- /dev/null
+++ b/zenxml/doc/search/variables_6c.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_6c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/variables_6c.js b/zenxml/doc/search/variables_6c.js
new file mode 100644
index 00000000..e2e327ad
--- /dev/null
+++ b/zenxml/doc/search/variables_6c.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['lasterror',['lastError',['../structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f',1,'zen::XmlFileError']]]
+];
diff --git a/zenxml/doc/search/variables_72.html b/zenxml/doc/search/variables_72.html
new file mode 100644
index 00000000..29b87f04
--- /dev/null
+++ b/zenxml/doc/search/variables_72.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_72.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/zenxml/doc/search/variables_72.js b/zenxml/doc/search/variables_72.js
new file mode 100644
index 00000000..f37305dd
--- /dev/null
+++ b/zenxml/doc/search/variables_72.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['row',['row',['../structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e',1,'zen::XmlParsingError']]]
+];
diff --git a/zenxml/doc/structzen_1_1_xml_error-members.html b/zenxml/doc/structzen_1_1_xml_error-members.html
new file mode 100644
index 00000000..cc906ffc
--- /dev/null
+++ b/zenxml/doc/structzen_1_1_xml_error-members.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Member List</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li>
+ <li class="navelem"><a class="el" href="structzen_1_1_xml_error.html">XmlError</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">zen::XmlError Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+This is the complete list of members for <a class="el" href="structzen_1_1_xml_error.html">zen::XmlError</a>, including all inherited members.<table>
+</table></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/structzen_1_1_xml_error.html b/zenxml/doc/structzen_1_1_xml_error.html
new file mode 100644
index 00000000..d089d6ee
--- /dev/null
+++ b/zenxml/doc/structzen_1_1_xml_error.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: zen::XmlError Struct Reference</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li>
+ <li class="navelem"><a class="el" href="structzen_1_1_xml_error.html">XmlError</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">zen::XmlError Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Exception base class for zen::Xml.
+ <a href="structzen_1_1_xml_error.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="error_8h_source.html">error.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for zen::XmlError:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="structzen_1_1_xml_error.png" usemap="#zen::XmlError_map" alt=""/>
+ <map id="zen::XmlError_map" name="zen::XmlError_map">
+<area href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O." alt="zen::XmlFileError" shape="rect" coords="0,56,132,80"/>
+<area href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error." alt="zen::XmlParsingError" shape="rect" coords="142,56,274,80"/>
+</map>
+ </div></div>
+
+<p><a href="structzen_1_1_xml_error-members.html">List of all members.</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Exception base class for zen::Xml. </p>
+</div></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/structzen_1_1_xml_error.png b/zenxml/doc/structzen_1_1_xml_error.png
new file mode 100644
index 00000000..0fc21923
--- /dev/null
+++ b/zenxml/doc/structzen_1_1_xml_error.png
Binary files differ
diff --git a/zenxml/doc/structzen_1_1_xml_file_error-members.html b/zenxml/doc/structzen_1_1_xml_file_error-members.html
new file mode 100644
index 00000000..53a1115a
--- /dev/null
+++ b/zenxml/doc/structzen_1_1_xml_file_error-members.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Member List</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li>
+ <li class="navelem"><a class="el" href="structzen_1_1_xml_file_error.html">XmlFileError</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">zen::XmlFileError Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+This is the complete list of members for <a class="el" href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a>, including all inherited members.<table>
+ <tr class="memlist"><td><a class="el" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">lastError</a></td><td><a class="el" href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a></td><td></td></tr>
+</table></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/structzen_1_1_xml_file_error.html b/zenxml/doc/structzen_1_1_xml_file_error.html
new file mode 100644
index 00000000..c7e54c33
--- /dev/null
+++ b/zenxml/doc/structzen_1_1_xml_file_error.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: zen::XmlFileError Struct Reference</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li>
+ <li class="navelem"><a class="el" href="structzen_1_1_xml_file_error.html">XmlFileError</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Public Attributes</a> </div>
+ <div class="headertitle">
+<div class="title">zen::XmlFileError Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Exception thrown due to failed file I/O.
+ <a href="structzen_1_1_xml_file_error.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="io_8h_source.html">io.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for zen::XmlFileError:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="structzen_1_1_xml_file_error.png" usemap="#zen::XmlFileError_map" alt=""/>
+ <map id="zen::XmlFileError_map" name="zen::XmlFileError_map">
+<area href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml." alt="zen::XmlError" shape="rect" coords="0,0,110,24"/>
+</map>
+ </div></div>
+
+<p><a href="structzen_1_1_xml_file_error-members.html">List of all members.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a4a109e749675a3887af8cfc140303b8f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a109e749675a3887af8cfc140303b8f"></a>
+ErrorCode&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">lastError</a></td></tr>
+<tr class="memdesc:a4a109e749675a3887af8cfc140303b8f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Native error code: errno. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Exception thrown due to failed file I/O. </p>
+</div></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/structzen_1_1_xml_file_error.png b/zenxml/doc/structzen_1_1_xml_file_error.png
new file mode 100644
index 00000000..6393414f
--- /dev/null
+++ b/zenxml/doc/structzen_1_1_xml_file_error.png
Binary files differ
diff --git a/zenxml/doc/structzen_1_1_xml_parsing_error-members.html b/zenxml/doc/structzen_1_1_xml_parsing_error-members.html
new file mode 100644
index 00000000..acc507ae
--- /dev/null
+++ b/zenxml/doc/structzen_1_1_xml_parsing_error-members.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: Member List</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li>
+ <li class="navelem"><a class="el" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">zen::XmlParsingError Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+This is the complete list of members for <a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a>, including all inherited members.<table>
+ <tr class="memlist"><td><a class="el" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">col</a></td><td><a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">row</a></td><td><a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a></td><td></td></tr>
+</table></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/structzen_1_1_xml_parsing_error.html b/zenxml/doc/structzen_1_1_xml_parsing_error.html
new file mode 100644
index 00000000..bece27d7
--- /dev/null
+++ b/zenxml/doc/structzen_1_1_xml_parsing_error.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: zen::XmlParsingError Struct Reference</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li>
+ <li class="navelem"><a class="el" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a> </li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Public Attributes</a> </div>
+ <div class="headertitle">
+<div class="title">zen::XmlParsingError Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Exception thrown due to an XML parsing error.
+ <a href="structzen_1_1_xml_parsing_error.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="parser_8h_source.html">parser.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for zen::XmlParsingError:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="structzen_1_1_xml_parsing_error.png" usemap="#zen::XmlParsingError_map" alt=""/>
+ <map id="zen::XmlParsingError_map" name="zen::XmlParsingError_map">
+<area href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml." alt="zen::XmlError" shape="rect" coords="0,0,132,24"/>
+</map>
+ </div></div>
+
+<p><a href="structzen_1_1_xml_parsing_error-members.html">List of all members.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a3ed4cd1b5599df9b52500f620421496e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ed4cd1b5599df9b52500f620421496e"></a>
+size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">row</a></td></tr>
+<tr class="memdesc:a3ed4cd1b5599df9b52500f620421496e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Input file row where the parsing error occured (zero-based) <br/></td></tr>
+<tr class="memitem:a4a37dc48883337499804a9dc791669fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a37dc48883337499804a9dc791669fd"></a>
+size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">col</a></td></tr>
+<tr class="memdesc:a4a37dc48883337499804a9dc791669fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Input file column where the parsing error occured (zero-based) <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Exception thrown due to an XML parsing error. </p>
+</div></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/doc/structzen_1_1_xml_parsing_error.png b/zenxml/doc/structzen_1_1_xml_parsing_error.png
new file mode 100644
index 00000000..f0eb8f79
--- /dev/null
+++ b/zenxml/doc/structzen_1_1_xml_parsing_error.png
Binary files differ
diff --git a/zenxml/doc/tab_a.png b/zenxml/doc/tab_a.png
new file mode 100644
index 00000000..2d99ef23
--- /dev/null
+++ b/zenxml/doc/tab_a.png
Binary files differ
diff --git a/zenxml/doc/tab_b.png b/zenxml/doc/tab_b.png
new file mode 100644
index 00000000..b2c3d2be
--- /dev/null
+++ b/zenxml/doc/tab_b.png
Binary files differ
diff --git a/zenxml/doc/tab_h.png b/zenxml/doc/tab_h.png
new file mode 100644
index 00000000..c11f48f1
--- /dev/null
+++ b/zenxml/doc/tab_h.png
Binary files differ
diff --git a/zenxml/doc/tab_s.png b/zenxml/doc/tab_s.png
new file mode 100644
index 00000000..978943ac
--- /dev/null
+++ b/zenxml/doc/tab_s.png
Binary files differ
diff --git a/zenxml/doc/tabs.css b/zenxml/doc/tabs.css
new file mode 100644
index 00000000..21920562
--- /dev/null
+++ b/zenxml/doc/tabs.css
@@ -0,0 +1,59 @@
+.tabs, .tabs2, .tabs3 {
+ background-image: url('tab_b.png');
+ width: 100%;
+ z-index: 101;
+ font-size: 13px;
+}
+
+.tabs2 {
+ font-size: 10px;
+}
+.tabs3 {
+ font-size: 9px;
+}
+
+.tablist {
+ margin: 0;
+ padding: 0;
+ display: table;
+}
+
+.tablist li {
+ float: left;
+ display: table-cell;
+ background-image: url('tab_b.png');
+ line-height: 36px;
+ list-style: none;
+}
+
+.tablist a {
+ display: block;
+ padding: 0 20px;
+ font-weight: bold;
+ background-image:url('tab_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color: #283A5D;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+ outline: none;
+}
+
+.tabs3 .tablist a {
+ padding: 0 10px;
+}
+
+.tablist a:hover {
+ background-image: url('tab_h.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+ text-decoration: none;
+}
+
+.tablist li.current a {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
diff --git a/zenxml/doc/xml_8h_source.html b/zenxml/doc/xml_8h_source.html
new file mode 100644
index 00000000..ecdce60a
--- /dev/null
+++ b/zenxml/doc/xml_8h_source.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>zen::Xml: xml.h Source File</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+
+ <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td>
+
+
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">zen::Xml
+
+ </div>
+ <div id="projectbrief">Simple C++ XML Processing</div>
+ </td>
+
+
+
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.8.0 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">xml.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span>
+<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span>
+<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span>
+<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span>
+<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span>
+<a name="l00006"></a>00006
+<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_HEADER_349578228034572457454554</span>
+<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_HEADER_349578228034572457454554</span>
+<a name="l00009"></a>00009 <span class="preprocessor"></span>
+<a name="l00010"></a>00010 <span class="preprocessor">#include &quot;bind.h&quot;</span>
+<a name="l00011"></a>00011
+<a name="l00013"></a>00013 <span class="keyword">namespace </span>zen {}
+<a name="l00014"></a>00014
+<a name="l00015"></a>00015 <span class="preprocessor">#endif //ZEN_XML_HEADER_349578228034572457454554</span>
+</pre></div></div><!-- contents -->
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.0
+</small></address>
+
+</body>
+</html>
diff --git a/zenxml/summary.dox b/zenxml/summary.dox
deleted file mode 100644
index abe0537d..00000000
--- a/zenxml/summary.dox
+++ /dev/null
@@ -1,684 +0,0 @@
-// **************************************************************************
-// * This file is part of the zen::Xml project. It is distributed under the *
-// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *
-// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *
-// **************************************************************************
-
-/**
-\mainpage Overview
-
-\li \ref sec_Rationale
-\li \ref sec_Quick_Start
-\li \ref sec_Supported_Platforms
-\li \ref sec_Flexible_Programming_Model
-\li \ref sec_Structured_XML_element_access
-\li \ref sec_Access_XML_attributes
-\li \ref sec_Automatic_conversion_built_in
-\li \ref sec_Automatic_conversion_string
-\li \ref sec_Automatic_conversion_STL
-\li \ref sec_Support_user_defined
-\li \ref sec_Structured_user_types
-\li \ref sec_Type_Safety
-
-\section sec_Rationale Rationale
-
-zen::Xml is an XML library serializing structured user data in a convenient way.
-Using compile-time information gathered by techniques of template metaprogramming it minimizes the manual overhead required and frees the user from implementing fundamental type conversions
-by himself. Basic data types such as
-- \b all built-in arithmetic numbers,
-- \b all kinds of string classes and "string-like" types,
-- \b all types defined as STL containers
-
-are handled automatically. Thereby a large number of recurring problems is solved by the library:
-- generic number to string conversions
-- generic char to wchar_t conversions (UTF) for custom string classes in a platform independent manner
-- serialization of arbitrary STL container types
-- simple integration: header-only, no extra dependencies, fully portable
-- support arbitrary string classes everywhere: for file names, XML element names, attribute names, values, ...
-- XML library built on C++11 with focus on elegance, minimal code size, flexibility and performance
-- easily extensible API: allow for internationalization, fine-granular error handling, and custom file I/O
-
-The design follows the philosophy of the Loki library: \n
-http://loki-lib.sourceforge.net/index.php?n=Main.Philosophy
-
-\section sec_Quick_Start Quick Start
-
-1. Download zen::Xml: http://sourceforge.net/projects/zenxml
-
-2. Setup one of the following preprocessor macros for your project to identify the platform (this is only required if you use C-stream-based file IO)
-\code
- ZEN_WIN
- ZEN_LINUX
- ZEN_MAC
-\endcode
-
-3. For optimal performance define this global macro in release build: (following convention of the <tt>assert</tt> macro)
-\code
- NDEBUG
-\endcode
-
-4. Include the main header:
-\code
-#include <zenxml/xml.h>
-\endcode
-
-5. Start serializing user data:
-
-\code
-size_t a = 10;
-double b = 2.0;
-int c = -1;
-\endcode
-
-\code
-zen::XmlDoc doc; //empty XML document
-
-zen::XmlOut out(doc); //the simplest way to fill the document is to use a data output proxy
-out["elem1"](a); //
-out["elem2"](b); //map data types to XML elements
-out["elem3"](c); //
-
-try
-{
- save(doc, "file.xml"); //throw zen::XmlFileError
-}
-catch (const zen::XmlFileError& e) { /* handle error */ }
-\endcode
-
-The following XML file will be created:
-\verbatim
-<?xml version="1.0" encoding="UTF-8"?>
-<Root>
- <elem1>10</elem1>
- <elem2>2.000000</elem2>
- <elem3>-1</elem3>
-</Root>
-\endverbatim
-
-Load an XML file and map its content to user data:
-\code
-zen::XmlDoc doc; //empty XML document
-
-try
-{
- load("file.xml", doc); //throw XmlFileError, XmlParsingError
-}
-catch (const zen::XmlError& e) { /* handle error */ }
-
-zen::XmlIn in(doc); //the simplest way to read the document is to use a data input proxy
-in["elem1"](a); //
-in["elem2"](b); //map XML elements into user data
-in["elem3"](c); //
-
-//check for mapping errors, i.e. missing elements or conversion errors: you may consider these as warnings only
-if (in.errorsOccured())
-{
- std::vector<std::wstring> failedElements = in.getErrorsAs<std::wstring>();
- /* generate error message showing the XML element names that failed to convert */
-}
-\endcode
-
-
-\section sec_Supported_Platforms Supported Platforms
-
-zen::Xml is written in a platform independent manner and runs on any rudimentary C++11 compliant compiler.
-It has been tested successfully under:
-
-- Windows:
- -# Visual C++ 2010 - 32 bit
- -# Visual C++ 2010 - 64 bit
- -# MinGW: GCC 4.5.2 - 32 bit
-
-- Linux:
- -# GCC 4.5.2 - 32 bit
- -# GCC 4.5.2 - 64 bit
-
-- Mac OS X:
- -# Clang 3.2 - 64 bit
-
-<b>Note:</b> In order to enable C++11 features in GCC it is required to specify either of the following compiler options:
-\verbatim
--std=c++11
--std=c++0x
--std=gnu++0x
-\endverbatim
-
-
-\section sec_Flexible_Programming_Model Flexible Programming Model
-
-Depending on what granularity of control is required in a particular application, zen::Xml allows the user to choose between full control or simplicity.
-\n\n
-The library is structured into the following parts, each of which can be used in isolation:
-\n\n
-\b \<File\> \n
-|\n
-| io.h\n
-|\n
-<b>\<Byte Stream\></b>\n
-|\n
-| parser.h\n
-|\n
-<b>\<Document Object Model\></b>\n
-|\n
-| bind.h\n
-|\n
-<b>\<C++ user data\></b>
-\n\n
-
-- Save an XML document to memory
-\code
-zen::XmlDoc doc;
- ... //fill it
-std::string stream = serialize(doc); //throw ()
-/* you now have a binary XML stream */
-
-saveStream(stream, "file.xml"); //throw XmlFileError
-//if all you need is to store XmlDoc in a file direcly you can use zen::save() instead
-\endcode
-
-- Load XML document from memory
-\code
-//get XML byte stream:
-std::string stream = loadStream("file.xml"); //throw XmlFileError
-
-zen::XmlDoc doc;
-//parse byte stream into an XML document:
-parse(stream, doc); //throw XmlParsingError
-//if all you need is to load an XmlDoc from a file you can use zen::load() directly
-\endcode
-
-- Fine-granular error checking with the data input proxy
-\code
-zen::XmlIn in(doc);
-//map XML elements into user data
-if (!in["elem1"](a))
- throw MyCustomException();
-if (!in["elem2"](b))
- throw MyCustomException();
-if (!in["elem3"](c))
- throw MyCustomException();
-
-//if (in.errorsOccured()) ... <- not required here: contains the same conversion errors checked manually before
-\endcode
-
-- Access the Document Object Model directly (without input/output proxy)
-\n\n
-The full power of type conversions which is available via the input/output proxy classes zen::XmlIn and zen::XmlOut is also available for the document object model!
-\code
-using namespace zen;
-
-XmlDoc doc;
-
-XmlElement& child = doc.root().addChild("elem1");
-child.setValue(1234);
-
-save(doc, "file.xml"); //throw XmlFileError
-\endcode
-\n
-\code
-using namespace zen;
-
-XmlDoc doc;
-load("file.xml", doc); //throw XmlFileError, XmlParsingError
-
-XmlElement* child = doc.root().getChild("elem1");
-if (child)
-{
- int value = -1;
- if (!child->getValue(value))
- ... //handle conversion error
-}
-else
- ... //XML element not found
-\endcode
-
-
-\section sec_Structured_XML_element_access Structured XML element access
-
-\code
-//write a value into one deeply nested XML element - note the different types used seamlessly: char[], wchar_t[], char, wchar_t, int
-zen::XmlOut out(doc);
-out["elemento1"][L"элемент2"][L"要素3"][L"στοιχείο4"]["elem5"][L"元素6"][L'元']['z'](-1234);
-\endcode
-
-The resulting XML:
-\verbatim
-<?xml version="1.0" encoding="UTF-8"?>
-<Root>
- <elemento1>
- <элемент2>
- <要素3>
- <στοιχείο4>
- <elem5>
- <元素6>
- <元>
- <z>-1234</z>
- </元>
- </元素6>
- </elem5>
- </στοιχείο4>
- </要素3>
- </элемент2>
- </elemento1>
-</Root>
-\endverbatim
-
-
-\section sec_Access_XML_attributes Access XML attributes
-
-\code
-zen::XmlDoc doc;
-
-zen::XmlOut out(doc);
-out["elem"].attribute("attr1", -1); //
-out["elem"].attribute("attr2", 2.1); //write data into XML attributes
-out["elem"].attribute("attr3", true); //
-
-save(doc, "file.xml"); //throw XmlFileError
-\endcode
-
-The resulting XML:
-\verbatim
-<?xml version="1.0" encoding="UTF-8"?>
-<Root>
- <elem attr1="-1" attr2="2.1" attr3="true"/>
-</Root>
-\endverbatim
-
-
-\section sec_Automatic_conversion_built_in Automatic conversion for built-in arithmetic types
-
-All built-in arithmetic types and <tt>bool</tt> are detected at compile time and a proper conversion is applied.
-Common conversions for integer-like types such as <tt>int</tt>, <tt>long</tt>, <tt>long long</tt>, ect. as well as floating point types are optimized for maximum performance.
-
-\code
-zen::XmlOut out(doc);
-
-out["int"] (-1234);
-out["double"](1.23);
-out["float"] (4.56f);
-out["ulong"] (1234UL);
-out["bool"] (false);
-\endcode
-
-The resulting XML:
-\verbatim
-<?xml version="1.0" encoding="UTF-8"?>
-<Root>
- <int>-1234</int>
- <double>1.23</double>
- <float>4.56</float>
- <ulong>1234</ulong>
- <bool>false</bool>
-</Root>
-\endverbatim
-
-
-\section sec_Automatic_conversion_string Automatic conversion for string-like types
-
-The document object model of zen::Xml internally stores all names and values as a std::string. Consequently everything that is not a std::string but is "string-like" is UTF-converted
-into a std::string representation. By default zen::Xml accepts all character arrays like <tt>char[]</tt>, <tt>wchar_t[]</tt>, <tt>char*</tt>, <tt>wchar_t*</tt>, single characters like
-<tt>char</tt>, <tt>wchar_t</tt>, standard string classes like <tt>std::string</tt>, <tt>std::wstring</tt> and user-defined string classes.
-If the input string is based on <tt>char</tt>, it will simply be copied and thereby preserves any local encodings. If the input string is based on <tt>wchar_t</tt> it will
-be converted to an UTF-8 encoded <tt>std::string</tt>. The correct <tt>wchar_t</tt> encoding of the system will be detected at compile time, for example UTF-16 on Windows,
-UTF-32 on most Linux distributions.
-
-<b>Note:</b> User-defined string classes are automatically supported if they fulfill the following <b>string concept</b> by defining:
- -# A typedef named <tt>value_type</tt> for the underlying character type: must be \p char or \p wchar_t
- -# A member function <tt>c_str()</tt> returning something that can be converted into a <tt>const value_type*</tt>
- -# A member function <tt>length()</tt> returning the number of characters returned by <tt>c_str()</tt>
-
-\code
-std::string elem1 = "elemento1";
-std::wstring elem2 = L"элемент2";
-wxString elem3 = L"要素3";
-MyString elem4 = L"στοιχείο4";
-
-zen::XmlOut out(doc);
-
-out["string"] (elem1);
-out["wstring"] (elem2);
-out["wxString"] (elem3);
-out["MyString"] (elem4);
-out["char[6]"] ("elem5");
-out["wchar_t[4]"](L"元素6");
-out["wchar_t"] (L'元');
-out["char"] ('z');
-\endcode
-
-The resulting XML:
-\verbatim
-<?xml version="1.0" encoding="UTF-8"?>
-<Root>
- <string>elemento1</string>
- <wstring>элемент2</wstring>
- <wxString>要素3</wxString>
- <MyString>στοιχείο4</MyString>
- <char[6]>elem5</char[6]>
- <wchar_t[4]>元素6</wchar_t[4]>
- <wchar_t>元</wchar_t>
- <char>z</char>
-</Root>
-\endverbatim
-
-
-\section sec_Automatic_conversion_STL Automatic conversion for STL container types
-
-- User-defined STL compatible types are automatically supported if they fulfill the following <b>container concept</b> by defining:
- -# A typedef named <tt>value_type</tt> for the underlying element type of the container
- -# A typedef named <tt>iterator</tt> for a non-const iterator into the container
- -# A typedef named <tt>const_iterator</tt> for a const iterator into the container
-\n\n
- -# A member function <tt>begin()</tt> returning an iterator pointing to the first element in the container
- -# A member function <tt>end()</tt> returning an iterator pointing just after the last element in the container
- -# A member function <tt>insert()</tt> with the signature <tt>iterator insert(iterator position, const value_type& x)</tt>
- -# A member function <tt>clear()</tt> removing all elements from the container
-
-- In order to support combinations of user types and STL containers such as <tt>std::vector<MyType></tt> or <tt>std::vector<std::list<MyType>></tt> it is sufficient to
-only integrate <tt>MyType</tt> into zen::Xml. \n
-See \ref sec_Support_user_defined
-
-\code
-std::deque <float> testDeque;
-std::list <size_t> testList;
-std::map <double, char> testMap;
-std::multimap<short, double> testMultiMap;
-std::set <int> testSet;
-std::multiset<std::string> testMultiSet;
-std::vector <wchar_t> testVector;
-std::vector <std::list<wchar_t>> testVectorList;
-std::pair <char, wchar_t> testPair;
-
-/* fill container */
-
-zen::XmlOut out(doc);
-
-out["deque"] (testDeque);
-out["list"] (testList);
-out["map"] (testMap);
-out["multimap"] (testMultiMap);
-out["set"] (testSet);
-out["multiset"] (testMultiSet);
-out["vector"] (testVector);
-out["vect_list"](testVectorList);
-out["pair" ] (testPair);
-\endcode
-
-The resulting XML:
-\verbatim
-<?xml version="1.0" encoding="UTF-8"?>
-<Root>
- <deque>
- <Item>1.234</Item>
- <Item>5.678</Item>
- </deque>
- <list>
- <Item>1</Item>
- <Item>2</Item>
- </list>
- <map>
- <Item>
- <one>1.1</one>
- <two>a</two>
- </Item>
- <Item>
- <one>2.2</one>
- <two>b</two>
- </Item>
- </map>
- <multimap>
- <Item>
- <one>3</one>
- <two>99</two>
- </Item>
- <Item>
- <one>3</one>
- <two>100</two>
- </Item>
- <Item>
- <one>4</one>
- <two>101</two>
- </Item>
- </multimap>
- <set>
- <Item>1</Item>
- <Item>2</Item>
- </set>
- <multiset>
- <Item>1</Item>
- <Item>1</Item>
- <Item>2</Item>
- </multiset>
- <vector>
- <Item>Ä</Item>
- <Item>Ö</Item>
- </vector>
- <vect_list>
- <Item>
- <Item>ä</Item>
- <Item>ö</Item>
- <Item>ü</Item>
- </Item>
- <Item>
- <Item>ä</Item>
- <Item>ö</Item>
- <Item>ü</Item>
- </Item>
- </vect_list>
- <pair>
- <one>a</one>
- <two>â</two>
- </pair>
-</Root>
-\endverbatim
-
-
-\section sec_Support_user_defined Support for user-defined types
-
-User types can be integrated into zen::Xml by providing specializations of zen::readText() and zen::writeText() or zen::readStruc() and zen::writeStruc().
-The first pair should be used for all non-structured types that can be represented as a simple text string. This specialization is then used to convert the type to XML elements
-and XML attributes. The second pair should be specialized for structured types that require an XML representation as a hierarchy of elements. This specialization is used when converting
-the type to XML elements only.
-\n\n
-See section \ref sec_Type_Safety for a discussion of type categories.
-\n\n
-<b>Example: Specialization for an enum type</b>
-\code
-enum UnitTime
-{
- UNIT_SECOND,
- UNIT_MINUTE,
- UNIT_HOUR
-};
-
-namespace zen
-{
-template <> inline
-void writeText(const UnitTime& value, std::string& output)
-{
- switch (value)
- {
- case UNIT_SECOND: output = "second"; break;
- case UNIT_MINUTE: output = "minute"; break;
- case UNIT_HOUR: output = "hour" ; break;
- }
-}
-
-template <> inline
-bool readText(const std::string& input, UnitTime& value)
-{
- std::string tmp = input;
- zen::trim(tmp);
- if (tmp == "second")
- value = UNIT_SECOND;
- else if (tmp == "minute")
- value = UNIT_MINUTE;
- else if (tmp == "hour")
- value = UNIT_HOUR;
- else
- return false;
- return true;
-}
-}
-\endcode
-
-<b>Example: Brute-force specialization for an enum type</b>
-\code
-namespace zen
-{
-template <> inline
-void writeText(const EnumType& value, std::string& output)
-{
- output = zen::numberTo<std::string>(static_cast<int>(value)); //treat enum like an integer
-}
-
-template <> inline
-bool readText(const std::string& input, EnumType& value)
-{
- value = static_cast<EnumType>(zen::stringTo<int>(input)); //treat enum like an integer
- return true;
-}
-}
-\endcode
-
-<b>Example: Specialization for a structured user type</b>
-\code
-struct Config
-{
- int a;
- std::wstring b;
-};
-
-namespace zen
-{
-template <> inline
-void writeStruc(const Config& value, XmlElement& output)
-{
- XmlOut out(output);
- out["number" ](value.a);
- out["address"](value.b);
-}
-
-template <> inline
-bool readStruc(const XmlElement& input, Config& value)
-{
- XmlIn in(input);
- bool rv1 = in["number" ](value.a);
- bool rv2 = in["address"](value.b);
- return rv1 && rv2;
-}
-}
-
-int main()
-{
- Config cfg = { 2, L"Abc 3" };
-
- std::vector<Config> cfgList;
- cfgList.push_back(cfg);
-
- zen::XmlDoc doc;
- zen::XmlOut out(doc); //write to Xml via output proxy
- out["config"](cfgList);
- save(doc, "file.xml"); //throw XmlFileError
-}
-\endcode
-
-The resulting XML:
-\verbatim
-<?xml version="1.0" encoding="UTF-8"?>
-<Root>
- <config>
- <Item>
- <number>2</number>
- <address>Abc 3</address>
- </Item>
- </config>
-</Root>
-\endverbatim
-
-
-\section sec_Structured_user_types Structured user types
-
-Although it is possible to enable conversion of structured user types by specializing zen::readStruc() and zen::writeStruc() (see \ref sec_Support_user_defined),
-this approach has one drawback: If a mapping error occurs when converting an XML element to structured user data, for example a child-element is missing,
-the input proxy class zen::XmlIn is only able to detect that the whole conversion failed. It cannot say which child-elements in particular failed to convert.
-\n\n
-Therefore it may be appropriate to convert structured types by calling subroutines in order to enable fine-granular logging:
-
-\code
-void readConfig(const zen::XmlIn& in, Config& cfg)
-{
- in["number" ](value.a); //failed conversions will now be logged for each single item by XmlIn
- in["address"](value.b); //instead of only once for the complete Config type!
-}
-
-
-void loadConfig(const wxString& filename, Config& cfg)
-{
- zen::XmlDoc doc; //empty XML document
-
- try
- {
- load(filename, doc); //throw XmlFileError, XmlParsingError
- }
- catch (const zen::XmlError& e) { /* handle error */ }
-
- zen::XmlIn in(doc);
-
- zen::XmlIn inConfig = in["config"]; //get input proxy for child element "config"
-
- readConfig(inConfig, cfg); //map child element to user data by calling subroutine
-
- //check for mapping errors: errors occuring in subroutines are considered, too!
- if (in.errorsOccured())
- /* show mapping errors */
-}
-\endcode
-
-
-\section sec_Type_Safety Type Safety
-
-zen::Xml heavily uses methods of compile-time introspection in order to free the user from managing basic type conversions by himself.
-Thereby it is important to find the right balance between automatic conversions and type safety so that program correctness is not compromised.
-In the context of XML processing three fundamental type categories can be recognized:
-
-- <b>string-like types</b>: <tt>std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ...</tt>
-- <b>to-string-convertible types</b>: any string-like type, all built-in arithmetic numbers, <tt>bool</tt>
-- <b>structured types</b>: any to-string-convertible type, STL containers, <tt>std::pair</tt>, structured user types
-
-These categories can be seen as a sequence of inclusive sets:
-\verbatim
------------------------------
-| structured | Used as: XML element value
-| ------------------------- | Conversion via: readStruc(), writeStruc() - may be specialized for user-defined types!
-| | to-string-convertible | | Used as: XML element/attribute value
-| | --------------- | | Conversion via: readText(), writeText() - may be specialized for user-defined types!
-| | | string-like | | | Used as: XML element/attribute value or element name
-| | --------------- | | Conversion via: utfCvrtTo<>()
-| ------------------------- |
------------------------------
-\endverbatim
-
-A practical implication of this design is that conversions that do not make sense in a particular context simply lead to compile-time errors:
-\code
-zen::XmlOut out(doc);
-out[L'Z'](someValue); //fine: a wchar_t is acceptable as an element name
-out[1234](someValue); //compiler error: an integer is NOT "string-like"!
-\endcode
-\n
-\code
-int i = 0;
-std::vector<int> v;
-
-zen::XmlOut out(doc);
-out["elem1"](i); //fine: both i and v can be converted to an XML element
-out["elem2"](v); //
-
-out["elem"].attribute("attr1", i); //fine: an integer can be converted to an XML attribute
-out["elem"].attribute("attr2", v); //compiler error: a std::vector<int> is NOT "to-string-convertible"!
-\endcode
-
- \author \b Zenju
- \n\n
- <b>Email:</b> zenju AT gmx DOT de
-*/ \ No newline at end of file
diff --git a/zenxml/bind.h b/zenxml/zenxml/bind.h
index abeff452..abeff452 100644
--- a/zenxml/bind.h
+++ b/zenxml/zenxml/bind.h
diff --git a/zenxml/cvrt_struc.h b/zenxml/zenxml/cvrt_struc.h
index 690edacb..690edacb 100644
--- a/zenxml/cvrt_struc.h
+++ b/zenxml/zenxml/cvrt_struc.h
diff --git a/zenxml/cvrt_text.h b/zenxml/zenxml/cvrt_text.h
index 80664317..80664317 100644
--- a/zenxml/cvrt_text.h
+++ b/zenxml/zenxml/cvrt_text.h
diff --git a/zenxml/dom.h b/zenxml/zenxml/dom.h
index a2ed78f7..a2ed78f7 100644
--- a/zenxml/dom.h
+++ b/zenxml/zenxml/dom.h
diff --git a/zenxml/error.h b/zenxml/zenxml/error.h
index bea04520..bea04520 100644
--- a/zenxml/error.h
+++ b/zenxml/zenxml/error.h
diff --git a/zenxml/io.h b/zenxml/zenxml/io.h
index 596d7acf..596d7acf 100644
--- a/zenxml/io.h
+++ b/zenxml/zenxml/io.h
diff --git a/zenxml/parser.h b/zenxml/zenxml/parser.h
index 51779852..51779852 100644
--- a/zenxml/parser.h
+++ b/zenxml/zenxml/parser.h
diff --git a/zenxml/unit_test.cpp b/zenxml/zenxml/unit_test.cpp
index 8f49de6f..8f49de6f 100644
--- a/zenxml/unit_test.cpp
+++ b/zenxml/zenxml/unit_test.cpp
diff --git a/zenxml/xml.h b/zenxml/zenxml/xml.h
index 3a01b1a1..3a01b1a1 100644
--- a/zenxml/xml.h
+++ b/zenxml/zenxml/xml.h
bgstack15