[29] | 1 | <?xml version="1.0" encoding="utf-8"?> |
---|
| 2 | <!-- |
---|
| 3 | Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com> |
---|
| 4 | |
---|
| 5 | Distributed under the Boost Software License, Version 1.0. |
---|
| 6 | (See accompanying file LICENSE_1_0.txt or copy at |
---|
| 7 | http://www.boost.org/LICENSE_1_0.txt) |
---|
| 8 | --> |
---|
| 9 | <!DOCTYPE chapter PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" |
---|
| 10 | "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd"> |
---|
| 11 | <chapter xmlns:xi="http://www.w3.org/2001/XInclude" id="boostbook.documenting" |
---|
| 12 | last-revision="$Date: 2006/11/03 19:39:44 $"> |
---|
| 13 | <title>Documenting libraries</title> |
---|
| 14 | |
---|
| 15 | <para>BoostBook is an extension to <ulink |
---|
| 16 | url="http://www.docbook.org">DocBook</ulink>, an XML format for |
---|
| 17 | representing documentation. BoostBook inherits much of its |
---|
| 18 | functionality and many elements from DocBook that are not |
---|
| 19 | redocumented here. When writing BoostBook documentation, please |
---|
| 20 | refer also to <ulink |
---|
| 21 | url="http://docbook.org/tdg/en/index.html">DocBook: The Definitive |
---|
| 22 | Guide</ulink>.</para> |
---|
| 23 | |
---|
| 24 | <section id="boostbook.defining"> |
---|
| 25 | <title>Defining a BoostBook library</title> |
---|
| 26 | |
---|
| 27 | <para>BoostBook library documentation is contained entirely within |
---|
| 28 | a <library> XML element. To create a skeletal library, we |
---|
| 29 | need to create a new XML document (call it <code>any.xml</code>) |
---|
| 30 | that contains basic information about the library. The following |
---|
| 31 | <link linkend="boostbook.documenting.skeletal">BoostBook XML |
---|
| 32 | example</link> describes basic information about the <ulink |
---|
| 33 | url="http://www.boost.org/libs/any/index.html">Boost.Any</ulink> |
---|
| 34 | library:</para> |
---|
| 35 | |
---|
| 36 | <example id="boostbook.documenting.skeletal"> |
---|
| 37 | <title>A Skeletal BoostBook Library</title> |
---|
| 38 | <programlisting> |
---|
| 39 | <?xml version="1.0" encoding="utf-8"?> |
---|
| 40 | <!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" |
---|
| 41 | "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd"> |
---|
| 42 | <library name="Any" dirname="any" xmlns:xi="http://www.w3.org/2001/XInclude" |
---|
| 43 | id="any" last-revision="$Date: 2006/11/03 19:39:44 $"> |
---|
| 44 | <libraryinfo> |
---|
| 45 | <author> |
---|
| 46 | <firstname>Kevlin</firstname> |
---|
| 47 | <surname>Henney</surname> |
---|
| 48 | </author> |
---|
| 49 | <librarypurpose> |
---|
| 50 | Safe, generic container for single values of different value types |
---|
| 51 | </librarypurpose> |
---|
| 52 | <librarycategory name="category:data-structures"/> |
---|
| 53 | </libraryinfo> |
---|
| 54 | </library> |
---|
| 55 | </programlisting> |
---|
| 56 | </example> |
---|
| 57 | |
---|
| 58 | <para>The first three lines identify this document as a BoostBook |
---|
| 59 | <ulink url="http://www.w3.org/XML/">XML</ulink> document. The |
---|
| 60 | DOCTYPE line states that the document conforms to the BoostBook |
---|
| 61 | DTD, and that the top-level element is a BoostBook |
---|
| 62 | <library>.</para> |
---|
| 63 | |
---|
| 64 | <para>The <library> element actually describes the aspects |
---|
| 65 | of BoostBook library documentation. The attributes for the |
---|
| 66 | <library> element are:</para> |
---|
| 67 | |
---|
| 68 | <variablelist> |
---|
| 69 | <title>Attributes for the <library> element</title> |
---|
| 70 | <varlistentry> |
---|
| 71 | <term><code>name</code></term> |
---|
| 72 | <listitem> |
---|
| 73 | <simpara>The full name of the library, e.g., "Any"</simpara> |
---|
| 74 | </listitem> |
---|
| 75 | </varlistentry> |
---|
| 76 | <varlistentry> |
---|
| 77 | <term><code>dirname</code></term> |
---|
| 78 | <listitem> |
---|
| 79 | <simpara>The name of the directory, relative to |
---|
| 80 | <code>boost/libs</code>, in which the library |
---|
| 81 | resides. This name may be a relative path, such as |
---|
| 82 | <code>math/octonion</code>, using "/" for the directory |
---|
| 83 | separator.</simpara> |
---|
| 84 | </listitem> |
---|
| 85 | </varlistentry> |
---|
| 86 | <varlistentry> |
---|
| 87 | <term><code>id</code></term> |
---|
| 88 | <listitem> |
---|
| 89 | <simpara>A short, unique name for the library. For libraries |
---|
| 90 | with simple directory names (e.g., ones that do not contain |
---|
| 91 | a "/"), this should be the same as the |
---|
| 92 | <code>dirname</code>. This <code>id</code> will be used to |
---|
| 93 | identify libraries and, for HTML output, will be used as the |
---|
| 94 | base name for the HTML file in which the library's |
---|
| 95 | documentation resides, so it should use only lowercase |
---|
| 96 | alphanumeric characters and underscores.</simpara> |
---|
| 97 | </listitem> |
---|
| 98 | </varlistentry> |
---|
| 99 | <varlistentry> |
---|
| 100 | <term><code>last-revision</code></term> |
---|
| 101 | <listitem> |
---|
| 102 | <simpara>Always set to <code>$Date: 2006/11/03 19:39:44 $</code>, which is |
---|
| 103 | expanded by CVS to include the date and time that the file |
---|
| 104 | was last modified.</simpara> |
---|
| 105 | </listitem> |
---|
| 106 | </varlistentry> |
---|
| 107 | </variablelist> |
---|
| 108 | |
---|
| 109 | <para>Inside the <library> element we have the |
---|
| 110 | <libraryinfo> element, which gives information about the |
---|
| 111 | library itself. It contains the author's name (there may be more |
---|
| 112 | than one <author> element), followed by the purpose of the |
---|
| 113 | library and the list of categorizations. The |
---|
| 114 | <librarypurpose> element should always contain a very short |
---|
| 115 | (single sentence) description of the library's purpose, and should |
---|
| 116 | <emphasis>not</emphasis> terminate with a period.</para> |
---|
| 117 | |
---|
| 118 | <para>The list of categories is specified by a set of |
---|
| 119 | <librarycategory> elements. Each <librarycategory> |
---|
| 120 | element has a <code>name</code> element that identifies one of the |
---|
| 121 | categories. The actual list of categories is in the file |
---|
| 122 | <filename>doc/src/boost.xml</filename>. |
---|
| 123 | </para> |
---|
| 124 | |
---|
| 125 | <para>At this point, we can apply the BoostBook XSL stylesheets to |
---|
| 126 | <code>any.xml</code> (to DocBook) followed by a DocBook XSL |
---|
| 127 | stylesheet to generate HTML output, as described in <xref |
---|
| 128 | linkend="boostbook.getting.started"/>.</para> |
---|
| 129 | </section> |
---|
| 130 | |
---|
| 131 | <section> |
---|
| 132 | <title>From HTML to BoostBook</title> |
---|
| 133 | |
---|
| 134 | <para>Most library authors are comfortable with writing HTML |
---|
| 135 | documentation. Writing <ulink |
---|
| 136 | url="http://www.docbook.org">DocBook</ulink> documentation (and, |
---|
| 137 | by extension, BoostBook documentation) is quite similar to writing |
---|
| 138 | HTML, except that BoostBook uses different element names from HTML |
---|
| 139 | (see <xref linkend="html.to.boostbook"/>) and BoostBook XML is a |
---|
| 140 | much more rigid format than HTML.</para> |
---|
| 141 | |
---|
| 142 | <para>One of the easiest ways to convert HTML documentation into |
---|
| 143 | BoostBook documentation is to use <ulink |
---|
| 144 | url="http://tidy.sourceforge.net/">HTML Tidy</ulink> to transform |
---|
| 145 | your HTML into valid XHTML, which will make sure that all elements |
---|
| 146 | are properly closed, then apply the transformations in <xref |
---|
| 147 | linkend="html.to.boostbook"/> to the body of the XHTML |
---|
| 148 | document. The following command uses HTML Tidy to transform HTML |
---|
| 149 | into valid XHTML:</para> |
---|
| 150 | |
---|
| 151 | <programlisting> |
---|
| 152 | tidy -asxhtml input.html > output.xhtml</programlisting> |
---|
| 153 | |
---|
| 154 | <para>When converting documentation from HTML to BoostBook, note |
---|
| 155 | that some redundant information that has to be manually maintained |
---|
| 156 | in HTML is automatically generated in BoostBook: for instance, the |
---|
| 157 | library categorizations, purpose, and author list described in |
---|
| 158 | <xref linkend="boostbook.defining"/> are used both in the |
---|
| 159 | documentation for the library and to build alphabetical and |
---|
| 160 | categorized lists of known libraries; similarly, tables of |
---|
| 161 | contents are built automatically from the titles of sections in |
---|
| 162 | the BoostBook document.</para> |
---|
| 163 | |
---|
| 164 | <table id="html.to.boostbook"> |
---|
| 165 | <title>Converting HTML elements to BoostBook</title> |
---|
| 166 | <tgroup cols="2" align="left"> |
---|
| 167 | <thead> |
---|
| 168 | <row> |
---|
| 169 | <entry>HTML</entry> |
---|
| 170 | <entry>BoostBook</entry> |
---|
| 171 | </row> |
---|
| 172 | </thead> |
---|
| 173 | <tbody> |
---|
| 174 | <row> |
---|
| 175 | <entry><simpara><h1>, <h2>, etc.</simpara></entry> |
---|
| 176 | <entry> |
---|
| 177 | <simpara><section>, <title>; See <xref |
---|
| 178 | linkend="boostbook.sectioning"/></simpara> |
---|
| 179 | </entry> |
---|
| 180 | </row> |
---|
| 181 | <row> |
---|
| 182 | <entry><simpara><i>, <em></simpara></entry> |
---|
| 183 | <entry><simpara><emphasis></simpara></entry> |
---|
| 184 | </row> |
---|
| 185 | <row> |
---|
| 186 | <entry><simpara><b></simpara></entry> |
---|
| 187 | <entry><simpara><emphasis role="bold"></simpara></entry> |
---|
| 188 | </row> |
---|
| 189 | <row> |
---|
| 190 | <entry><simpara><ol></simpara></entry> |
---|
| 191 | <entry><simpara><orderedlist></simpara></entry> |
---|
| 192 | </row> |
---|
| 193 | <row> |
---|
| 194 | <entry><simpara><ul></simpara></entry> |
---|
| 195 | <entry><simpara><itemizedlist></simpara></entry> |
---|
| 196 | </row> |
---|
| 197 | <row> |
---|
| 198 | <entry><simpara><li></simpara></entry> |
---|
| 199 | <entry><simpara><listitem></simpara></entry> |
---|
| 200 | </row> |
---|
| 201 | <row> |
---|
| 202 | <entry><simpara><pre></simpara></entry> |
---|
| 203 | <entry><simpara><programlisting></simpara></entry> |
---|
| 204 | </row> |
---|
| 205 | <row> |
---|
| 206 | <entry><simpara><code></simpara></entry> |
---|
| 207 | <entry><simpara><computeroutput>,<code></simpara></entry> |
---|
| 208 | </row> |
---|
| 209 | <row> |
---|
| 210 | <entry><simpara><p></simpara></entry> |
---|
| 211 | <entry><simpara><para>, <simpara></simpara></entry> |
---|
| 212 | </row> |
---|
| 213 | <row> |
---|
| 214 | <entry><simpara><a></simpara></entry> |
---|
| 215 | <entry> |
---|
| 216 | <simpara><xref>, <link>, <ulink>;, See <xref |
---|
| 217 | linkend="boostbook.linking"/></simpara></entry> |
---|
| 218 | </row> |
---|
| 219 | <row> |
---|
| 220 | <entry><simpara><table>, <tr>, <th>, <td></simpara></entry> |
---|
| 221 | <entry><simpara><table>, <informaltable>, <tgroup>, <thead>, <tfoot>, <tbody>, <row>, <entry>, <entrytbl>; BoostBook tables are equivalent to DocBook tables, for which there is a good <ulink url="http://opensource.bureau-cornavin.com/crash-course/tables.html">tutorial here</ulink></simpara></entry> |
---|
| 222 | </row> |
---|
| 223 | </tbody> |
---|
| 224 | </tgroup> |
---|
| 225 | </table> |
---|
| 226 | </section> |
---|
| 227 | |
---|
| 228 | <section id="boostbook.sectioning"> |
---|
| 229 | <title>Sectioning in BoostBook</title> |
---|
| 230 | <para>"Sectioning" refers to organization of a document into separate sections, each with a title, some text, and possibly subsections. Each section is described in BoostBook via a <section> element. An introduction section may look like this:</para> |
---|
| 231 | <programlisting> |
---|
| 232 | <section id="any.intro"> |
---|
| 233 | <title>Introduction</title> |
---|
| 234 | |
---|
| 235 | <para>Introduction to a library...</para> |
---|
| 236 | |
---|
| 237 | <section> |
---|
| 238 | <title>A Subsection</title> |
---|
| 239 | <para>Subsection information...</para> |
---|
| 240 | </section> |
---|
| 241 | </section> |
---|
| 242 | </programlisting> |
---|
| 243 | <para>The <section> element contains all information that |
---|
| 244 | should logically be grouped within that section. The title of the |
---|
| 245 | section is placed within the <title> element, and any |
---|
| 246 | paragraphs, programs, lists, tables, or subsections can occur |
---|
| 247 | within the section. The <code>id</code> attribute of the |
---|
| 248 | <section> element gives a unique ID to each section, so that |
---|
| 249 | it may later be identified for linking. It is suggested that all |
---|
| 250 | IDs start with the short name of a library followed by a period, |
---|
| 251 | so that IDs do not conflict between libraries.</para> |
---|
| 252 | </section> |
---|
| 253 | </chapter> |
---|
| 254 | |
---|