[boost-doc-zh] r358 committed - property_tree 库译文。...

  • From: boost-doc-zh@xxxxxxxxxxxxxx
  • To: boost-doc-zh-notify@xxxxxxxxxxxxx
  • Date: Fri, 25 Dec 2009 01:59:59 +0000

Revision: 358
Author: alai04
Date: Thu Dec 24 17:59:33 2009
Log: property_tree 库译文。
首次采用翻译qbk文件后生成html文档的方式,reference部分不译。
http://code.google.com/p/boost-doc-zh/source/detail?r=358

Added:
 /trunk/doc/html/boost_propertytree
 /trunk/doc/html/boost_propertytree/accessing.html
 /trunk/doc/html/boost_propertytree/container.html
 /trunk/doc/html/boost_propertytree/parsers.html
 /trunk/doc/html/boost_propertytree/synopsis.html
 /trunk/doc/html/boost_propertytree/tutorial.html
 /trunk/doc/html/property_tree/appendices_______.html
 /trunk/libs/property_tree/doc/Jamfile.v2
 /trunk/libs/property_tree/doc/accessing.qbk
 /trunk/libs/property_tree/doc/cmd_line_parser.qbk
 /trunk/libs/property_tree/doc/container.qbk
 /trunk/libs/property_tree/doc/info_parser.qbk
 /trunk/libs/property_tree/doc/ini_parser.qbk
 /trunk/libs/property_tree/doc/intro.qbk
 /trunk/libs/property_tree/doc/json_parser.qbk
 /trunk/libs/property_tree/doc/parsers.qbk
 /trunk/libs/property_tree/doc/property_tree.qbk
 /trunk/libs/property_tree/doc/synopsis.qbk
 /trunk/libs/property_tree/doc/system_environment_parser.qbk
 /trunk/libs/property_tree/doc/tutorial.qbk
 /trunk/libs/property_tree/doc/windows_registry_parser.qbk
 /trunk/libs/property_tree/doc/xml_parser.qbk
Deleted:
 /trunk/doc/html/property_tree/appendices.html
Modified:
 /trunk/doc/html/property_tree/reference.html
 /trunk/doc/html/property_tree.html

