| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- <html>
- <body>
- <h1 align='right'><a name='MXMLDOC'><img src="4.gif" align="right"
- hspace="10" width="100" height="100" alt="4"></a>Using the mxmldoc
- Utility</h1>
- <p>This chapter describes how to use <tt>mxmldoc(1)</tt> program to
- automatically generate documentation from C and C++ source
- files.</p>
- <h2>The Basics</h2>
- <p>Originally developed to generate the Mini-XML and CUPS API
- documentation, <tt>mxmldoc</tt> is now a general-purpose utility
- which scans C and C++ source files to produce HTML and man page
- documentation along with an XML file representing the functions,
- types, and definitions in those source files. Unlike popular
- documentation generators like Doxygen or Javadoc, <tt>mxmldoc</tt>
- uses in-line comments rather than comment headers, allowing for more
- "natural" code documentation.</p>
- <p>By default, <tt>mxmldoc</tt> produces HTML documentation. For
- example, the following command will scan all of the C source and
- header files in the current directory and produce a HTML
- documentation file called <var>filename.html</var>:</p>
- <pre>
- <kbd>mxmldoc *.h *.c >filename.html ENTER</kbd>
- </pre>
- <p>You can also specify an XML file to create which contains all of
- the information from the source files. For example, the following
- command creates an XML file called <var>filename.xml</var> in
- addition to the HTML file:</p>
- <pre>
- <kbd>mxmldoc filename.xml *.h *.c >filename.html ENTER</kbd>
- </pre>
- <p>The <tt>--no-output</tt> option disables the normal HTML
- output:</p>
- <pre>
- <kbd>mxmldoc --no-output filename.xml *.h *.c ENTER</kbd>
- </pre>
- <p>You can then run <tt>mxmldoc</tt> again with the XML file alone
- to generate the HTML documentation:</p>
- <pre>
- <kbd>mxmldoc filename.xml >filename.html ENTER</kbd>
- </pre>
- <h3>Creating Man Pages</h3>
- <p>The <tt>--man filename</tt> option tells <tt>mxmldoc</tt> to
- create a man page instead of HTML documentation, for example:</p>
- <pre>
- <kbd>mxmldoc --man filename filename.xml \
- >filename.man ENTER</kbd>
- <kbd>mxmldoc --man filename *.h *.c \
- >filename.man ENTER</kbd>
- </pre>
- <h3>Creating Xcode Documentation Sets</h3>
- <p>The <tt>--docset directory.docset</tt> option tells <tt>mxmldoc</tt> to
- create an Xcode documentation set containing the HTML documentation, for
- example:</p>
- <pre>
- <kbd>mxmldoc --docset foo.docset *.h *.c foo.xml ENTER</kbd>
- </pre>
- <p>Xcode documentation sets can only be built on Mac OS X with Xcode 3.0 or
- higher installed.</p>
- <h2>Commenting Your Code</h2>
- <p>As noted previously, <tt>mxmldoc</tt> looks for in-line comments
- to describe the functions, types, and constants in your code.
- <tt>Mxmldoc</tt> will document all public names it finds in your
- source files - any names starting with the underscore character (_)
- or names that are documented with the <A
- HREF="#ATDIRECTIVES">@private@</A> directive are treated as private
- and are not documented.</p>
- <p>Comments appearing directly before a function or type definition
- are used to document that function or type. Comments appearing after
- argument, definition, return type, or variable declarations are used
- to document that argument, definition, return type, or variable. For
- example, the following code excerpt defines a key/value structure
- and a function that creates a new instance of that structure:</p>
- <pre>
- /* A key/value pair. This is used with the
- dictionary structure. */
- struct keyval
- {
- char *key; /* Key string */
- char *val; /* Value string */
- };
- /* Create a new key/value pair. */
- struct keyval * /* New key/value pair */
- new_keyval(
- const char *key, /* Key string */
- const char *val) /* Value string */
- {
- ...
- }
- </pre>
- <p><tt>Mxmldoc</tt> also knows to remove extra asterisks (*) from
- the comment string, so the comment string:</p>
- <pre>
- /*
- * Compute the value of PI.
- *
- * The function connects to an Internet server
- * that streams audio of mathematical monks
- * chanting the first 100 digits of PI.
- */
- </pre>
- <p>will be shown as:</p>
- <pre>
- Compute the value of PI.
- The function connects to an Internet server
- that streams audio of mathematical monks
- chanting the first 100 digits of PI.
- </pre>
- <p><a name="ATDIRECTIVES">Comments</a> can also include the
- following special <tt>@name ...@</tt> directive strings:</p>
- <ul>
- <li><tt>@deprecated@</tt> - flags the item as deprecated to
- discourage its use</li>
- <li><tt>@private@</tt> - flags the item as private so it
- will not be included in the documentation</li>
- <li><tt>@since ...@</tt> - flags the item as new since a
- particular release. The text following the <tt>@since</tt>
- up to the closing <tt>@</tt> is highlighted in the generated
- documentation, e.g. <tt>@since Mini-XML 2.7@</tt>.</li>
- </ul>
- <!-- NEED 10 -->
- <h2>Titles, Sections, and Introductions</h2>
- <p><tt>Mxmldoc</tt> also provides options to set the title, section,
- and introduction text for the generated documentation. The
- <tt>--title text</tt> option specifies the title for the
- documentation. The title string is usually put in quotes:</p>
- <pre>
- <kbd>mxmldoc filename.xml \
- --title "My Famous Documentation" \
- >filename.html ENTER</kbd>
- </pre>
- <p>The <tt>--section name</tt> option specifies the section for
- the documentation. For HTML documentation, the name is placed in
- a HTML comment such as:</p>
- <pre>
- <!-- SECTION: name -->
- </pre>
- <p>For man pages, the section name is usually just a number ("3"),
- or a number followed by a vendor name ("3acme"). The section name is
- used in the <tt>.TH</tt> directive in the man page:</p>
- <pre>
- .TH mylibrary 3acme "My Title" ...
- </pre>
- <p>The default section name for man page output is "3". There is no
- default section name for HTML output.</p>
- <p>Finally, the <tt>--intro filename</tt> option specifies a file to
- embed after the title and section but before the generated
- documentation. For HTML documentation, the file must consist of
- valid HTML without the usual <tt>DOCTYPE</tt>, <tt>html</tt>, and
- <tt>body</tt> elements. For man page documentation, the file must
- consist of valid <tt>nroff(1)</tt> text.</p>
- </body>
- </html>
|