=======================================
--- /dev/null   
+++ /trunk/doc/html/boost_propertytree/accessing.html Thu Dec 24 17:59:33 2009
Binary file, no diff available.
=======================================
--- /dev/null
+++ /trunk/doc/html/boost_propertytree/container.html Thu Dec 24 17:59:33 2009
@@ -0,0 +1,82 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Property Tree as a Container &#20316;&#20026;&#23481;&#22120;&#30340;&#23646;&#24615;&#26641;</title>
+<link rel="stylesheet" href="../boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Boost C++&#24211; BoostBook &#25991;&#26723;&#23376;&#38598;"> +<link rel="up" href="../property_tree.html" title="Chapter 14. Boost.PropertyTree"> +<link rel="prev" href="tutorial.html" title="Five Minute Tutorial &#20116;&#20998;&#38047;&#25945;&#31243;"> +<link rel="next" href="synopsis.html" title="Property Tree Synopsis &#23646;&#24615;&#26641;&#27010;&#35201;">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
+<td align="center"><a href="../../../index.html">Home</a></td>
+<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html";>People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html";>FAQ</a></td>
+<td align="center"><a href="../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tutorial.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="synopsis.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="boost_propertytree.container"></a><a class="link" href="container.html" title="Property Tree as a Container &#20316;&#20026;&#23481;&#22120;&#30340;&#23646;&#24615;&#26641;"> Property Tree as a Container
+    &#20316;&#20026;&#23481;&#22120;&#30340;&#23646;&#24615;&#26641;</a>
+</h2></div></div></div>
+<p>
+ Every property tree node models the ReversibleSequence concept, providing access + to its immediate children. This means that iterating over a <code class="computeroutput"><a class="link" href="../boost/property_tree/ptree.html" title="Type definition ptree">ptree</a></code> + (which is the same as its root node - every <code class="computeroutput"><a class="link" href="../boost/property_tree/ptree.html" title="Type definition ptree">ptree</a></code> + node is also the subtree it starts) iterates only a single level of the hierarchy.
+      There is no way to iterate over the entire tree.
+    </p>
+<p>
+ &#27599;&#19968;&#20010;&#23646;&#24615;&#26641;&#33410;&#28857;&#37117;&#31526;&#21512;&#21487;&#36870;&#24207;&#21015;&#27010;&#24565;&#65292;&#25552;&#20379;&#23545;&#20854;&#30452;&#25509;&#23376;&#33410;&#28857;&#30340;&#35775;&#38382;&#12290;&#36825;&#24847;&#21619;&#30528;&#36941;&#21382;&#19968;&#20010; + <code class="computeroutput"><a class="link" href="../boost/property_tree/ptree.html" title="Type definition ptree">ptree</a></code> (&#19982;&#26681;&#33410;&#28857;&#19968;&#26679; + - &#27599;&#20010; <code class="computeroutput"><a class="link" href="../boost/property_tree/ptree.html" title="Type definition ptree">ptree</a></code> &#33410;&#28857;&#21516;&#26102;&#20063;&#26159;&#20174;&#23427;&#24320;&#22987;&#30340;&#23376;&#26641;)&#21482;&#26159;&#36941;&#21382;&#21333;&#20010;&#23618;&#32423;&#12290; + &#27809;&#26377;&#26041;&#27861;&#30452;&#25509;&#36941;&#21382;&#25972;&#26869;&#26641;&#12290;
+    </p>
+<p>
+ It is very important to remember that the property sequence is <span class="bold"><strong>not</strong></span> + ordered by the key. It preserves the order of insertion. It closely resembles + a std::list. Fast access to children by name is provided via a separate lookup + structure. Do not attempt to use algorithms that expect an ordered sequence
+      (like binary_search) on a node's children.
+    </p>
+<p>
+ &#26377;&#19968;&#28857;&#24456;&#37325;&#35201;&#24517;&#39035;&#35201;&#35760;&#20303;&#65292;&#23646;&#24615;&#24207;&#21015;*&#24182;&#19981;&#26159;*&#25353;&#20854;&#38190;&#20540;&#25490;&#24207;&#30340;&#12290;&#23427;&#20445;&#30041;&#20102;&#25554;&#20837;&#30340;&#39034;&#24207;&#12290; + &#23427;&#26356;&#25509;&#36817;&#20110; std::list&#12290;&#25353;&#21517;&#23383;&#23545;&#23376;&#33410;&#28857;&#30340;&#24555;&#36895;&#35775;&#38382;&#65292;&#26159;&#36890;&#36807;&#19968;&#20010;&#29420;&#31435;&#30340;&#26597;&#25214;&#32467;&#26500;&#26469;&#25552;&#20379;&#30340;&#12290; + &#19981;&#35201;&#35797;&#22270;&#23545;&#19968;&#20010;&#33410;&#28857;&#30340;&#23376;&#33410;&#28857;&#20351;&#29992;&#37027;&#20123;&#35201;&#27714;&#26377;&#24207;&#24207;&#21015;&#30340;&#31639;&#27861;(&#22914;
+      binary_search)&#12290;
+    </p>
+<p>
+ There may be multiple children with the same key value in a node. However, + these children are not necessarily sequential. The iterator returned by <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id5212679-bb">find</a></code> may refer to + any of these, and there are no guarantees about the relative position of the
+      other equally named children.
+    </p>
+<p>
+ &#19968;&#20010;&#33410;&#28857;&#20013;&#21487;&#33021;&#20250;&#26377;&#22810;&#20010;&#23376;&#33410;&#28857;&#24102;&#26377;&#30456;&#21516;&#30340;&#38190;&#20540;&#12290;&#20294;&#26159;&#36825;&#20123;&#23376;&#33410;&#28857;&#38388;&#26159;&#27809;&#26377;&#20808;&#21518;&#39034;&#24207;&#30340;&#12290; + <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id5212679-bb">find</a></code> + &#25152;&#36820;&#22238;&#30340;&#36845;&#20195;&#22120;&#21487;&#33021;&#25351;&#21521;&#23427;&#20204;&#20013;&#30340;&#20219;&#24847;&#19968;&#20010;&#65292;&#32780;&#19988;&#23545;&#20110;&#20854;&#23427;&#30456;&#21516;&#21517;&#23383;&#30340; + &#23376;&#33410;&#28857;&#30340;&#30456;&#23545;&#20301;&#32622;&#65292;&#20063;&#26159;&#27809;&#26377;&#20445;&#35777;&#30340;&#12290;
+    </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision"; width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright (c) 2008 Marcin Kalicinski<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt"; target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tutorial.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="synopsis.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
=======================================
--- /dev/null
+++ /trunk/doc/html/boost_propertytree/parsers.html     Thu Dec 24 17:59:33 2009
@@ -0,0 +1,419 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>How to Populate a Property Tree &#22914;&#20309;&#22635;&#20805;&#23646;&#24615;&#26641;</title>
+<link rel="stylesheet" href="../boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Boost C++&#24211; BoostBook &#25991;&#26723;&#23376;&#38598;"> +<link rel="up" href="../property_tree.html" title="Chapter 14. Boost.PropertyTree"> +<link rel="prev" href="synopsis.html" title="Property Tree Synopsis &#23646;&#24615;&#26641;&#27010;&#35201;"> +<link rel="next" href="accessing.html" title="How to Access Data in a Property Tree &#22914;&#20309;&#35775;&#38382;&#23646;&#24615;&#26641;&#20013;&#30340;&#25968;&#25454;">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
+<td align="center"><a href="../../../index.html">Home</a></td>
+<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html";>People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html";>FAQ</a></td>
+<td align="center"><a href="../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="synopsis.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="accessing.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="boost_propertytree.parsers"></a><a class="link" href="parsers.html" title="How to Populate a Property Tree &#22914;&#20309;&#22635;&#20805;&#23646;&#24615;&#26641;"> How to Populate a Property
+    Tree &#22914;&#20309;&#22635;&#20805;&#23646;&#24615;&#26641;</a>
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="parsers.html#boost_propertytree.parsers.xml_parser__xml_________">XML
+      Parser XML&#20998;&#26512;&#22120;</a></span></dt>
+<dt><span class="section"><a href="parsers.html#boost_propertytree.parsers.json_parser__json_________">JSON
+      Parser JSON&#20998;&#26512;&#22120;</a></span></dt>
+<dt><span class="section"><a href="parsers.html#boost_propertytree.parsers.ini_parser__ini_________">INI
+      Parser INI&#20998;&#26512;&#22120;</a></span></dt>
+<dt><span class="section"><a href="parsers.html#boost_propertytree.parsers.info_parser__info_________">INFO
+      Parser INFO&#20998;&#26512;&#22120;</a></span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_propertytree.parsers.xml_parser__xml_________"></a><a class="link" href="parsers.html#boost_propertytree.parsers.xml_parser__xml_________" title="XML Parser XML&#20998;&#26512;&#22120;">XML
+      Parser XML&#20998;&#26512;&#22120;</a>
+</h3></div></div></div>
+<p>
+ The <a href="http://en.wikipedia.org/wiki/XML"; target="_top">XML format</a> is an + industry standard for storing information in textual form. Unfortunately, + there is no XML parser in <a href="http://www.boost.org"; target="_top">Boost</a> + as of the time of this writing. The library therefore contains the fast and + tiny <a href="http://rapidxml.sourceforge.net/"; target="_top">RapidXML</a> parser + (currently in version 1.13) to provide XML parsing support. RapidXML does + not fully support the XML standard; it is not capable of parsing DTDs and
+        therefore cannot do full entity substitution.
+      </p>
+<p>
+ <a href="http://en.wikipedia.org/wiki/XML"; target="_top">XML format</a> &#26159;&#20197;&#25991;&#26412;&#26041;&#24335;&#20445;&#23384;&#20449;&#24687;&#30340;&#24037;&#19994;&#26631;&#20934;&#12290;&#19981;&#24184;&#30340;&#26159;&#65292;&#30446;&#21069;&#22312; + <a href="http://www.boost.org"; target="_top">Boost</a> &#36824;&#27809;&#26377;XML&#20998;&#26512;&#22120;&#12290; + &#22240;&#27492;&#65292;&#26412;&#24211;&#21253;&#21547;&#20102;&#19968;&#20010;&#23567;&#32780;&#24555;&#30340; <a href="http://rapidxml.sourceforge.net/"; target="_top">RapidXML</a> + &#20998;&#26512;&#22120;(&#24403;&#21069;&#29256;&#26412;&#20026; 1.13)&#20197;&#25552;&#20379;XML&#20998;&#26512;&#30340;&#25903;&#25345;&#12290; RapidXML &#24182;&#19981;&#23436;&#20840;&#25903;&#25345;XML&#26631;&#20934;&#65307;&#23427;&#19981;&#33021;&#20998;&#26512;DTDs&#65292;&#22240;&#27492;&#19981;&#33021;&#23454;&#29616;&#23436;&#20840;&#30340;&#23454;&#20307;&#26367;&#25442;&#12290;
+      </p>
+<p>
+ By default, the parser will preserve most whitespace, but remove element + content that consists only of whitespace. Encoded whitespaces (e.g. &amp;#32;) + does not count as whitespace in this regard. You can pass the trim_whitespace + flag if you want all leading and trailing whitespace trimmed and all continuous
+        whitespace collapsed into a single space.
+      </p>
+<p>
+ &#32570;&#30465;&#24773;&#20917;&#19979;&#65292;&#36825;&#20010;&#20998;&#26512;&#22120;&#20250;&#20445;&#30041;&#26368;&#22810;&#30340;&#31354;&#30333;&#31526;&#65292;&#20294;&#20250;&#21024;&#25481;&#20165;&#21253;&#21547;&#31354;&#30333;&#31526;&#30340;&#20803;&#32032;&#20869;&#23481;&#12290; + &#22312;&#27492;&#65292;&#32534;&#30721;&#30340;&#31354;&#30333;&#31526;(&#22914; &amp;#32;)&#24182;&#19981;&#34987;&#31639;&#20316;&#31354;&#30333;&#31526;&#12290;&#22914;&#26524;&#20320;&#24819;&#21435;&#25481;&#25152;&#26377;&#21069;&#32622;&#21644;&#21518;&#32622;&#30340;&#31354;&#30333;&#31526;&#65292; + &#19988;&#23558;&#25152;&#26377;&#36830;&#32493;&#30340;&#31354;&#30333;&#31526;&#21387;&#32553;&#20026;&#21333;&#20010;&#31354;&#26684;&#65292;&#21487;&#20197;&#20256;&#20837; trim_whitespace
+        &#26631;&#24535;&#12290;
+      </p>
+<p>
+ Please note that RapidXML does not understand the encoding specification. + If you pass it a character buffer, it assumes the data is already correctly + encoded; if you pass it a filename, it will read the file using the character + conversion of the locale you give it (or the global locale if you give it + none). This means that, in order to parse a UTF-8-encoded XML file into a + wptree, you have to supply an alternate locale, either directly or by replacing
+        the global one.
+      </p>
+<p>
+ &#35831;&#27880;&#24847;&#65292;RapidXML &#24182;&#19981;&#20102;&#35299;&#32534;&#30721;&#35268;&#33539;&#12290;&#22914;&#26524;&#20320;&#20256;&#20837;&#19968;&#20010;&#23383;&#31526;&#32531;&#20914;&#21306;&#65292;&#23427;&#20250;&#20551;&#23450;&#20854;&#20013;&#30340;&#25968;&#25454;&#24050;&#27491;&#30830;&#32534;&#30721;&#65307; + &#22914;&#26524;&#20320;&#20256;&#20837;&#19968;&#20010;&#25991;&#20214;&#21517;&#65292;&#23427;&#23558;&#20351;&#29992;&#20320;&#32473;&#23450;&#30340;locale (&#22914;&#26524;&#20320;&#27809;&#26377;&#32473;&#23450;&#65292;&#21017;&#20351;&#29992;&#20840;&#23616;locale)&#30340;&#23383;&#31526;&#36716;&#25442;&#12290; + &#36825;&#24847;&#21619;&#30528;&#65292;&#20026;&#20102;&#20998;&#26512;&#19968;&#20010;UTF-8&#32534;&#30721;&#30340;XML&#25991;&#20214;&#24182;&#23384;&#20837; wptree&#65292;&#20320;&#24517;&#39035;&#25552;&#20379;&#19968;&#20010;&#26367;&#20195;locale&#65292; + &#25110;&#32773;&#30452;&#25509;&#25552;&#20379;&#65292;&#25110;&#32773;&#26367;&#25442;&#25481;&#20840;&#23616;locale&#12290;
+      </p>
+<p>
+ XML / property tree conversion schema (<code class="computeroutput"><a class="link" href="../boost/property_tree/xml_parser/read_xml_id5271168.html" title="Function template read_xml">read_xml</a></code> + and <code class="computeroutput"><a class="link" href="../boost/property_tree/xml_parser/write_xml_id4884059.html" title="Function template write_xml">write_xml</a></code>):
+      </p>
+<p>
+ XML/&#23646;&#24615;&#26641;&#36716;&#25442;&#26426;&#21046;(<code class="computeroutput"><a class="link" href="../boost/property_tree/xml_parser/read_xml_id5271168.html" title="Function template read_xml">read_xml</a></code> + and <code class="computeroutput"><a class="link" href="../boost/property_tree/xml_parser/write_xml_id4884059.html" title="Function template write_xml">write_xml</a></code>)&#65306;
+      </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Each XML element corresponds to a property tree node. The child elements + correspond to the children of the node.<br> &#27599;&#20010;XML&#20803;&#32032;&#23545;&#24212;&#20110;&#19968;&#20010;&#23646;&#24615;&#26641;&#33410;&#28857;&#12290;&#23376;&#20803;&#32032;&#23545;&#24212;&#20110;&#35813;&#33410;&#28857;&#30340;&#23376;&#33410;&#28857;&#12290;
+        </li>
+<li>
+ The attributes of an XML element are stored in the subkey <code class="literal">&lt;xmlattr&gt;</code>. + There is one child node per attribute in the attribute node. Existence + of the <code class="literal">&lt;xmlattr&gt;</code> node is not guaranteed or necessary + when there are no attributes.<br> &#19968;&#20010;XML&#20803;&#32032;&#30340;&#23646;&#24615;&#34987;&#20445;&#23384;&#20110;&#23376;&#38190; + <code class="literal">&lt;xmlattr&gt;</code> &#20013;&#12290;&#22312;&#23646;&#24615;&#33410;&#28857;&#20013;&#27599;&#20010;&#23646;&#24615;&#26377;&#19968;&#20010;&#23376;&#33410;&#28857;&#12290; + &#24403;&#27809;&#26377;&#23646;&#24615;&#26102;&#65292;&#24182;&#19981;&#20445;&#35777;&#20063;&#19981;&#38656;&#35201;&#19968;&#23450;&#26377; <code class="literal">&lt;xmlattr&gt;</code>
+          &#33410;&#28857;&#12290;
+        </li>
+<li>
+ XML comments are stored in nodes named <code class="literal">&lt;xmlcomment&gt;</code>, + unless comment ignoring is enabled via the flags.<br> XML&#27880;&#37322;&#34987;&#20445;&#23384;&#20110;&#21517;&#20026; + <code class="literal">&lt;xmlcomment&gt;</code> &#30340;&#33410;&#28857;&#20013;&#65292;&#38500;&#38750;&#29992;&#26631;&#24535;&#20301;&#28608;&#27963;&#20102;&#24573;&#30053;&#27880;&#37322;&#12290;
+        </li>
+<li>
+ Text content is stored in one of two ways, depending on the flags. The + default way concatenates all text nodes and stores them in a single node + called <code class="literal">&lt;xmltext&gt;</code>. This way, the entire content + can be conveniently read, but the relative ordering of text and child elements + is lost. The other way stores each text content as a separate node, all + called <code class="literal">&lt;xmltext&gt;</code>.<br> &#25991;&#26412;&#20869;&#23481;&#20197;&#20004;&#31181;&#26041;&#27861;&#20013;&#30340;&#19968;&#31181;&#36827;&#34892;&#20445;&#23384;&#65292;&#30001;&#26631;&#24535;&#20301;&#20915;&#23450;&#12290;&#32570;&#30465;&#30340;&#26041;&#27861;&#26159;&#23558;&#25152;&#26377;&#25991;&#26412;&#33410;&#28857;&#20018;&#25509;&#36215;&#26469;&#65292; + &#23558;&#23427;&#20204;&#20445;&#23384;&#22312;&#21333;&#20010;&#21517;&#20026; <code class="literal">&lt;xmltext&gt;</code> &#30340;&#33410;&#28857;&#20013;&#12290;&#36825;&#31181;&#26041;&#27861;&#26041;&#20415;&#35835;&#21462;&#25972;&#20010;&#20869;&#23481;&#65292;&#20294;&#25991;&#26412;&#30340;&#30456;&#23545;&#39034;&#24207; + &#20197;&#21450;&#23376;&#20803;&#32032;&#20840;&#37096;&#20002;&#22833;&#12290;&#21478;&#19968;&#31181;&#26041;&#27861;&#26159;&#65292;&#23558;&#27599;&#20010;&#25991;&#26412;&#20869;&#23481;&#20445;&#23384;&#20026;&#21333;&#20010;&#33410;&#28857;&#65292;&#22343;&#21629;&#21517;&#20026;
+          <code class="literal">&lt;xmltext&gt;</code>&#12290;
+        </li>
+</ul></div>
+<p>
+ The XML storage encoding does not round-trip perfectly. A read-write cycle + loses trimmed whitespace, low-level formatting information, and the distinction + between normal data and CDATA nodes. Comments are only preserved when enabled. + A write-read cycle loses trimmed whitespace; that is, if the origin tree + has string data that starts or ends with whitespace, that whitespace is lost.
+      </p>
+<p>
+ XML&#30340;&#23384;&#20648;&#32534;&#30721;&#24182;&#19981;&#26159;&#19968;&#20010;&#23436;&#32654;&#30340;&#24490;&#29615;&#12290;&#19968;&#27425;&#35835;-&#20889;&#24490;&#29615;&#20250;&#20002;&#22833;&#21069;&#32622;&#21644;&#21518;&#32622;&#30340;&#31354;&#30333;&#31526;&#12289; + &#20302;&#32423;&#30340;&#26684;&#24335;&#21270;&#20449;&#24687;&#65292;&#20197;&#21450;&#26222;&#36890;&#25968;&#25454;&#19982;CDATA&#33410;&#28857;&#38388;&#30340;&#24046;&#24322;&#12290;&#27880;&#37322;&#20165;&#22312;&#28608;&#27963;&#26102;&#34987;&#20445;&#30041;&#12290; + &#19968;&#27425;&#20889;-&#35835;&#24490;&#29615;&#21017;&#20250;&#20002;&#22833;&#21069;&#32622;&#21644;&#21518;&#32622;&#30340;&#31354;&#30333;&#31526;&#65307;&#21363;&#65292;&#22914;&#26524;&#21407;&#26641;&#20013;&#26377;&#20197;&#31354;&#30333;&#31526;&#24320;&#22836;&#25110;&#32467;&#23614; + &#30340;&#23383;&#31526;&#20018;&#25968;&#25454;&#65292;&#21017;&#31354;&#30333;&#31526;&#20250;&#20002;&#25481;&#12290;
+      </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_propertytree.parsers.json_parser__json_________"></a><a class="link" href="parsers.html#boost_propertytree.parsers.json_parser__json_________" title="JSON Parser JSON&#20998;&#26512;&#22120;">JSON
+      Parser JSON&#20998;&#26512;&#22120;</a>
+</h3></div></div></div>
+<p>
+ The <a href="http://en.wikipedia.org/wiki/JSON"; target="_top">JSON format</a> is + a data interchange format derived from the object literal notation of JavaScript. + (JSON stands for JavaScript Object Notation.) JSON is a simple, compact format + for loosely structured node trees of any depth, very similar to the property + tree dataset. It is less stuctured than XML and has no schema support, but + has the advantage of being simpler, smaller and typed without the need for
+        a complex schema.
+      </p>
+<p>
+ <a href="http://en.wikipedia.org/wiki/JSON"; target="_top">JSON format</a> &#26159;&#27966;&#29983;&#33258; + JavaScript &#30340;&#23545;&#35937;&#25991;&#23383;&#35760;&#27861;&#30340;&#19968;&#31181;&#25968;&#25454;&#20132;&#25442;&#26684;&#24335;(JSON &#24847;&#20026; JavaScript + Object Notation)&#12290; JSON &#26159;&#38024;&#23545;&#26494;&#25955;&#32467;&#26500;&#30340;&#12289;&#20219;&#24847;&#28145;&#24230;&#30340;&#33410;&#28857;&#26641;&#30340;&#19968;&#31181;&#31616;&#21333;&#12289;&#32039;&#20945;&#30340;&#26684;&#24335;&#65292;&#38750;&#24120;&#31867;&#20284;&#20110;&#23646;&#24615;&#26641;&#25968;&#25454;&#38598;&#12290; + &#19982;XML&#30456;&#27604;&#65292;&#23427;&#20855;&#26377;&#26356;&#23569;&#30340;&#32467;&#26500;&#24615;&#65292;&#19988;&#19981;&#25903;&#25345;schema&#65292;&#20294;&#21364;&#20855;&#26377;&#26356;&#31616;&#21333;&#12289;&#26356;&#23567;&#12289;&#24102;&#31867;&#22411;&#12289; + &#19981;&#38656;&#35201;&#22797;&#26434;schema&#30340;&#20248;&#28857;&#12290;
+      </p>
+<p>
+ The property tree dataset is not typed, and does not support arrays as such.
+        Thus, the following JSON / property tree mapping is used:
+      </p>
+<p>
+ &#23646;&#24615;&#26641;&#25968;&#25454;&#38598;&#26159;&#26080;&#31867;&#22411;&#30340;&#65292;&#19988;&#19981;&#25903;&#25345;&#25968;&#32452;&#12290;&#22240;&#27492;&#65292;&#35201;&#29992;&#21040;&#20197;&#19979;JSON/&#23646;&#24615;&#26641;&#26144;&#23556;&#65306;
+      </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ JSON objects are mapped to nodes. Each property is a child node.<br> + JSON &#23545;&#35937;&#26144;&#23556;&#33267;&#33410;&#28857;&#12290;&#27599;&#20010;&#23646;&#24615;&#26159;&#19968;&#20010;&#23376;&#33410;&#28857;&#12290;
+        </li>
+<li>
+ JSON arrays are mapped to nodes. Each element is a child node with an empty + name. If a node has both named and unnamed child nodes, it cannot be mapped + to a JSON representation.<br> JSON &#25968;&#32452;&#26144;&#23556;&#33267;&#33410;&#28857;&#12290;&#27599;&#20010;&#20803;&#32032;&#26159;&#19968;&#20010;&#26080;&#21517;&#30340;&#23376;&#33410;&#28857;&#12290;&#22914;&#26524;&#19968;&#20010;&#33410;&#28857;&#26082;&#26377;&#21629;&#21517;&#30340;&#23376;&#33410;&#28857;&#65292; + &#20063;&#26377;&#26080;&#21517;&#30340;&#23376;&#33410;&#28857;&#65292;&#21017;&#23427;&#19981;&#33021;&#34987;&#26144;&#23556;&#33267;JSON&#34920;&#31034;&#27861;&#12290;
+        </li>
+<li>
+ JSON values are mapped to nodes containing the value. However, all type
+          information is lost; numbers, as well as the literals "null",
+          "true" and "false" are simply mapped to their string
+ form.<br> JSON &#20540;&#34987;&#26144;&#23556;&#33267;&#21547;&#26377;&#20540;&#30340;&#33410;&#28857;&#12290;&#20294;&#26159;&#65292;&#25152;&#26377;&#31867;&#22411;&#20449;&#24687;&#20250;&#20002;&#22833;&#65307;&#25968;&#23383;&#20197;&#21450;&#23383;&#38754;&#20540; + "null", "true" &#21644; "false" &#34987;&#26144;&#23556;&#33267;&#23427;&#20204;&#30340;&#23383;&#31526;&#20018;&#24418;&#24335;&#12290;
+        </li>
+<li>
+ Property tree nodes containing both child nodes and data cannot be mapped.<br> + &#23646;&#24615;&#26641;&#33410;&#28857;&#21516;&#26102;&#21253;&#21547;&#23376;&#33410;&#28857;&#21644;&#19981;&#33021;&#34987;&#26144;&#23556;&#30340;&#25968;&#25454;&#12290;
+        </li>
+</ul></div>
+<p>
+        JSON round-trips, except for the type information loss.
+      </p>
+<p>
+ JSON &#26159;&#21487;&#24490;&#29615;&#30340;&#65292;&#38500;&#20102;&#31867;&#22411;&#20449;&#24687;&#20250;&#20002;&#22833;&#12290;
+      </p>
+<p>
+        For example this JSON:
+      </p>
+<p>
+        &#20363;&#22914;&#65292;&#20197;&#19979;JSON&#65306;
+      </p>
+<pre class="programlisting"><span class="special">{</span>
+   <span class="string">"menu"</span><span class="special">:</span>
+   <span class="special">{</span>
+ <span class="string">"foo"</span><span class="special">:</span> <span class="keyword">true</span><span class="special">,</span> + <span class="string">"bar"</span><span class="special">:</span> <span class="string">"true"</span><span class="special">,</span> + <span class="string">"value"</span><span class="special">:</span> <span class="number">102.3E+06</span><span class="special">,</span>
+      <span class="string">"popup"</span><span class="special">:</span>
+      <span class="special">[</span>
+ <span class="special">{</span><span class="string">"value"</span><span class="special">:</span> <span class="string">"New"</span><span class="special">,</span> <span class="string">"onclick"</span><span class="special">:</span> <span class="string">"CreateNewDoc()"</span><span class="special">},</span> + <span class="special">{</span><span class="string">"value"</span><span class="special">:</span> <span class="string">"Open"</span><span class="special">,</span> <span class="string">"onclick"</span><span class="special">:</span> <span class="string">"OpenDoc()"</span><span class="special">},</span>
+      <span class="special">]</span>
+   <span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<p>
+        will be translated into the following property tree:
+      </p>
+<p>
+ &#23558;&#34987;&#32763;&#35793;&#20026;&#22914;&#19979;&#23646;&#24615;&#26641;&#65306;
+      </p>
+<pre class="programlisting"><span class="identifier">menu</span>
+<span class="special">{</span>
+   <span class="identifier">foo</span> <span class="keyword">true</span>
+   <span class="identifier">bar</span> <span class="keyword">true</span>
+ <span class="identifier">value</span> <span class="number">102.3E+06</span>
+   <span class="identifier">popup</span>
+   <span class="special">{</span>
+      <span class="string">""</span>
+      <span class="special">{</span>
+ <span class="identifier">value</span> <span class="identifier">New</span> + <span class="identifier">onclick</span> <span class="identifier">CreateNewDoc</span><span class="special">()</span>
+      <span class="special">}</span>
+      <span class="string">""</span>
+      <span class="special">{</span>
+ <span class="identifier">value</span> <span class="identifier">Open</span> + <span class="identifier">onclick</span> <span class="identifier">OpenDoc</span><span class="special">()</span>
+      <span class="special">}</span>
+   <span class="special">}</span>
+<span class="special">}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_propertytree.parsers.ini_parser__ini_________"></a><a class="link" href="parsers.html#boost_propertytree.parsers.ini_parser__ini_________" title="INI Parser INI&#20998;&#26512;&#22120;">INI
+      Parser INI&#20998;&#26512;&#22120;</a>
+</h3></div></div></div>
+<p>
+ The <a href="http://en.wikipedia.org/wiki/INI"; target="_top">INI format</a> was + once widely used in the world of Windows. It is now deprecated, but is still + used by a surprisingly large number of applications. The reason is probably + its simplicity, plus that Microsoft recommends using the registry as a replacement,
+        which not all developers want to do.
+      </p>
+<p>
+ <a href="http://en.wikipedia.org/wiki/INI"; target="_top">INI format</a> &#26366;&#32463;&#22312;Windows&#19990;&#30028;&#20013;&#34987;&#24191;&#27867;&#20351;&#29992;&#12290;&#29616;&#22312;&#24050;&#32463;&#19981;&#24314;&#35758;&#20351;&#29992;&#65292;&#20294;&#20173;&#28982;&#34987;&#22823;&#37327;&#24212;&#29992;&#31243;&#24207;&#20351;&#29992;&#12290; + &#21407;&#22240;&#21487;&#33021;&#26159;&#30001;&#20110;&#23427;&#30340;&#31616;&#21333;&#24615;&#65292;&#21152;&#19978;Microsoft&#24314;&#35758;&#20351;&#29992;registry&#20316;&#20026;&#26367;&#20195;&#65292;&#20294;&#19981;&#26159;&#25152;&#26377;&#24320;&#21457;&#37117;&#24895;&#24847;&#12290;
+      </p>
+<p>
+ INI is a simple key-value format with a single level of sectioning. It is + thus less rich than the property tree dataset, which means that not all property
+        trees can be serialized as INI files.
+      </p>
+<p>
+ INI &#26159;&#19968;&#31181;&#31616;&#21333;&#30340;&#38190;-&#20540;&#26684;&#24335;&#65292;&#21482;&#26377;section&#19968;&#20010;&#23618;&#32423;&#12290;&#22240;&#27492;&#65292;&#23427;&#19981;&#22914;&#23646;&#24615;&#26641;&#25968;&#25454;&#38598;&#65292; + &#36825;&#24847;&#21619;&#30528;&#19981;&#26159;&#25152;&#26377;&#23646;&#24615;&#26641;&#37117;&#21487;&#20197;&#24207;&#21015;&#21270;&#20026;INI&#25991;&#20214;&#12290;
+      </p>
+<p>
+ The INI parser creates a tree node for every section, and a child node for + every property in that section. All properties not in a section are directly + added to the root node. Empty sections are ignored. (They don't round-trip,
+        as described below.)
+      </p>
+<p>
+ INI&#20998;&#26512;&#22120;&#20026;&#27599;&#20010;section&#21019;&#24314;&#19968;&#20010;&#26641;&#33410;&#28857;&#65292;section&#20013;&#30340;&#27599;&#20010;&#23646;&#24615;&#25104;&#20026;&#19968;&#20010;&#23376;&#33410;&#28857;&#12290; + &#25152;&#26377;&#19981;&#22312;section&#20013;&#30340;&#23646;&#24615;&#34987;&#30452;&#25509;&#28155;&#21152;&#33267;&#26681;&#33410;&#28857;&#12290;&#31354;&#30340;section&#34987;&#30053;&#36807;&#12290; + (&#23427;&#19981;&#26159;&#21487;&#24490;&#29615;&#30340;&#65292;&#22914;&#21518;&#25152;&#36848;)&#12290;
+      </p>
+<p>
+ The INI serializer reverses this process. It first writes out every child + of the root that contains data, but no child nodes, as properties. Then it + creates a section for every child that contains child nodes, but no data. + The children of the sections must only contain data. It is an error if the + root node contains data, or any child of the root contains both data and + content, or there's more than three levels of hierarchy. There must also
+        not be any duplicate keys.
+      </p>
+<p>
+ INI&#24207;&#21015;&#21270;&#22120;&#21017;&#23558;&#27492;&#36807;&#31243;&#36870;&#36716;&#12290;&#23427;&#39318;&#20808;&#20889;&#20986;&#26681;&#30340;&#27599;&#20010;&#24102;&#26377;&#25968;&#25454;&#32780;&#27809;&#26377;&#23376;&#33410;&#28857;&#30340;&#23376;&#33410;&#28857;&#65292;&#20316;&#20026;&#23646;&#24615;&#12290; + &#28982;&#21518;&#20026;&#27599;&#20010;&#24102;&#26377;&#23376;&#33410;&#28857;&#32780;&#27809;&#26377;&#25968;&#25454;&#30340;&#23376;&#33410;&#28857;&#21019;&#24314;&#19968;&#20010;section&#12290;section&#30340;&#23376;&#33410;&#28857;&#21017;&#21482;&#33021;&#21253;&#21547;&#25968;&#25454;&#12290; + &#22914;&#26524;&#26681;&#33410;&#28857;&#21253;&#21547;&#25968;&#25454;&#65292;&#25110;&#32773;&#26681;&#30340;&#23376;&#33410;&#28857;&#21516;&#26102;&#21253;&#21547;&#25968;&#25454;&#21644;&#20869;&#23481;&#65292;&#25110;&#32773;&#36229;&#36807;&#19977;&#23618;&#65292;&#21017;&#20026;&#38169;&#35823;&#12290; + &#27492;&#22806;&#65292;&#36824;&#24517;&#39035;&#27809;&#26377;&#37325;&#22797;&#30340;&#38190;&#12290;
+      </p>
+<p>
+ An empty tree node is assumed to be an empty property. There is no way to
+        create empty sections.
+      </p>
+<p>
+ &#31354;&#30340;&#26641;&#33410;&#28857;&#34987;&#20551;&#23450;&#20026;&#19968;&#20010;&#31354;&#30340;&#23646;&#24615;&#12290;&#27809;&#26377;&#21150;&#27861;&#21019;&#24314;&#19968;&#20010;&#31354;&#30340;section&#12290;
+      </p>
+<p>
+ Since the Windows INI parser discards trailing spaces and does not support + quoting, the property tree parser follows this example. This means that property
+        values containing trailing spaces do not round-trip.
+      </p>
+<p>
+ &#30001;&#20110;Windows INI&#20998;&#26512;&#22120;&#24573;&#30053;&#21518;&#38543;&#31354;&#26684;&#65292;&#19988;&#19981;&#25903;&#25345;&#24341;&#21495;&#65292;&#25152;&#20197;&#23646;&#24615;&#26641;&#20998;&#26512;&#22120;&#20063;&#36981;&#24490;&#27492;&#20363;&#12290; + &#36825;&#24847;&#21619;&#30528;&#21253;&#21547;&#21518;&#38543;&#31354;&#26684;&#30340;&#23646;&#24615;&#20540;&#23558;&#19981;&#33021;&#23436;&#20840;&#24674;&#22797;&#12290;
+      </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_propertytree.parsers.info_parser__info_________"></a><a class="link" href="parsers.html#boost_propertytree.parsers.info_parser__info_________" title="INFO Parser INFO&#20998;&#26512;&#22120;">INFO
+      Parser INFO&#20998;&#26512;&#22120;</a>
+</h3></div></div></div>
+<p>
+ The INFO format was created specifically for the property tree library. It + provides a simple, efficient format that can be used to serialize property + trees that are otherwise only stored in memory. It can also be used for any + other purpose, although the lack of widespread existing use may prove to
+        be an impediment.
+      </p>
+<p>
+ INFO&#26684;&#24335;&#26159;&#19987;&#20026;&#36825;&#20010;&#23646;&#24615;&#26641;&#24211;&#21019;&#24314;&#30340;&#12290;&#23427;&#25552;&#20379;&#19968;&#20010;&#31616;&#21333;&#12289;&#39640;&#25928;&#30340;&#26684;&#24335;&#65292;&#21487;&#29992;&#20110;&#23545;&#23646;&#24615;&#26641;&#36827;&#34892;&#24207;&#21015;&#21270;&#65292; + &#32780;&#19981;&#26159;&#20165;&#20165;&#20445;&#23384;&#22312;&#20869;&#23384;&#20013;&#12290;&#23427;&#36824;&#21487;&#29992;&#20110;&#20854;&#23427;&#30446;&#30340;&#65292;&#34429;&#28982;&#30446;&#21069;&#32570;&#20047;&#24191;&#27867;&#30340;&#20351;&#29992;&#21487;&#33021;&#20250;&#34987;&#35777;&#26126;&#26159;&#19968;&#20010;&#38556;&#30861;&#12290;
+      </p>
+<p>
+ INFO provides several features that make it familiar to C++ programmers and + efficient for medium-sized datasets, especially those used for test input. + It supports C-style character escapes, nesting via curly braces, and file
+        inclusion via #include.
+      </p>
+<p>
+ INFO&#25552;&#20379;&#20102;&#20960;&#20010;&#29305;&#24615;&#65292;&#26356;&#36148;&#36817;&#20110;C++&#31243;&#24207;&#21592;&#19988;&#23545;&#20013;&#22411;&#25968;&#25454;&#38598;&#26356;&#39640;&#25928;&#65292;&#23588;&#20854;&#26159;&#37027;&#20123;&#29992;&#20110;&#27979;&#35797;&#36755;&#20837;&#30340;&#25968;&#25454;&#12290; + &#23427;&#25903;&#25345;C&#39118;&#26684;&#30340;&#23383;&#31526;&#36716;&#20041;&#12289;&#22823;&#25324;&#21495;&#30340;&#23884;&#22871;&#65292;&#21644;#include&#30340;&#25991;&#20214;&#21253;&#21547;&#12290;
+      </p>
+<p>
+ INFO is also used for visualization of property trees in this documentation.
+      </p>
+<p>
+ INFO&#20063;&#34987;&#29992;&#20110;&#26412;&#25991;&#26723;&#20013;&#30340;&#23646;&#24615;&#26641;&#23637;&#31034;&#12290;
+      </p>
+<p>
+        A typical INFO file might look like this:
+      </p>
+<p>
+ &#19968;&#20010;&#20856;&#22411;&#30340;INFO&#25991;&#20214;&#30475;&#36215;&#26469;&#35937;&#36825;&#26679;&#65306;
+      </p>
+<pre class="programlisting"><span class="identifier">key1</span> <span class="identifier">value1</span>
+<span class="identifier">key2</span>
+<span class="special">{</span>
+ <span class="identifier">key3</span> <span class="identifier">value3</span>
+   <span class="special">{</span>
+ <span class="identifier">key4</span> <span class="string">"value4 with spaces"</span>
+   <span class="special">}</span>
+ <span class="identifier">key5</span> <span class="identifier">value5</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Here's a more complicated file demonstrating all of INFO's features:
+      </p>
+<p>
+ &#20197;&#19979;&#26159;&#19968;&#20010;&#26356;&#20026;&#22797;&#26434;&#30340;&#25991;&#20214;&#65292;&#31034;&#33539;&#20102;INFO&#30340;&#25152;&#26377;&#29305;&#24615;&#65306;
+      </p>
+<pre class="programlisting"><span class="special">;</span> <span class="identifier">A</span> <span class="identifier">comment</span> +<span class="identifier">key1</span> <span class="identifier">value1</span> <span class="special">;</span> <span class="identifier">Another</span> <span class="identifier">comment</span> +<span class="identifier">key2</span> <span class="string">"value with special characters in it {};#\n\t\"\0"</span>
+<span class="special">{</span>
+ <span class="identifier">subkey</span> <span class="string">"value split "</span><span class="special">\</span> + <span class="string">"over three"</span><span class="special">\</span>
+          <span class="string">"lines"</span>
+   <span class="special">{</span>
+ <span class="identifier">a_key_without_value</span> <span class="string">""</span> + <span class="string">"a key with special characters in it {};#\n\t\"\0"</span> <span class="string">""</span> + <span class="string">""</span> <span class="identifier">value</span> <span class="special">;</span> <span class="identifier">Empty</span> <span class="identifier">key</span> <span class="identifier">with</span> <span class="identifier">a</span> <span class="identifier">value</span> + <span class="string">""</span> <span class="string">""</span> <span class="special">;</span> <span class="identifier">Empty</span> <span class="identifier">key</span> <span class="identifier">with</span> <span class="identifier">empty</span> <span class="identifier">value</span><span class="special">!</span>
+   <span class="special">}</span>
+<span class="special">}</span>
+<span class="preprocessor">#include</span> <span class="string">"file.info"</span> <span class="special">;</span> <span class="identifier">included</span> <span class="identifier">file</span>
+</pre>
+<p>
+ INFO round-trips except for the loss of comments and include directives.
+      </p>
+<p>
+ INFO&#26159;&#21487;&#24490;&#29615;&#30340;&#65292;&#38500;&#20102;&#20250;&#20002;&#22833;&#27880;&#37322;&#20197;&#21450;include&#25351;&#20196;&#12290;
+      </p>
+</div>
+<div class="orderedlist"><ol type="1">
+<li>
+        These parsers will be dropped for now.
+      </li>
+<li>
+        [include cmd_line_parser.qbk]
+      </li>
+<li>
+        [include windows_registry_parser.qbk]
+      </li>
+<li>
+        [include system_environment_parser.qbk]
+      </li>
+</ol></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision"; width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright (c) 2008 Marcin Kalicinski<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt"; target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="synopsis.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="accessing.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
=======================================
--- /dev/null
+++ /trunk/doc/html/boost_propertytree/synopsis.html Thu Dec 24 17:59:33 2009
@@ -0,0 +1,84 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Property Tree Synopsis &#23646;&#24615;&#26641;&#27010;&#35201;</title>
+<link rel="stylesheet" href="../boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Boost C++&#24211; BoostBook &#25991;&#26723;&#23376;&#38598;"> +<link rel="up" href="../property_tree.html" title="Chapter 14. Boost.PropertyTree"> +<link rel="prev" href="container.html" title="Property Tree as a Container &#20316;&#20026;&#23481;&#22120;&#30340;&#23646;&#24615;&#26641;"> +<link rel="next" href="parsers.html" title="How to Populate a Property Tree &#22914;&#20309;&#22635;&#20805;&#23646;&#24615;&#26641;">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
+<td align="center"><a href="../../../index.html">Home</a></td>
+<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html";>People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html";>FAQ</a></td>
+<td align="center"><a href="../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="container.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="parsers.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="boost_propertytree.synopsis"></a><a class="link" href="synopsis.html" title="Property Tree Synopsis &#23646;&#24615;&#26641;&#27010;&#35201;"> Property Tree Synopsis &#23646;&#24615;&#26641;&#27010;&#35201;</a>
+</h2></div></div></div>
+<p>
+ The central component of the library is the <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html" title="Class template basic_ptree">basic_ptree</a></code> + class template. Instances of this class are property trees. It is parametrized + on key and data type, and key comparison policy; <code class="computeroutput"><a class="link" href="../boost/property_tree/ptree.html" title="Type definition ptree">ptree</a></code>, + <code class="computeroutput"><a class="link" href="../boost/property_tree/wptree.html" title="Type definition wptree">wptree</a></code>, <code class="computeroutput"><a class="link" href="../boost/property_tree/iptree.html" title="Type definition iptree">iptree</a></code> and <code class="computeroutput"><a class="link" href="../boost/property_tree/wiptree.html" title="Type definition wiptree">wiptree</a></code> + are typedefs of <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html" title="Class template basic_ptree">basic_ptree</a></code> + using predefined combinations of template parameters. Property tree is basically + a somewhat simplified standard container (the closest being std::list), plus + a bunch of extra member functions. These functions allow easy and effective + access to the data stored in property tree. They are various variants of <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4952447-bb">get</a></code>, <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id5224647-bb">put</a></code>, <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4900427-bb">get_value</a></code>, + <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4626767-bb">put_value</a></code>, + <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4892379-bb">get_child</a></code>, + <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4900339-bb">put_child</a></code>. + Additionally, there is <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4718615-bb">data</a></code>
+      function to access node data directly.
+    </p>
+<p>
+ &#26412;&#24211;&#30340;&#26680;&#24515;&#32452;&#20214;&#26159; <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html" title="Class template basic_ptree">basic_ptree</a></code> + &#31867;&#27169;&#26495;&#12290;&#35813;&#31867;&#30340;&#23454;&#20363;&#23601;&#26159;&#23646;&#24615;&#26641;&#12290;&#23427;&#25353;&#38190;&#31867;&#22411;&#21644;&#25968;&#25454;&#31867;&#22411;&#65292; + &#20197;&#21450;&#38190;&#20540;&#27604;&#36739;&#31574;&#30053;&#36827;&#34892;&#21442;&#25968;&#21270;&#65307;<code class="computeroutput"><a class="link" href="../boost/property_tree/ptree.html" title="Type definition ptree">ptree</a></code>, + <code class="computeroutput"><a class="link" href="../boost/property_tree/wptree.html" title="Type definition wptree">wptree</a></code>, <code class="computeroutput"><a class="link" href="../boost/property_tree/iptree.html" title="Type definition iptree">iptree</a></code> &#21644;<code class="computeroutput"><a class="link" href="../boost/property_tree/wiptree.html" title="Type definition wiptree">wiptree</a></code> + &#20998;&#21035;&#20026; &#21508;&#20010;&#27169;&#26495;&#21442;&#25968;&#30340;&#19981;&#21516;&#39044;&#23450;&#20041;&#32452;&#21512;&#30340; <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html" title="Class template basic_ptree">basic_ptree</a></code> + &#30340; typedef&#12290;&#22522;&#26412;&#19978;&#65292;&#23646;&#24615;&#26641;&#26159;&#19968;&#20010;&#31616;&#21270;&#30340; &#26631;&#20934;&#23481;&#22120;(&#26368;&#25509;&#36817;&#20110; + std::list)&#65292;&#21152;&#19978;&#19968;&#32452;&#39069;&#22806;&#30340;&#25104;&#21592;&#20989;&#25968;&#12290;&#36825;&#20123;&#20989;&#25968;&#21487;&#20197;&#35753;&#20320;&#26041;&#20415;&#19988;&#24555;&#36895;&#22320; + &#35775;&#38382;&#20445;&#23384;&#22312;&#23646;&#24615;&#26641;&#20013;&#30340;&#25968;&#25454;&#12290;&#23427;&#20204;&#20998;&#21035;&#26159; <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4952447-bb">get</a></code>, + <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id5224647-bb">put</a></code>, + <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4900427-bb">get_value</a></code>, + <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4626767-bb">put_value</a></code>, + <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4892379-bb">get_child</a></code>, + <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4900339-bb">put_child</a></code> + &#30340;&#21508;&#31181;&#21464;&#20307;&#12290;&#21478;&#22806;&#65292;&#36824;&#26377;&#19968;&#20010; <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4718615-bb">data</a></code> + &#20989;&#25968;&#29992;&#20110;&#30452;&#25509;&#35775;&#38382;&#33410;&#28857;&#25968;&#25454;&#12290;
+    </p>
+<p>
+ See the <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html" title="Class template basic_ptree">basic_ptree class
+      template synopsis</a></code> for more information.
+    </p>
+<p>
+ &#26356;&#22810;&#20449;&#24687;&#35831;&#21442;&#35265; <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html" title="Class template basic_ptree">basic_ptree
+      &#31867;&#27169;&#26495;&#27010;&#35201;</a></code>&#12290;
+    </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision"; width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright (c) 2008 Marcin Kalicinski<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt"; target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="container.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="parsers.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
=======================================
--- /dev/null
+++ /trunk/doc/html/boost_propertytree/tutorial.html Thu Dec 24 17:59:33 2009
@@ -0,0 +1,196 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Five Minute Tutorial &#20116;&#20998;&#38047;&#25945;&#31243;</title>
+<link rel="stylesheet" href="../boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Boost C++&#24211; BoostBook &#25991;&#26723;&#23376;&#38598;"> +<link rel="up" href="../property_tree.html" title="Chapter 14. Boost.PropertyTree"> +<link rel="prev" href="../property_tree.html" title="Chapter 14. Boost.PropertyTree"> +<link rel="next" href="container.html" title="Property Tree as a Container &#20316;&#20026;&#23481;&#22120;&#30340;&#23646;&#24615;&#26641;">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
+<td align="center"><a href="../../../index.html">Home</a></td>
+<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html";>People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html";>FAQ</a></td>
+<td align="center"><a href="../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../property_tree.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="container.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="boost_propertytree.tutorial"></a><a class="link" href="tutorial.html" title="Five Minute Tutorial &#20116;&#20998;&#38047;&#25945;&#31243;"> Five Minute Tutorial &#20116;&#20998;&#38047;&#25945;&#31243;</a>
+</h2></div></div></div>
+<p>
+ This tutorial uses XML. Note that the library is not specifically bound to + XML, and any other supported format (such as INI or JSON) could be used instead. + XML was chosen because the author thinks that wide range of people is familiar
+      with it.
+    </p>
+<p>
+ &#26412;&#25945;&#31243;&#20351;&#29992;XML&#12290;&#27880;&#24847;&#65292;&#26412;&#24211;&#24182;&#19981;&#26159;&#29305;&#21035;&#19982;XML&#32465;&#23450;&#30340;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#20854;&#23427;&#21487;&#25903;&#25345;&#30340;&#26684;&#24335; + (&#22914;INI&#25110;JSON)&#26469;&#20195;&#26367;&#12290;&#36873;&#25321;XML&#21482;&#26159;&#22240;&#20026;&#20316;&#32773;&#35748;&#20026;&#22823;&#22810;&#25968;&#20154;&#27604;&#36739;&#29087;&#24713;&#23427;&#12290;
+    </p>
+<p>
+ Suppose we are writing a logging system for some application, and need to read + log configuration from a file when the program starts. The file with the log
+      configuration looks like this:
+    </p>
+<p>
+ &#20551;&#35774;&#25105;&#20204;&#27491;&#22312;&#20026;&#26576;&#20010;&#24212;&#29992;&#31243;&#24207;&#32534;&#20889;&#19968;&#20010;&#26085;&#24535;&#31995;&#32479;&#65292;&#38656;&#35201;&#22312;&#31243;&#24207;&#21551;&#21160;&#26102;&#20174;&#26576;&#20010;&#25991;&#20214;&#35835;&#20837;&#26085;&#24535;&#30340;&#37197;&#32622;&#12290; + &#26085;&#24535;&#37197;&#32622;&#25991;&#20214;&#30475;&#36215;&#26469;&#21487;&#33021;&#20250;&#35937;&#36825;&#26679;&#65306;
+    </p>
+<pre class="programlisting">&lt;debug&gt;
+    &lt;filename&gt;debug.log&lt;/filename&gt;
+    &lt;modules&gt;
+        &lt;module&gt;Finance&lt;/module&gt;
+        &lt;module&gt;Admin&lt;/module&gt;
+        &lt;module&gt;HR&lt;/module&gt;
+    &lt;/modules&gt;
+    &lt;level&gt;2&lt;/level&gt;
+&lt;/debug&gt;
+</pre>
+<p>
+ It contains the log filename, a list of modules where logging is enabled, and + the debug level value. To store the logging configuration in the program we
+      created a debug_settings structure:
+    </p>
+<p>
+ &#23427;&#21253;&#21547;&#26085;&#24535;&#25991;&#20214;&#21517;&#65292;&#19968;&#20018;&#30001;&#35201;&#25171;&#24320;&#26085;&#24535;&#21151;&#33021;&#30340;&#27169;&#22359;&#25152;&#32452;&#25104;&#30340;&#21015;&#34920;&#65292;&#20197;&#21450;&#35843;&#35797;&#32423;&#21035;&#20540;&#12290; + &#20026;&#20102;&#22312;&#31243;&#24207;&#20013;&#20445;&#23384;&#36825;&#20123;&#26085;&#24535;&#37197;&#32622;&#20449;&#24687;&#65292;&#25105;&#20204;&#21019;&#24314;&#19968;&#20010; debug_settings
+      &#32467;&#26500;&#65306;
+    </p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">debug_settings</span>
+<span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">m_file</span><span class="special">;</span> <span class="comment">// log filename &#26085;&#24535;&#25991;&#20214;&#21517; +</span> <span class="keyword">int</span> <span class="identifier">m_level</span><span class="special">;</span> <span class="comment">// debug level &#35843;&#35797;&#32423;&#21035; +</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">set</span><span class="special">&lt;</span><span class="identifier">string</span><span class="special">&gt;</span> <span class="identifier">m_modules</span><span class="special">;</span> <span class="comment">// modules where logging is enabled &#35201;&#25171;&#24320;&#26085;&#24535;&#21151;&#33021;&#30340;&#27169;&#22359; +</span> <span class="keyword">void</span> <span class="identifier">load</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&amp;</span><span class="identifier">filename</span><span class="special">);</span> + <span class="keyword">void</span> <span class="identifier">save</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&amp;</span><span class="identifier">filename</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+<p>
+ All that needs to be done now is to write implementations of load() and save() + member functions. Let's first deal with load(). It contains just 7 lines of + code, although it does all the necessary things, including error reporting:
+    </p>
+<p>
+ &#29616;&#22312;&#35201;&#20570;&#30340;&#23601;&#26159;&#65292;&#32534;&#20889; load() &#21644; save() &#25104;&#21592;&#20989;&#25968;&#30340;&#23454;&#29616;&#12290;&#25105;&#20204;&#39318;&#20808;&#26469;&#30475; + load()&#12290; &#23427;&#21482;&#21253;&#21547;7&#34892;&#20195;&#30721;&#65292;&#23601;&#21487;&#20197;&#23436;&#25104;&#25152;&#26377;&#24517;&#35201;&#30340;&#24037;&#20316;&#65292;&#21253;&#25324;&#38169;&#35823;&#25253;&#21578;&#65306;
+    </p>
+<pre class="programlisting"> <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">property_tree</span><span class="special">/</span><span class="identifier">ptree</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span> + <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">property_tree</span><span class="special">/</span><span class="identifier">xml_parser</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+ <span class="comment">// Loads debug_settings structure from the specified XML file +</span><span class="comment">// &#20174;&#25351;&#23450;&#30340;XML&#25991;&#20214;&#20013;&#23548;&#20837; debug_settings &#32467;&#26500; +</span> <span class="keyword">void</span> <span class="identifier">debug_settings</span><span class="special">::</span><span class="identifier">load</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&amp;</span><span class="identifier">filename</span><span class="special">)</span>
+   <span class="special">{</span>
+ <span class="comment">// Create an empty property tree object &#21019;&#24314;&#19968;&#20010;&#31354;&#30340;&#23646;&#24615;&#26641;&#23545;&#35937; +</span> <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">property_tree</span><span class="special">::</span><code class="computeroutput"><a class="link" href="../boost/property_tree/ptree.html" title="Type definition ptree">ptree</a></code><span class="special">;</span> + <code class="computeroutput"><a class="link" href="../boost/property_tree/ptree.html" title="Type definition ptree">ptree</a></code> <span class="identifier">pt</span><span class="special">;</span>
+
+ <span class="comment">// Load the XML file into the property tree. If reading fails +</span> <span class="comment">// (cannot open file, parse error), an exception is thrown. +</span> <span class="comment">// &#23558;XML&#25991;&#20214;&#23548;&#20837;&#23646;&#24615;&#26641;&#12290;&#22914;&#26524;&#35835;&#20837;&#22833;&#36133;(&#19981;&#33021;&#25171;&#24320;&#25991;&#20214;&#65292;&#25110;&#20998;&#26512;&#38169;&#35823;)&#65292;&#21017;&#25243;&#20986;&#24322;&#24120; +</span> <code class="computeroutput"><a class="link" href="../boost/property_tree/xml_parser/read_xml_id5271168.html" title="Function template read_xml">read_xml</a></code><span class="special">(</span><span class="identifier">filename</span><span class="special">,</span> <span class="identifier">pt</span><span class="special">);</span>
+
+ <span class="comment">// Get the filename and store it in the m_file variable. +</span> <span class="comment">// Note that we construct the path to the value by separating +</span> <span class="comment">// the individual keys with dots. If dots appear in the keys, +</span> <span class="comment">// a path type with a different separator can be used. +</span> <span class="comment">// If the debug.filename key is not found, an exception is thrown. +</span> <span class="comment">// &#33719;&#24471;&#25991;&#20214;&#21517;&#24182;&#23558;&#23427;&#20445;&#23384;&#21040; m_file &#21464;&#37327;&#12290;&#27880;&#24847;&#65292;&#25105;&#20204;&#29992;&#20197;&#28857;&#21495;&#20998;&#38548;&#30340;&#38190;&#20540; +</span> <span class="comment">// &#26469;&#26500;&#24314;&#35775;&#38382;&#35813;&#20540;&#30340;&#36335;&#24452;&#12290;&#22914;&#26524;&#22312;&#38190;&#20540;&#20013;&#26377;&#28857;&#21495;&#65292;&#21017;&#38656;&#20351;&#29992;&#20854;&#23427;&#20998;&#38548;&#31526;&#12290; +</span> <span class="comment">// &#22914;&#26524; debug.filename &#38190;&#20540;&#27809;&#26377;&#34987;&#25214;&#21040;&#65292;&#21017;&#25243;&#20986;&#24322;&#24120;&#12290; +</span> <span class="identifier">m_file</span> <span class="special">=</span> <span class="identifier">pt</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4952447-bb">get</a></code><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;(</span><span class="string">"debug.filename"</span><span class="special">);</span>
+
+ <span class="comment">// Get the debug level and store it in the m_level variable. +</span> <span class="comment">// This is another version of the get method: if the value is +</span> <span class="comment">// not found, the default value (specified by the second +</span> <span class="comment">// parameter) is returned instead. The type of the value +</span> <span class="comment">// extracted is determined by the type of the second parameter, +</span> <span class="comment">// so we can simply write get(...) instead of get&lt;int&gt;(...). +</span> <span class="comment">// &#33719;&#24471;&#35843;&#35797;&#32423;&#21035;&#24182;&#23558;&#23427;&#20445;&#23384;&#21040; m_level &#21464;&#37327;&#12290;&#36825;&#26159; get &#26041;&#27861;&#30340;&#21478;&#19968;&#20010;&#29256;&#26412;&#65306; +</span> <span class="comment">// &#22914;&#26524;&#35201;&#33719;&#21462;&#30340;&#20540;&#27809;&#26377;&#25214;&#21040;&#65292;&#21017;&#36820;&#22238;&#32570;&#30465;&#20540;(&#30001;&#31532;&#20108;&#20010;&#21442;&#25968;&#25351;&#23450;)&#20195;&#26367;&#12290; +</span> <span class="comment">// &#33719;&#21462;&#30340;&#20540;&#30340;&#31867;&#22411;&#30001;&#31532;&#20108;&#20010;&#21442;&#25968;&#30340;&#31867;&#22411;&#20915;&#23450;&#65292;&#25152;&#20197;&#25105;&#20204;&#21482;&#35201;&#20889; get(...)&#65292; +</span> <span class="comment">// &#32780;&#19981;&#29992;&#20889; get&lt;int&gt;(...). +</span> <span class="identifier">m_level</span> <span class="special">=</span> <span class="identifier">pt</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4952447-bb">get</a></code><span class="special">(</span><span class="string">"debug.level"</span><span class="special">,</span> <span class="number">0</span><span class="special">);</span>
+
+ <span class="comment">// Iterate over the debug.modules section and store all found +</span> <span class="comment">// modules in the m_modules set. The get_child() function +</span> <span class="comment">// returns a reference to the child at the specified path; if +</span> <span class="comment">// there is no such child, it throws. Property tree iterators
+</span>       <span class="comment">// are models of BidirectionalIterator.
+</span> <span class="comment">// &#36941;&#21382; debug.modules &#33410;&#24182;&#23558;&#25152;&#26377;&#25214;&#21040;&#30340;&#27169;&#22359;&#20445;&#23384;&#33267; m_modules &#38598;&#21512;&#20013;&#12290; +</span> <span class="comment">// &#20989;&#25968; get_child() &#36820;&#22238;&#25351;&#23450;&#36335;&#24452;&#19978;&#30340;&#23376;&#33410;&#28857;&#30340;&#24341;&#29992;&#65307;&#22914;&#26524;&#35813;&#23376;&#33410;&#28857;&#19981;&#23384;&#22312;&#65292; +</span> <span class="comment">// &#21017;&#25243;&#20986;&#24322;&#24120;&#12290;&#23646;&#24615;&#26641;&#36845;&#20195;&#22120;&#20026;&#21452;&#21521;&#36845;&#20195;&#22120;&#12290; +</span> <span class="identifier">BOOST_FOREACH</span><span class="special">(</span><code class="computeroutput"><a class="link" href="../boost/property_tree/ptree.html" title="Type definition ptree">ptree</a></code><span class="special">::</span><code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#boost.property_tree.basic_ptree.value_type">value_type</a></code> <span class="special">&amp;</span><span class="identifier">v</span><span class="special">,</span> + <span class="identifier">pt</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4892379-bb">get_child</a></code><span class="special">(</span><span class="string">"debug.modules"</span><span class="special">))</span> + <span class="identifier">m_modules</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id5270779-bb">insert</a></code><span class="special">(</span><span class="identifier">v</span><span class="special">.</span><span class="identifier">second</span><span class="special">.</span><span class="identifier">data</span><span class="special">());</span>
+   <span class="special">}</span>
+</pre>
+<p>
+      Now the save() function. It is also 7 lines of code:
+    </p>
+<p>
+ &#25509;&#19979;&#26469;&#26159; save() &#20989;&#25968;&#12290;&#23427;&#20063;&#26159;7&#34892;&#20195;&#30721;&#65306;
+    </p>
+<pre class="programlisting"><span class="comment">// Saves the debug_settings structure to the specified XML file +</span><span class="comment">// &#23558; debug_setting &#32467;&#26500;&#20445;&#23384;&#33267;&#25351;&#23450;&#30340;XML&#25991;&#20214; +</span><span class="keyword">void</span> <span class="identifier">debug_settings</span><span class="special">::</span><span class="identifier">save</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&amp;</span><span class="identifier">filename</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="comment">// Create an empty property tree object &#21019;&#24314;&#19968;&#20010;&#31354;&#30340;&#23646;&#24615;&#26641;&#23545;&#35937; +</span> <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">property_tree</span><span class="special">::</span><code class="computeroutput"><a class="link" href="../boost/property_tree/ptree.html" title="Type definition ptree">ptree</a></code><span class="special">;</span> + <code class="computeroutput"><a class="link" href="../boost/property_tree/ptree.html" title="Type definition ptree">ptree</a></code> <span class="identifier">pt</span><span class="special">;</span>
+
+ <span class="comment">// Put log filename in property tree &#23558;&#26085;&#24535;&#25991;&#20214;&#21517;&#23384;&#20837;&#23646;&#24615;&#26641; +</span> <span class="identifier">pt</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id5224647-bb">put</a></code><span class="special">(</span><span class="string">"debug.filename"</span><span class="special">,</span> <span class="identifier">m_file</span><span class="special">);</span>
+
+ <span class="comment">// Put debug level in property tree &#23558;&#35843;&#35797;&#32423;&#21035;&#23384;&#20837;&#23646;&#24615;&#26641; +</span> <span class="identifier">pt</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id5224647-bb">put</a></code><span class="special">(</span><span class="string">"debug.level"</span><span class="special">,</span> <span class="identifier">m_level</span><span class="special">);</span>
+
+ <span class="comment">// Iterate over the modules in the set and put them in the +</span> <span class="comment">// property tree. Note that the put function places the new +</span> <span class="comment">// key at the end of the list of keys. This is fine most of +</span> <span class="comment">// the time. If you want to place an item at some other place +</span> <span class="comment">// (i.e. at the front or somewhere in the middle), this can +</span> <span class="comment">// be achieved using a combination of the insert and put_own
+</span>   <span class="comment">// functions.
+</span><span class="comment">// &#36941;&#21382;&#38598;&#21512;&#20013;&#30340;&#27169;&#22359;&#24182;&#23558;&#23427;&#20204;&#23384;&#20837;&#23646;&#24615;&#26641;&#20013;&#12290;&#27880;&#24847;&#65292;&#20989;&#25968; put &#23558;&#26032;&#25554;&#20837;&#30340; +</span><span class="comment">// &#38190;&#20540;&#32622;&#20110;&#21015;&#34920;&#30340;&#23614;&#31471;&#12290;&#22810;&#25968;&#26102;&#20505;&#36825;&#26679;&#24456;&#22909;&#12290;&#22914;&#26524;&#20320;&#24819;&#23558;&#26576;&#19968;&#39033;&#32622;&#20110;&#20854;&#23427;&#20301; +</span><span class="comment">// &#32622;(&#20363;&#22914;&#22312;&#21069;&#31471;&#25110;&#20013;&#38388;)&#65292;&#21487;&#20197;&#29992; insert &#21644; put_own &#20989;&#25968;&#30340;&#32452;&#21512;&#26469;&#35299;&#20915;&#12290; +</span> <span class="identifier">BOOST_FOREACH</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&amp;</span><span class="identifier">name</span><span class="special">,</span> <span class="identifier">m_modules</span><span class="special">)</span> + <span class="identifier">pt</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id5224647-bb">put</a></code><span class="special">(</span><span class="string">"debug.modules.module"</span><span class="special">,</span> <span class="identifier">name</span><span class="special">,</span> <span class="keyword">true</span><span class="special">);</span>
+
+ <span class="comment">// Write the property tree to the XML file. &#23558;&#23646;&#24615;&#26641;&#20889;&#20986;&#33267;XML&#25991;&#20214;&#12290; +</span> <code class="computeroutput"><a class="link" href="../boost/property_tree/xml_parser/write_xml_id4884059.html" title="Function template write_xml">write_xml</a></code><span class="special">(</span><span class="identifier">filename</span><span class="special">,</span> <span class="identifier">pt</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The full program <a href="../../../libs/property_tree/examples/debug_settings.cpp" target="_top">debug_settings.cpp</a>
+      is included in the examples directory.
+    </p>
+<p>
+ &#23436;&#25972;&#30340;&#31243;&#24207; <a href="../../../libs/property_tree/examples/debug_settings.cpp" target="_top">debug_settings.cpp</a>
+      &#22312; examples &#30446;&#24405;&#19979;&#12290;
+    </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision"; width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright (c) 2008 Marcin Kalicinski<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt"; target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../property_tree.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="container.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
=======================================
--- /dev/null
+++ /trunk/doc/html/property_tree/appendices_______.html Thu Dec 24 17:59:33 2009
@@ -0,0 +1,149 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendices &#38468;&#24405;</title>
+<link rel="stylesheet" href="../boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Boost C++&#24211; BoostBook &#25991;&#26723;&#23376;&#38598;"> +<link rel="up" href="../property_tree.html" title="Chapter 14. Boost.PropertyTree"> +<link rel="prev" href="../boost_propertytree/accessing.html" title="How to Access Data in a Property Tree &#22914;&#20309;&#35775;&#38382;&#23646;&#24615;&#26641;&#20013;&#30340;&#25968;&#25454;">
+<link rel="next" href="reference.html" title="Reference">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
+<td align="center"><a href="../../../index.html">Home</a></td>
+<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html";>People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html";>FAQ</a></td>
+<td align="center"><a href="../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../boost_propertytree/accessing.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="reference.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="property_tree.appendices_______"></a><a class="link" href="appendices_______.html" title="Appendices &#38468;&#24405;">Appendices &#38468;&#24405;</a>
+</h2></div></div></div>
+<a name="property_tree.appendices_______.compatibility__________"></a><h4>
+<a name="id5743978"></a>
+ <a class="link" href="appendices_______.html#property_tree.appendices_______.compatibility__________">Compatibility
+      &#20860;&#23481;&#24615;</a>
+    </h4>
+<p>
+ Property tree uses partial class template specialization. There has been no + attempt to work around lack of support for this. The library will therefore
+      most probably not work with Visual C++ 7.0 or earlier, or gcc 2.x.
+    </p>
+<p>
+ &#23646;&#24615;&#26641;&#20351;&#29992;&#20102;&#31867;&#27169;&#26495;&#20559;&#29305;&#21270;&#12290;&#24182;&#19988;&#27809;&#26377;&#35797;&#22270;&#23545;&#19981;&#25903;&#25345;&#27492;&#29305;&#24615;&#30340;&#32534;&#35793;&#22120;&#37319;&#29992;&#21464;&#36890;&#26041;&#27861;&#12290; + &#22240;&#27492;&#26412;&#24211;&#24456;&#21487;&#33021;&#19981;&#33021;&#29992;&#20110; Visual C++ 7.0 &#21450;&#20854;&#26356;&#26089;&#30340;&#29256;&#26412;&#65292;&#25110;&#32773;
+      gcc 2.x&#12290;
+    </p>
+<p>
+ Property tree has been tested (regressions successfully compiled and run) with
+      the following compilers:
+    </p>
+<p>
+ &#23646;&#24615;&#26641;&#24050;&#22312;&#20197;&#19979;&#32534;&#35793;&#22120;&#19979;&#36890;&#36807;&#27979;&#35797;(&#22238;&#24402;&#27979;&#35797;&#32534;&#35793;&#21450;&#36816;&#34892;&#25104;&#21151;)&#65306;
+    </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+        Visual C++ 8.0
+      </li>
+<li>
+        gcc 3.4.2 (MinGW)
+      </li>
+<li>
+        gcc 3.3.5 (Linux)
+      </li>
+<li>
+        gcc 3.4.4 (Linux)
+      </li>
+<li>
+        gcc 4.3.3 (Linux)
+      </li>
+<li>
+        Intel C++ 9.0 (Linux)
+      </li>
+</ul></div>
+<a name="property_tree.appendices_______.rationale_______"></a><h4>
+<a name="id5744058"></a>
+ <a class="link" href="appendices_______.html#property_tree.appendices_______.rationale_______">Rationale
+      &#21407;&#29702;</a>
+    </h4>
+<div class="orderedlist"><ol type="1">
+<li>
+<span class="bold"><strong>Why are there 3 versions of <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4952447-bb">get</a></code>? + Couldn't there be just one? </strong></span> The three versions reflect experience + gathered during several of years of using property tree in several different + applications. During that time I tried hard to come up with one, proper form + of the get function, and failed. I know of these three basic patterns of + usage:<br><span class="bold"><strong>&#20026;&#20160;&#20040;&#26377;3&#20010;&#29256;&#26412;&#30340; <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id4952447-bb">get</a></code>? &#33021;&#21542;&#21482;&#26377;&#19968;&#20010;?</strong></span> + &#36825;&#19977;&#20010;&#29256;&#26412;&#20307;&#29616;&#20102;&#36825;&#20960;&#24180;&#22312;&#19981;&#21516;&#24212;&#29992;&#31243;&#24207;&#20013;&#20351;&#29992;&#23646;&#24615;&#26641;&#25152;&#24471;&#21040;&#30340;&#19968;&#20123;&#32463;&#39564;&#12290; + &#22312;&#36825;&#27573;&#26102;&#38388;&#20869;&#65292;&#25105;&#21162;&#21147;&#23581;&#35797;&#24471;&#21040;&#19968;&#20010;&#36866;&#24403;&#24418;&#24335;&#30340; get &#20989;&#25968;&#65292;&#37117;&#22833;&#36133;&#20102;&#12290; + &#25105;&#30693;&#36947;&#26377;&#19977;&#31181;&#22522;&#26412;&#30340;&#20351;&#29992;&#27169;&#24335;&#65306;
+        <div class="itemizedlist"><ul type="disc">
+<li>
+<span class="emphasis"><em>Just get the data and I do not care if it cannot be done.</em></span> + This is used when the programmer is fairly sure that data exists. Or + in homework assignments. Or when tomorrow is final deadline for your + project.<br><span class="emphasis"><em>&#21482;&#35201;&#33719;&#21462;&#25968;&#25454;&#32780;&#19981;&#20851;&#24515;&#23427;&#26159;&#21542;&#19981;&#21487;&#34892;&#12290;</em></span> + &#36825;&#36890;&#24120;&#29992;&#20110;&#31243;&#24207;&#21592;&#30456;&#24403;&#32943;&#23450;&#25968;&#25454;&#20250;&#23384;&#22312;&#30340;&#24773;&#20917;&#12290; &#25110;&#26159;&#21151;&#35838;&#20219;&#21153;&#30340;&#24773;&#20917;&#12290;&#25110;&#26159;&#26126;&#22825;&#26159;&#39033;&#30446;&#26368;&#21518;&#38480;&#26399;&#30340;&#24773;&#20917;&#12290;
+          </li>
+<li>
+<span class="emphasis"><em>Get the data and revert to default value if it cannot be done.</em></span> + Used when you want to allow omitting the key in question. Implemented + by some similar tools (windows INI file access functions).<br><span class="emphasis"><em>&#33719;&#21462;&#25968;&#25454;&#19988;&#22312;&#25968;&#25454;&#19981;&#21487;&#29992;&#26102;&#20351;&#29992;&#32570;&#30465;&#20540;&#12290;</em></span> + &#36866;&#29992;&#20110;&#24819;&#35201;&#20801;&#35768;&#24573;&#30053;&#38190;&#20540;&#30340;&#24773;&#20917;&#12290; &#26576;&#20123;&#31867;&#20284;&#24037;&#20855;&#24050;&#23454;&#29616;(windows
+            INI &#25991;&#20214;&#35775;&#38382;&#20989;&#25968;)&#12290;
+          </li>
+<li>
+<span class="emphasis"><em>Get the data, but I care more whether you succeeded than I + do for the data itself.</em></span> Used when you want to vary control + flow depending on get success/failure. Or to check for presence of a + key.<br><span class="emphasis"><em>&#33719;&#21462;&#25968;&#25454;&#65292;&#20294;&#19982;&#25968;&#25454;&#26412;&#36523;&#30456;&#27604;&#65292;&#26356;&#20851;&#27880;&#26159;&#21542;&#25104;&#21151;&#33719;&#21462;&#12290;</em></span> + &#36866;&#29992;&#20110;&#38656;&#35201;&#26681;&#25454;&#25968;&#25454;&#33719;&#21462;&#30340;&#25104;&#21151;/&#22833;&#36133; &#26469;&#35843;&#25972;&#25511;&#21046;&#27969;&#30340;&#24773;&#20917;&#12290;&#25110;&#26159;&#26816;&#26597;&#26576;&#20010;&#38190;&#26159;&#21542;&#23384;&#22312;&#30340;&#24773;&#20917;&#12290;
+          </li>
+</ul></div>
+</li>
+<li>
+<span class="bold"><strong>Why does the separator character come before the path + and not after as one would expect? </strong></span> It helps with overload resolution + in some cases.<br><span class="bold"><strong>&#20026;&#20160;&#20040;&#20998;&#38548;&#31526;&#22312;&#36335;&#24452;&#20043;&#21069;&#32780;&#38750;&#20043;&#21518;?</strong></span> + &#22312;&#26576;&#20123;&#24773;&#24418;&#19979;&#65292;&#36825;&#26377;&#21161;&#20110;&#37325;&#36733;&#20915;&#35758;&#12290;
+      </li>
+</ol></div>
+<a name="property_tree.appendices_______.future_development________________"></a><h4>
+<a name="id5744232"></a>
+ <a class="link" href="appendices_______.html#property_tree.appendices_______.future_development________________">Future
+      Development &#26410;&#26469;&#30340;&#24320;&#21457;</a>
+    </h4>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ More parsers: YAML, environment strings.<br> &#26356;&#22810;&#20998;&#26512;&#22120;&#65306;YAML, &#29615;&#22659;&#21464;&#37327;&#23383;&#31526;&#20018;&#12290;
+      </li>
+<li>
+ More robust XML parser.<br> &#26356;&#20581;&#20840;&#30340;XML&#20998;&#26512;&#22120;&#12290;
+      </li>
+<li>
+ Mathematical relations: ptree difference, union, intersection. Useful for + finding configuration file changes etc.<br> &#25968;&#23398;&#36816;&#31639;&#65306;ptree &#30340;&#24046;&#38598;&#12289;&#24182;&#38598;&#12289;&#20132;&#38598;&#12290;&#29992;&#20110;&#26597;&#25214;&#37197;&#32622;&#25991;&#20214;&#30340;&#21464;&#21270;&#31561;&#12290;
+      </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision"; width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright (c) 2008 Marcin Kalicinski<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt"; target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../boost_propertytree/accessing.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="reference.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/Jamfile.v2    Thu Dec 24 17:59:33 2009
@@ -0,0 +1,54 @@
+# Boost.PropertyTree
+#
+# Copyright (c) 2006-2007 Matias Capeletto
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+
+# Quickbook
+# -----------------------------------------------------------------------------
+
+import doxygen ;
+import quickbook ;
+doxygen autodoc
+    :
+        [ glob ../../../boost/property_tree/*.hpp ]
+    :
+        <doxygen:param>EXTRACT_ALL=YES
+ <doxygen:param>"PREDEFINED=\"BOOST_PROPERTY_TREE_DOXYGEN_INVOKED\" \\
+                                   \"BOOST_DEDUCED_TYPENAME=typename\""
+        <doxygen:param>HIDE_UNDOC_MEMBERS=NO
+        <doxygen:param>EXTRACT_PRIVATE=NO
+        <doxygen:param>ENABLE_PREPROCESSING=YES
+        <doxygen:param>MACRO_EXPANSION=YES
+        <doxygen:param>EXPAND_ONLY_PREDEF=YES
+        <doxygen:param>SEARCH_INCLUDES=YES
+        <doxygen:param>INCLUDE_PATH=$(BOOST_ROOT)
+ <doxygen:param>EXAMPLE_PATH=$(BOOST_ROOT)/libs/property_tree/examples
+        <doxygen:param>BRIEF_MEMBER_DESC=YES
+        <doxygen:param>REPEAT_BRIEF=YES
+        <doxygen:param>ALWAYS_DETAILED_SEC=YES
+        <doxygen:param>MULTILINE_CPP_IS_BRIEF=YES
+    ;
+
+xml property_tree : property_tree.qbk ;
+
+boostbook standalone
+    : property_tree
+    : <xsl:param>html.stylesheet=../../../../doc/html/boostbook.css
+      <xsl:param>boost.root=../../../..
+      <xsl:param>boost.libraries=../../../libraries.htm
+      <xsl:param>toc.max.depth=3
+      <xsl:param>toc.section.depth=2
+      <xsl:param>chunk.section.depth=3
+      <dependency>autodoc
+ <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/functional/hash/doc/html
+    ;
+
+#install ../
+#    : ../../../boost.png
+#      ../../../next.png
+#      ../../../prev.png
+#    ;
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/accessing.qbk Thu Dec 24 17:59:33 2009
@@ -0,0 +1,126 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl) + / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section:accessing How to Access Data in a Property Tree 如何访问属性树中的 数据]
+[/ __ptree_*__ macros expected from property_tree.qbk]
+[def __pi__ ['pi]] [/ mathematical constant]
+
+Property tree resembles (almost is) a standard container with value type of `pair<string, ptree>`. It has the usual member functions, such as __ptree_insert__, __ptree_push_back__, __ptree_find__, __ptree_erase__, etc. These can of course be used to populate and access the tree. For example the following code adds key `"pi"` with data (almost) equal to mathematical __pi__ value:
+
+属性树类似于(几乎就是)一个值类型为 `pair<string, ptree>` 的标准容器。它具有 通常的成员函数, +如 __ptree_insert__, __ptree_push_back__, __ptree_find__, __ptree_erase__, 等等。 +这些函数当然都可以用于填充和访问树中的数据。例如以下代码增加一个键值 `"pi"`,
+所带的数据(几乎)等于数学的 __pi__ 值:
+
+ __ptree__ pt;
+ pt.__ptree_push_back__(__ptree__::__ptree_value_type__("pi", __ptree__("3.14159")));
+
+To find the value of `pi` we might do the following:
+
+要查找 `pi` 的值,我们可以这样做:
+
+ __ptree__::__ptree_const_iterator__ it = pt.__ptree_find__("pi");
+ double pi = boost::lexical_cast<double>(it->second._ptree_data__());
+
+This looks quite cumbersome, and would be even more so if `pi` value was not stored so near the top of the tree, and we cared just a little bit more about errors. Fortunately, there is another, correct way of doing it:
+
+这看起来非常笨重,而且如果 `pi` 值不是被存储在靠近树的顶端位置则更是如此,
+而我们关心的只比错误多一点。幸好,我们有另一个正确的方法来做这件事:
+
+ ptree pt;
+ pt.__ptree_put__("pi", 3.14159);                // put double
+ double pi = pt.__ptree_get__<double>("pi");     // get double
+
+It doesn't get simpler than that. Basically, there are 2 families of member functions, __ptree_get__ and __ptree_put__, which allow intuitive access to data stored in the tree (direct children or not).
+
+没有什么比这更简单了。基本上,我们有2个成员函数族,__ptree_get__ 和 __ptree_put__,
+它们可以直观地访问树中的数据(直接或非直接的子节点)。
+
+[heading Three Ways of Getting Data 获取数据的三种方法]
+
+There are three versions of get: get, get (default-value version), and get_optional, which differ by failure handling strategy. All versions take path specifier, which determines in which key to search for a value. It can be a single key, or a path to key, where path elements are separated with a special character (a '.' if not specified differently). For example debug.logging.errorlevel might be a valid path with dot as a separator.
+
+有三个版本的 get: get, get (缺省值版本), 以及 get_optional, 它的失败处理策 略有所不同。 +所有版本均接受路径指定符,用于确定在哪个键中查找值。它可以是单个键值,或是 到键值的路径, +路径中的各元素用一个特定字符(若未特别指定就是'.')分隔。例如 debug.logging.errorlevel
+就可能是一个以点号作为分隔符的有效路径。
+
+# The throwing version (__ptree_get__) 抛出版本的(__ptree_get__):
+``
+__ptree__ pt;
+/* ... */
+float v = pt.__ptree_get__<float>("a.path.to.float.value");
+``
+This call locates the proper node in the tree and tries to translate its data string to a float value. If that fails, exception is thrown. If path does not exist, it will be __ptree_bad_path__ exception. If value could not be translated, it will be __ptree_bad_data__. Both of them derive from __ptree_error__ to make common handling possible.[br] +这个调用定位至树中的正确节点,并尝试将其数据字符串翻译为浮点值。如果失败则 抛出异常。 +如果路径不存在,则是 __ptree_bad_path__ 异常。如果值不能被翻译,则是 __ptree_bad_data__ 异常。
+这两个异常均派生自 __ptree_error__,可以一同处理。
+# The default-value version (__ptree_get_defaulted__) 缺省值版本的 (__ptree_get_defaulted__):
+``
+__ptree__ pt;
+/* ... */
+float v = pt.__ptree_get_defaulted__("a.path.to.float.value", -1.f);
+``
+It will do the same as above, but if it fails, it will return the default value specified by second parameter (here -1.f) instead of throwing. This is very useful in common situations where one wants to allow omitting of some keys. Note that type specification needed in throwing version is normally not necessary here, because type is determined by the default value parameter.[br] +其作用与上一个版本相同,不过如果操作失败将返回由第二个参数所指定的缺省值(在 这里是-1.f),
+而非抛出异常。在那些允许忽略某些键的一般情况下,这个版本非常有用。
+注意,在抛出版本中必须指定类型而在此版本中则不必,因为类型可以通过缺省值参 数来推断。 +# The optional version (__ptree_get_optional__) 可选版本的 (__ptree_get_optional__):
+``
+__ptree__ pt;
+/* ... */
+boost::optional<float> v = pt.__ptree_get_optional__<float>("a.path.to.float.value");
+``
+This version uses boost::optional class to handle extraction failure. On successful extraction, it will return boost::optional initialized with extracted value. Otherwise, it will return uninitialized boost::optional.[br]
+这个版本使用 boost::optional 类来处理获取数据的失败。当成功获取时,
+它将返回由获得值初始化的 boost::optional。否则,它将返回未初始化的 boost::optional。
+
+To retrieve value from this tree (not some subkey), use __ptree_get_value__, __ptree_get_value__ (default-value version), and __ptree_get_value_optional__. They have identical semantics to __ptree_get__ functions, except they don't take the __path__ parameter. Don't call __ptree_get__ with and empty __path__ to do this as it will try to extract contents of subkey with empty name.
+
+要从树中(不是某个子键)获取值,请用 __ptree_get_value__, __ptree_get_value__ (缺省值版本), +和 __ptree_get_value_optional__。它们具有与 __ptree_get__ 函数相同的语 义,除了一点, +它们不接受 __path__ 参数。不要用空的 __path__ 来调用 __ptree_get__,这样做 将会取出带有空名的子键的内容。
+
+To use separator character other than default '[^.]', each of the __ptree_get__ versions has another form, which takes an additional parameter in front of path. This parameter of type `char/wchar_t` specifies the separating character. This is a lifesaving device for those who may have dots in their keys:
+
+要使用缺省分隔符 '[^.]' 以外的其它分隔符,则每个 __ptree_get__ 版本都有一个 其它的格式, +它在路径之前接受多一个参数。该参数的类型为 `char/wchar_t`,给定用于分隔的字 符。
+以下适用于那些在键名中带有点号的情况:
+
+ pt.get<float>('/', "p.a.t.h/t.o/v.a.l.u.e");
+ pt.get('/', "p.a.t.h/t.o/v.a.l.u.e", 0, NULL);
+ pt.get_optional<std::string>('/', "p.a.t.h/t.o/v.a.l.u.e");
+
+[heading One Way of Putting Data 写入数据的一种方法]
+
+To complement __ptree_get__, there is a __ptree_put__ function. Contrary to __ptree_get__, it has only one variant. The reason is, there is no need to handle put failures so often (normally, __ptree_put__ will only fail if conversion of the supplied value to __ptree_data_type__ fails or the system runs out of memory. In the former case, __ptree_put__ will throw __ptree_bad_data__). Sample usage of __ptree_put__ might appear as:
+
+相对于 __ptree_get__,有一个 __ptree_put__ 函数。与 __ptree_get__ 相比,它 只有一个版本。 +原因是,通常没有必要处理写入的失败(通常,__ptree_put__ 仅当从给定值到 __ptree_data_type__ +的转换失败,或系统内存溢出时才会失败。对于前一种情况,__ptree_put__ 将抛出 __ptree_bad_data__)。
+以下为 __ptree_put__ 的使用例子:
+
+ __ptree__ pt;
+ pt.__ptree_put__("a.path.to.float.value", 3.14f);
+
+Calling __ptree_put__ will insert a new value at specified path, so that a call to __ptree_get__ specifying the same path will retrieve it. Further, __ptree_put__ will insert any missing path elements during path traversal. For example, calling `__ptree_put__("key1.key2.key3", 3.14f)` on an empty tree will insert three new children: `key1`, `key1.key2` and `key1.key2.key3`. The last one will receive a string `"3.14"` as data, while the two former ones will have empty data strings. __ptree_put__ always inserts new keys at the back of the existing sequences.
+
+调用 __ptree_put__ 将在指定路径插入一个新值,此后对同一路径调用 __ptree_get__ 将取回该值。 +而且,__ptree_put__ 会在路径遍历期间插入所有不存在的路径。例如,对一棵空树 调用 +`__ptree_put__("key1.key2.key3", 3.14f)` 将插入三个新的子节点:`key1`, `key1.key2` +和 `key1.key2.key3`。最后一个子节点将接收一个字符串 `"3.14"` 作为数据,而前 两个则为空数据串。
+__ptree_put__ 总是将新的键插入到已有序列的末端。
+
+Similar to __ptree_get_value__, there is also a __ptree_put_value__ function. It does the same for this property tree what __ptree_put__ does for its children. Thus, it does not require __path__:
+
+类似于 __ptree_get_value__,也有一个 __ptree_put_value__ 函数。
+它对于属性树的作用与 __ptree_put__ 对于子节点的作用一样。因此,它不需要 __path__:
+
+ __ptree__ pt;
+ pt.__ptree_put_own__(3.14f);
+
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/cmd_line_parser.qbk Thu Dec 24 17:59:33 2009
@@ -0,0 +1,80 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl) + / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section:cmdline_parser Command Line Parser]
+[def __read_cmdline__ [funcref boost::property_tree::cmdline_parser::read_cmdline read_cmdline]] +This is a simple parser that converts command line parameters (in form of standard `argc` and `argv` arguments) into a property tree. There is no write function. The parser correctly recognizes simple command line styles, both from Unix and Windows worlds.
+
+During parse, parameters are converted to __ptree__ keys and grouped by their prefix, if any. Grouping means that they are inserted as children of a key representing appropriate group. Prefix is a single character that comes directly after so called "metacharacter", which is usually a dash '-' (on Unix) or a slash '/' (on Windows). For example, parameter [^-I/usr/include/foobar] has prefix [^I] after metacharacter '[^-]'. Parameters that do not start with a metacharacter (e.g. source files given to gcc), are inserted as children of a special, unnamed group. Additionally, data of each group contains value of last parameter assigned to that group. For example, this command line:
+
+[pre myprogram.exe -c -I/usr/include -Lm -I/home/mammamia/stuff foo.c bar.c -g]
+
+will result in the following property tree being created:
+
+ "" bar.c                    ;"unnamed" group
+ {
+    "0" myprogram.exe        ;first argument is name of program
+    "1" foo.c
+    "2" bar.c
+ }
+ c                           ;no data
+ {
+    "0" ""                  ;no value associated with 'c' option
+ }
+ I /home/mammamia/stuff
+ {
+    "0" /usr/include
+    "1" /home/mammamia/stuff
+ }
+ L m
+ {
+    "0" m
+ }
+
+Within each group, parameters are numbered, starting from zero.
+
+Metacharacters can be specified as a parameter to read function. This code will parse command line using both dash and slash as metachatacters:
+
+ __ptree__ pt;
+ __read_cmdline__(argc, argv, "-/", pt);
+
+Once the command line is parsed into a __ptree__, the power of the __ptree_get__, __ptree_get_child__, and __ptree_get_value__ interfaces can be used to conveniently extract the values of options needed. In the simplest case, user only needs to query key with name of option to get its value. For example:
+
+ // default to 0 if -Nxx or /Nxx not specified on command line
+ int n = pt.__ptree_get_defaulted__("N", 0);
+
+or
+
+ // throw if -Nxx or /Nxx not specified on command line
+ int n = pt.__ptree_get__<int>("N");
+
+If there is more than one instance of 'N' in command line, they can be accessed as:
+
+ // Copy values of all -N arguments to vector
+ std::vector<int> vec;
+ BOOST_FOREACH(const __ptree__::__ptree_value_type__ &v, pt.__ptree_get_child__("N", empty_ptree()))
+    vec.push_back(v.second.__ptree_get_value__<int>());
+
+or:
+
+ // Use numbering to access specific instances of parameter -N
+ int first_n = pt.__ptree_get_defaulted__("N.0", default_n_value);
+ int second_n = pt.__ptree_get_defaulted__("N.1", default_n_value);
+ /* ... */
+ int tenth_n = pt.__ptree_get_defaulted__("N.9", default_n_value);
+
+If you want to know how many [^-N]'s were specified:
+
+ // Count -N parameters
+ size_t count = pt.__ptree_get_child__("N", empty_ptree<ptree>()).size();
+
+First argument, `argv[0]`, normally contains path to executable, which is rarely used for arguments parsing. To skip it, invoke the parser like in the following manner:
+
+ // Skip program path
+ __read_cmdline__(argc - 1, argv + 1, "-", pt)
+
+[endsect] [/cmd_line_parser]
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/container.qbk Thu Dec 24 17:59:33 2009
@@ -0,0 +1,38 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl) + / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section:container Property Tree as a Container 作为容器的属性树]
+[/ __ptree_*__ macros expected from property_tree.qbk]
+Every property tree node models the ReversibleSequence concept, providing
+access to its immediate children. This means that iterating over a __ptree__
+(which is the same as its root node - every __ptree__ node is also the
+subtree it starts) iterates only a single level of the hierarchy. There is no
+way to iterate over the entire tree.
+
+每一个属性树节点都符合可逆序列概念,提供对其直接子节点的访问。这意味着遍历 一个 +__ptree__ (与根节点一样 - 每个 __ptree__ 节点同时也是从它开始的子树)只是遍 历单个层级。
+没有方法直接遍历整棵树。
+
+It is very important to remember that the property sequence is *not* ordered by +the key. It preserves the order of insertion. It closely resembles a std::list. +Fast access to children by name is provided via a separate lookup structure. Do not +attempt to use algorithms that expect an ordered sequence (like binary_search)
+on a node's children.
+
+有一点很重要必须要记住,属性序列*并不是*按其键值排序的。它保留了插入的顺 序。 +它更接近于 std::list。按名字对子节点的快速访问,是通过一个独立的查找结构来 提供的。
+不要试图对一个节点的子节点使用那些要求有序序列的算法(如 binary_search)。
+
+There may be multiple children with the same key value in a node. However, these +children are not necessarily sequential. The iterator returned by __ptree_find__
+may refer to any of these, and there are no guarantees about the relative
+position of the other equally named children.
+
+一个节点中可能会有多个子节点带有相同的键值。但是这些子节点间是没有先后顺序 的。 +__ptree_find__ 所返回的迭代器可能指向它们中的任意一个,而且对于其它相同名字
+子节点的相对位置,也是没有保证的。
+[endsect] [/container]
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/info_parser.qbk       Thu Dec 24 17:59:33 2009
@@ -0,0 +1,68 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl) + / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section INFO Parser  INFO分析器]
+The INFO format was created specifically for the property tree library. It
+provides a simple, efficient format that can be used to serialize property
+trees that are otherwise only stored in memory. It can also be used for any
+other purpose, although the lack of widespread existing use may prove to be an
+impediment.
+
+INFO格式是专为这个属性树库创建的。它提供一个简单、高效的格式,可用于对属性 树进行序列化, +而不是仅仅保存在内存中。它还可用于其它目的,虽然目前缺乏广泛的使用可能会被 证明是一个障碍。
+
+INFO provides several features that make it familiar to C++ programmers and
+efficient for medium-sized datasets, especially those used for test input. It +supports C-style character escapes, nesting via curly braces, and file inclusion
+via #include.
+
+INFO提供了几个特性,更贴近于C++程序员且对中型数据集更高效,尤其是那些用于测 试输入的数据。
+它支持C风格的字符转义、大括号的嵌套,和#include的文件包含。
+
+INFO is also used for visualization of property trees in this documentation.
+
+INFO也被用于本文档中的属性树展示。
+
+A typical INFO file might look like this:
+
+一个典型的INFO文件看起来象这样:
+
+ key1 value1
+ key2
+ {
+    key3 value3
+    {
+       key4 "value4 with spaces"
+    }
+    key5 value5
+ }
+
+Here's a more complicated file demonstrating all of INFO's features:
+
+以下是一个更为复杂的文件,示范了INFO的所有特性:
+
+ ; A comment
+ key1 value1   ; Another comment
+ key2 "value with special characters in it {};#\n\t\"\0"
+ {
+    subkey "value split "\
+           "over three"\
+           "lines"
+    {
+       a_key_without_value ""
+       "a key with special characters in it {};#\n\t\"\0" ""
+       "" value    ; Empty key with a value
+       "" ""       ; Empty key with empty value!
+    }
+ }
+ #include "file.info"    ; included file
+
+INFO round-trips except for the loss of comments and include directives.
+
+INFO是可循环的,除了会丢失注释以及include指令。
+
+[endsect] [/info_parser]
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/ini_parser.qbk        Thu Dec 24 17:59:33 2009
@@ -0,0 +1,57 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl) + / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section INI Parser  INI分析器]
+[def __ini__ [@http://en.wikipedia.org/wiki/INI INI format]]
+The __ini__ was once widely used in the world of Windows. It is now deprecated, +but is still used by a surprisingly large number of applications. The reason is +probably its simplicity, plus that Microsoft recommends using the registry as
+a replacement, which not all developers want to do.
+
+__ini__ 曾经在Windows世界中被广泛使用。现在已经不建议使用,但仍然被大量应用 程序使用。 +原因可能是由于它的简单性,加上Microsoft建议使用registry作为替代,但不是所有 开发都愿意。
+
+INI is a simple key-value format with a single level of sectioning. It is thus
+less rich than the property tree dataset, which means that not all property
+trees can be serialized as INI files.
+
+INI 是一种简单的键-值格式,只有section一个层级。因此,它不如属性树数据集,
+这意味着不是所有属性树都可以序列化为INI文件。
+
+The INI parser creates a tree node for every section, and a child node for
+every property in that section. All properties not in a section are directly +added to the root node. Empty sections are ignored. (They don't round-trip, as
+described below.)
+
+INI分析器为每个section创建一个树节点,section中的每个属性成为一个子节点。
+所有不在section中的属性被直接添加至根节点。空的section被略过。
+(它不是可循环的,如后所述)。
+
+The INI serializer reverses this process. It first writes out every child of the +root that contains data, but no child nodes, as properties. Then it creates a +section for every child that contains child nodes, but no data. The children of +the sections must only contain data. It is an error if the root node contains +data, or any child of the root contains both data and content, or there's more
+than three levels of hierarchy. There must also not be any duplicate keys.
+
+INI序列化器则将此过程逆转。它首先写出根的每个带有数据而没有子节点的子节 点,作为属性。 +然后为每个带有子节点而没有数据的子节点创建一个section。section的子节点则只 能包含数据。 +如果根节点包含数据,或者根的子节点同时包含数据和内容,或者超过三层,则为错 误。
+此外,还必须没有重复的键。
+
+An empty tree node is assumed to be an empty property. There is no way to create
+empty sections.
+
+空的树节点被假定为一个空的属性。没有办法创建一个空的section。
+
+Since the Windows INI parser discards trailing spaces and does not support
+quoting, the property tree parser follows this example. This means that
+property values containing trailing spaces do not round-trip.
+
+由于Windows INI分析器忽略后随空格,且不支持引号,所以属性树分析器也遵循此 例。
+这意味着包含后随空格的属性值将不能完全恢复。
+[endsect] [/ini_parser]
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/intro.qbk     Thu Dec 24 17:59:33 2009
@@ -0,0 +1,54 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl) + / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[template ptree2codeImage[] [$images/ptree2code.png]]
+[section:intro What is Property Tree? 属性树是什么?]
+The Property Tree library provides a data structure that stores an arbitrarily +deeply nested tree of values, indexed at each level by some key. Each node of +the tree stores its own value, plus an ordered list of its subnodes and their +keys. The tree allows easy access to any of its nodes by means of a path, which
+is a concatenation of multiple keys.
+
+Property Tree库提供了一种数据结构,用于保存任意嵌套层数的由值组成的树,每一 层以 +某个键值来索引。树的每个节点保存了它本身的值,以及一个由该节点的子节点及其 键值 +组成的有序列表。这种树可以通过类似于路径的方式很方便地访问任一节点,这个路 径由
+多个键值串接而成。
+
+In addition, the library provides parsers and generators for a number of data +formats that can be represented by such a tree, including XML, INI, and JSON.
+
+此外,这个库还提供了一些分析器和生成器,对应于多种可用于表示一棵树的数据格 式,
+如 XML, INI 和 JSON。
+
+Property trees are versatile data structures, but are particularly suited for +holding configuration data. The tree provides its own, tree-specific interface,
+and each node is also an STL-compatible Sequence for its child nodes.
+
+属性树是多功能的数据结构,尤其适合用于保存配置数据。该树提供了它自己本身、 树专用
+的接口,而且每个节点都是其子节点的一个STL兼容序列。
+
+Conceptually, then, a node can be thought of as the following structure:
+
+在概念上,一个节点可以想象为以下结构:
+
+   struct ptree
+   {
+ data_type data; // data associated with the node 与节点相关联的数据 + list< pair<key_type, ptree> > children; // ordered list of named children 命名子节点的有序列表
+   };
+
+Both key_type and data_type are configurable, but will usually be std::string.
+
+key_type 和 data_type 都是可配置的,但通常都是 std::string。
+
+Many software projects develop a similar tool at some point of their lifetime, +and property tree originated the same way. We hope the library can save many
+from reinventing the wheel.
+
+许多软件项目都在它们生命周期中的某个时候开发过类似的工具,属性树正源自于 此。
+我们希望这个库可以节省重复发明轮子的时间。
+[endsect] [/intro]
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/json_parser.qbk       Thu Dec 24 17:59:33 2009
@@ -0,0 +1,88 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl) + / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section JSON Parser  JSON分析器]
+[def __json__ [@http://en.wikipedia.org/wiki/JSON JSON format]]
+The __json__ is a data interchange format derived from the object literal
+notation of JavaScript. (JSON stands for JavaScript Object Notation.)
+JSON is a simple, compact format for loosely structured node trees of any depth, +very similar to the property tree dataset. It is less stuctured than XML and has +no schema support, but has the advantage of being simpler, smaller and typed
+without the need for a complex schema.
+
+__json__ 是派生自 JavaScript 的对象文字记法的一种数据交换格式(JSON 意为 JavaScript Object Notation)。 +JSON 是针对松散结构的、任意深度的节点树的一种简单、紧凑的格式,非常类似于属 性树数据集。 +与XML相比,它具有更少的结构性,且不支持schema,但却具有更简单、更小、带类 型、
+不需要复杂schema的优点。
+
+The property tree dataset is not typed, and does not support arrays as such.
+Thus, the following JSON / property tree mapping is used:
+
+属性树数据集是无类型的,且不支持数组。因此,要用到以下JSON/属性树映射:
+
+* JSON objects are mapped to nodes. Each property is a child node.[br]
+  JSON 对象映射至节点。每个属性是一个子节点。
+* JSON arrays are mapped to nodes. Each element is a child node with an empty + name. If a node has both named and unnamed child nodes, it cannot be mapped
+  to a JSON representation.[br]
+ JSON 数组映射至节点。每个元素是一个无名的子节点。如果一个节点既有命名的子 节点,
+  也有无名的子节点,则它不能被映射至JSON表示法。
+* JSON values are mapped to nodes containing the value. However, all type
+  information is lost; numbers, as well as the literals "null", "true" and
+  "false" are simply mapped to their string form.[br]
+ JSON 值被映射至含有值的节点。但是,所有类型信息会丢失;数字以及字面 值 "null",
+  "true" 和 "false" 被映射至它们的字符串形式。
+* Property tree nodes containing both child nodes and data cannot be mapped.[br]
+  属性树节点同时包含子节点和不能被映射的数据。
+
+JSON round-trips, except for the type information loss.
+
+JSON 是可循环的,除了类型信息会丢失。
+
+For example this JSON:
+
+例如,以下JSON:
+
+ {
+    "menu":
+    {
+       "foo": true,
+       "bar": "true",
+       "value": 102.3E+06,
+       "popup":
+       [
+          {"value": "New", "onclick": "CreateNewDoc()"},
+          {"value": "Open", "onclick": "OpenDoc()"},
+       ]
+    }
+ }
+
+will be translated into the following property tree:
+
+将被翻译为如下属性树:
+
+ menu
+ {
+    foo true
+    bar true
+    value 102.3E+06
+    popup
+    {
+       ""
+       {
+          value New
+          onclick CreateNewDoc()
+       }
+       ""
+       {
+          value Open
+          onclick OpenDoc()
+       }
+    }
+ }
+
+[endsect] [/json_parser]
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/parsers.qbk   Thu Dec 24 17:59:33 2009
@@ -0,0 +1,24 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl) + / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section:parsers How to Populate a Property Tree 如何填充属性树]
+[include xml_parser.qbk]
+
+[include json_parser.qbk]
+
+[include ini_parser.qbk]
+
+[include info_parser.qbk]
+
+# These parsers will be dropped for now.
+#[include cmd_line_parser.qbk]
+
+#[include windows_registry_parser.qbk]
+
+#[include system_environment_parser.qbk]
+
+[endsect] [/parsers]
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/property_tree.qbk     Thu Dec 24 17:59:33 2009
@@ -0,0 +1,139 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl) + / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+
+[library Boost.PropertyTree
+    [quickbook 1.4]
+    [copyright 2008 Marcin Kalicinski]
+    [purpose Property Tree library]
+    [license
+        Distributed under the Boost Software License, Version 1.0.
+        (See accompanying file LICENSE_1_0.txt or copy at
+        [@http://www.boost.org/LICENSE_1_0.txt])
+    ]
+    [authors [Kalicinski, Marcin]]
+    [id property_tree]
+    [dirname property_tree]
+    [category container]
+    [category template]
+]
+
+[/ Tried to use templates here but got errors expanding them in [classref ...] etc.]
+[/ types]
+[def __ptree__ [classref boost::property_tree::ptree ptree]]
+[def __ptree_value_type__ [classref boost::property_tree::basic_ptree::value_type value_type]] +[def __ptree_data_type__ [classref boost::property_tree::basic_ptree::data_type data_type]] +[def __ptree_iterator__ [classref boost::property_tree::basic_ptree::iterator iterator]] +[def __ptree_const_iterator__ [classref boost::property_tree::basic_ptree::const_iterator const_iterator]]
+[def __path__ [classref boost::property_tree::path path]]
+[def __ptree_error__ [classref boost::property_tree::ptree_error ptree_error]] +[def __ptree_bad_data__ [classref boost::property_tree::ptree_bad_data ptree_bad_data]] +[def __ptree_bad_path__ [classref boost::property_tree::ptree_bad_path ptree_bad_path]]
+
+[/ members]
+[def __ptree_insert__ [memberref boost::property_tree::basic_ptree::insert insert]] +[def __ptree_push_back__ [memberref boost::property_tree::basic_ptree::push_back push_back]] +[def __ptree_find__ [memberref boost::property_tree::basic_ptree::find find]] +[def __ptree_erase__ [memberref boost::property_tree::basic_ptree::erase erase]] +[def __ptree_find__ [memberref boost::property_tree::basic_ptree::find find]] +[def __ptree_data__ [memberref boost::property_tree::basic_ptree::data data]] +[def __ptree_push_front__ [memberref boost::property_tree::basic_ptree::push_front push_front]] +[def __ptree_sort__ [memberref boost::property_tree::basic_ptree::sort sort]]
+[def __ptree_get__ [memberref boost::property_tree::basic_ptree::get get]]
+[/ XXX: Don't know how to specify overloads]
+[def __ptree_get_defaulted__ [memberref boost::property_tree::basic_ptree::get get]] +[def __ptree_get_optional__ [memberref boost::property_tree::basic_ptree::get_optional get_optional]] +[def __ptree_get_value__ [memberref boost::property_tree::basic_ptree::get_value get_value]]
+[/ XXX: Don't know how to specify overloads]
+[def __ptree_get_value_defaulted__ [memberref boost::property_tree::basic_ptree::get_value get_value]] +[def __ptree_get_value_optional__ [memberref boost::property_tree::basic_ptree::get_value_optional get_value_optional]] +[def __ptree_get_child__ [memberref boost::property_tree::basic_ptree::get_child get_child]]
+[def __ptree_put__ [memberref boost::property_tree::basic_ptree::put put]]
+[def __ptree_put_value__ [memberref boost::property_tree::basic_ptree::put_value put_value]]
+
+[/ free-functions]
+[def __read_xml__ [funcref boost::property_tree::xml_parser::read_xml read_xml]] +[def __write_xml__ [funcref boost::property_tree::xml_parser::write_xml write_xml]]
+
+[include intro.qbk]
+
+[include tutorial.qbk]
+
+[include container.qbk]
+
+[include synopsis.qbk]
+
+[include parsers.qbk]
+
+[include accessing.qbk]
+
+[section Appendices 附录]
+[heading Compatibility 兼容性]
+Property tree uses partial class template specialization. There has been no
+attempt to work around lack of support for this. The library will therefore
+most probably not work with Visual C++ 7.0 or earlier, or gcc 2.x.
+
+属性树使用了类模板偏特化。并且没有试图对不支持此特性的编译器采用变通方法。
+因此本库很可能不能用于 Visual C++ 7.0 及其更早的版本,或者 gcc 2.x。
+
+Property tree has been tested (regressions successfully compiled and run)
+with the following compilers:
+
+属性树已在以下编译器下通过测试(回归测试编译及运行成功):
+
+* Visual C++ 8.0
+* gcc 3.4.2 (MinGW)
+* gcc 3.3.5 (Linux)
+* gcc 3.4.4 (Linux)
+* gcc 4.3.3 (Linux)
+* Intel C++ 9.0 (Linux)
+
+[heading Rationale 原理]
+# [*Why are there 3 versions of __ptree_get__? Couldn't there be just one? ] +The three versions reflect experience gathered during several of years of using +property tree in several different applications. During that time I tried hard
+to come up with one, proper form of the get function, and failed. I know of
+these three basic patterns of usage:[br]
+[*为什么有3个版本的 __ptree_get__? 能否只有一个?]
+这三个版本体现了这几年在不同应用程序中使用属性树所得到的一些经验。
+在这段时间内,我努力尝试得到一个适当形式的 get 函数,都失败了。
+我知道有三种基本的使用模式:
+
+ * ['Just get the data and I do not care if it cannot be done.] This is used
+   when the programmer is fairly sure that data exists. Or in homework
+   assignments. Or when tomorrow is final deadline for your project.[br]
+ ['只要获取数据而不关心它是否不可行。] 这通常用于程序员相当肯定数据会存 在的情况。
+   或是功课任务的情况。或是明天是项目最后限期的情况。
+ * ['Get the data and revert to default value if it cannot be done.] Used when + you want to allow omitting the key in question. Implemented by some similar
+   tools (windows INI file access functions).[br]
+   ['获取数据且在数据不可用时使用缺省值。]  适用于想要允许忽略键值的情况。
+   某些类似工具已实现(windows INI 文件访问函数)。
+ * ['Get the data, but I care more whether you succeeded than I do for the data
+   itself.] Used when you want to vary control flow depending on get
+   success/failure. Or to check for presence of a key.[br]
+ ['获取数据,但与数据本身相比,更关注是否成功获取。] 适用于需要根据数据获 取的成功/失败
+   来调整控制流的情况。或是检查某个键是否存在的情况。
+
+# [*Why does the separator character come before the path and not after
+    as one would expect? ]
+It helps with overload resolution in some cases.[br]
+[*为什么分隔符在路径之前而非之后?]
+在某些情形下,这有助于重载决议。
+
+[heading Future Development 未来的开发]
+* More parsers:  YAML, environment strings.[br]
+  更多分析器:YAML, 环境变量字符串。
+* More robust XML parser.[br]
+  更健全的XML分析器。
+* Mathematical relations:  ptree difference, union, intersection.
+  Useful for finding configuration file changes etc.[br]
+  数学运算:ptree 的差集、并集、交集。用于查找配置文件的变化等。
+
+[endsect] [/ Appendices]
+
+[xinclude autodoc.xml]
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/synopsis.qbk  Thu Dec 24 17:59:33 2009
@@ -0,0 +1,45 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl) + / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section:synopsis Property Tree Synopsis 属性树概要]
+[def __basic_ptree__ [classref boost::property_tree::basic_ptree basic_ptree]]
+[def __ptree__ [classref boost::property_tree::ptree ptree]]
+[def __wptree__ [classref boost::property_tree::wptree wptree]]
+[def __iptree__ [classref boost::property_tree::iptree iptree]]
+[def __wiptree__ [classref boost::property_tree::wiptree wiptree]]
+[/ basic_ptree members]
+[def __ptree_get__ [memberref boost::property_tree::basic_ptree::get get]]
+[def __ptree_put__ [memberref boost::property_tree::basic_ptree::put put]]
+[def __ptree_get_value__ [memberref boost::property_tree::basic_ptree::get_value get_value]] +[def __ptree_put_value__ [memberref boost::property_tree::basic_ptree::put_value put_value]] +[def __ptree_get_child__ [memberref boost::property_tree::basic_ptree::get_child get_child]] +[def __ptree_put_child__ [memberref boost::property_tree::basic_ptree::put_child put_child]] +[def __ptree_data__ [memberref boost::property_tree::basic_ptree::data data]]
+The central component of the library is the __basic_ptree__ class template.
+Instances of this class are property trees. It is parametrized on key and data
+type, and key comparison policy; __ptree__, __wptree__, __iptree__ and
+__wiptree__ are typedefs of __basic_ptree__ using predefined combinations of +template parameters. Property tree is basically a somewhat simplified standard
+container (the closest being std::list), plus a bunch of extra member
+functions. These functions allow easy and effective access to the data stored +in property tree. They are various variants of __ptree_get__, __ptree_put__,
+__ptree_get_value__, __ptree_put_value__, __ptree_get_child__,
+__ptree_put_child__. Additionally, there is __ptree_data__ function to access
+node data directly.
+
+本库的核心组件是 __basic_ptree__ 类模板。该类的实例就是属性树。它按键类型和 数据类型, +以及键值比较策略进行参数化;__ptree__, __wptree__, __iptree__ 和 __wiptree__ 分别为 +各个模板参数的不同预定义组合的 __basic_ptree__ 的 typedef。基本上,属性树是 一个简化的 +标准容器(最接近于 std::list),加上一组额外的成员函数。这些函数可以让你方便 且快速地 +访问保存在属性树中的数据。它们分别是 __ptree_get__, __ptree_put__, __ptree_get_value__, +__ptree_put_value__, __ptree_get_child__, __ptree_put_child__ 的各种变体。 另外,还有一个
+__ptree_data__ 函数用于直接访问节点数据。
+
+See the [classref boost::property_tree::basic_ptree basic_ptree class template synopsis] for more information.
+
+更多信息请参见 [classref boost::property_tree::basic_ptree basic_ptree 类模 板概要]。
+[endsect]
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/system_environment_parser.qbk Thu Dec 24 17:59:33 2009
@@ -0,0 +1,10 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl) + / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section System Environment Parser]
+[note The system environment parser is not yet implemented.]
+[endsect] [/env_parser]
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/tutorial.qbk  Thu Dec 24 17:59:33 2009
@@ -0,0 +1,149 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl) + / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section:tutorial Five Minute Tutorial 五分钟教程]
+This tutorial uses XML. Note that the library is not specifically bound to XML,
+and any other supported format (such as INI or JSON) could be used instead.
+XML was chosen because the author thinks that wide range of people is familiar
+with it.
+
+本教程使用XML。注意,本库并不是特别与XML绑定的,你可以使用其它可支持的格式
+(如INI或JSON)来代替。选择XML只是因为作者认为大多数人比较熟悉它。
+
+Suppose we are writing a logging system for some application, and need to read +log configuration from a file when the program starts. The file with the log
+configuration looks like this:
+
+假设我们正在为某个应用程序编写一个日志系统,需要在程序启动时从某个文件读入 日志的配置。
+日志配置文件看起来可能会象这样:
+
+[pre
+<debug>
+    <filename>debug.log</filename>
+    <modules>
+        <module>Finance</module>
+        <module>Admin</module>
+        <module>HR</module>
+    </modules>
+    <level>2</level>
+</debug>
+]
+
+It contains the log filename, a list of modules where logging is enabled, and
+the debug level value. To store the logging configuration in the program we
+created a debug_settings structure:
+
+它包含日志文件名,一串由要打开日志功能的模块所组成的列表,以及调试级别值。
+为了在程序中保存这些日志配置信息,我们创建一个 debug_settings 结构:
+
+   struct debug_settings
+   {
+       std::string m_file;          // log filename 日志文件名
+       int m_level;                 // debug level 调试级别
+ std::set<string> m_modules; // modules where logging is enabled 要 打开日志功能的模块
+       void load(const std::string &filename);
+       void save(const std::string &filename);
+   };
+
+All that needs to be done now is to write implementations of load() and save()
+member functions. Let's first deal with load(). It contains just 7 lines of
+code, although it does all the necessary things, including error reporting:
+
+现在要做的就是,编写 load() 和 save() 成员函数的实现。我们首先来看 load()。
+它只包含7行代码,就可以完成所有必要的工作,包括错误报告:
+
+    #include <boost/property_tree/ptree.hpp>
+    #include <boost/property_tree/xml_parser.hpp>
+
+    // Loads debug_settings structure from the specified XML file
+       // 从指定的XML文件中导入 debug_settings 结构
+    void debug_settings::load(const std::string &filename)
+    {
+        // Create an empty property tree object 创建一个空的属性树对象
+        using boost::property_tree::__ptree__;
+        __ptree__ pt;
+
+        // Load the XML file into the property tree. If reading fails
+        // (cannot open file, parse error), an exception is thrown.
+ // 将XML文件导入属性树。如果读入失败(不能打开文件,或分析错误),则抛出异
+        __read_xml__(filename, pt);
+
+        // Get the filename and store it in the m_file variable.
+        // Note that we construct the path to the value by separating
+        // the individual keys with dots. If dots appear in the keys,
+        // a path type with a different separator can be used.
+        // If the debug.filename key is not found, an exception is thrown.
+               // 获得文件名并将它保存到 m_file 变量。注意,我们用以点号分隔的键值
+               // 来构建访问该值的路径。如果在键值中有点号,则需使用其它分隔符。
+               // 如果 debug.filename 键值没有被找到,则抛出异常。
+        m_file = pt.__ptree_get__<std::string>("debug.filename");
+
+        // Get the debug level and store it in the m_level variable.
+        // This is another version of the get method: if the value is
+        // not found, the default value (specified by the second
+        // parameter) is returned instead. The type of the value
+        // extracted is determined by the type of the second parameter,
+        // so we can simply write get(...) instead of get<int>(...).
+               // 获得调试级别并将它保存到 m_level 变量。这是 get 方法的另一个版本:
+               // 如果要获取的值没有找到,则返回缺省值(由第二个参数指定)代替。
+               // 获取的值的类型由第二个参数的类型决定,所以我们只要写 get(...),
+               // 而不用写 get<int>(...).
+        m_level = pt.__ptree_get__("debug.level", 0);
+
+        // Iterate over the debug.modules section and store all found
+        // modules in the m_modules set. The get_child() function
+        // returns a reference to the child at the specified path; if
+        // there is no such child, it throws. Property tree iterators
+        // are models of BidirectionalIterator.
+               // 遍历 debug.modules 节并将所有找到的模块保存至 m_modules 集合中。
+               // 函数 get_child() 返回指定路径上的子节点的引用;如果该子节点不存在,
+               // 则抛出异常。属性树迭代器为双向迭代器。
+        BOOST_FOREACH(__ptree__::__ptree_value_type__ &v,
+                pt.__ptree_get_child__("debug.modules"))
+            m_modules.__ptree_insert__(v.second.data());
+    }
+
+Now the save() function. It is also 7 lines of code:
+
+接下来是 save() 函数。它也是7行代码:
+
+   // Saves the debug_settings structure to the specified XML file
+   // 将 debug_setting 结构保存至指定的XML文件
+   void debug_settings::save(const std::string &filename)
+   {
+      // Create an empty property tree object 创建一个空的属性树对象
+      using boost::property_tree::__ptree__;
+      __ptree__ pt;
+
+      // Put log filename in property tree 将日志文件名存入属性树
+      pt.__ptree_put__("debug.filename", m_file);
+
+      // Put debug level in property tree 将调试级别存入属性树
+      pt.__ptree_put__("debug.level", m_level);
+
+      // Iterate over the modules in the set and put them in the
+      // property tree. Note that the put function places the new
+      // key at the end of the list of keys. This is fine most of
+      // the time. If you want to place an item at some other place
+      // (i.e. at the front or somewhere in the middle), this can
+      // be achieved using a combination of the insert and put_own
+      // functions.
+         // 遍历集合中的模块并将它们存入属性树中。注意,函数 put 将新插入的
+         // 键值置于列表的尾端。多数时候这样很好。如果你想将某一项置于其它位
+         // 置(例如在前端或中间),可以用 insert 和 put_own 函数的组合来解决。
+      BOOST_FOREACH(const std::string &name, m_modules)
+         pt.__ptree_put__("debug.modules.module", name, true);
+
+      // Write the property tree to the XML file. 将属性树写出至XML文件。
+      __write_xml__(filename, pt);
+   }
+
+The full program [@boost:/libs/property_tree/examples/debug_settings.cpp debug_settings.cpp] is
+included in the examples directory.
+
+完整的程序 [@boost:/libs/property_tree/examples/debug_settings.cpp debug_settings.cpp] 在 examples 目录下。
+[endsect] [/tutorial]
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/windows_registry_parser.qbk Thu Dec 24 17:59:33 2009
@@ -0,0 +1,45 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl) + / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section:registry_parser Windows Registry Parser]
+[def __registry_parser.hpp__ [headerref boost/property_tree/registry_parser.hpp registry_parser.hpp]] +[def __read_registry__ [funcref boost::property_tree::registry_parser::read_registry read_registry]] +[def __translate__ [funcref boost::property_tree::registry_parser::translate translate]] +[def __write_registry__ [funcref boost::property_tree::registry_parser::write_registry write_registry]] +This parser supports reading and writing data from Windows registry. There is only a subset of registry functionality implemented, because property tree is not intended to replace registry API. For example, access rights are not supported, as well as some exotic value formats. Registry is a rich data source, providing hierarchy of keys, each of whose can have any number of named and typed values attached to it. Because of that - like in XML - some translation is necessary.
+
+[important This parser will only work on a Windows system because it uses Windows API to access the registry. You will need to link with [^advapi32.lib]. A minimalist version of the [^windows.h] Windows header file is included by __registry_parser.hpp__. If you want to include [^windows.h] header on your own, do it before including __registry_parser.hpp__.]
+
+[heading How Registry Keys are Translated to Property Trees (__read_registry__):]
+
+* Values of each registry key are stored in a subkey with name [^\values]. The preceding backslash is there to prevent name clashes with regular keys. Each subkey of [^\values] is one registry value. If [^\values] subkey does not exist or is empty, there are no values attached to that key. +* Types of values of each registry key are stored in a subkey with name [^\types]. These subkeys contain an integer equal to type of data stored in its corresponding entry in [^\values] (correspondence is by name, not position). +* So called "default value" (value attached to key itself), is translated directly to key data and is always assumed to be of type [^REG_SZ]. +* [^REG_BINARY] values are translated to textual format before placing in property tree. The format is the same as the one displayed by regedit application: a series of two-digit hexadecimal numbers representing bytes separated with spaces. To translate from this format to binary data, or vice versa, use the __translate__ function. +* Supported value types are: [^REG_NONE], [^REG_SZ], [^REG_EXPAND_SZ], [^REG_DWORD], [^REG_QWORD], [^REG_BINARY].
+
+Translation of property tree back into registry (__write_registry__) assumes the same structure as outlined above. That means if you want to have named values, you need to create [^\values] and [^\types] subkeys, and put them there. Also, you have to convert all [^REG_BINARY] values to textual format. Passing "normal" property tree (i.e. not containing [^\types] and [^\values] keys) to the __write_registry__ function will put all data in "default value" section of each key. This is fine, especially if you intend to read this data using property tree, but is probably not a standard way of storing things in the registry.
+
+For example, when you read registry key [^HKEY_CURRENT_USER\Software\Microsoft\Notepad], under Windows XP, you will get property tree containing Notepad font settings (among other things):
+
+ Notepad
+ {
+    \values
+    {
+       lfFaceName  Courier
+       lfItalic    0
+       lfWeight    190
+    }
+    \types
+    {
+       lfFaceName  1  ; REG_SZ
+       lfItalic    4  ; REG_DWORD
+       lfWeight    4  ; REG_DWORD
+    }
+ }
+
+[endsect] [/win_reg_parser]
=======================================
--- /dev/null
+++ /trunk/libs/property_tree/doc/xml_parser.qbk        Thu Dec 24 17:59:33 2009
@@ -0,0 +1,81 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl) + / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section XML Parser  XML分析器]
+[def __xml__ [@http://en.wikipedia.org/wiki/XML XML format]]
+[def __xml_parser.hpp__ [headerref boost/property_tree/xml_parser.hpp xml_parser.hpp]]
+[def __RapidXML__ [@http://rapidxml.sourceforge.net/ RapidXML]]
+[def __boost__ [@http://www.boost.org Boost]]
+The __xml__ is an industry standard for storing information in textual
+form. Unfortunately, there is no XML parser in __boost__ as of the
+time of this writing. The library therefore contains the fast and tiny
+__RapidXML__ parser (currently in version 1.13) to provide XML parsing support. +RapidXML does not fully support the XML standard; it is not capable of parsing
+DTDs and therefore cannot do full entity substitution.
+
+__xml__ 是以文本方式保存信息的工业标准。不幸的是,目前在 __boost__ 还没有 XML分析器。 +因此,本库包含了一个小而快的 __RapidXML__ 分析器(当前版本为 1.13)以提供 XML分析的支持。
+RapidXML 并不完全支持XML标准;它不能分析DTDs,因此不能实现完全的实体替换。
+
+By default, the parser will preserve most whitespace, but remove element content
+that consists only of whitespace. Encoded whitespaces (e.g. &#32;) does not
+count as whitespace in this regard. You can pass the trim_whitespace flag if you +want all leading and trailing whitespace trimmed and all continuous whitespace
+collapsed into a single space.
+
+缺省情况下,这个分析器会保留最多的空白符,但会删掉仅包含空白符的元素内容。
+在此,编码的空白符(如 &#32;)并不被算作空白符。如果你想去掉所有前置和后置的 空白符,
+且将所有连续的空白符压缩为单个空格,可以传入 trim_whitespace 标志。
+
+Please note that RapidXML does not understand the encoding specification. If
+you pass it a character buffer, it assumes the data is already correctly
+encoded; if you pass it a filename, it will read the file using the character +conversion of the locale you give it (or the global locale if you give it none). +This means that, in order to parse a UTF-8-encoded XML file into a wptree, you +have to supply an alternate locale, either directly or by replacing the global
+one.
+
+请注意,RapidXML 并不了解编码规范。如果你传入一个字符缓冲区,它会假定其中的 数据已正确编码; +如果你传入一个文件名,它将使用你给定的locale (如果你没有给定,则使用全局 locale)的字符转换。 +这意味着,为了分析一个UTF-8编码的XML文件并存入 wptree,你必须提供一个替代 locale,
+或者直接提供,或者替换掉全局locale。
+
+XML / property tree conversion schema (__read_xml__ and __write_xml__):
+
+XML/属性树转换机制(__read_xml__ and __write_xml__):
+
+* Each XML element corresponds to a property tree node. The child elements
+  correspond to the children of the node.[br]
+  每个XML元素对应于一个属性树节点。子元素对应于该节点的子节点。
+* The attributes of an XML element are stored in the subkey [^<xmlattr>]. There
+  is one child node per attribute in the attribute node. Existence of the
+ [^<xmlattr>] node is not guaranteed or necessary when there are no attributes.[br] + 一个XML元素的属性被保存于子键 [^<xmlattr>] 中。在属性节点中每个属性有一个 子节点。
+  当没有属性时,并不保证也不需要一定有 [^<xmlattr>] 节点。
+* XML comments are stored in nodes named [^<xmlcomment>], unless comment
+  ignoring is enabled via the flags.[br]
+ XML注释被保存于名为 [^<xmlcomment>] 的节点中,除非用标志位激活了忽略注 释。 +* Text content is stored in one of two ways, depending on the flags. The default
+  way concatenates all text nodes and stores them in a single node called
+ [^<xmltext>]. This way, the entire content can be conveniently read, but the + relative ordering of text and child elements is lost. The other way stores
+  each text content as a separate node, all called [^<xmltext>].[br]
+ 文本内容以两种方法中的一种进行保存,由标志位决定。缺省的方法是将所有文本 节点串接起来, + 将它们保存在单个名为 [^<xmltext>] 的节点中。这种方法方便读取整个内容,但 文本的相对顺序 + 以及子元素全部丢失。另一种方法是,将每个文本内容保存为单个节点,均命名为 [^<xmltext>]。
+
+The XML storage encoding does not round-trip perfectly. A read-write cycle loses
+trimmed whitespace, low-level formatting information, and the distinction
+between normal data and CDATA nodes. Comments are only preserved when enabled. +A write-read cycle loses trimmed whitespace; that is, if the origin tree has
+string data that starts or ends with whitespace, that whitespace is lost.
+
+XML的存储编码并不是一个完美的循环。一次读-写循环会丢失前置和后置的空白符、
+低级的格式化信息,以及普通数据与CDATA节点间的差异。注释仅在激活时被保留。
+一次写-读循环则会丢失前置和后置的空白符;即,如果原树中有以空白符开头或结尾
+的字符串数据,则空白符会丢掉。
+[endsect] [/xml_parser]
=======================================
--- /trunk/doc/html/property_tree/appendices.html       Sun Dec 20 18:38:58 2009
+++ /dev/null
@@ -1,130 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Appendices</title>
-<link rel="stylesheet" href="../boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
-<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset"> -<link rel="up" href="../property_tree.html" title="Chapter 14. Boost.PropertyTree"> -<link rel="prev" href="../boost_propertytree/accessing.html" title="How to Access Data in a Property Tree">
-<link rel="next" href="reference.html" title="Reference">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%"><tr>
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center"><a href="../../../index.html">Home</a></td>
-<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
-<td align="center"><a href="http://www.boost.org/users/people.html";>People</a></td> -<td align="center"><a href="http://www.boost.org/users/faq.html";>FAQ</a></td>
-<td align="center"><a href="../../../more/index.htm">More</a></td>
-</tr></table>
-<hr>
-<div class="spirit-nav">
-<a accesskey="p" href="../boost_propertytree/accessing.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="reference.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
-</div>
-<div class="section" title="Appendices">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="property_tree.appendices"></a><a class="link" href="appendices.html" title="Appendices">Appendices</a>
-</h2></div></div></div>
-<a name="property_tree.appendices.compatibility"></a><h4>
-<a name="id1426614"></a>
- <a class="link" href="appendices.html#property_tree.appendices.compatibility">Compatibility</a>
-    </h4>
-<p>
- Property tree uses partial class template specialization. There has been no - attempt to work around lack of support for this. The library will therefore
-      most probably not work with Visual C++ 7.0 or earlier, or gcc 2.x.
-    </p>
-<p>
- Property tree has been tested (regressions successfully compiled and run) with
-      the following compilers:
-    </p>
-<div class="itemizedlist"><ul class="itemizedlist" type="disc">
-<li class="listitem">
-        Visual C++ 8.0
-      </li>
-<li class="listitem">
-        gcc 3.4.2 (MinGW)
-      </li>
-<li class="listitem">
-        gcc 3.3.5 (Linux)
-      </li>
-<li class="listitem">
-        gcc 3.4.4 (Linux)
-      </li>
-<li class="listitem">
-        gcc 4.3.3 (Linux)
-      </li>
-<li class="listitem">
-        Intel C++ 9.0 (Linux)
-      </li>
-</ul></div>
-<a name="property_tree.appendices.rationale"></a><h4>
-<a name="id1426674"></a>
- <a class="link" href="appendices.html#property_tree.appendices.rationale">Rationale</a>
-    </h4>
-<div class="orderedlist"><ol class="orderedlist" type="1">
-<li class="listitem">
-<span class="bold"><strong>Why are there 3 versions of <code class="computeroutput"><a class="link" href="../boost/property_tree/basic_ptree.html#id947644-bb">get</a></code>? - Couldn't there be just one?</strong></span> The three versions reflect experience - gathered during several of years of using property tree in several different - applications. During that time I tried hard to come up with one, proper form - of the get function, and failed. I know of these three basic patterns of
-        usage:
-        <div class="itemizedlist"><ul class="itemizedlist" type="disc">
-<li class="listitem">
-<span class="emphasis"><em>Just get the data and I do not care if it cannot be done.</em></span> - This is used when the programmer is fairly sure that data exists. Or - in homework assignments. Or when tomorrow is final deadline for your
-            project.
-          </li>
-<li class="listitem">
-<span class="emphasis"><em>Get the data and revert to default value if it cannot be done.</em></span> - Used when you want to allow omitting the key in question. Implemented
-            by some similar tools (windows INI file access functions).
-          </li>
-<li class="listitem">
-<span class="emphasis"><em>Get the data, but I care more whether you succeeded than I - do for the data itself.</em></span> Used when you want to vary control - flow depending on get success/failure. Or to check for presence of a
-            key.
-          </li>
-</ul></div>
-</li>
-<li class="listitem">
-<span class="bold"><strong>Why does the separator character come before the path - and not after as one would expect?</strong></span> It helps with overload resolution
-        in some cases.
-      </li>
-</ol></div>
-<a name="property_tree.appendices.future_development"></a><h4>
-<a name="id1426774"></a>
- <a class="link" href="appendices.html#property_tree.appendices.future_development">Future Development</a>
-    </h4>
-<div class="itemizedlist"><ul class="itemizedlist" type="disc">
-<li class="listitem">
-        More parsers: YAML, environment strings.
-      </li>
-<li class="listitem">
-        More robust XML parser.
-      </li>
-<li class="listitem">
- Mathematical relations: ptree difference, union, intersection. Useful for
-        finding configuration file changes etc.
-      </li>
-</ul></div>
-</div>
-<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision"; width="100%"><tr>
-<td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright (c) 2008 Marcin Kalicinski<p> - Distributed under the Boost Software License, Version 1.0. (See accompanying - file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt"; target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
-      </p>
-</div></td>
-</tr></table>
-<hr>
-<div class="spirit-nav">
-<a accesskey="p" href="../boost_propertytree/accessing.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="reference.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
-</div>
-</body>
-</html>
=======================================
--- /trunk/doc/html/property_tree/reference.html        Sun Dec 20 18:38:58 2009
+++ /trunk/doc/html/property_tree/reference.html        Thu Dec 24 17:59:33 2009
@@ -3,10 +3,10 @@
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <title>Reference</title>
 <link rel="stylesheet" href="../boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
-<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Boost C++&#24211; BoostBook &#25991;&#26723;&#23376;&#38598;"> <link rel="up" href="../property_tree.html" title="Chapter 14. Boost.PropertyTree">
-<link rel="prev" href="appendices.html" title="Appendices">
+<link rel="prev" href="appendices_______.html" title="Appendices &#38468;&#24405;"> <link rel="next" href="../boost/property_tree/ptree_error.html" title="Class ptree_error">
 </head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -20,9 +20,9 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="appendices.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../boost/property_tree/ptree_error.html"><img src="../../../doc/html/images/next.png" alt="Next"></a> +<a accesskey="p" href="appendices_______.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../boost/property_tree/ptree_error.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
 </div>
-<div class="section" title="Reference">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
 <a name="property_tree.reference"></a>Reference</h2></div></div></div>
 <div class="toc"><dl>
@@ -38,7 +38,7 @@
<dt><span class="section"><a href="reference.html#header.boost.property_tree.string_path_hpp">Header &lt;boost/property_tree/string_path.hpp&gt;</a></span></dt> <dt><span class="section"><a href="reference.html#header.boost.property_tree.xml_parser_hpp">Header &lt;boost/property_tree/xml_parser.hpp&gt;</a></span></dt>
 </dl></div>
-<div class="section" title="Header &lt;boost/property_tree/exceptions.hpp&gt;">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
<a name="header.boost.property_tree.exceptions_hpp"></a>Header &lt;<a href="../../../boost/property_tree/exceptions.hpp" target="_top">boost/property_tree/exceptions.hpp</a>&gt;</h3></div></div></div> <pre class="synopsis"><span class="bold"><strong>namespace</strong></span> boost {
@@ -49,47 +49,47 @@
   }
 }</pre>
 </div>
-<div class="section" title="Header &lt;boost/property_tree/id_translator.hpp&gt;">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
<a name="header.boost.property_tree.id_translator_hpp"></a>Header &lt;<a href="../../../boost/property_tree/id_translator.hpp" target="_top">boost/property_tree/id_translator.hpp</a>&gt;</h3></div></div></div> <pre class="synopsis"><span class="bold"><strong>namespace</strong></span> boost {
   <span class="bold"><strong>namespace</strong></span> property_tree {
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> T&gt; <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/id_translator.html" title="Struct template id_translator">id_translator</a>;

- <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> T&gt; <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/translator_between_T__T_id983289.html" title="Struct template translator_between&lt;T, T&gt;">translator_between</a>&lt;T, T&gt;; + <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> T&gt; <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/translator_between_T__T_id4725792.html" title="Struct template translator_between&lt;T, T&gt;">translator_between</a>&lt;T, T&gt;; <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ch, <span class="bold"><strong>typename</strong></span> Traits, <span class="bold"><strong>typename</strong></span> Alloc&gt; - <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/translator_between_std__id879891.html" title="Struct template translator_between&lt;std::basic_string&lt; Ch, Traits, Alloc &gt;, std::basic_string&lt; Ch, Traits, Alloc &gt;&gt;">translator_between</a>&lt;std::basic_string&lt; Ch, Traits, Alloc &gt;, std::basic_string&lt; Ch, Traits, Alloc &gt;&gt;; + <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/translator_between_std__id4725816.html" title="Struct template translator_between&lt;std::basic_string&lt; Ch, Traits, Alloc &gt;, std::basic_string&lt; Ch, Traits, Alloc &gt;&gt;">translator_between</a>&lt;std::basic_string&lt; Ch, Traits, Alloc &gt;, std::basic_string&lt; Ch, Traits, Alloc &gt;&gt;;
   }
 }</pre>
 </div>
-<div class="section" title="Header &lt;boost/property_tree/info_parser.hpp&gt;">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
<a name="header.boost.property_tree.info_parser_hpp"></a>Header &lt;<a href="../../../boost/property_tree/info_parser.hpp" target="_top">boost/property_tree/info_parser.hpp</a>&gt;</h3></div></div></div> <pre class="synopsis"><span class="bold"><strong>namespace</strong></span> boost {
   <span class="bold"><strong>namespace</strong></span> property_tree {
     <span class="bold"><strong>namespace</strong></span> info_parser {
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree, <span class="bold"><strong>typename</strong></span> Ch&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/info_parser/read_info_id879942.html" title="Function template read_info">read_info</a>(std::basic_istream&lt; Ch &gt; &amp;, Ptree &amp;); + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/info_parser/read_info_id5226282.html" title="Function template read_info">read_info</a>(std::basic_istream&lt; Ch &gt; &amp;, Ptree &amp;); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree, <span class="bold"><strong>typename</strong></span> Ch&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/info_parser/read_info_id879982.html" title="Function template read_info">read_info</a>(std::basic_istream&lt; Ch &gt; &amp;, Ptree &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;); + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/info_parser/read_info_id5226325.html" title="Function template read_info">read_info</a>(std::basic_istream&lt; Ch &gt; &amp;, Ptree &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/info_parser/read_info_id880025.html" title="Function template read_info">read_info</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, Ptree &amp;, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/info_parser/read_info_id4707516.html" title="Function template read_info">read_info</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, Ptree &amp;, <span class="bold"><strong>const</strong></span> std::locale &amp; = std::locale()); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/info_parser/read_info_id880070.html" title="Function template read_info">read_info</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, Ptree &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/info_parser/read_info_id4707564.html" title="Function template read_info">read_info</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, Ptree &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;, <span class="bold"><strong>const</strong></span> std::locale &amp; = std::locale()); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree, <span class="bold"><strong>typename</strong></span> Ch&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/info_parser/write_info_id880119.html" title="Function template write_info">write_info</a>(std::basic_ostream&lt; Ch &gt; &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/info_parser/write_info_id4707617.html" title="Function template write_info">write_info</a>(std::basic_ostream&lt; Ch &gt; &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;, <span class="bold"><strong>const</strong></span> info_writer_settings&lt; Ch &gt; &amp; = info_writer_settings&lt; Ch &gt;()); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/info_parser/write_info_id941712.html" title="Function template write_info">write_info</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/info_parser/write_info_id4934840.html" title="Function template write_info">write_info</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;, <span class="bold"><strong>const</strong></span> std::locale &amp; = std::locale(), <span class="bold"><strong>const</strong></span> info_writer_settings&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp; = info_writer_make_settings&lt; typename Ptree::key_type::value_type &gt;());
     }
   }
 }</pre>
 </div>
-<div class="section" title="Header &lt;boost/property_tree/ini_parser.hpp&gt;">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
<a name="header.boost.property_tree.ini_parser_hpp"></a>Header &lt;<a href="../../../boost/property_tree/ini_parser.hpp" target="_top">boost/property_tree/ini_parser.hpp</a>&gt;</h3></div></div></div> <pre class="synopsis"><span class="bold"><strong>namespace</strong></span> boost {
@@ -98,44 +98,44 @@
<span class="bold"><strong>class</strong></span> <a class="link" href="../boost/property_tree/ini_parser/ini_parser_error.html" title="Class ini_parser_error">ini_parser_error</a>; <span class="type"><span class="bold"><strong>bool</strong></span></span> <a class="link" href="../boost/property_tree/ini_parser/validate_flags.html" title="Function validate_flags">validate_flags</a>(<span class="bold"><strong>int</strong></span>); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/ini_parser/read_ini_id946845.html" title="Function template read_ini">read_ini</a>(std::basic_istream&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp;, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/ini_parser/read_ini_id4953809.html" title="Function template read_ini">read_ini</a>(std::basic_istream&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp;,
                       Ptree &amp;);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/ini_parser/read_ini_id946890.html" title="Function template read_ini">read_ini</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, Ptree &amp;, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/ini_parser/read_ini_id4953857.html" title="Function template read_ini">read_ini</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, Ptree &amp;, <span class="bold"><strong>const</strong></span> std::locale &amp; = std::locale()); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/ini_parser/write_ini_id946945.html" title="Function template write_ini">write_ini</a>(std::basic_ostream&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp;, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/ini_parser/write_ini_id4872687.html" title="Function template write_ini">write_ini</a>(std::basic_ostream&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;, <span class="bold"><strong>int</strong></span> = 0); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/ini_parser/write_ini_id947022.html" title="Function template write_ini">write_ini</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;, <span class="bold"><strong>int</strong></span> = 0, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/ini_parser/write_ini_id4872767.html" title="Function template write_ini">write_ini</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;, <span class="bold"><strong>int</strong></span> = 0, <span class="bold"><strong>const</strong></span> std::locale &amp; = std::locale());
     }
   }
 }</pre>
 </div>
-<div class="section" title="Header &lt;boost/property_tree/json_parser.hpp&gt;">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
<a name="header.boost.property_tree.json_parser_hpp"></a>Header &lt;<a href="../../../boost/property_tree/json_parser.hpp" target="_top">boost/property_tree/json_parser.hpp</a>&gt;</h3></div></div></div> <pre class="synopsis"><span class="bold"><strong>namespace</strong></span> boost {
   <span class="bold"><strong>namespace</strong></span> property_tree {
     <span class="bold"><strong>namespace</strong></span> json_parser {
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/json_parser/read_json_id947138.html" title="Function template read_json">read_json</a>(std::basic_istream&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp;, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/json_parser/read_json_id4952628.html" title="Function template read_json">read_json</a>(std::basic_istream&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp;,
                        Ptree &amp;);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/json_parser/read_json_id884681.html" title="Function template read_json">read_json</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, Ptree &amp;, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/json_parser/read_json_id5262400.html" title="Function template read_json">read_json</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, Ptree &amp;, <span class="bold"><strong>const</strong></span> std::locale &amp; = std::locale()); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/json_parser/write_json_id910414.html" title="Function template write_json">write_json</a>(std::basic_ostream&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp;, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/json_parser/write_json_id5262467.html" title="Function template write_json">write_json</a>(std::basic_ostream&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/json_parser/write_json_id910467.html" title="Function template write_json">write_json</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/json_parser/write_json_id5262522.html" title="Function template write_json">write_json</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;, <span class="bold"><strong>const</strong></span> std::locale &amp; = std::locale());
     }
   }
 }</pre>
 </div>
-<div class="section" title="Header &lt;boost/property_tree/ptree.hpp&gt;">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
<a name="header.boost.property_tree.ptree_hpp"></a>Header &lt;<a href="../../../boost/property_tree/ptree.hpp" target="_top">boost/property_tree/ptree.hpp</a>&gt;</h3></div></div></div> <pre class="synopsis"><span class="bold"><strong>namespace</strong></span> boost {
@@ -145,7 +145,7 @@
   }
 }</pre>
 </div>
-<div class="section" title="Header &lt;boost/property_tree/ptree_fwd.hpp&gt;">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
<a name="header.boost.property_tree.ptree_fwd_hpp"></a>Header &lt;<a href="../../../boost/property_tree/ptree_fwd.hpp" target="_top">boost/property_tree/ptree_fwd.hpp</a>&gt;</h3></div></div></div> <pre class="synopsis"><span class="bold"><strong>namespace</strong></span> boost {
@@ -157,11 +157,11 @@
<span class="bold"><strong>typedef</strong></span> <a class="link" href="../boost/property_tree/basic_ptree.html" title="Class template basic_ptree">basic_ptree</a>&lt; std::wstring, std::wstring &gt; <a class="link" href="../boost/property_tree/wptree.html" title="Type definition wptree">wptree</a>; <span class="bold"><strong>typedef</strong></span> <span class="emphasis"><em>unspecified</em></span> <a class="link" href="../boost/property_tree/wiptree.html" title="Type definition wiptree">wiptree</a>; <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> K, <span class="bold"><strong>typename</strong></span> D, <span class="bold"><strong>typename</strong></span> C&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/swap_id948315.html" title="Function template swap">swap</a>(<a class="link" href="../boost/property_tree/basic_ptree.html" title="Class template basic_ptree">basic_ptree</a>&lt; K, D, C &gt; &amp;, <a class="link" href="../boost/property_tree/basic_ptree.html" title="Class template basic_ptree">basic_ptree</a>&lt; K, D, C &gt; &amp;); + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/swap_id5215967.html" title="Function template swap">swap</a>(<a class="link" href="../boost/property_tree/basic_ptree.html" title="Class template basic_ptree">basic_ptree</a>&lt; K, D, C &gt; &amp;, <a class="link" href="../boost/property_tree/basic_ptree.html" title="Class template basic_ptree">basic_ptree</a>&lt; K, D, C &gt; &amp;);
   }
 }</pre>
 </div>
-<div class="section" title="Header &lt;boost/property_tree/ptree_serialization.hpp&gt;">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
<a name="header.boost.property_tree.ptree_serialization_hpp"></a>Header &lt;<a href="../../../boost/property_tree/ptree_serialization.hpp" target="_top">boost/property_tree/ptree_serialization.hpp</a>&gt;</h3></div></div></div> <pre class="synopsis"><span class="bold"><strong>namespace</strong></span> boost {
@@ -171,11 +171,11 @@
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Archive, <span class="bold"><strong>typename</strong></span> K, <span class="bold"><strong>typename</strong></span> D, <span class="bold"><strong>typename</strong></span> C&gt; <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/load.html" title="Function template load">load</a>(Archive &amp;, <a class="link" href="../boost/property_tree/basic_ptree.html" title="Class template basic_ptree">basic_ptree</a>&lt; K, D, C &gt; &amp;, <span class="bold"><strong>const</strong></span> <span class="bold"><strong>unsigned</strong></span> <span class="bold"><strong>int</strong></span>); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Archive, <span class="bold"><strong>typename</strong></span> K, <span class="bold"><strong>typename</strong></span> D, <span class="bold"><strong>typename</strong></span> C&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/serialize_id948534.html" title="Function template serialize">serialize</a>(Archive &amp;, <a class="link" href="../boost/property_tree/basic_ptree.html" title="Class template basic_ptree">basic_ptree</a>&lt; K, D, C &gt; &amp;, <span class="bold"><strong>const</strong></span> <span class="bold"><strong>unsigned</strong></span> <span class="bold"><strong>int</strong></span>); + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/serialize_id4868444.html" title="Function template serialize">serialize</a>(Archive &amp;, <a class="link" href="../boost/property_tree/basic_ptree.html" title="Class template basic_ptree">basic_ptree</a>&lt; K, D, C &gt; &amp;, <span class="bold"><strong>const</strong></span> <span class="bold"><strong>unsigned</strong></span> <span class="bold"><strong>int</strong></span>);
   }
 }</pre>
 </div>
-<div class="section" title="Header &lt;boost/property_tree/stream_translator.hpp&gt;">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
<a name="header.boost.property_tree.stream_translator_hpp"></a>Header &lt;<a href="../../../boost/property_tree/stream_translator.hpp" target="_top">boost/property_tree/stream_translator.hpp</a>&gt;</h3></div></div></div> <pre class="synopsis"><span class="bold"><strong>namespace</strong></span> boost {
@@ -185,25 +185,25 @@
<span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/customize_stream.html" title="Struct template customize_stream">customize_stream</a>;

<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ch, <span class="bold"><strong>typename</strong></span> Traits&gt; - <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/customize_stream_Ch__Tr_id948676.html" title="Struct template customize_stream&lt;Ch, Traits, Ch, void&gt;">customize_stream</a>&lt;Ch, Traits, Ch, <span class="bold"><strong>void</strong></span>&gt;; + <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/customize_stream_Ch__Tr_id4868586.html" title="Struct template customize_stream&lt;Ch, Traits, Ch, void&gt;">customize_stream</a>&lt;Ch, Traits, Ch, <span class="bold"><strong>void</strong></span>&gt;; <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ch, <span class="bold"><strong>typename</strong></span> Traits, <span class="bold"><strong>typename</strong></span> F&gt; - <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/customize_stream_Ch__Tr_id948744.html" title="Struct template customize_stream&lt;Ch, Traits, F, typename boost::enable_if&lt; detail::is_inexact&lt; F &gt; &gt;::type&gt;">customize_stream</a>&lt;Ch, Traits, F, <span class="bold"><strong>typename</strong></span> boost::enable_if&lt; detail::is_inexact&lt; F &gt; &gt;::type&gt;; + <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/customize_stream_Ch__Tr_id4919206.html" title="Struct template customize_stream&lt;Ch, Traits, F, typename boost::enable_if&lt; detail::is_inexact&lt; F &gt; &gt;::type&gt;">customize_stream</a>&lt;Ch, Traits, F, <span class="bold"><strong>typename</strong></span> boost::enable_if&lt; detail::is_inexact&lt; F &gt; &gt;::type&gt;; <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ch, <span class="bold"><strong>typename</strong></span> Traits&gt; - <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/customize_stream_Ch__Tr_id948818.html" title="Struct template customize_stream&lt;Ch, Traits, bool, void&gt;">customize_stream</a>&lt;Ch, Traits, <span class="bold"><strong>bool</strong></span>, <span class="bold"><strong>void</strong></span>&gt;; + <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/customize_stream_Ch__Tr_id4919280.html" title="Struct template customize_stream&lt;Ch, Traits, bool, void&gt;">customize_stream</a>&lt;Ch, Traits, <span class="bold"><strong>bool</strong></span>, <span class="bold"><strong>void</strong></span>&gt;; <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ch, <span class="bold"><strong>typename</strong></span> Traits&gt; - <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/customize_stream_Ch__Tr_id948886.html" title="Struct template customize_stream&lt;Ch, Traits, signed char, void&gt;">customize_stream</a>&lt;Ch, Traits, <span class="bold"><strong>signed</strong></span> <span class="bold"><strong>char</strong></span>, <span class="bold"><strong>void</strong></span>&gt;; + <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/customize_stream_Ch__Tr_id4866784.html" title="Struct template customize_stream&lt;Ch, Traits, signed char, void&gt;">customize_stream</a>&lt;Ch, Traits, <span class="bold"><strong>signed</strong></span> <span class="bold"><strong>char</strong></span>, <span class="bold"><strong>void</strong></span>&gt;; <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ch, <span class="bold"><strong>typename</strong></span> Traits&gt; - <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/customize_stream_Ch__Tr_id948954.html" title="Struct template customize_stream&lt;Ch, Traits, unsigned char, void&gt;">customize_stream</a>&lt;Ch, Traits, <span class="bold"><strong>unsigned</strong></span> <span class="bold"><strong>char</strong></span>, <span class="bold"><strong>void</strong></span>&gt;; + <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/customize_stream_Ch__Tr_id4866852.html" title="Struct template customize_stream&lt;Ch, Traits, unsigned char, void&gt;">customize_stream</a>&lt;Ch, Traits, <span class="bold"><strong>unsigned</strong></span> <span class="bold"><strong>char</strong></span>, <span class="bold"><strong>void</strong></span>&gt;;

<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ch, <span class="bold"><strong>typename</strong></span> Traits, <span class="bold"><strong>typename</strong></span> Alloc, <span class="bold"><strong>typename</strong></span> E&gt; <span class="bold"><strong>class</strong></span> <a class="link" href="../boost/property_tree/stream_translator.html" title="Class template stream_translator">stream_translator</a>;

<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ch, <span class="bold"><strong>typename</strong></span> Traits, <span class="bold"><strong>typename</strong></span> Alloc, <span class="bold"><strong>typename</strong></span> E&gt; - <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/translator_between_std__id949101.html" title="Struct template translator_between&lt;std::basic_string&lt; Ch, Traits, Alloc &gt;, E&gt;">translator_between</a>&lt;std::basic_string&lt; Ch, Traits, Alloc &gt;, E&gt;; + <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/translator_between_std__id4665228.html" title="Struct template translator_between&lt;std::basic_string&lt; Ch, Traits, Alloc &gt;, E&gt;">translator_between</a>&lt;std::basic_string&lt; Ch, Traits, Alloc &gt;, E&gt;;
   }
 }</pre>
 </div>
-<div class="section" title="Header &lt;boost/property_tree/string_path.hpp&gt;">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
<a name="header.boost.property_tree.string_path_hpp"></a>Header &lt;<a href="../../../boost/property_tree/string_path.hpp" target="_top">boost/property_tree/string_path.hpp</a>&gt;</h3></div></div></div> <pre class="synopsis"><span class="bold"><strong>namespace</strong></span> boost {
@@ -211,40 +211,40 @@
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> String, <span class="bold"><strong>typename</strong></span> Translator&gt; <span class="bold"><strong>class</strong></span> <a class="link" href="../boost/property_tree/string_path.html" title="Class template string_path">string_path</a>;

<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ch, <span class="bold"><strong>typename</strong></span> Traits, <span class="bold"><strong>typename</strong></span> Alloc&gt; - <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/path_of_std_basic_strin_id949413.html" title="Struct template path_of&lt;std::basic_string&lt; Ch, Traits, Alloc &gt;&gt;">path_of</a>&lt;std::basic_string&lt; Ch, Traits, Alloc &gt;&gt;; + <span class="bold"><strong>struct</strong></span> <a class="link" href="../boost/property_tree/path_of_std_basic_strin_id4648730.html" title="Struct template path_of&lt;std::basic_string&lt; Ch, Traits, Alloc &gt;&gt;">path_of</a>&lt;std::basic_string&lt; Ch, Traits, Alloc &gt;&gt;; <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> String, <span class="bold"><strong>typename</strong></span> Translator&gt; <span class="type"><a class="link" href="../boost/property_tree/string_path.html" title="Class template string_path">string_path</a>&lt; String, Translator &gt;</span> - <a name="boost.property_tree.operator/_id949458"></a><span class="bold"><strong>operator</strong></span>/(<a class="link" href="../boost/property_tree/string_path.html" title="Class template string_path">string_path</a>&lt; String, Translator &gt; p1, + <a name="boost.property_tree.operator/_id4648775"></a><span class="bold"><strong>operator</strong></span>/(<a class="link" href="../boost/property_tree/string_path.html" title="Class template string_path">string_path</a>&lt; String, Translator &gt; p1, <span class="bold"><strong>const</strong></span> <a class="link" href="../boost/property_tree/string_path.html" title="Class template string_path">string_path</a>&lt; String, Translator &gt; &amp; p2); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> String, <span class="bold"><strong>typename</strong></span> Translator&gt; <span class="type"><a class="link" href="../boost/property_tree/string_path.html" title="Class template string_path">string_path</a>&lt; String, Translator &gt;</span> - <a name="boost.property_tree.operator/_id949496"></a><span class="bold"><strong>operator</strong></span>/(<a class="link" href="../boost/property_tree/string_path.html" title="Class template string_path">string_path</a>&lt; String, Translator &gt; p1, + <a name="boost.property_tree.operator/_id5271086"></a><span class="bold"><strong>operator</strong></span>/(<a class="link" href="../boost/property_tree/string_path.html" title="Class template string_path">string_path</a>&lt; String, Translator &gt; p1, <span class="bold"><strong>const</strong></span> <span class="bold"><strong>typename</strong></span> String::value_type * p2); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> String, <span class="bold"><strong>typename</strong></span> Translator&gt; <span class="type"><a class="link" href="../boost/property_tree/string_path.html" title="Class template string_path">string_path</a>&lt; String, Translator &gt;</span> - <a name="boost.property_tree.operator/_id949530"></a><span class="bold"><strong>operator</strong></span>/(<span class="bold"><strong>const</strong></span> <span class="bold"><strong>typename</strong></span> String::value_type * p1, + <a name="boost.property_tree.operator/_id5271120"></a><span class="bold"><strong>operator</strong></span>/(<span class="bold"><strong>const</strong></span> <span class="bold"><strong>typename</strong></span> String::value_type * p1, <span class="bold"><strong>const</strong></span> <a class="link" href="../boost/property_tree/string_path.html" title="Class template string_path">string_path</a>&lt; String, Translator &gt; &amp; p2);
   }
 }</pre>
 </div>
-<div class="section" title="Header &lt;boost/property_tree/xml_parser.hpp&gt;">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
<a name="header.boost.property_tree.xml_parser_hpp"></a>Header &lt;<a href="../../../boost/property_tree/xml_parser.hpp" target="_top">boost/property_tree/xml_parser.hpp</a>&gt;</h3></div></div></div> <pre class="synopsis"><span class="bold"><strong>namespace</strong></span> boost {
   <span class="bold"><strong>namespace</strong></span> property_tree {
     <span class="bold"><strong>namespace</strong></span> xml_parser {
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/xml_parser/read_xml_id954816.html" title="Function template read_xml">read_xml</a>(std::basic_istream&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp;, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/xml_parser/read_xml_id5271168.html" title="Function template read_xml">read_xml</a>(std::basic_istream&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp;, Ptree &amp;, <span class="bold"><strong>int</strong></span> = 0); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/xml_parser/read_xml_id960538.html" title="Function template read_xml">read_xml</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, Ptree &amp;, <span class="bold"><strong>int</strong></span> = 0, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/xml_parser/read_xml_id4883958.html" title="Function template read_xml">read_xml</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, Ptree &amp;, <span class="bold"><strong>int</strong></span> = 0, <span class="bold"><strong>const</strong></span> std::locale &amp; = std::locale()); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/xml_parser/write_xml_id960643.html" title="Function template write_xml">write_xml</a>(std::basic_ostream&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp;, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/xml_parser/write_xml_id4884059.html" title="Function template write_xml">write_xml</a>(std::basic_ostream&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;, <span class="bold"><strong>const</strong></span> xml_writer_settings&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp; = xml_writer_settings&lt; typename Ptree::key_type::value_type &gt;()); <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Ptree&gt; - <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/xml_parser/write_xml_id957066.html" title="Function template write_xml">write_xml</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;, + <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="../boost/property_tree/xml_parser/write_xml_id4643605.html" title="Function template write_xml">write_xml</a>(<span class="bold"><strong>const</strong></span> std::string &amp;, <span class="bold"><strong>const</strong></span> Ptree &amp;, <span class="bold"><strong>const</strong></span> std::locale &amp; = std::locale(), <span class="bold"><strong>const</strong></span> xml_writer_settings&lt; <span class="bold"><strong>typename</strong></span> Ptree::key_type::value_type &gt; &amp; = xml_writer_settings&lt; typename Ptree::key_type::value_type &gt;());
     }
@@ -262,7 +262,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="appendices.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../boost/property_tree/ptree_error.html"><img src="../../../doc/html/images/next.png" alt="Next"></a> +<a accesskey="p" href="appendices_______.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../property_tree.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../boost/property_tree/ptree_error.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>
=======================================
--- /trunk/doc/html/property_tree.html  Sun Dec 20 18:38:58 2009
+++ /trunk/doc/html/property_tree.html  Thu Dec 24 17:59:33 2009
@@ -3,11 +3,11 @@
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <title>Chapter 14. Boost.PropertyTree</title>
 <link rel="stylesheet" href="boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
-<link rel="home" href="index.html" title="The Boost C++ Libraries BoostBook Documentation Subset"> -<link rel="up" href="libraries.html" title="Part I. The Boost C++ Libraries (BoostBook Subset)">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="Boost C++&#24211; BoostBook &#25991;&#26723;&#23376;&#38598;"> +<link rel="up" href="libraries.html" title="Part I. Boost C++&#24211; (BoostBook &#23376;&#38598;)"> <link rel="prev" href="BOOST_PROGRAM_OPTIONS_VERSION.html" title="Macro BOOST_PROGRAM_OPTIONS_VERSION"> -<link rel="next" href="boost_propertytree/tutorial.html" title="Five Minute Tutorial"> +<link rel="next" href="boost_propertytree/tutorial.html" title="Five Minute Tutorial &#20116;&#20998;&#38047;&#25945;&#31243;">
 </head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -22,7 +22,7 @@
 <div class="spirit-nav">
<a accesskey="p" href="BOOST_PROGRAM_OPTIONS_VERSION.html"><img src="../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="libraries.html"><img src="../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="index.html"><img src="../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="boost_propertytree/tutorial.html"><img src="../../doc/html/images/next.png" alt="Next"></a>
 </div>
-<div class="chapter" title="Chapter 14. Boost.PropertyTree">
+<div class="chapter" lang="en">
 <div class="titlepage"><div>
 <div><h2 class="title">
 <a name="property_tree"></a>Chapter 14. Boost.PropertyTree</h2></div>
@@ -30,8 +30,8 @@
<span class="firstname">Marcin</span> <span class="surname">Kalicinski</span>
 </h3></div></div>
 <div><p class="copyright">Copyright (c) 2008 Marcin Kalicinski</p></div>
-<div><div class="legalnotice" title="Legal Notice">
-<a name="id1422040"></a><p>
+<div><div class="legalnotice">
+<a name="id5737636"></a><p>
Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt"; target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
       </p>
@@ -40,21 +40,26 @@
 <div class="toc">
 <p><b>Table of Contents</b></p>
 <dl>
-<dt><span class="section"><a href="property_tree.html#boost_propertytree.intro"> What is Property Tree?</a></span></dt> -<dt><span class="section"><a href="boost_propertytree/tutorial.html"> Five Minute Tutorial</a></span></dt> -<dt><span class="section"><a href="boost_propertytree/container.html"> Property Tree as a Container</a></span></dt> -<dt><span class="section"><a href="boost_propertytree/synopsis.html"> Property Tree Synopsis</a></span></dt> +<dt><span class="section"><a href="property_tree.html#boost_propertytree.intro"> What is Property Tree? &#23646;&#24615;&#26641;&#26159;&#20160;&#20040;&#65311;</a></span></dt> +<dt><span class="section"><a href="boost_propertytree/tutorial.html"> Five Minute Tutorial &#20116;&#20998;&#38047;&#25945;&#31243;</a></span></dt> +<dt><span class="section"><a href="boost_propertytree/container.html"> Property Tree as a Container + &#20316;&#20026;&#23481;&#22120;&#30340;&#23646;&#24615;&#26641;</a></span></dt> +<dt><span class="section"><a href="boost_propertytree/synopsis.html"> Property Tree Synopsis &#23646;&#24615;&#26641;&#27010;&#35201;</a></span></dt> <dt><span class="section"><a href="boost_propertytree/parsers.html"> How to Populate a Property
-    Tree</a></span></dt>
+ Tree &#22914;&#20309;&#22635;&#20805;&#23646;&#24615;&#26641;</a></span></dt>
 <dd><dl>
-<dt><span class="section"><a href="boost_propertytree/parsers.html#boost_propertytree.parsers.xml_parser">XML Parser</a></span></dt> -<dt><span class="section"><a href="boost_propertytree/parsers.html#boost_propertytree.parsers.json_parser">JSON Parser</a></span></dt> -<dt><span class="section"><a href="boost_propertytree/parsers.html#boost_propertytree.parsers.ini_parser">INI Parser</a></span></dt> -<dt><span class="section"><a href="boost_propertytree/parsers.html#boost_propertytree.parsers.info_parser">INFO Parser</a></span></dt> +<dt><span class="section"><a href="boost_propertytree/parsers.html#boost_propertytree.parsers.xml_parser__xml_________">XML
+      Parser XML&#20998;&#26512;&#22120;</a></span></dt>
+<dt><span class="section"><a href="boost_propertytree/parsers.html#boost_propertytree.parsers.json_parser__json_________">JSON
+      Parser JSON&#20998;&#26512;&#22120;</a></span></dt>
+<dt><span class="section"><a href="boost_propertytree/parsers.html#boost_propertytree.parsers.ini_parser__ini_________">INI
+      Parser INI&#20998;&#26512;&#22120;</a></span></dt>
+<dt><span class="section"><a href="boost_propertytree/parsers.html#boost_propertytree.parsers.info_parser__info_________">INFO
+      Parser INFO&#20998;&#26512;&#22120;</a></span></dt>
 </dl></dd>
<dt><span class="section"><a href="boost_propertytree/accessing.html"> How to Access Data in a
-    Property Tree</a></span></dt>
-<dt><span class="section"><a href="property_tree/appendices.html">Appendices</a></span></dt> + Property Tree &#22914;&#20309;&#35775;&#38382;&#23646;&#24615;&#26641;&#20013;&#30340;&#25968;&#25454;</a></span></dt> +<dt><span class="section"><a href="property_tree/appendices_______.html">Appendices &#38468;&#24405;</a></span></dt> <dt><span class="section"><a href="property_tree/reference.html">Reference</a></span></dt>
 <dd><dl>
<dt><span class="section"><a href="property_tree/reference.html#header.boost.property_tree.exceptions_hpp">Header &lt;boost/property_tree/exceptions.hpp&gt;</a></span></dt>
@@ -71,9 +76,9 @@
 </dl></dd>
 </dl>
 </div>
-<div class="section" title="What is Property Tree?">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="boost_propertytree.intro"></a><a class="link" href="property_tree.html#boost_propertytree.intro" title="What is Property Tree?"> What is Property Tree?</a> +<a name="boost_propertytree.intro"></a><a class="link" href="property_tree.html#boost_propertytree.intro" title="What is Property Tree? &#23646;&#24615;&#26641;&#26159;&#20160;&#20040;&#65311;"> What is Property Tree? &#23646;&#24615;&#26641;&#26159;&#20160;&#20040;&#65311;</a>
 </h2></div></div></div>
 <p>
The Property Tree library provides a data structure that stores an arbitrarily
@@ -83,35 +88,59 @@
       which is a concatenation of multiple keys.
     </p>
 <p>
+ Property Tree&#24211;&#25552;&#20379;&#20102;&#19968;&#31181;&#25968;&#25454;&#32467;&#26500;&#65292;&#29992;&#20110;&#20445;&#23384;&#20219;&#24847;&#23884;&#22871;&#23618;&#25968;&#30340;&#30001;&#20540;&#32452;&#25104;&#30340;&#26641;&#65292;&#27599;&#19968;&#23618;&#20197; + &#26576;&#20010;&#38190;&#20540;&#26469;&#32034;&#24341;&#12290;&#26641;&#30340;&#27599;&#20010;&#33410;&#28857;&#20445;&#23384;&#20102;&#23427;&#26412;&#36523;&#30340;&#20540;&#65292;&#20197;&#21450;&#19968;&#20010;&#30001;&#35813;&#33410;&#28857;&#30340;&#23376;&#33410;&#28857;&#21450;&#20854;&#38190;&#20540; + &#32452;&#25104;&#30340;&#26377;&#24207;&#21015;&#34920;&#12290;&#36825;&#31181;&#26641;&#21487;&#20197;&#36890;&#36807;&#31867;&#20284;&#20110;&#36335;&#24452;&#30340;&#26041;&#24335;&#24456;&#26041;&#20415;&#22320;&#35775;&#38382;&#20219;&#19968;&#33410;&#28857;&#65292;&#36825;&#20010;&#36335;&#24452;&#30001; + &#22810;&#20010;&#38190;&#20540;&#20018;&#25509;&#32780;&#25104;&#12290;
+    </p>
+<p>
In addition, the library provides parsers and generators for a number of data formats that can be represented by such a tree, including XML, INI, and JSON.
     </p>
 <p>
+ &#27492;&#22806;&#65292;&#36825;&#20010;&#24211;&#36824;&#25552;&#20379;&#20102;&#19968;&#20123;&#20998;&#26512;&#22120;&#21644;&#29983;&#25104;&#22120;&#65292;&#23545;&#24212;&#20110;&#22810;&#31181;&#21487;&#29992;&#20110;&#34920;&#31034;&#19968;&#26869;&#26641;&#30340;&#25968;&#25454;&#26684;&#24335;&#65292;
+      &#22914; XML, INI &#21644; JSON&#12290;
+    </p>
+<p>
Property trees are versatile data structures, but are particularly suited for holding configuration data. The tree provides its own, tree-specific interface,
       and each node is also an STL-compatible Sequence for its child nodes.
     </p>
 <p>
+ &#23646;&#24615;&#26641;&#26159;&#22810;&#21151;&#33021;&#30340;&#25968;&#25454;&#32467;&#26500;&#65292;&#23588;&#20854;&#36866;&#21512;&#29992;&#20110;&#20445;&#23384;&#37197;&#32622;&#25968;&#25454;&#12290;&#35813;&#26641;&#25552;&#20379;&#20102;&#23427;&#33258;&#24049;&#26412;&#36523;&#12289;&#26641;&#19987;&#29992; + &#30340;&#25509;&#21475;&#65292;&#32780;&#19988;&#27599;&#20010;&#33410;&#28857;&#37117;&#26159;&#20854;&#23376;&#33410;&#28857;&#30340;&#19968;&#20010;STL&#20860;&#23481;&#24207;&#21015;&#12290;
+    </p>
+<p>
Conceptually, then, a node can be thought of as the following structure:
     </p>
+<p>
+ &#22312;&#27010;&#24565;&#19978;&#65292;&#19968;&#20010;&#33410;&#28857;&#21487;&#20197;&#24819;&#35937;&#20026;&#20197;&#19979;&#32467;&#26500;&#65306;
+    </p>
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">ptree</span>
 <span class="special">{</span>
- <span class="identifier">data_type</span> <span class="identifier">data</span><span class="special">;</span> <span class="comment">// data associated with the node -</span> <span class="identifier">list</span><span class="special">&lt;</span> <span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">key_type</span><span class="special">,</span> <span class="identifier">ptree</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">children</span><span class="special">;</span> <span class="comment">// ordered list of named children + <span class="identifier">data_type</span> <span class="identifier">data</span><span class="special">;</span> <span class="comment">// data associated with the node &#19982;&#33410;&#28857;&#30456;&#20851;&#32852;&#30340;&#25968;&#25454; +</span> <span class="identifier">list</span><span class="special">&lt;</span> <span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">key_type</span><span class="special">,</span> <span class="identifier">ptree</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">children</span><span class="special">;</span> <span class="comment">// ordered list of named children &#21629;&#21517;&#23376;&#33410;&#28857;&#30340;&#26377;&#24207;&#21015;&#34920;
 </span><span class="special">};</span>
 </pre>
 <p>
Both key_type and data_type are configurable, but will usually be std::string.
     </p>
 <p>
+ key_type &#21644; data_type &#37117;&#26159;&#21487;&#37197;&#32622;&#30340;&#65292;&#20294;&#36890;&#24120;&#37117;&#26159; std::string&#12290;
+    </p>
+<p>
Many software projects develop a similar tool at some point of their lifetime, and property tree originated the same way. We hope the library can save many
       from reinventing the wheel.
     </p>
+<p>
+ &#35768;&#22810;&#36719;&#20214;&#39033;&#30446;&#37117;&#22312;&#23427;&#20204;&#29983;&#21629;&#21608;&#26399;&#20013;&#30340;&#26576;&#20010;&#26102;&#20505;&#24320;&#21457;&#36807;&#31867;&#20284;&#30340;&#24037;&#20855;&#65292;&#23646;&#24615;&#26641;&#27491;&#28304;&#33258;&#20110;&#27492;&#12290; + &#25105;&#20204;&#24076;&#26395;&#36825;&#20010;&#24211;&#21487;&#20197;&#33410;&#30465;&#37325;&#22797;&#21457;&#26126;&#36718;&#23376;&#30340;&#26102;&#38388;&#12290;
+    </p>
 </div>
 </div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision"; width="100%"><tr> -<td align="left"><p><small>Last revised: November 14, 2009 at 10:40:12 GMT</small></p></td> +<td align="left"><p><small>Last revised: December 24, 2009 at 08:38:50 GMT</small></p></td>
 <td align="right"><div class="copyright-footer"></div></td>
 </tr></table>
 <hr>

Other related posts:

  • » [boost-doc-zh] r358 committed - property_tree 库译文。... - boost-doc-zh