Imported Robodoc.
authorPekka Riikonen <priikone@silcnet.org>
Sat, 2 Feb 2008 18:54:01 +0000 (19:54 +0100)
committerPekka Riikonen <priikone@silcnet.org>
Sat, 2 Feb 2008 18:54:01 +0000 (19:54 +0100)
263 files changed:
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
CVS.adm/MstData.stp [new file with mode: 0644]
CVS.adm/UsgData.stp [new file with mode: 0644]
CVS.adm/prjprm.stp [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
Contributions/robodoc.kaptn [new file with mode: 0644]
Contributions/robodoc2pod.pl [new file with mode: 0644]
DEVELOPERS [new file with mode: 0644]
Design/design.txt [new file with mode: 0644]
Design/uml.fig [new file with mode: 0644]
Docs/bugs.xml [new file with mode: 0644]
Docs/configuration.xml [new file with mode: 0644]
Docs/docbook-simple/sdocbook.dtd [new file with mode: 0644]
Docs/example_makefile [new file with mode: 0644]
Docs/examples.xml [new file with mode: 0644]
Docs/extracting.xml [new file with mode: 0644]
Docs/faq.dat [new file with mode: 0644]
Docs/faqfooter.html [new file with mode: 0644]
Docs/faqheader.html [new file with mode: 0644]
Docs/header_specs.pl [new file with mode: 0644]
Docs/installing.xml [new file with mode: 0644]
Docs/main.css [new file with mode: 0644]
Docs/makefile.am [new file with mode: 0644]
Docs/makefile.cygwin [new file with mode: 0644]
Docs/makefile.plain [new file with mode: 0644]
Docs/makefile.win32 [new file with mode: 0644]
Docs/manual-cygwin.xsl [new file with mode: 0644]
Docs/manual.css [new file with mode: 0644]
Docs/manual.html [new file with mode: 0644]
Docs/manual.xml [new file with mode: 0644]
Docs/manual.xsl [new file with mode: 0644]
Docs/manual_html_help-cygwin.xsl [new file with mode: 0644]
Docs/manual_html_help.xsl [new file with mode: 0644]
Docs/manual_html_help_win32.xsl [new file with mode: 0644]
Docs/manual_win32.xsl [new file with mode: 0644]
Docs/options.xml [new file with mode: 0644]
Docs/preface.xml [new file with mode: 0644]
Docs/preparing.xml [new file with mode: 0644]
Docs/robodoc.1 [new file with mode: 0644]
Docs/robodoc.1.in [new file with mode: 0644]
Docs/robodoc.rc [new file with mode: 0644]
Docs/robohdrs.1 [new file with mode: 0644]
Docs/tips.xml [new file with mode: 0644]
Examples/PerlExample/Doc/robo_classes.html [new file with mode: 0644]
Examples/PerlExample/Doc/robo_methods.html [new file with mode: 0644]
Examples/PerlExample/Doc/robo_modules.html [new file with mode: 0644]
Examples/PerlExample/Doc/robo_sourcefiles.html [new file with mode: 0644]
Examples/PerlExample/Source/Box.pm [new file with mode: 0644]
Examples/PerlExample/Source/Box/RectangularBox.pm [new file with mode: 0644]
Examples/PerlExample/Source/Box/SquareBox.pm [new file with mode: 0644]
Examples/PerlExample/Source/Cargo.txt [new file with mode: 0644]
Examples/PerlExample/Source/Loader.txt [new file with mode: 0644]
Examples/PerlExample/Source/SmartLoader.pm [new file with mode: 0644]
Examples/PerlExample/Source/TruckPacker.pl [new file with mode: 0644]
Examples/PerlExample/robodoc.rc [new file with mode: 0644]
Headers/assembler.sample [new file with mode: 0644]
Headers/basic.sample [new file with mode: 0644]
Headers/c.sample [new file with mode: 0644]
Headers/cpp.sample [new file with mode: 0644]
Headers/forth.sample [new file with mode: 0644]
Headers/fortran.sample [new file with mode: 0644]
Headers/html.sample [new file with mode: 0644]
Headers/makefile [new file with mode: 0644]
Headers/tcl.sample [new file with mode: 0644]
INSTALL [new file with mode: 0644]
INSTALL.Debian [new file with mode: 0644]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
Source/.indent.pro [new file with mode: 0644]
Source/Test/FileFilterSrc/README [new file with mode: 0644]
Source/Test/FileFilterSrc/test.pas [new file with mode: 0644]
Source/Test/FileFilterSrc/test2.c [new file with mode: 0644]
Source/Test/FileFilterSrc/test3.c [new file with mode: 0644]
Source/Test/FileFilterSrc/test4.c [new file with mode: 0644]
Source/Test/FileFilterSrc_2/AcceptDir/accept.h [new file with mode: 0644]
Source/Test/FileFilterSrc_2/accept.c [new file with mode: 0644]
Source/Test/FileFilterSrc_2/accept.pl [new file with mode: 0644]
Source/Test/FileFilterSrc_2/ignore.ign [new file with mode: 0644]
Source/Test/FileFilterSrc_2/ignore.xxx [new file with mode: 0644]
Source/Test/ROBOTest.pm [new file with mode: 0644]
Source/Test/RoboHeaders/rbh_test1.dat [new file with mode: 0644]
Source/Test/Scr1/Subdir/ccfile.dat [new file with mode: 0644]
Source/Test/Scr1/aafile.dat [new file with mode: 0644]
Source/Test/Scr1/bbfile.dat [new file with mode: 0644]
Source/Test/Scr2/master_index_test.dat [new file with mode: 0644]
Source/Test/SortSource/sorted.c [new file with mode: 0644]
Source/Test/SortSource/unsorted.c [new file with mode: 0644]
Source/Test/alt_rc_file.rc [new file with mode: 0644]
Source/Test/cmode_test.dat [new file with mode: 0644]
Source/Test/cmode_test1.pl [new file with mode: 0755]
Source/Test/doc_dir_filter_test.pl [new file with mode: 0755]
Source/Test/doc_dir_filter_test.rc [new file with mode: 0644]
Source/Test/encoding_test.dat [new file with mode: 0644]
Source/Test/error_missing_header_end_test.dat [new file with mode: 0644]
Source/Test/error_missing_header_end_test_2.dat [new file with mode: 0644]
Source/Test/filter_test_1.pl [new file with mode: 0755]
Source/Test/filter_test_1.rc [new file with mode: 0644]
Source/Test/filter_test_2.pl [new file with mode: 0755]
Source/Test/filter_test_2.rc [new file with mode: 0644]
Source/Test/header_size_test.dat [new file with mode: 0644]
Source/Test/header_size_test.pl [new file with mode: 0755]
Source/Test/header_test.dat [new file with mode: 0644]
Source/Test/header_test.pl [new file with mode: 0755]
Source/Test/header_test2.dat [new file with mode: 0644]
Source/Test/header_test2.pl [new file with mode: 0755]
Source/Test/header_test3.dat [new file with mode: 0644]
Source/Test/header_test3.pl [new file with mode: 0755]
Source/Test/header_test4.dat [new file with mode: 0644]
Source/Test/header_test4.pl [new file with mode: 0755]
Source/Test/header_test5.dat [new file with mode: 0644]
Source/Test/header_test5.pl [new file with mode: 0755]
Source/Test/html_specialchar_test.dat [new file with mode: 0644]
Source/Test/html_specialchar_test.pl [new file with mode: 0755]
Source/Test/ignore_test.dat [new file with mode: 0644]
Source/Test/ignore_test.pl [new file with mode: 0755]
Source/Test/ignore_test.rc [new file with mode: 0644]
Source/Test/internalheader_test.dat [new file with mode: 0644]
Source/Test/internalheader_test.pl [new file with mode: 0755]
Source/Test/internalheader_test.refs [new file with mode: 0644]
Source/Test/internalheader_test2.pl [new file with mode: 0755]
Source/Test/item_test.dat [new file with mode: 0644]
Source/Test/item_test.pl [new file with mode: 0755]
Source/Test/latex_specialchar_test.dat [new file with mode: 0644]
Source/Test/latex_specialchar_test.pl [new file with mode: 0755]
Source/Test/link_test.dat [new file with mode: 0644]
Source/Test/link_test.pl [new file with mode: 0755]
Source/Test/lock_test.dat [new file with mode: 0755]
Source/Test/lock_test.pl [new file with mode: 0755]
Source/Test/makefile [new file with mode: 0644]
Source/Test/master_index_test.pl [new file with mode: 0755]
Source/Test/multidoc_test1.pl [new file with mode: 0755]
Source/Test/nosort_test.pl [new file with mode: 0755]
Source/Test/nosource_test.dat [new file with mode: 0644]
Source/Test/nosource_test.pl [new file with mode: 0755]
Source/Test/option_rc_test.dat [new file with mode: 0644]
Source/Test/option_rc_test.pl [new file with mode: 0755]
Source/Test/outputformat_test.dat [new file with mode: 0644]
Source/Test/outputformat_test.pl [new file with mode: 0755]
Source/Test/parameter_test.dat [new file with mode: 0644]
Source/Test/parameter_test.pl [new file with mode: 0755]
Source/Test/pipe_test.dat [new file with mode: 0644]
Source/Test/pipe_test.pl [new file with mode: 0755]
Source/Test/readme.txt [new file with mode: 0644]
Source/Test/remarkmarker_test.dat [new file with mode: 0644]
Source/Test/remarkmarker_test.pl [new file with mode: 0755]
Source/Test/robodoc.rc [new file with mode: 0644]
Source/Test/robohdrs_test.pl [new file with mode: 0644]
Source/Test/sort_test.pl [new file with mode: 0755]
Source/Test/tabtest.dat [new file with mode: 0644]
Source/Test/tabtest.pl [new file with mode: 0755]
Source/Test/url_test.dat [new file with mode: 0644]
Source/Test/url_test.pl [new file with mode: 0755]
Source/Test/user_css.css [new file with mode: 0644]
Source/Test/user_specified_css_file_test.pl [new file with mode: 0755]
Source/analyser.c [new file with mode: 0644]
Source/analyser.h [new file with mode: 0644]
Source/ascii_generator.c [new file with mode: 0644]
Source/ascii_generator.h [new file with mode: 0644]
Source/config.h.in [new file with mode: 0644]
Source/css_to_c.pl [new file with mode: 0644]
Source/directory.c [new file with mode: 0644]
Source/directory.h [new file with mode: 0644]
Source/document.c [new file with mode: 0644]
Source/document.h [new file with mode: 0644]
Source/file.c [new file with mode: 0644]
Source/file.h [new file with mode: 0644]
Source/generator.c [new file with mode: 0644]
Source/generator.h [new file with mode: 0644]
Source/globals.c [new file with mode: 0644]
Source/globals.h [new file with mode: 0644]
Source/headers.c [new file with mode: 0644]
Source/headers.h [new file with mode: 0644]
Source/headertypes.c [new file with mode: 0644]
Source/headertypes.h [new file with mode: 0644]
Source/html_generator.c [new file with mode: 0644]
Source/html_generator.h [new file with mode: 0644]
Source/items.c [new file with mode: 0644]
Source/items.h [new file with mode: 0644]
Source/latex_generator.c [new file with mode: 0644]
Source/latex_generator.h [new file with mode: 0644]
Source/links.c [new file with mode: 0644]
Source/links.h [new file with mode: 0644]
Source/lua_generator.c [new file with mode: 0644]
Source/lua_generator.h [new file with mode: 0644]
Source/makefile.am [new file with mode: 0644]
Source/makefile.bcc [new file with mode: 0644]
Source/makefile.mingw [new file with mode: 0644]
Source/makefile.mingw-cygwin [new file with mode: 0644]
Source/makefile.plain [new file with mode: 0644]
Source/makefile.win32 [new file with mode: 0644]
Source/makefile.wingcc [new file with mode: 0644]
Source/optioncheck.c [new file with mode: 0644]
Source/optioncheck.h [new file with mode: 0644]
Source/part.c [new file with mode: 0644]
Source/part.h [new file with mode: 0644]
Source/path.c [new file with mode: 0644]
Source/path.h [new file with mode: 0644]
Source/roboconfig.c [new file with mode: 0644]
Source/roboconfig.h [new file with mode: 0644]
Source/robodoc.c [new file with mode: 0644]
Source/robodoc.h [new file with mode: 0644]
Source/robodoc_basic_style.css [new file with mode: 0644]
Source/robohdrs.c [new file with mode: 0644]
Source/rtf_generator.c [new file with mode: 0644]
Source/rtf_generator.h [new file with mode: 0644]
Source/t/ROBOTestFrame.pm [new file with mode: 0644]
Source/t/Robodoc.pm [new file with mode: 0644]
Source/t/TestData/iso8859-1_german_header_c.xxd [new file with mode: 0644]
Source/t/TestData/iso8859-1_german_robodoc_rc.xxd [new file with mode: 0644]
Source/t/TestData/robodoc_unix_rc.xxd [new file with mode: 0644]
Source/t/TestData/robodoc_windows_rc.xxd [new file with mode: 0644]
Source/t/ascii.t [new file with mode: 0644]
Source/t/basics.t [new file with mode: 0644]
Source/t/encoding.t [new file with mode: 0644]
Source/t/errors.t [new file with mode: 0644]
Source/t/headers.t [new file with mode: 0644]
Source/t/items.t [new file with mode: 0644]
Source/t/latex.t [new file with mode: 0644]
Source/t/lib/IPC/Run.pm [new file with mode: 0644]
Source/t/lib/IPC/Run/Debug.pm [new file with mode: 0644]
Source/t/lib/IPC/Run/IO.pm [new file with mode: 0644]
Source/t/lib/IPC/Run/Timer.pm [new file with mode: 0644]
Source/t/lib/IPC/Run/Win32Helper.pm [new file with mode: 0644]
Source/t/lib/IPC/Run/Win32IO.pm [new file with mode: 0644]
Source/t/lib/IPC/Run/Win32Pump.pm [new file with mode: 0644]
Source/t/lib/Test/File.pm [new file with mode: 0644]
Source/t/makefile [new file with mode: 0644]
Source/t/one_file_per_header.t [new file with mode: 0644]
Source/t/pipes.t [new file with mode: 0644]
Source/t/readme.txt [new file with mode: 0644]
Source/t/robodoc_rc.t [new file with mode: 0644]
Source/t/wiki_formatting.t [new file with mode: 0644]
Source/test_generator.c [new file with mode: 0644]
Source/test_generator.h [new file with mode: 0644]
Source/testheaders.c [new file with mode: 0644]
Source/todo.pl [new file with mode: 0644]
Source/troff_generator.c [new file with mode: 0644]
Source/troff_generator.h [new file with mode: 0644]
Source/unittest.c [new file with mode: 0644]
Source/unittest.h [new file with mode: 0644]
Source/util.c [new file with mode: 0644]
Source/util.h [new file with mode: 0644]
Source/xmldocbook_generator.c [new file with mode: 0644]
Source/xmldocbook_generator.h [new file with mode: 0644]
TODO [new file with mode: 0644]
UPGRADE [new file with mode: 0644]
Win32/robodoc.dsp [new file with mode: 0644]
Win32/robodoc.dsw [new file with mode: 0644]
Win32/robodoc.sln [new file with mode: 0644]
Win32/robodoc.vcproj [new file with mode: 0644]
bump.pl [new file with mode: 0755]
configure.in [new file with mode: 0644]
do.sh [new file with mode: 0755]
dos2unix.pl [new file with mode: 0644]
makefile.am [new file with mode: 0644]
osx/License.rtf.in [new file with mode: 0644]
osx/ReadMe.rtf.in [new file with mode: 0644]
osx/Welcome.rtf [new file with mode: 0644]
osx/dmg.sh [new file with mode: 0755]
robodoc.spec.in [new file with mode: 0644]
rpm.mk [new file with mode: 0644]
todo.pl [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..140e293
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,23 @@
+# vi: ff=unix
+Frans Slothouber
+Jacco van Weert
+Petteri Kettunen
+Bernd Koesling
+Anthon Pang
+Thomas Aglassinger
+Stefan Kost
+David Druffner
+Nathan Prewitt
+Sasha Vasko
+Dennis Stampfer
+Je'rome Laheurte
+Janusz Piwowarski
+Andreas Signer
+Kai Hofmann
+Brian P. Hanley
+Gian Paolo Ciceri
+David White
+John P. Rouillard
+Jeremy Cowgar
+Gergely Budai
+
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..94a9ed0
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/CVS.adm/MstData.stp b/CVS.adm/MstData.stp
new file mode 100644 (file)
index 0000000..2572ee1
--- /dev/null
@@ -0,0 +1,4 @@
+<XML enc="0" Ver="274.0">
+   <ProjectName value="ROBODoc"/>
+   <ProjectFilePath value="C:\Documents and Settings\Thuffir\Local Settings\Application Data\ComponentSoftware\CS-RCS\robodoc.cvs.sourceforge.net\robo/CVS.adm\MstData.stp"/>
+</XML>
diff --git a/CVS.adm/UsgData.stp b/CVS.adm/UsgData.stp
new file mode 100644 (file)
index 0000000..1071ef3
--- /dev/null
@@ -0,0 +1,60 @@
+<XML Encode="1" Ver="274.0">
+   <x:0>
+      <x:08>
+         <![CDATA[^=lx^3>ff7N\80p~\86}}u\11pfYiuNPKM]]>
+      </x:08>
+      <x:04>
+         <![CDATA[H41ETb^]I4:@D>D\ eFnvfFI2P<]]>
+      </x:04>
+      <x:05>
+         <![CDATA[2rmK7cSY/09
+UWzoUPDCG]]>
+      </x:05>
+      <x:09>
+         <![CDATA[JrUhvd>>^0:
+MBP21U<t[]]>
+      </x:09>
+      <x:01>
+         <![CDATA[sFG`yJ39C9:;@ACDFCCC\13[GIW1OM[=]]>
+      </x:01>
+      <x:02>
+         <![CDATA[kLysF\0Rz0<
+ZF?ZA2nHs]]>
+      </x:02>
+      <x:03>
+         <![CDATA[owh^7cp@UBLcMQ_Rh^VCDIJLMNJLM\1cCZ<@2Gn4j]]>
+      </x:03>
+   </x:0>
+   <x:0>
+      <x:08>
+         <![CDATA[`GuEmb5zB=Jnxu{w\82\84\83s\87\83\87\89\17t2oRcmUC<]]>
+      </x:08>
+      <x:04>
+         <![CDATA[<?scXgN=?9=<D@FDFBJG\13IDq?9omE0]]>
+      </x:04>
+      <x:05>
+         <![CDATA[o99d;wn:D09
+t@D5FRgvF]]>
+      </x:05>
+      <x:09>
+         <![CDATA[rKzX;@WWo0:
+F9wH>>Nmt]]>
+      </x:09>
+      <x:06>
+         <x:12>
+            <x:07>
+               <![CDATA[D4B`F2nCy6}r\80rsw\81\10K;n9\aBxb]]>
+            </x:07>
+            <x:10>
+               <![CDATA[1NjAsGxaT09
+_I[YCr5L8]]>
+            </x:10>
+            <x:13>
+               <![CDATA[Rsb6_:yB3/     k5BhqyVze]]>
+            </x:13>
+         </x:12>
+      </x:06>
+   </x:0>
+   <ProjectName value="ROBODoc"/>
+   <ProjectFilePath value="C:\Documents and Settings\Thuffir\Local Settings\Application Data\ComponentSoftware\CS-RCS\robodoc.cvs.sourceforge.net\robo/CVS.adm\UsgData.stp"/>
+</XML>
diff --git a/CVS.adm/prjprm.stp b/CVS.adm/prjprm.stp
new file mode 100644 (file)
index 0000000..1b0d3cb
--- /dev/null
@@ -0,0 +1,20 @@
+<XML>
+   <cacheHeadRevision value="1"/>
+   <keyExpand value="1"/>
+   <sharedWorkFolder value="0"/>
+   <symbNameOnCI value="0"/>
+   <keyExpandLT value="0"/>
+   <doQuickLock value="0"/>
+   <workingMode value="2"/>
+   <diffMode value="1"/>
+   <diffWrap value="-1"/>
+   <projLog value="0"/>
+   <infoCacheTimeout value="25"/>
+   <useGlobalPrjList value="0"/>
+   <recalcStatusOnScan value="0"/>
+   <winExpIntegration value="0"/>
+   <Ver value="274.0"/>
+   <ProjectName value="ROBODoc"/>
+   <ProjectFilePath value="C:\Documents and Settings\Thuffir\Application Data\ComponentSoftware\CS-RCS\ROBODoc\robo/CVS.adm\prjprm.stp"/>
+   <WorkflowInherit value="1"/>
+</XML>
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..08de285
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,710 @@
+# vi: spell ff=unix
+
+Jun 2007 - V4.99.34
+  Gergely Budai
+  added option --header_breaks, which allows ROBODoc to insert line breaks
+  after every specified number of header names to improve readability.
+
+  Frans Slothouber
+  o Merged path by Tom Keal that Fixes bug in parsing of the robodoc.rc file.
+    (The wrong number of items is recorded for the preformatted_items and
+     format_items block.)
+
+Apr 2007 - V4.99.32
+  o Fixed bug 1706446, --sectionnameonly and --rtf format problem
+  o Fixed bug 1679101, "robodoc crashed on a faulty header".
+  o Added the option --no_subdirectories.
+  o output mode pipes at the end of an item don't result in broken
+    formatting anymore.
+  o Items that start with non-ascii characters are now recognized.
+  o makefile.plain works again
+  o the item names in the 'item order', 'ignore items', and other items blocks
+    in the robodoc.rc file are checked against the list of allowed item names.
+  o the options --sections and --toc do no longer lead
+    to an assert() with --ascii
+  o Added item sorting.  The order in which items are to
+    appear in the documentation can be specified in the
+    robodoc.rc file.
+
+Feb 2007 - V4.99.30
+  Frans Slothouber
+  o Removed form-feed from ASCII output
+  o Applied patch from Christian Vigh to make ROBODoc compile
+    under MSVC++ V7
+  o Applied patch from Wim van Hoydonck to fix a bug
+    in the escaping of '_' in the names internal artifacts
+    for LaTeX output.
+  o Fixed makefile.plain
+  o ROBODoc compiles without warnings using
+      make -f makefile.plain
+
+  Gergely Budai
+  o Using bitfields in stead of and-ing with a define.
+  o Function name separator can be configured to be something
+    different than ','
+  o Added a configuration block that allows the used to 
+    specify which items are pre-formatted by default.
+
+Sep 2006
+  Frans Slothouber
+  o Corrected return value of main()
+  
+Sep 2006 - V4.99.28
+  Michèle Garoche
+  o Improved Mac support (for FINK)
+
+Aug 2006 - V4.99.28
+  Gergely Budai
+  o Fixed many compiler warnings.
+  o More readable .css file
+  o makefile for mingw under cygwin
+  o Better syntax colouring support
+
+  Frans Slothouber
+  o Moved most of the HTML formatting to the .css file
+  o Fixed a bug that caused the second list in a paragraph not
+    to be recognized.
+  o Added more documentation to the source.
+  o Removed code for SGML docbook
+  o Removed makefile and project file for MS VC++
+  o Added functions to check for duplicate and
+    mutual exclusive options.
+
+Jun 2006 - V4.99.26
+  o Merged patch from Gergely Budai. (Adds syntax colouring, better
+    Latex output, and better tab control).
+  o changed output of --test format to xml. (Easier to parse).
+  o Masterindex no longer contains links to source files when 
+    --one_file_per_header is used.
+
+Jun 2006 - V4.99.24
+  o Added option --one_file_per_header (experimental: this splits
+    the documentation into many files, one per header).
+  o Added header examples to documentation.
+
+Dec 2005 - V4.99.23
+  o Made it compile again under MingW
+  o Fixed a bug in the reporting of a missing robodoc.rc file
+
+Dec 2005 - V4.99.21
+  o Fixed crash on empty source items.
+  o Merged patch from cdumke for handling long lines
+
+Dec 2005 - V4.99.19
+  o Merged a patch from Friedrich Haase that allows  '--src .'
+    and adds the options --sectionnameonly
+  o Merged a patch from Andreas Weder for better LaTeX output
+  o Added configuration options to allow some items
+    to work in the same way as a SOURCE item.
+  o ROBODoc now allows module and function names
+    that include white space.
+
+Frans Slothouber
+Apr 2005 - V4.99.17
+  o Added patch by Thierry Pierron for troff output.
+
+Feb 2005 - V4.99.15
+  o Documented more tests.
+  o Changed timestamp format.
+  o Added check on fork(). If fork() is not found only a stub for robohdrs
+    is compiled.
+  o Added patch by Thierry Pierron for aliasses. A single
+    header can now be used to documents several similar functions/
+    classes/variables etc.
+
+Frans Slothouber
+Feb 2005 - V4.99.10
+  o Fixed a bug in the compilation under mingw
+
+Jan 2005 - V4.99.8
+Frans Slothouber
+  o ROBODoc will look in different locations for the robodoc.rc file.
+    ( $HOME/robodoc.rc,  $HOMEDRIVE$HOMEPATH/robodoc.rc, and
+      /usr/share/robodoc/robodoc.rc )
+  o Added option --nogeneratedwith to enable users to remove the
+    generated with robodoc line for the generated documentation.
+  o Fixed the makefile for mingw (thanks to Brian Elmegaard)
+  o Fixed a bug that caused robodoc to find headers even if
+    there were none. [1055886]
+  o Fixed a bug that caused robodoc to crash if single line source 
+    item was found. [1056681]
+
+Sep 2004 - V4.99.6
+  o Fixed a bug that caused robodoc to crash when no files
+    are found.  [1033913]
+
+Sep 2004 - V4.99.4
+Frans Slothouber
+  o Fixed a bug that caused robodoc to die with an assert
+    when an absolute path is used under windows.  [1033644]
+  o Updated the man page.
+  o Fixed a bug that caused links to be created for 'Foo' in
+    Bar_Foo.
+
+Aug 2004 - V4.99.3
+Frans Slothouber
+o If paths such as c:\doc\foo\bar are used as parameters
+  they are first translated to c:/doc/foo/bar before
+  they are further processed.
+o Added patch send in by Ernst Bokkelkamp that adds
+  the header type to each headers documentation.
+o Updated documentation.
+
+May 2004 - V4.99.1
+ o Merged a patch by Bernhard Schoenhammer that adds a 
+    accept files: 
+   block to the robodoc.rc file.
+ o Solved bug [972456] Case problem with creating links.
+ o Fixed a bug [975543] that caused the Doc dir to be included when it was
+   a subdir of the sourcedir and the sourcedir was specified to
+   be '.'
+
+May 2004 - V4.99.0
+ o Fixed XML DocBook output, it appears that 4.0.24 created
+   invalid XML files.
+ o Added smart formatting.  Instead of using preformatted text,
+   that is copying the header text verbatim into the output document,
+   ROBODoc tries to determine the structure of the text from
+   the indentation and use of special characters.
+
+    For instance
+       This is a list:
+       o list item 1,
+       o list item 2.
+
+    Will be translated into the appropriate commands to create a similar
+    list in the output format.
+
+May 2004 - V4.0.25
+ Frans Slothouber
+ o Added --headless and --footless option to create documents that can be
+ included into large documents.  (Works for LaTeX and HTML).
+
+May 2004 - V4.0.24
+ Frans Slothouber
+ o Added --nosort option
+ o With the define IGNORE_CASE_FILENAMES one can make robodoc case-insensitve
+   when it comes to filenames.
+ o Fixed bug [924530] False warning with empty lines
+ o Fixed bug [925920] broken robodoc.rc file;  robodoc ignored end markers or
+   remark markers if there was no header marker block.
+
+March 2004 - V4.0.23
+ Frans Slothouber
+ o When sorting module headers come before headers
+   of other types.
+ o Fixes a bug in the sorting of headers.
+ o Fixes a bug in linking
+ o Sourcefiles that do not contain headers are not shown.
+
+February 2004 - V4.0.21
+ Frans Slothouber
+ o Added navigation bar for every header. It allows one to jump
+   to the parent header, the top of the document, and the index
+   when available.
+ o ROBODoc will continue parsing the other headers if it finds
+   a header it can not parse.
+ o Better formatted warnings.
+ o The sourcefile index is now always sorted
+ o Everything is sorted according to a non case sensitive string
+   compare.
+
+January 2004 - V4.0.19
+ Frans Slothouber
+ o Fixed bug 874567 No crosslinks for names that start with '-'
+ o Fixed bug 875533 No bolding for names starting with ::
+ o Added configurable header markers, remark markers,
+   and end markers.  ROBODoc is now usable with
+   _any_ language.
+
+ Hermann Hueni
+ o Fixed broken configure on Solaris.
+
+January 2004 - V4.0.18
+ Frans Slothouber
+ o Update of the user manual and documentation
+ o Note that:
+    If you were using an 'extensions:' block in your robodoc.rc file, 
+    you have to replace this with an 'ignore files:' block with all
+    extensions prefixed with '*'.  So, if you were using
+
+    extensions:
+        .txt
+        .obj
+
+    replace this with
+
+    ignore files:
+        *.txt
+        *.obj
+
+December 2003 - V4.0.17
+ Frans Slothouber
+ o Added directory tree shaped master index for the sourcefiles.
+ o Added filtering of files and directories based on wildcard
+   expressions.
+ Michael Felke 
+ o Support for lotus script, clean-up of headers.c and headers.h
+
+December 2003 - V4.0.15
+ Frans Slothouber
+ o Added support for DB/C
+
+December 2003 - V4.0.14
+ John Rouillard
+ o Bug fix.  no index file was generated for headertypes of which
+             there were only internal headers.
+ Frans Slothouber
+ o More tests
+
+December 2003 - V4.0.13
+ Skipped
+
+December 2003 - V4.0.12
+ David White
+ o Updated makefile for borland C
+ o Added marker for Aspen Custom Modeller (ACM) 
+ Frans Slothouber
+ o Added more documentation
+ o a .css file is now also used in singledoc mode
+ o each header in the html documentation now has a permanent
+   "a name" based on the full name of a header.
+ o fixed the title of singledoc documents.
+ o files or directories specified with --src or --doc
+   are now automatically prefixed with a ./
+ o It is now allowed to have a Doc directory that is a subdirectory
+   of the source directory.  This Doc directory is skipped while robodoc
+   scans for sourcefiles.
+ o Added headermarker !**** for Fortran
+ o ROBODoc now warns if it finds something that looks like an item name but is
+   not in the list of item names.  This catches spelling mistakes like NAEM,
+   IMPUTS, VALEU, etc
+ o Fixed bug 830868 no error message for misspelled options
+ o Fixed bug 767034 a slash at the end of a path confuses robodoc
+ o Fixed bug 772213 assert fires if header is not closed
+ o Added user configurable header types (section "header types"
+   in robodoc.rc file).
+ o Added lock mode (--lock). Per source file robodoc locks on the 
+   first headermarker it finds and will recognize only that particular headermarker 
+   for the remaining part of the file.
+   In addition it locks on the first remark marker in each header and 
+   will recognize only that particular remark marker for the remaining
+   part of the header.
+ Petteri Kettunen
+ o First implementation of piping in generator.c
+
+September 2003 - V4.0.11
+ Frans Slothouber
+ o Added a table for header types. This will allow custom 
+   header types.
+ o The master index table for HTML output is split up in
+   several pages.  One for each header type.
+ Petteri Kettunen
+ o added --version option
+ o fixed regex in bump.pl
+
+September 2003 - V4.0.10
+  Skipped.
+
+Augustus 2003 - V4.0.9
+ Frans Slothouber
+ o Removed some obsolete functions.
+ o Added project file for MSVC++
+ o Merged patch from Brian P. Hanley:
+   + the option --rc to specify an alternate robodoc.rc file.
+   + the option --css to specify an alternate css file.
+     (The content of this file will be copied into the
+      robodoc.css file).
+
+Augustus 2003 - V4.0.8
+ Skipped.
+
+July 2003 - V4.0.7
+ Frans Slothouber
+ o Indented all source code with indent
+ o Added markers for VB
+ o Added a Perl example to the Examples directory (bug 779560)
+ o Fixed layout of the man pages. (bug 779553)
+ Petteri Kettunen
+ o signed/unsigned char changes and UTF-8 output in SGML and DBXML modes
+ o robohdrs/-t option, macro (#define) created as `d' type header
+
+July 2003 - V4.0.6
+ David White
+ o Added a makefile for Borland C compiler
+ Frans Slothouber
+ o Fix for bug 761686, space in .rc file confuses robodoc
+ o Added a section on how to use robodoc under win32 to
+   the manual.
+ o Fix for bug 770251, Absolute filename causes an assertion to fail
+ Kai
+ o Added a makefile for djgpp GCC under win32.
+
+July 2003 - V4.0.5 
+ Frans Slothouber
+ o Fix for bug 761688, rtf output goes only 4 sections deep.
+ o Added the option --tabsize n
+ o Lines that do not start with a remark marker are skipped,
+   unless they are part of a source item.
+ o Re-enabled ascii output.
+
+ Kai Hofmann
+ o Fix for many compiler warnings.
+
+June 2003 - V4.0.4
+ Frans Slothouber
+ o Merged changes to the html generator from Kai.
+
+June 2003 - V4.0.3  
+ Frans Slothouber
+ o Fix for bug -- ./configure crashes.
+ o Fix for bug -- Wrong version number is shown when compiled without using
+                  autoconfig.
+
+ Jacco van Weert
+ o Added image: tag to html output.
+
+May 2003 - V4.0.2
+ o Fix for bug        -- robodoc chokes on empty lines in
+                         the robodoc.rc file.
+ o Fix for bug        -- Bad formatting of the 'unknown section' error.
+ o Fix for bug 721685 -- TOC appears twice in a RTF Doc
+ o Fix for bug 721690 -- TOC in mutidoc files are wrong.
+ o Added support for DCL.
+
+April 2003 - V4.0.1
+ o Fix for bug 715778 -- on some machines the d_type of the
+   struct dirent is always DT_UNKNOWN. This caused ROBODoc
+   to skip all files. (Thanks to Je'rome Laheurte).
+ o Merged a patch by Andreas Signer that add a number of
+   new headr types.
+ o Merged a patch by Janusz Piwowarski that allows users
+   to specify (1) the extension of the output file and
+   (2) html character encoding.
+
+April 2003 - V4.0.0
+ o Support for XML DocBook output.
+ o A new tool, robohdrs, is included -- it can insert empty headers
+   in the source code.
+ o Support for cascading style sheets (CSS) in HTML mode.
+ o Complete rework of the commandline interface.
+ o ROBODoc can now work with directories and subdirectories,
+   and does not need xref files anymore.
+ o All documentation can be created with a single command, you
+   no longer need a makefile to create your documentation.
+ o The manual is now in docbook format and much more extensive.
+ o Lots of refactoring, code should be easier to extend and understand
+   now.
+ o There is now some design documentation.
+ o Support for single file and multiple file documentation.
+ o Dropped support for Amiga Guide format.
+ o More unittests.
+ o Support for packaging under RedHat and OS-X
+ o C++ and C examples have been removed.
+
+July 2002 - V3.2.4
+ o Indented headers
+ o 2 character header types
+ Modifications by Nathan Prewitt  
+ o To allow further classification
+   of internal headers as internal functions, internal classes,
+   internal variables, etc.
+ o Added export into TROFF format with man macros -
+  suitable for Unix man pages.
+ o Fixed HTML generation to skip table of contents
+   if there were no TOC requested at command line.
+ o Fixed analyzer to correctly handle empty headers.
+
+March 2002 - Frans Slothouber (V3.2.4Beta2)
+ o More unittests
+ o Documentation update
+ o Added automatic detection of file:/
+ o Merged back the changes by Sasha Vasko.after I had
+   accidently deleted them when merging the DocBook changes.
+ o Indented most of the sourcecode.
+
+March 2002 - Frans Slothouber (V3.2.4Beta1)
+ o Documentation updates.  
+ o added a target docclean in the makefile in Source/ to clean
+   all temporary files.
+ o updated documentation
+ o added testframework
+
+August 2001  DCD Changes - V3.2.4 with docbook support:
+  o Added support for Docbook SGML - Robodoc can now produce
+    output in Docbook SGML using the DBSGML command line switch,
+    allowing standardized conversion to a host of formats
+    including HTML (single and multiple), RTF, ASCII, LATEX, 
+    and PDF. Docbook also
+    allows you to use external style sheets in which you can
+    change the look of your document. See www.docbook.org for more
+    on DocBook
+  o Added -rh switch which causes Robodoc to scan for a single header
+    defined as *ROBODOC* (char *robo_header) instead of header_markers
+    and uses *ROBODOC_END* as the end marker.
+    This prevents problems with Robodoc becoming confused with
+    normal comments uing *. It is particularly helpful in scanning
+    PHP source. It will only work with languages that support
+    multiline c-style comments
+  o Added -nt switch. Only used in DBSGML mode when creating a master
+    index. This causes Robodoc to list the Master Index functions as
+    a section 3 level item rather than as part of a table.
+  o Added genrd, a Unix bash shell script which simplifies the use
+    of Robodoc when generating documents from multiple source files
+    and when creating crossreferences and a master index.
+    Whole directories and subdirectories of source code can be
+    scanned and documented with a one line statement rather than
+    having to construct a makefile or using multiple
+    robodoc statements. See genrd -h for more info.
+
+Sepetember 2000 - Frans Slothouber (V3.2.3)
+ o Added a descrip.mms file for compilation under VMS
+ o make install installs additional documentation.
+ o Fixed a bug that caused links of the type
+  "someword/anotherword," to be ignored, while
+  "someword/anotherword" was recognized.
+
+July 2000 - Frans Slothouber (V3.2.2)
+ o Documentation explains how to use ROBODoc when your sources are
+   in several subdirectories.
+ o Documentation explains master index file for LaTeX, how to view
+   the generated documentation, and the new options, NOSOURCE, SINGLEDOC
+   and TITLE.
+ o example makefile includes commands to view the
+   generated documentation.
+ o Updated the man page
+ o Added option SINGLEDOC
+     For LaTeX output this generates documentation without
+     the start and end headers.  This way the generated file
+     can be included in a master file.
+ o Added master index file for LaTeX output.  The documentation
+     gathered from several source files can now be included into
+     one big file.
+ o Added the option NOSOURCE.  With this option the SOURCE item
+   is not included in the documentation.
+ o Added the TITLE option. This allows to set the title for
+   the master index file.
+ o Made the search for headermarkers case insensitve.
+   REM == Rem == rem
+
+December 1999 - v3.1f
+ o added RB_TimeStamp() to include time stamps in the documentation.
+ o Documentation is now generated in LaTeX2e format.
+ o added '|****' as begin marker, '|' as remark marker and '|***' as
+   end marker for GNU assembler support.
+ o ran ident on all source. Using the GNU standard now.
+ o Added new fold markers provided by Petteri
+
+December 1999 - Frans Slothouber (v3.1e)
+ o Moved the C example in Examples to Examples/C
+ o Added an C++ example in Examples/CPP
+ o Added empty headers for C++ in Headers/ 
+ o More documentation.
+ o added markers for HTML.
+ o modified the RB_Find_Link() function to also words that include
+   "::". This is used for C++ methods.
+ o added a RB_Function_Name() function that correctly extracts the
+   function name (or the name of any other object that is documented)
+   from the header name.  The old code used RB_FilePart which failed
+   on C++ method names.
+ o Fixed a core-dumping bug in RB_Set_Doc_Base()
+
+December 1999 - Frans Slothouber (v3.1d)
+ o Added list of possible item names to the robodoc man page.
+ o Added list of possible header types to the robodoc man page.
+ o Updated manual with information on the generation of the
+   master index file and new header types.
+ o added new header types for, classes, methods, variables,
+   functions, strutures and constants. (Idea of Stefan Kost)
+ o added a command to create a master index file that contains
+   sorted pointers to all classes, methods, variables,
+   functions, strutures and constants.
+
+December 1999 - Frans Slothouber (v3.1c)
+ o Added testheader.c for debug purposes.
+ o Split the source code into serveral files.
+ o Fixed numerous typos in the documentation.
+ o Using m4 to create the html documentation (for table of contents ect).
+ o Added cross links between the documentation and examples.
+ From patches that I received from Stefan Kost
+ o renamed BEAST METHODS -> METHODS
+ o renamed BEAST ATTRIBUTES -> ATTRIBUTES
+ o added new items useful for object oriented programming; some of
+   these items are already used in os3.1 autodocs
+   TAGS, COMMANDS, DERIVED FROM, DERIVED BY, USES,
+   CHILDREN, USED BY, PARENTS, USAGE, PURPOSE
+ o commented the item names
+ o changed item-type enums to end all with _ITEM
+ o changed RB_Find_Link to accept names ending with '...'
+ o changed copyright comment to be a style-guide conform version string.
+ o changed RB_VER[] to be a style-guide conform version string
+ o changed AMIGA into _AMIGA, because the first one does not exists,
+   when compiling with NOANSI on SAS C/C++
+
+November 1999 - Frans Slothouber (v3.1b)
+  o Added a man page
+  o Cleaned-up html documentation.
+  o <A NAME="source code file name"> is generated at the beginning of
+    each document. A mention of the source code name in another
+    document creates a link to this name (provided you use xrefs).
+ o Moved most #defines and enums to robodoc.h
+ o Made ROBODoc more forgiving in reading the xrefs file. Empty
+   lines are allowed and also spaces at the end of a file name.
+
+August 1999 - Frans Slothouber: v3.1
+ o Added GPL licence
+ o Added INSTALL, README, and TODO
+ o Converted the documentation to HTML
+ o Spell-checked all documentation
+ o More documentation and a more informative usage() function.
+ o robodoc -c prints licence
+ o removed a number of Source items from the documentation to reduce
+   the size of the robodoc.c.html file...  no fun for people
+   to download a >100k file.
+ o removed the warning about not using a robodoc default file.
+ o indent -orig -i2 -nbc -ncdb -bad -bap
+ o Fixed the warnings.
+ o Fixed some occurrences of (evil cast)malloc  (thou shalt not
+   cast malloc :)
+ o ROBODoc now returns EXIT_FAILURE or  EXIT_SUCCESS, as defined
+   in <stdlib.h>
+ o Fixed a memory leak in RB_Analyse_Document()
+
+Modifications by Petteri Kettunen  
+August 1999 - v3.0m+
+  o Support for folding in SOURCE items, HTML only.
+  o indent -kr
+  o Added options FOLD and C
+
+Modifications by Petteri Kettunen
+Feb 1999      - v3.0m
+  o Changed background color to white
+  o Changed size of Table of Contents title. (H3 instead of H1)
+  o The reverse function also reversed the sorted header list,
+    fixed this.
+
+Modifications by FNC Slothouber.
+   Feb-1999    - v3.0l * Added function to reverse the header list.
+14-Aug-1998    - v3.0k * Tcl/Tk '#' handling added;
+
+
+Modifications by agi
+15-Dec-1997    - v3.0j
+  o cleaned the HTML-output, so it now conforms to the DTD for HTML-3.2
+  o TOC now is an ordered list (<OL> and <LI>)
+  o added "<!DOCTYPE..>"
+  o added quotes to values of some HTML-attributes
+  o more compatible implementation of the SGML-comment containing
+    copyright-info replaced all occurrences of <B><PRE>.. by <PRE><B>
+  o replaced <H2/3> by <H1/2>
+  o fixed two minor warnings reported by gcc -Wall
+
+Modifications by FNC Slothouber.
+10-July-1996   - v3.0i
+  o Bug Fix, Both the options INTERNAL and INTERNALONLY did not
+    work correctly.
+01-April-1996  - v3.0h
+  o Added ';' to &gt and &lt so lynx also recognizes them.
+  o Fancied up the HTML output.
+
+Modifications by apang
+ 08-Mar-1996   - v3.0f
+ o Cleaner build for Borland C++ 4.52
+ o Added more markers (C++, Pascal, Modula-2, COBOL)
+ o Added more item types/names
+ o Added #defines for the preamble (COMMENT_ROBODOC and
+   COMMENT_COPYRIGHT)
+ o BLANK_HEADER for detection of asterisk'd lines
+ o RB_Say() the GENERIC header warning instead of using printf()
+ o Indents SOURCE body in output
+ o ASCII respects the TOC flag; removed extraneous newline after
+   formfeed (so it's more like AutoDoc)
+ o HTML output fixed to handle '<', '>', and '&'
+ o LaTeX attributes and '%' handling added; fancied up the output a bit
+ o RTF support added
+ o Changed some fprintf()'s to fputc()'s for potentially lower overhead
+ o Fixed line eater bug
+ o More general fix to the TOC problem of including internal links
+  when it wasn't selected
+
+Modifications by FNC Slothouber.
+04-Feb-1996   - v3.0e
+ o fixed the problem with the TOC that included links to headers that
+   were not selected. (i.e internal)
+08-Oct-1995   - v3.0d
+ o Bug fixes
+16-Sep-1995   - v3.0c
+ o Bug fixes
+27-Aug-1995   - v3.0b
+ o Fixed a bug with the defaults file
+ o Improved search algorithm RoboDoc is now 5.8 times faster.
+18-Aug-1995   -  v3.0
+ o New scanner that searches for a set default markers
+   that define what is a comment or what is not and that
+   define what or what is not a header/end marker.
+ o Added Beast Support
+
+08-Aug-1995 - Koessi  -
+ o a lot of while instead of for
+ o a lot of switch() instead of ifelse
+ o version defined
+ o RB_Say, RB_Panic now useable like printf()
+ o new formats for nearly all output-strings
+ o char *whoami is global copy of argv[0]
+ o BOLD <- MAKE_LARGE && AMIGAGUIDE
+ o succesfully compiled&tested on HPUX (HP9000/800)
+ o optimized listfunctions
+ o encapsulated header- and link- allocating and freeing
+ o RB_Find_Function_Name() replaced with RB_FilePart()
+
+07-Aug-1995 - Koessi   -
+ o automated foldmarks "\***"
+ o ! GoldEd's foldmarks == RoboDoc marker !
+ o quoted source parsing enhanced
+
+01-Aug-1995 - Koessi  - v2.0?  
+ o more robust parsing, less enforcer-hits
+ o removed self-referencing links !
+ o remarked most changes with *koessi*
+ o added GoldEd-foldmarks
+ o compiled successfully with SAS-C 6.3
+
+24-May-1995 - Frans Slothouber - v2.0e  
+ o Fixed a bug that cause the CleanUp Routine to lock up.
+ o Improved the HTML output, should work faster now.
+
+15-May-1995 - Frans Slothouber - v2.0d  
+ o New Defaults file.
+ o Added Verbose option.
+
+12-May-1995 - Frans Slothouber - v2.0c  
+ o Bug fixes.
+
+10-May-1995 - Frans Slothouber -  v2.0a  
+ o Program completely rewritten
+ o added SOURCE item and LaTeX output.
+ o added TAB converter.
+
+20-Apr-95 - Jacco van Weert    -  v1.1a:  
+ o INTERNALONLY option added.
+ o Sort problem solved.
+
+2-Apr-95 - Jacco van Weert     -  v1.0b:  Bug fixes
+ o Procedure header search bug solved.
+ o Print 'created procedure' text
+
+Mar-95  - Jacco van Weert      -  v1.0a:  Final version
+
+2-Feb-95  - Jacco van Weert    -  v0.93:  
+ o Mungwall hit, solved.
+ o When item headers, are also available in body then parts are 
+   duplicated solved.
+
+26-Jan-95     -  v0.92:  2nd test beta-version
+
+19-January-95 - Jacco van Weert  (v0.8)
+  o First test beta-version
+
+December 1994 - Jacco van Weert -- creation date.
+
+
diff --git a/Contributions/robodoc.kaptn b/Contributions/robodoc.kaptn
new file mode 100644 (file)
index 0000000..f1d639b
--- /dev/null
@@ -0,0 +1,292 @@
+#!/usr/bin/env kaptain
+# $Id: robodoc.kaptn,v 1.3 2007/01/29 22:28:20 gumpu Exp $
+# NAME
+#   robodoc.kaptn - robodoc.rc gui composer
+# COPYRIGHT
+# Copyright (C) 2003 gian paolo ciceri <gp.ciceri@acm.org>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA  02111-1307  USA
+# 
+#
+# HISTORY
+#   Sep, 9th 2003: v0.1.0 - initial, tentative release (borrowed from procmail.kaptn).
+#
+
+
+#############################################################
+#
+# main wizard
+#
+start :wizard "Robodoc Configuration Wizard" ->  intro setup finish;
+#############################################################
+
+#############################################################
+#
+# into page
+#
+intro "robodoc.rc builder" -> intro1 intro2;
+intro1 -> text1 introa;
+text1 -> @text("This is a graphical front-end for creating robodoc.rc \
+configuration files made using Kaptain, the Universal graphical front-end.");
+intro2 "" -> @;
+introa "" -> workdir @fill;
+workdir "Choose Working Directory" -> "\nWORKDIR=" @directory="$PWD";
+#############################################################
+
+#############################################################
+#
+# finish page, where I write the robodoc.rc file
+#
+finish "Finish" -> text3 other_settings;
+text3 -> @text("Now press the Preview button to see the settings you have made.\
+ Don't forget to press Write button in order to save the setting in the given file.");
+other_settings -> filename @fill @preview(allfile)="Preview" @action(writetofile)="Write";
+writetofile-> "echo '" allfile "' > " filename ;
+filename -> @outfile="$PWD/robodoc.rc";
+#############################################################
+
+#############################################################
+#
+# setup page, here's the beef!
+#
+setup :horizontal "Settings" -> recipe;
+recipe :framed :horizontal -> recipe1 recipe2;
+recipe1 :framed "Main documentation options" -> outputtype sourcedir docdir cssfile ;
+recipe2 :framed "Items and misc. options" -> items ignoreitems ignoreext flags;
+#recipe :framed -> outputtype sourcedir docdir cssfile items ignoreitems ignoreext flags regexp;
+
+outputtype :horizontal "Output Types" -> !these_output | more_output ;
+  these_output :beside -> "--html\n" @string="--html";
+  more_output :beside -> "\n" more_output0;
+  
+sourcedir  "Sources Directory" -> "--src\n" @directory="$PWD"; 
+
+docdir  "Documents Directory" -> "--doc\n" @directory="$PWD"; 
+
+cssfile  "CSS stylesheet" -> "--css\n" @infile("*.css"); 
+
+items :horizontal  "Items" -> !these_items | more_items;
+  these_items :beside -> @string;
+  more_items :beside -> more_items0;
+  
+ignoreitems :horizontal  "Ignore Items" -> !these_iitems | more_iitems;
+  these_iitems :beside -> @string;
+  more_iitems :beside -> more_iitems0;
+
+ignoreext :horizontal  "Ignore file Extensions" -> these_iexts | !more_iexts;
+  these_iexts :beside -> @string="*.bkp\n ~";
+  more_iexts :beside -> more_iexts0;
+
+###########################################################
+#@list('NAME', 'SYNOPSIS', 'INPUTS', 'OUTPUTS', 'HISTORY') ;
+#ignoreitems "Ignore Items" -> "ignore items:\n" @combow('HISTORY', 'BUGS', 'AUTHORS', 'TODO', 'NEWS');
+#ignoreext "Ignore Extensions" -> "extensions:\n" @combow('*.bkp', '~');  
+###########################################################
+
+
+  
+flags :horizontal "Misc.Options" -> these_flags | !more_flags ;
+  these_flags :beside -> ":0 " @string;
+  more_flags :beside -> ":0 " more_flags0;
+#############################################################
+
+
+#############################################################
+#
+# robodoc.rc file setup, in the `allfile` variable
+#
+allfile -> "#This file was created by Kaptain\n\n" 
+   "#options" "\n"
+   options  "\n" 
+
+   "#output types" "\n"
+   out_options  "\n" 
+
+   "#source directory" "\n"   
+   sourcedir "\n"
+
+   "#document directory" "\n"   
+   docdir "\n"
+
+   "#stylesheet" "\n"   
+   cssfile "\n"
+
+   "#items" "\n"  
+   "items" "\n" 
+   items "\n"
+
+   "#ignore items" "\n"  
+   "ignore items:\n" 
+   ignoreitems "\n"
+
+   "#ignore files by extension" "\n"   
+   "extensions:" "\n"
+   ignoreext "\n"
+   
+   "#end\n" ;
+#############################################################
+
+
+#############################################################
+#
+# auxiliary dialog, to setup options
+#
+more_flags0 :dialog "Options..." -> flags_top flags_buttons;
+flags_buttons -> @close="OK";
+flags_top :horizontal :framed  -> options;# extras;
+# extras "Extras" -> @;
+ options "Options"
+  -> index multidoc singledoc singlefile 
+     tell folds internal internalonly 
+     nosource nodesc sections tabsize toc;
+     
+  index "Also create a master index file" -> "--index\n"! | @;
+  multidoc "Generate one document per source file, and copy the directory hierarchys" ->
+  "--multidoc\n"! | @;
+  singledoc  "Define the documentation directory or documentation file." -> "--singledoc\n" |!@;
+  singlefile "Generate a single document from a single file."  -> "--singlefile\n" |!@;
+  tell "ROBODoc tells you what steps it is taking." -> "--tell\n" |!@;
+  folds "Use fold marks to split a big document into smaller ones." -> "--folds\n" |!@;
+  internal "Also include headers marked internal." -> "--internal\n" |!@;
+  internalonly "Only include headers marked internal." -> "--internalonly\n" |!@;
+  nosource "Do not include the SOURCE items."  -> "--nosource\n" |!@;
+  nodesc "Do not scan any subdirectories." -> "--nodesc\n" |!@;
+  sections "Create sections based on the module hierarchy." -> "--sections\n" |!@;
+  tabsize "Lets you specify the tabsize." -> "--tabsize\n" |!@;
+  toc "Add a table of contents." -> "--toc\n" |!@;
+#############################################################
+
+#############################################################
+#
+# auxiliary dialog, to setup output types (html, latex, rtf, docbook)
+#
+more_output0 :dialog "Output Types..." -> output_top output_buttons;
+output_buttons -> @close="OK";
+output_top :horizontal :framed  -> out_options;# extras;
+# extras "Extras" -> @;
+ out_options "Output Types"
+  -> html ascii rtf latex docbook;
+  html "HTML" -> "--html\n"! | @;
+  ascii "ASCII" -> "--ascii\n"! | @;
+  latex "LaTeX" -> "--latex\n" | !@;
+  rtf "Rich Text format" -> "--rtf\n" | !@;
+  docbook "DocBook" -> "--dbxml\n" | !@;
+#############################################################
+
+#############################################################
+#
+# auxiliary dialog, to setup items
+#
+more_items0 :dialog "Include Items..." -> item_top item_buttons ;
+item_buttons -> @close="OK";
+item_top :horizontal :framed  -> item_options;# extras;
+# extras "Extras" -> @;
+item_options :horizontal "Items"
+  -> itemleft itemright;
+
+ itemleft -> NAME SYNOPSIS INPUTS   
+  USAGE SOURCE COPYRIGHT FUNCTION AUTHOR RESULT EXAMPLE NOTES DIAGNOSTICS;
+ itemright ->  WARNINGS ERRORS BUGS SEEALSO METHODS ATTRIBUTES TAGS COMMAND DERIVEDFROM 
+  DERIVEDBY USES USEDBY INPUTS OUTPUTS HISTORY;
+  
+  NAME "NAME, Item name + short description" -> "    NAME\n"! | @;
+  SYNOPSIS "SYNOPSIS, how to use it" -> "    SYNOPSIS\n" | !@;  
+  USAGE "USAGE, how to use it" -> "    USAGE\n" | !@;
+  SOURCE "SOURCE, source code inclusion" -> "    SOURCE\n" | !@;
+  COPYRIGHT "COPYRIGHT, who own the copyright" -> "    COPYRIGHT\n" | !@;
+  FUNCTION "FUNCTION, what does it" -> "    FUNCTION\n" | !@;
+  AUTHOR  "AUTHOR, who wrote it" -> "    AUTHOR\n" | !@;
+  RESULT "RESULT, what do we get returned" -> "    RESULT\n" | !@;
+  EXAMPLE "EXAMPLE, a clear example of the items use" -> "    EXAMPLE\n" | !@;
+  NOTES "NOTES, any annotations" -> "    NOTES\n" | !@;
+  DIAGNOSTICS "DIAGNOSTICS, diagnostical output" -> "    DIAGNOSTICS\n" | !@;
+  WARNINGS "WARNINGS, warning messages" -> "    WARNINGS\n" | !@;
+  ERRORS "ERRORS, error messages" -> "    ERRORS\n" | !@;
+  BUGS "BUGS, known bugs" -> "    BUGS\n" | !@;
+  SEEALSO "SEE ALSO, references" -> "    SEE ALSO\n" | !@;
+  METHODS "METHODS, oop attributes" -> "    METHODS\n" | !@;
+  ATTRIBUTES "ATTRIBUTES, oop attributes" -> "    ATTRIBUTES\n" | !@;
+  TAGS "TAGS, tagitem description" -> "    TAGS\n" | !@;
+  COMMAND "COMMAND, command description" -> "    COMMAND\n" | !@; 
+  DERIVEDFROM "DERIVED FROM, oop super class" -> "    DERIVED FROM\n" | !@; 
+  DERIVEDBY "DERIVED BY, oop sub class" -> "    DERIVED BY\n" | !@; 
+  USES "USES, what modules are used by this one" -> "    USES\n" | !@;
+  USEDBY "USED BY,which modules do use this" -> "    USED BY\n" | !@;
+  INPUTS "INPUTS, what can we feed into it" -> "    INPUTS\n" | !@;
+  OUTPUTS "OUTPUTS, what output will be made" -> "    OUTPUTS\n" | !@;
+  HISTORY "HISTORY, who done what changes when" -> "    HISTORY\n" | !@;  
+#############################################################
+
+#############################################################
+#
+# auxiliary dialog, to setup ignore items
+#
+more_iitems0 :dialog "Ignore Items..." -> iitem_top iitem_buttons;
+iitem_buttons -> @close="OK";
+iitem_top :horizontal :framed  -> iitem_options;# extras;
+# extras "Extras" -> @;
+ iitem_options :horizontal "Ignore Items"
+  -> iitemleft iitemright;
+  
+ iitemleft -> iNAME iSYNOPSIS iINPUTS   
+  iUSAGE iSOURCE iCOPYRIGHT iFUNCTION iAUTHOR iRESULT iEXAMPLE iNOTES iDIAGNOSTICS;
+ iitemright ->  iWARNINGS iERRORS iBUGS iSEEALSO iMETHODS iATTRIBUTES iTAGS iCOMMAND iDERIVEDFROM 
+  iDERIVEDBY iUSES iUSEDBY iOUTPUTS iHISTORY iBUGS;
+  
+  iNAME "NAME, Item name + short description" -> "    NAME\n" | !@;
+  iSYNOPSIS "SYNOPSIS, how to use it" -> "    SYNOPSIS\n" | !@;  
+  iUSAGE "USAGE, how to use it" -> "    USAGE\n" | !@;
+  iSOURCE "SOURCE, source code inclusion" -> "    SOURCE\n" | !@;
+  iCOPYRIGHT "COPYRIGHT, who own the copyright" -> "    COPYRIGHT\n" | !@;
+  iFUNCTION "FUNCTION, what does it" -> "    FUNCTION\n" | !@;
+  iAUTHOR  "AUTHOR, who wrote it" -> "    AUTHOR\n" | !@;
+  iRESULT "RESULT, what do we get returned" -> "    RESULT\n" | !@;
+  iEXAMPLE "EXAMPLE, a clear example of the items use" -> "    EXAMPLE\n" | !@;
+  iNOTES "NOTES, any annotations" -> "    NOTES\n" | !@;
+  iDIAGNOSTICS "DIAGNOSTICS, diagnostical output" -> "    DIAGNOSTICS\n" | !@;
+  iWARNINGS "WARNINGS, warning messages" -> "    WARNINGS\n" | !@;
+  iERRORS "ERRORS, error messages" -> "    ERRORS\n" | !@;
+  iBUGS "BUGS, known bugs" -> "    BUGS\n" | !@;
+  iSEEALSO "SEE ALSO, references" -> "    SEE ALSO\n" | !@;
+  iMETHODS "METHODS, oop attributes" -> "    METHODS\n" | !@;
+  iATTRIBUTES "ATTRIBUTES, oop attributes" -> "    ATTRIBUTES\n" | !@;
+  iTAGS "TAGS, tagitem description" -> "    TAGS\n" | !@;
+  iCOMMAND "COMMAND, command description" -> "    COMMAND\n" | !@; 
+  iDERIVEDFROM "DERIVED FROM, oop super class" -> "    DERIVED FROM\n" | !@; 
+  iDERIVEDBY "DERIVED BY, oop sub class" -> "    DERIVED BY\n" | !@; 
+  iUSES "USES, what modules are used by this one" -> "    USES\n" | !@;
+  iUSEDBY "USED BY,which modules do use this" -> "    USED BY\n" | !@;
+  iINPUTS "INPUTS, what can we feed into it" -> "    INPUTS\n" | !@;
+  iOUTPUTS "OUTPUTS, what output will be made" -> "    OUTPUTS\n" | !@;
+  iHISTORY "HISTORY, who done what changes when" -> "    HISTORY\n" | !@;    
+#############################################################
+
+#############################################################
+#
+# auxiliary dialog, to setup excluded file by extension
+#
+more_iexts0 :dialog "Exclude Extensions..." -> iextm_top iextm_buttons;
+iextm_buttons -> @close="OK";
+iextm_top :horizontal :framed  -> iextm_options;# extras;
+# extras "Extras" -> @;
+ iextm_options "Exclude files by extension"
+  -> BAK TILDE;
+  BAK "*.bak" -> "    *.bak\n" | @;
+  TILDE "~" -> "    ~\n" | @;
+#############################################################
+
diff --git a/Contributions/robodoc2pod.pl b/Contributions/robodoc2pod.pl
new file mode 100644 (file)
index 0000000..b88f4e1
--- /dev/null
@@ -0,0 +1,162 @@
+#!/usr/bin/perl
+###################################################
+# robodoc 2 pod converter
+###################################################
+#****h* robodoc2pod
+# NAME
+# Robodoc 2 Pod
+#
+# FUNCTION
+# Generate POD documentation from ROBODoc to allow
+# use of perldoc with your Robodoc'ed code.
+#
+# HISTORY
+# * V 0.2.1 of 06/03/14                corrected the regexps
+# * V 0.2.0 of 06/03/13                rewritten with intermediate representation
+# * V 0.1.0 of 06/03/10                first version
+#
+# BUGS
+# nothing known right now.
+#
+# TODO
+# * refactor cleanly
+# * manage locales
+# * manage nested lists
+# * indent EXAMPLE with 
+# 
+# LICENSE
+# This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. 
+# AUTHOR
+# Emmanuel Florac ( wazoox @ free . fr )
+# COPYRIGHT
+# (c) 2006 Intellique (www.intellique.com)
+#***
+# always use strict et warnings.
+use strict;
+use warnings;
+
+use Data::Dumper;
+
+#########################
+# functions
+#########################
+
+sub usage {
+    return "usage  : $0 <source file> [ >> <pod file> ]";
+}
+
+#########################
+# main
+#########################
+
+# must provide a file name to work with
+my $file = shift or die usage();
+open my $fh, $file or die "can't open file : $file";
+
+# robodoc start and end tags (marks robodoc blocks)
+my $rbd_starttag = qr(^\*\*\*\*[\w\*]\*);
+my $rbdheadtype  = qr(^\*\*\*\*([\w\*])\*);
+my $rbd_endtag   = qr(^\*\*\*);
+
+# robodoc general tags
+my @rbdtags = (
+    'NAME',          'COPYRIGHT',      'SYNOPSIS',    'USAGE',
+    'FUNCTION',      'DESCRIPTION',    'PURPOSE',     'AUTHOR',
+    'CREATION DATE', 'MODIFICATION',   'HISTORY',     'INPUTS',
+    'ARGUMENTS',     'OPTIONS',        'PARAMETERS',  'SWITCHES',
+    'OUTPUT',        'SIDE EFFECTS',   'RESULT',      'RETURN VALUE',
+    'EXAMPLE',       'NOTES',          'DIAGNOSTICS', 'WARNINGS',
+    'ERRORS',        'BUGS',           'TODO',        'IDEAS',
+    'PORTABILITY',   'SEE ALSO',       'METHODS',     'NEW METHODS',
+    'ATTRIBUTES',    'NEW ATTRIBUTES', 'TAGS',        'COMMANDS',
+    'DERIVED FROM',  'DERIVED BY',     'USES',        'CHILDREN',
+    'USED BY',       'PARENTS',        'SOURCE',          'LICENSE',
+);
+
+my %rbdheaders = (
+    c   => 'Class',
+    d   => 'Constant',
+    f   => 'Fonction',
+    h   => 'Module',
+    m   => 'Méthod',
+    s   => 'Structure',
+    t   => 'Type',
+    u   => 'Unit Test',
+    v   => 'Variable',
+    '*' => '',
+);
+
+# to check for headers tags
+my $tagmatch = join '|', @rbdtags;
+$tagmatch = qr(^($tagmatch));
+
+# to store the robodoc
+my @robodoc;
+
+# flag and titles
+my $inrobodoc  = 0;
+my $rbdtagname = '';
+
+# read the file
+while (<$fh>) {
+
+    # remove leading # if any
+    s/^\s*# *//;
+    chomp;
+
+    $inrobodoc = 0 if m/$rbd_endtag/;
+
+    if ($inrobodoc) {
+        push @{ $robodoc[$#robodoc]{$rbdtagname} }, $_;
+    }
+
+    if (m/$rbd_starttag/) {
+        $inrobodoc = 1;
+        my ($headertype) = (m/$rbdheadtype/);
+        ($rbdtagname) = (m/$rbd_starttag(.*)/);
+        chomp $rbdtagname;
+        if ($rbdtagname) {
+            $rbdtagname = $rbdheaders{$headertype} . $rbdtagname;
+            push @robodoc, { $rbdtagname => [] };
+        }
+    }
+}
+
+close $fh;
+
+# now convert robodoc to pod
+my @pod;
+my $items   = 0;
+my $podhead = 1;
+
+foreach (@robodoc) {
+    my ( $k, $v ) = each %$_;
+    my $currhead = $podhead;
+    push @pod, '', "=head$currhead $k", '';
+    $currhead++;
+
+    foreach my $line (@$v) {
+               # insert head if this is a managed tag
+        if ( $line =~ m/$tagmatch/ ) {
+            push @pod, ( '', "=head$currhead $line", '' );
+               # insert bulleted lists
+        } elsif ( my ($elem) = ( $line =~ m/^\*\s+(.*)/ ) ) {
+            if ( $items == 0 ) {
+                $items++;
+                push @pod, "=over";
+            }
+            push @pod, ( '', '=item *', '', $elem );
+               # end bulleted list
+        } elsif ( $items > 0 ) {
+            $items = 0;
+            push @pod, ('', '=back', '');
+            push @pod, $line;
+               # raw insert
+        } else {
+            push @pod, $line;
+        }
+    }
+}
+
+print join( "\n", @pod ) . "\n";
+
diff --git a/DEVELOPERS b/DEVELOPERS
new file mode 100644 (file)
index 0000000..cc698fd
--- /dev/null
@@ -0,0 +1,46 @@
+$Id: DEVELOPERS,v 1.10 2006/06/17 11:35:10 gumpu Exp $
+
+If you get this from CVS, this is how to create a workable archive. 
+Run:
+  aclocal
+  automake -a
+  autoconf
+
+
+To create a new release edit 
+  bump.pl
+and then run it. Then run
+  ./do.sh
+
+
+To clean _everything_
+
+  make -f makefile.am myclean
+
+
+To create the (g)zipfiles:
+  ./configure
+  make dist
+  make dist-zip
+
+
+To check for memory leaks use:
+   CFLAGS="-g -Wall -DDMALLOC -DMALLOC_FUNC_CHECK" LDFLAGS="-ldmalloc" ./configure
+in combination with the dmalloc library ( http://dmalloc.com/ )
+
+
+To cross-compile Windows binary on GNU/Linux, do:
+
+  (cd Source && make -f makefile.plain xcompile)
+
+This requires mingw32 cross-compiler. On Debian GNU/Linux (and on its
+derivatives) this can be installed simply by typing:
+
+  apt-get update && apt-get install mingw32
+
+
+There are three modules for ROBODoc
+robo        -- The source code and documentation
+robotest    -- A test suite   ( OBSOLETE )
+robowwww    -- The web pages for ROBODoc.  ( OBSOLETE )
+
diff --git a/Design/design.txt b/Design/design.txt
new file mode 100644 (file)
index 0000000..b019b97
--- /dev/null
@@ -0,0 +1,198 @@
+
+Some random notes about the design of robodoc.
+This will later be turned into a proper docbook
+document.
+
+
+
+Collections / Containers.
+
+For most of the containers a singly linked list is used.
+The link to the next element is called "next" and is the
+first field in any structure that is stored in a linked list.
+
+For instance
+
+struct S {
+    struct S* next;
+    long   another_field;
+    char*  aName;
+};
+
+An anchor points to the first element in the list.
+
+If this convention is used for all linked lists than it is
+easy to remember how to iterate through the container.
+
+    struct X* x_container;
+
+    struct X* x_iterator;
+    for ( x_iterator = x_container;
+          x_iterator != 0;
+          x_iterator = x_iterator->next ) {
+
+    }
+
+Inserting an element:
+
+    x_new_element->next = x_container;
+    x_container = x_new_element;
+
+
+========================================================
+
+General Flow
+
+Sourcecode  ---> [ROBODoc] ---> Document.
+
+The sourcecode consists of one or more sourcefiles.
+The resulting document consists of one or more parts.
+
+For every sourcefile that is one part.
+There can be additional parts. For instance
+for indexfiles or to pull all parts into a single document.
+
+
+> Can someone explain the differences internally of a single doc
+> and multi doc? At first glance, it would seem that Lua scripts
+> should only implement single doc because they are to be free to
+> do as they please, but I may be mistaken.
+>
+> Please advise.
+
+The difference between singledoc and multidoc mode.
+
+The whole robodoc process consists of step 3
+(1) The scanning of the source directory tree -- this collect the names of
+    all the files and directories in the source directory tree.
+    All this information is stored in a RB_Directory structure inside
+    a RB_Document structure.
+(2) The analysing of all the sourcefiles -- this reads the content of
+    all the files found in step 1 and collects all the headers found in
+    these files.
+    These are store in list of RB_Part structures stored inside a
+    RB_Document structure.  For each sourcefile there is a RB_Part
+    structure.   All the headers found in a single source file are
+    stored as a list of RB_header structures in a RB_Part structure.
+(3) the generation of the documentation -- write the headers a
+    single documentation file or mulitiple documentation files.
+
+
+The difference between single doc and multidoc can be found in step 3.
+The difference can be seen in most clearly in the functions:
+RB_Generate_SingleDoc() and  RB_Generate_MultiDoc()
+
+If you look at the start of both functions they both call:
+
+    RB_Document_Collect_Headers( document );
+    RB_Document_Link_Headers( document );
+    RB_Fill_Header_Filename( document );
+    RB_Name_Headers( document->headers, document->no_headers );
+    RB_CollectLinks( document, document->headers, document->no_headers );
+
+However before this RB_Generate_MultiDoc() calls
+
+    RB_Document_Determine_DocFilePaths( document );
+    RB_Document_Create_DocFilePaths( document );
+    RB_Document_Determine_DocFileNames( document );
+
+This creates the documentation directory tree, which is a mirror image
+of the source directory tree, and determines for each RB_Part
+(sourcefile) the filename for the documentation file.
+The information is later used in RB_Fill_Header_Filename().
+
+RB_Fill_Header_Filename() stores the name of the file a header is
+to be written to.  In single doc mode RB_Fill_Header_Filename() this
+filename is always the same (the filename specified with the
+--doc option).  In multidoc mode the filename can be different and is
+based on the name computed in RB_Document_Determine_DocFileNames().
+
+In singledoc mode a single file is now opened.  For each part,
+the headers in this part are written to this file.  (So all
+headers end up in the same file).
+
+In multidoc mode a new file is opened for each part, and the headers
+in the part are written to this file.  (So headers end up in
+different files).
+
+In addition in multidoc mode a series of index files can be generated.
+
+
+
+=====================================================================
+
+General Flow
+
+Sourcecode  ---> [ROBODoc] ---> Document.
+
+The whole ROBODoc process consists of three steps: scanning,
+analysing, generating.
+
+Scanning 
+
+ROBODoc scans the source directory tree. This collects the names of
+all the source files.
+
+Analysing
+
+ROBODOc analyses all the sourcefiles. This reads the content of all
+source files and collects all the headers.
+
+Generating
+
+In this step the headers are written to one or more documentation files.
+In addition 
+
+The data collected during scanning and analysing is stored in a
+number of structures.
+
+RB_Directory, it stores the names of the sourcefiles and directories
+in the source direcory tree.  Files names are stored in a RB_Filename
+structure, directory names in a RB_Path structure.  Each RB_Filename
+contains a pointer (path) a RB_Path that tells in which directory a
+file is located.  Each RB_Path has a pointer (parent) to another
+RB_Path that tells of which directory is a directory located (of which
+directory it is a subdirectory).  The only exception is the root
+directory.
+
+Besides the name of the sourcefile, the RB_Filename also stores the
+name of the documentation file.
+
+For each sourcefile there is an RB_Part structure.  It contains a
+pointer (filename) to the RB_Filename and a list (headers) of
+RB_Header structure containing the headers found in the sourcefile.
+
+Every RB_Header structure contains a pointer (owner) to the RB_Part
+structure to which it belongs.  Headers can form a hierarchy that is
+used to create sections and subsections in the documentation.  To
+store this hierarchy every RB_header structure contains a pointer
+(parent) to its parent header.  For instance, given the following two
+headers, SubModule is the parent of SubSubModule.
+
+/****h* TopModule/SubModule
+ *
+ ****/
+
+/****h* SubModule/SubSubModule
+ *
+ ****/
+
+In the documentation this creates the sections
+
+1.TopModule
+1.1 SubModule
+1.1.1 SubSubModule
+
+
+The RB_Directory and the linked list of RB_Part structures are
+stored in a RB_Document structure.
+
+During the generation of the documentation ROBODoc tries to create
+cross links between the mention of a header's name (on object) and the
+documentation generated from that header (the documentation for the
+object).
+
+To aid this proces there is an array of RB_link structures.  This
+array is sorted for quick searching.
+
+
diff --git a/Design/uml.fig b/Design/uml.fig
new file mode 100644 (file)
index 0000000..53f8dbb
--- /dev/null
@@ -0,0 +1,130 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 5400 8100 6900 9600
+6 5400 8100 6900 9600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 8100 6900 8100 6900 9600 5400 9600 5400 8100
+4 1 0 50 0 12 12 0.0000 4 180 945 6150 8400 RB_Header\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        5400 8550 6900 8550
+-6
+6 5400 8100 6900 9600
+6 5400 8100 6900 9600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 8100 6900 8100 6900 9600 5400 9600 5400 8100
+4 1 0 50 0 12 12 0.0000 4 180 945 6150 8400 RB_Header\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        5400 8550 6900 8550
+-6
+6 10200 900 11700 2400
+6 10200 900 11700 2400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        10200 900 11700 900 11700 2400 10200 2400 10200 900
+4 1 0 50 0 12 12 0.0000 4 180 1260 10950 1200 RB_Directory\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        10200 1350 11700 1350
+-6
+6 3600 10500 5100 12000
+6 3600 10500 5100 12000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3600 10500 5100 10500 5100 12000 3600 12000 3600 10500
+4 1 0 50 0 12 12 0.0000 4 180 735 4350 10800 RB_Link\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        3600 10950 5100 10950
+-6
+6 300 10500 1800 12000
+6 300 10500 1800 12000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        300 10500 1800 10500 1800 12000 300 12000 300 10500
+4 1 0 50 0 12 12 0.0000 4 135 735 1050 10800 Globals\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        300 10950 1800 10950
+-6
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1800 4500 3300 4500 3300 6000 1800 6000 1800 4500
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 4500 6900 4500 6900 6000 5400 6000 5400 4500
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        3300 4800 5400 4800
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 1
+        5100 4800
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        6900 4800 9000 4800
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        9000 4650 10500 4650
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        5400 4950 6900 4950
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        1800 4950 3300 4950
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        11700 4650 13200 4650
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        6150 6000 6150 8100
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        6150 6000 6150 8100
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
+       0 0 1.00 60.00 120.00
+        2550 6000 2550 8700 5400 8700
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
+       0 0 1.00 60.00 120.00
+        11700 1800 12600 1800 12600 4200
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
+       0 0 1.00 90.00 150.00
+        2550 4500 2550 1500 10200 1500
+2 1 0 1 0 7 50 0 -1 0.000 0 0 7 1 0 3
+       0 0 1.00 90.00 150.00
+        10200 1800 9600 1800 9600 4200
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        11700 4200 13200 4200 13200 5700 11700 5700 11700 4200
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        10500 4500 11700 4500
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        9000 4200 10500 4200 10500 5700 9000 5700 9000 4200
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        6900 9300 8250 9300 8250 8400 6900 8400
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1800 11250 3600 11250
+4 1 0 50 0 12 12 0.0000 4 165 1155 2550 4800 RB_Document\001
+4 1 0 50 0 12 12 0.0000 4 165 735 6150 4800 RB_Part\001
+4 1 0 50 0 12 12 0.0000 4 165 525 4950 4650 parts\001
+4 1 0 50 0 12 12 0.0000 4 165 1155 4500 6450 RB_Document\001
+4 1 0 50 0 12 12 0.0000 4 180 1155 8250 4650 source_file\001
+4 1 0 50 0 12 12 0.0000 4 135 735 5700 7500 headers\001
+4 1 0 50 0 12 11 0.0000 4 105 360 4800 5100 0..*\001
+4 1 0 50 0 12 11 0.0000 4 105 360 5700 7800 0..*\001
+4 1 0 50 0 12 12 0.0000 4 180 1155 4650 8550 all_headers\001
+4 1 0 50 0 12 11 0.0000 4 105 360 4650 9000 0..*\001
+4 1 0 50 0 12 12 0.0000 4 135 525 9300 3300 files\001
+4 1 0 50 0 12 12 0.0000 4 180 525 12300 3300 paths\001
+4 1 0 50 0 12 11 0.0000 4 105 360 9300 3600 0..*\001
+4 1 0 50 0 12 11 0.0000 4 105 360 12300 3600 0..*\001
+4 1 0 50 0 12 11 0.0000 4 105 360 8550 5100 0..*\001
+4 1 0 50 0 12 12 0.0000 4 180 735 12450 4500 RB_Path\001
+4 1 0 50 0 12 12 0.0000 4 180 420 11400 4350 path\001
+4 1 0 50 0 12 12 0.0000 4 90 420 12450 4950 name\001
+4 1 0 50 0 12 12 0.0000 4 90 420 9750 4950 name\001
+4 1 0 50 0 12 12 0.0000 4 180 735 9750 4500 RB_File\001
+4 1 0 50 0 12 12 0.0000 4 135 735 9750 5250 docname\001
+4 1 0 50 0 12 12 0.0000 4 135 735 12450 5250 docname\001
+4 1 0 50 0 12 12 0.0000 4 165 630 7650 8250 parent\001
+4 1 0 50 0 12 12 0.0000 4 135 525 3300 11100 links\001
+4 1 0 50 0 12 11 0.0000 4 105 360 3300 11550 0..*\001
diff --git a/Docs/bugs.xml b/Docs/bugs.xml
new file mode 100644 (file)
index 0000000..814e322
--- /dev/null
@@ -0,0 +1,8 @@
+
+<section>
+<title>Suggestions and Bugs</title>
+    <para>If you find any bugs, catch them, put them in a jar, and
+    send them to: Frans Slothouber at rfsber {at} xs4all.nl.   Suggestions are also welcome at
+    this address.  Flames can be directed to the sun.</para>
+</section>
+
diff --git a/Docs/configuration.xml b/Docs/configuration.xml
new file mode 100644 (file)
index 0000000..efb60fe
--- /dev/null
@@ -0,0 +1,464 @@
+<!-- $Id: configuration.xml,v 1.9 2007/05/11 08:16:44 thuffir Exp $ -->
+
+<section id="customizing">
+<title id="customizing.title">Customizing ROBODoc</title>
+
+<para> ROBODoc can be configured with a configuration file called
+    <filename>robodoc.rc</filename>.  With it you can define item
+    names, frequently used options, and translations for English
+    terms. One should note that if a configuration file is specified,
+    its definitions over-ride ROBODoc internal (i.e. built-in) settings.
+    This is a feature; some arbitrary language may include syntax
+    which conflicts with ROBODoc's internal markers. By taking advantage
+    of a configuration file, these sort of issues and conflicts
+    can be circumvented.  An example is shown below.
+</para>
+
+<programlisting>
+# Example robodoc.rc
+#
+items:
+    NAME
+    FUNCTION
+    SYNOPSIS
+    INPUTS
+    OUTPUTS
+    SIDE EFFECTS
+    HISTORY
+    BUGS
+    EXAMPLE
+ignore items:
+    HISTORY
+    BUGS
+item order:
+    FUNCTION
+    SYNOPSIS
+    INPUTS
+    OUTPUTS
+source items:
+    SYNOPSIS
+preformatted items:
+    INPUTS
+    OUTPUTS
+format items:
+    FUNCTION
+    SIDE EFFECTS
+options:
+    --src ./source
+    --doc ./doc
+    --html
+    --multidoc
+    --index
+    --tabsize 8
+headertypes:
+    J  "Projects"          robo_projects    2
+    F  "Files"             robo_files       1
+    e  "Makefile Entries"  robo_mk_entries
+    x  "System Tests"      robo_syst_tests
+    q  Queries             robo_queries
+ignore files:
+    README
+    CVS
+    *.bak
+    *~
+    "a test_*"
+accept files:
+    *.c
+    *.h
+    *.pl
+header markers:
+    /****
+    #****
+remark markers:
+    *
+    #
+end markers:
+    ****
+    #****
+header separate characters:
+    ,
+header ignore characters:
+    [
+remark begin markers:
+    /*
+remark end markers:
+    */
+source line comments:
+    //
+keywords:
+    if
+    do
+    while
+    for
+</programlisting>
+
+<para>The configuration file consists of a number of blocks.
+    Each block starts with a name followed by a
+    <literal>:</literal>.
+    In each block you define a number of values.  Each value must
+    start with at least one space.
+</para>
+
+<section><title>items block</title>
+    <para>In this block you can define the names of items that
+        ROBODoc should recognize.  Item names can consist of more than
+        one word but should be written in all uppercase characters.
+        Define one item name per line.  You do not need to put quotes
+        around them if they contain spaces.
+    </para>
+
+    <para>If you do not define an items block ROBODoc uses its
+        default list of item names.  If you define an items block
+        ROBODoc uses only those item names, any of the default items names
+        (except SOURCE) are no longer recognized.</para>
+</section>
+
+<section><title>ignore items block</title>
+    <para>In this block you can define the names of items that
+        ROBODoc should ignore when generating documentation.
+        This can be useful if you want to create documentation
+        for a client, but for instance do not want to include
+        the history items and bugs items.</para>
+</section>
+
+<section><title>item order block</title>
+    <para>In this block you can define the order in which items
+        are to appear in the generated documentation.
+        The items listed here will appear in the given order in the
+        generated documentation.  Any remaining items appear
+        after these items in the order they were found in the header.
+        This allows you to make the documentation look more uniform.
+        </para>
+</section>
+
+<section id="sourceitems">
+<title id="sourceitems.title">source items block</title>
+    <para>In this block you can define the names of items that
+        ROBODoc handles in the same way as the SOURCE item.
+    </para>
+</section>
+
+<section><title>preformatted items block</title>
+  <para>
+    In this block you can define the names of items that should be always
+    preformatted. This is useful if you have the
+    <option><xref linkend="nopre" endterm="nopre.term" /></option> option
+    specified and want specific items (like input and output lists) to be
+    automatically preformatted. See
+    <xref linkend="formatting" endterm="formatting.title" /> for more
+    information.
+  </para>
+</section>
+
+<section><title>format items block</title>
+  <para>
+    In this block you can define the names of items that should be formatted by
+    the <xref linkend="formatting" endterm="formatting.title" /> feature
+    (like function descriptions) even if the
+    <option><xref linkend="nopre" endterm="nopre.term" /></option>
+    option has not been specified.
+  </para>
+</section>
+
+<section><title>options block</title>
+    <para>In this block you can define frequently used options.
+        The options you specify here are added to any options you
+        specify on the command line.</para>
+    <para>
+      See <xref linkend="options" endterm="options.title" />.
+    </para>
+</section>
+
+<section id="headertypes_block">
+<title id="headertypes_block.title">headertypes block</title>
+    <para>In this block you can define your own header types.
+        These are added to the existing header types.  Each new
+        header type requires three parameters: the character used to
+        indicate a header of this type, the title for this type as
+        used in the master index and the name of the file in which the
+        index of this type is stored.  If you use a character of an
+        existing header type, this header type is overwritten.
+    </para>
+    <para>
+        Additionally the sorting priority can also be specified for each header
+        type. Headers with higher priority will appear earlier in the
+        generated output. (For example you can make module definitions appear
+        at the beginning of a page.) If this parameter is omitted, the header
+        will have the priority 0 (lowest) by default. All pre-defined header
+        types have zero priority, except
+        "<xref linkend="header_type_h" endterm="header_type_h" />",
+        which has the sorting priority 1.
+        See <xref linkend="header_types" endterm="header_types.title" />.
+    </para>
+</section>
+
+<section><title>ignore files block</title>
+    <para>In this block you can define the names of files or
+        directories that ROBODoc should ignore while scanning
+        the directory tree for source files.  You can use the
+        wildcard symbols <literal>*</literal> and
+        <literal>?</literal>.  If you use spaces in the expression
+        enclose the expression in quotes.
+    </para>
+
+    <para> For instance, the rc file above causes ROBODoc
+        to skip all <filename>README</filename> files, all files with
+        the name <filename>CVS</filename> (these are usually
+        directories).  It also skips all files with a name that ends
+        with <filename>.bak</filename> or <filename>~</filename> or
+        that start with <filename>a test_</filename> </para>
+
+    <para>Normally you specify the names of directories here
+        and do the filtering of file names with a accept files block.
+    </para>
+</section>
+
+<section><title>accept files block</title>
+    <para>In this block you can define the names of files that
+        robodoc should accept. This test is carried out after the
+        'ignore files' filtering is performed.  Any files that do
+        not match the patterns in this block are ignored by ROBODoc.
+    </para>
+
+    <para>
+        If there is no accept files block all files are accepted.
+    </para>
+</section>
+
+<section><title>header markers block</title>
+    <para>
+        In this block you define what ROBODoc will recognize
+        as start of a header.  If you use this block ROBODoc only
+        recognizes these markers, any of the inbuilt markers will
+        be ignored.
+    </para>
+</section>
+
+<section><title>remark markers block</title>
+    <para>
+        In this block you define what ROBODoc will recognize
+        as start of remark.  If you use this block ROBODoc only
+        recognizes these markers, any of the inbuilt markers will
+        be ignored.
+    </para>
+</section>
+
+<section><title>end markers block</title>
+    <para>
+        In this block you define what ROBODoc will recognize
+        as end of a header.  If you use this block ROBODoc only
+        recognizes these markers, any of the inbuilt markers will
+        be ignored.
+    </para>
+</section>
+
+<section id="separate_characters_block">
+<title id="separate_characters_block.title">header separate characters block</title>
+  <para>
+    In this block you can specify the separation character(s) for multiple
+    header names. The default character is "<literal>,</literal>" (comma) if
+    this block is missing. See
+    <xref linkend="preparing" endterm="preparing.title" />
+    for more information.
+  </para>
+</section>
+
+<section id="header_ignore_characters_block">
+<title id="header_ignore_characters_block.title">header ignore characters block</title>
+  <para>
+    In this block you can specify character(s) where the evaluation of a header
+    should stop. The default character is "<literal>[</literal>" if this block
+    is missing. This is useful to supply additional information to the header
+    that ROBODoc should not care about.
+  </para>
+  <para>
+    For example one can include the version number of the function:
+<programlisting>
+  ****f* financial.library/StealMoney [2.0]
+</programlisting>
+  </para>
+</section>
+
+<section id="remark_begin_end"><title id="remark_begin_end.title">
+remark begin markers and remark end markers block</title>
+    <para>
+        Some languages allow remarks to span more than one line. They
+        start a remark with a begin marker and end it with another
+        marker.  For instance in C you can have:
+    </para>
+<programlisting>
+   /* This is a
+      multi-line remark.
+    */
+</programlisting>
+    <para>
+        Here the markers are <literal>/*</literal> and <literal>*/</literal>.
+        If you tell ROBODoc what these markers are in a remark begin
+        markers block and remark end markers block. ROBODoc can skip
+        them in source items.</para>
+
+        <para>We illustrate this with an example. Say we have a language
+        that start a remark with <literal>|*</literal> and
+        <literal>*|</literal>.  We define <literal>SYNOPSIS</literal>
+        to be a source like item.  If we now run ROBODoc on the
+        without a remark begin markers and
+        end markers block on the following piece of source, </para>
+
+<programlisting>
+|****f* Bar/foo
+ * FUNCTION
+ *   foo computes the foo factor.
+ * SYNOPSIS
+ *|
+int foo( float correction )
+|*
+ * BUGS
+ *   None
+ * SOURCE
+ *|  .
+{
+    return correction * 42.0;
+}
+|*****|
+</programlisting>
+
+<para>the extracted documentation will look like:</para>
+
+<literallayout class="monospaced">
+ FUNCTION
+   foo computes the foo factor.
+ SYNOPSIS
+   *|
+   int foo( float correction )
+   |*
+ BUGS
+   None
+ SOURCE
+   *|  .
+   {
+      return correction * 42.0;
+   }
+</literallayout>
+
+<para>because ROBODoc considers
+    <literal>|*</literal> and <literal>*|</literal>.to be part of the
+    source, and not part of the begin or end of a header.</para>
+
+<para> If you add</para>
+<programlisting>
+remark begin markers:
+       |*
+remark end markers:
+       *|
+</programlisting>
+<para>the output will look like:</para>
+<literallayout class="monospaced">
+ FUNCTION
+   foo computes the foo factor.
+ SYNOPSIS
+   int foo( float correction )
+ BUGS
+   None
+ SOURCE
+   {
+      return correction * 42.0;
+   }
+</literallayout>
+
+<para>
+    These markers will also be used to highlight block comments if the
+    <option>
+      <xref linkend="syntaxcolors_enable" endterm="syntaxcolors_enable.term" />
+      <xref linkend="syntaxcolors_enable_block_comments" endterm="syntaxcolors_enable_block_comments.option" />
+    </option>
+    option (or the
+    <option>
+      <xref linkend="syntaxcolors" endterm="syntaxcolors.term" />
+    </option>
+    option) is specified (Similar to
+    <xref linkend="linecomments" endterm="linecomments.title" />).
+</para>
+
+</section>
+
+<section id="linecomments"><title id="linecomments.title">source line comments block</title>
+    <para>
+        Here you can specify markers which start whole line comments.
+        (Comments that span until the end of line like "<literal>//</literal>",
+        "<literal>REM</literal>", "<literal>;</literal>", etc...)
+        These lines will be highlighted in the generated <literal>HTML</literal>
+        output if the
+        <option>
+          <xref linkend="syntaxcolors_enable" endterm="syntaxcolors_enable.term" />
+          <xref linkend="syntaxcolors_enable_line_comments" endterm="syntaxcolors_enable_line_comments.option" />
+        </option>
+        option (or the
+        <option>
+          <xref linkend="syntaxcolors" endterm="syntaxcolors.term" />
+        </option>
+        option) has been specified.</para>
+    <para>
+        You don't need this if you have the
+        <option>
+          <xref linkend="cmode" endterm="cmode.term" />
+        </option>
+        option specified.
+    </para>
+    <para>
+        The default highlighting color can be changed in the <literal>CSS</literal>
+        file (<literal>span.comment</literal>).
+    </para>
+</section>
+
+<section id="keywords"><title id="keywords.title">keywords block</title>
+    <para>
+        Here you can specify the keywords in your <literal>SOURCE</literal> items.
+        These keywords will be highlighted in the generated <literal>HTML</literal>
+        output if the
+        <option>
+          <xref linkend="syntaxcolors_enable" endterm="syntaxcolors_enable.term" />
+          <xref linkend="syntaxcolors_enable_keywords" endterm="syntaxcolors_enable_keywords.option" />
+        </option>
+        option (or the
+        <option>
+          <xref linkend="syntaxcolors" endterm="syntaxcolors.term" />
+        </option>
+        option) has been specified. Keywords meant to be the language native ones
+        (<literal>for</literal>, <literal>if</literal>, etc...).
+    </para>
+    <para>
+        You don't need this if you have the
+        <option>
+          <xref linkend="cmode" endterm="cmode.term" />
+        </option>
+        option specified.
+    </para>
+    <para>
+        The default highlighting color can be changed in the <literal>CSS</literal>
+        file (<literal>span.keyword</literal>).
+    </para>
+</section>
+
+    <section><title>Configuration file location</title>
+
+    <para>ROBODoc searches the your current directory for the
+    <filename>robodoc.rc</filename> file. If it can't find
+    it there it will search in <literal>$HOME/</literal>, then
+    <filename>$HOMEDRIVE$HOMEPATH/</filename>, and finally in
+    <filename>/usr/share/robodoc/</filename>.</para>
+
+    <para>With the <option>--rc</option> option you can tell ROBODoc to
+    use a different file than <filename>robodoc.rc</filename> as
+    configuration file.  This is handy if you want to create
+    documentation in different formats.  For instance: </para>
+
+<programlisting>
+robodoc --rc  htmlsingle.rc
+robodoc --rc  rtfsingle.rc
+robodoc --rc  htmlmulti.rc
+</programlisting>
+
+    </section>
+
+</section>
+
diff --git a/Docs/docbook-simple/sdocbook.dtd b/Docs/docbook-simple/sdocbook.dtd
new file mode 100644 (file)
index 0000000..b7b016d
--- /dev/null
@@ -0,0 +1,1886 @@
+<!-- vi: ff=unix -->
+<!-- *********************************************************************
+     *** THIS IS THE FLATTENED DTD. DO NOT EDIT THIS DTD BY HAND, EDIT ***
+     *** THE CUSTOMIZATION LAYER AND REGENERATE THE FLATTENED DTD! ********
+     ********************************************************************* -->
+
+<!-- ...................................................................... -->
+<!-- Simplified DocBook DTD V1.1 .......................................... -->
+<!-- File sdocbook-custom.dtd ............................................. -->
+
+<!-- Copyright 1992-2002 HaL Computer Systems, Inc.,
+     O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
+     Corporation, Norman Walsh, Sun Microsystems, Inc., and the
+     Organization for the Advancement of Structured Information
+     Standards (OASIS).
+
+     $Id: sdocbook.dtd,v 1.2 2007/01/13 11:27:32 gumpu Exp $
+
+     Permission to use, copy, modify and distribute the DocBook XML DTD
+     and its accompanying documentation for any purpose and without fee
+     is hereby granted in perpetuity, provided that the above copyright
+     notice and this paragraph appear in all copies.  The copyright
+     holders make no representation about the suitability of the DTD for
+     any purpose.  It is provided "as is" without expressed or implied
+     warranty.
+
+     If you modify the Simplified DocBook DTD in any way, except for
+     declaring and referencing additional sets of general entities and
+     declaring additional notations, label your DTD as a variant of
+     DocBook.  See the maintenance documentation for more information.
+
+     Please direct all questions, bug reports, or suggestions for
+     changes to the docbook@lists.oasis-open.org mailing list. For more
+     information, see http://www.oasis-open.org/docbook/.
+-->
+
+<!-- ...................................................................... -->
+
+<!-- This is the driver file for V1.1 of the Simplified DocBook XML DTD.
+     Please use the following formal public identifier to identify it:
+
+     "-//OASIS//DTD Simplified DocBook XML V1.1//EN"
+
+     For example:
+
+     <!DOCTYPE article
+               PUBLIC "-//OASIS//DTD Simplified DocBook XML V1.1//EN"
+      "http://www.oasis-open.org/docbook/xml/simple/1.1/sdocbook.dtd"
+     [...]>
+-->
+
+<!-- ...................................................................... -->
+
+
+<!ENTITY % local.list.class "">
+<!ENTITY % list.class
+               "itemizedlist|orderedlist
+               |variablelist %local.list.class;">
+<!ENTITY % local.admon.class "">
+<!ENTITY % admon.class
+               "note %local.admon.class;">
+<!ENTITY % local.linespecific.class "">
+<!ENTITY % linespecific.class
+               "literallayout|programlisting %local.linespecific.class;">
+<!ENTITY % local.para.class "">
+<!ENTITY % para.class
+               "para %local.para.class;">
+<!ENTITY % local.informal.class "">
+<!ENTITY % informal.class
+               "blockquote
+               |mediaobject
+               |informaltable %local.informal.class;">
+<!ENTITY % local.formal.class "">
+<!ENTITY % formal.class
+               "example|figure|table %local.formal.class;">
+<!ENTITY % local.compound.class "">
+<!ENTITY % compound.class
+               "sidebar %local.compound.class;">
+<!ENTITY % local.genobj.class "">
+<!ENTITY % genobj.class "anchor %local.genobj.class;">
+<!ENTITY % local.descobj.class "">
+<!ENTITY % descobj.class
+               "abstract|authorblurb|epigraph
+               %local.descobj.class;">
+<!ENTITY % local.xref.char.class "">
+<!ENTITY % xref.char.class "footnoteref|xref %local.xref.char.class;">
+<!ENTITY % local.gen.char.class "">
+<!ENTITY % gen.char.class
+               "abbrev|acronym|citetitle|emphasis|footnote|phrase
+               |quote|trademark %local.gen.char.class;">
+<!ENTITY % local.link.char.class "">
+<!ENTITY % link.char.class
+               "link|ulink %local.link.char.class;">
+<!ENTITY % local.tech.char.class "">
+<!ENTITY % tech.char.class
+               "command|computeroutput
+               |email|filename
+               |literal
+               |option
+               |replaceable
+               |systemitem|userinput
+               %local.tech.char.class;">
+<!ENTITY % local.base.char.class "">
+<!ENTITY % base.char.class "anchor %local.base.char.class;">
+<!ENTITY % local.docinfo.char.class "">
+<!ENTITY % docinfo.char.class
+               "author|corpauthor|othercredit
+               |revhistory
+               %local.docinfo.char.class;">
+<!ENTITY % local.other.char.class "">
+<!ENTITY % other.char.class
+               "subscript|superscript %local.other.char.class;">
+<!ENTITY % local.inlineobj.char.class "">
+<!ENTITY % inlineobj.char.class
+               "inlinemediaobject %local.inlineobj.char.class;">
+<!ENTITY % local.effectivity.attrib "">
+<!ENTITY % effectivity.attrib 
+       "%local.effectivity.attrib;"
+>
+<!ENTITY % local.common.attrib "">
+<!ENTITY % common.attrib
+       "id             ID              #IMPLIED
+       lang            CDATA           #IMPLIED
+        remap           CDATA           #IMPLIED
+       revisionflag    (changed
+                       |added
+                       |deleted
+                       |off)           #IMPLIED
+       %local.common.attrib;"
+>
+<!ENTITY % local.person.ident.mix "">
+<!ENTITY % person.ident.mix
+               "honorific|firstname|surname|lineage|othername|affiliation
+               |authorblurb
+               %local.person.ident.mix;">
+<!ENTITY % local.bibliocomponent.mix "">
+<!ENTITY % bibliocomponent.mix
+               "abbrev|abstract|author
+               |authorgroup|bibliomisc
+               |copyright|corpauthor|date|edition
+               |editor|issuenum
+               |othercredit
+               |pubdate|publishername
+               |releaseinfo|revhistory
+               |subtitle|title|titleabbrev|volumenum|citetitle
+               |%person.ident.mix;
+               %local.bibliocomponent.mix;">
+<!ENTITY % local.component.mix "">
+<!ENTITY % component.mix
+               "%list.class;           |%admon.class;
+               |%linespecific.class;
+               |%para.class;           |%informal.class;
+               |%formal.class;         |%compound.class;
+               |%genobj.class;         |%descobj.class;
+               %local.component.mix;">
+<!ENTITY % local.sidebar.mix "">
+<!ENTITY % sidebar.mix
+               "%list.class;           |%admon.class;
+               |%linespecific.class;
+               |%para.class;           |%informal.class;
+               |%formal.class;
+               |%genobj.class;
+               %local.sidebar.mix;">
+<!ENTITY % local.revdescription.mix "">
+<!ENTITY % revdescription.mix
+               "%list.class;           |%admon.class;
+               |%linespecific.class;
+               |%para.class;           |%informal.class;
+               |%formal.class;
+               |%genobj.class;
+               %local.revdescription.mix;">
+<!ENTITY % local.footnote.mix "">
+<!ENTITY % footnote.mix
+               "%list.class;
+               |%linespecific.class;
+               |%para.class;           |%informal.class;
+               %local.footnote.mix;">
+<!ENTITY % local.example.mix "">
+<!ENTITY % example.mix
+               "%list.class;
+               |%linespecific.class;
+               |%para.class;           |%informal.class;
+               %local.example.mix;">
+<!ENTITY % local.admon.mix "">
+<!ENTITY % admon.mix
+               "%list.class;
+               |%linespecific.class;
+               |%para.class;           |%informal.class;
+               |%formal.class;
+               %local.admon.mix;">
+<!ENTITY % local.figure.mix "">
+<!ENTITY % figure.mix
+               "%linespecific.class;
+                                       |%informal.class;
+               %local.figure.mix;">
+<!ENTITY % local.tabentry.mix "">
+<!ENTITY % tabentry.mix
+               "%list.class;           |%admon.class;
+               |%linespecific.class;
+               |%para.class;           |mediaobject
+               %local.tabentry.mix;">
+<!ENTITY % local.legalnotice.mix "">
+<!ENTITY % legalnotice.mix
+               "%list.class;           |%admon.class;
+               |%linespecific.class;
+               |%para.class;           |blockquote
+               %local.legalnotice.mix;">
+<!ENTITY % local.textobject.mix "">
+<!ENTITY % textobject.mix
+               "%list.class;           |%admon.class;
+               |%linespecific.class;
+               |%para.class;           |blockquote
+               %local.textobject.mix;">
+<!ENTITY % local.listpreamble.mix "">
+<!ENTITY % listpreamble.mix
+               "                        %admon.class;
+               |%linespecific.class;
+               |%para.class;           |%informal.class;
+               |%genobj.class;         |%descobj.class;
+               %local.listpreamble.mix;">
+<!ENTITY % local.para.char.mix "">
+<!ENTITY % para.char.mix
+               "#PCDATA
+               |%xref.char.class;      |%gen.char.class;
+               |%link.char.class;      |%tech.char.class;
+                |%base.char.class;
+               |%other.char.class;     |%inlineobj.char.class;
+               %local.para.char.mix;">
+<!ENTITY % local.title.char.mix "">
+<!ENTITY % title.char.mix
+               "#PCDATA
+               |%xref.char.class;      |%gen.char.class;
+               |%link.char.class;      |%tech.char.class;
+                |%base.char.class;
+                                       |%docinfo.char.class;
+               |%other.char.class;     |%inlineobj.char.class;
+               %local.title.char.mix;">
+<!ENTITY % local.cptr.char.mix "">
+<!ENTITY % cptr.char.mix
+               "#PCDATA
+               |%link.char.class;      |%tech.char.class;
+                |%base.char.class;
+               |%other.char.class;     |inlinemediaobject
+               %local.cptr.char.mix;">
+<!ENTITY % local.word.char.mix "">
+<!ENTITY % word.char.mix
+               "#PCDATA
+                                       |acronym|emphasis|trademark
+               |%link.char.class;
+                |%base.char.class;
+               |%other.char.class;     |inlinemediaobject
+               %local.word.char.mix;">
+<!ENTITY % local.docinfo.char.mix "">
+<!ENTITY % docinfo.char.mix
+               "#PCDATA
+               |%link.char.class;
+                                       |emphasis|trademark
+                                       |replaceable
+               |%other.char.class;     |inlinemediaobject
+               %local.docinfo.char.mix;">
+<!ENTITY % tbl.table.mdl
+       "((title, (mediaobject+|tgroup+))
+          |(caption, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+)))">
+<!ENTITY % local.divcomponent.mix "">
+<!ENTITY % divcomponent.mix
+               "%list.class;           |%admon.class;
+               |%linespecific.class;
+               |%para.class;           |%informal.class;
+               |%formal.class;         |%compound.class;
+                                       |%descobj.class;
+               %local.divcomponent.mix;">
+<!ENTITY % bookcomponent.content
+       "((%divcomponent.mix;)+, section*)
+       | section+">
+<!ENTITY Aacute           "&#x000C1;" >
+<!ENTITY aacute           "&#x000E1;" >
+<!ENTITY Acirc            "&#x000C2;" >
+<!ENTITY acirc            "&#x000E2;" >
+<!ENTITY AElig            "&#x000C6;" >
+<!ENTITY aelig            "&#x000E6;" >
+<!ENTITY Agrave           "&#x000C0;" >
+<!ENTITY agrave           "&#x000E0;" >
+<!ENTITY Aring            "&#x000C5;" >
+<!ENTITY aring            "&#x000E5;" >
+<!ENTITY Atilde           "&#x000C3;" >
+<!ENTITY atilde           "&#x000E3;" >
+<!ENTITY Auml             "&#x000C4;" >
+<!ENTITY auml             "&#x000E4;" >
+<!ENTITY Ccedil           "&#x000C7;" >
+<!ENTITY ccedil           "&#x000E7;" >
+<!ENTITY Eacute           "&#x000C9;" >
+<!ENTITY eacute           "&#x000E9;" >
+<!ENTITY Ecirc            "&#x000CA;" >
+<!ENTITY ecirc            "&#x000EA;" >
+<!ENTITY Egrave           "&#x000C8;" >
+<!ENTITY egrave           "&#x000E8;" >
+<!ENTITY ETH              "&#x000D0;" >
+<!ENTITY eth              "&#x000F0;" >
+<!ENTITY Euml             "&#x000CB;" >
+<!ENTITY euml             "&#x000EB;" >
+<!ENTITY Iacute           "&#x000CD;" >
+<!ENTITY iacute           "&#x000ED;" >
+<!ENTITY Icirc            "&#x000CE;" >
+<!ENTITY icirc            "&#x000EE;" >
+<!ENTITY Igrave           "&#x000CC;" >
+<!ENTITY igrave           "&#x000EC;" >
+<!ENTITY Iuml             "&#x000CF;" >
+<!ENTITY iuml             "&#x000EF;" >
+<!ENTITY Ntilde           "&#x000D1;" >
+<!ENTITY ntilde           "&#x000F1;" >
+<!ENTITY Oacute           "&#x000D3;" >
+<!ENTITY oacute           "&#x000F3;" >
+<!ENTITY Ocirc            "&#x000D4;" >
+<!ENTITY ocirc            "&#x000F4;" >
+<!ENTITY Ograve           "&#x000D2;" >
+<!ENTITY ograve           "&#x000F2;" >
+<!ENTITY Oslash           "&#x000D8;" >
+<!ENTITY oslash           "&#x000F8;" >
+<!ENTITY Otilde           "&#x000D5;" >
+<!ENTITY otilde           "&#x000F5;" >
+<!ENTITY Ouml             "&#x000D6;" >
+<!ENTITY ouml             "&#x000F6;" >
+<!ENTITY szlig            "&#x000DF;" >
+<!ENTITY THORN            "&#x000DE;" >
+<!ENTITY thorn            "&#x000FE;" >
+<!ENTITY Uacute           "&#x000DA;" >
+<!ENTITY uacute           "&#x000FA;" >
+<!ENTITY Ucirc            "&#x000DB;" >
+<!ENTITY ucirc            "&#x000FB;" >
+<!ENTITY Ugrave           "&#x000D9;" >
+<!ENTITY ugrave           "&#x000F9;" >
+<!ENTITY Uuml             "&#x000DC;" >
+<!ENTITY uuml             "&#x000FC;" >
+<!ENTITY Yacute           "&#x000DD;" >
+<!ENTITY yacute           "&#x000FD;" >
+<!ENTITY yuml             "&#x000FF;" >
+<!ENTITY amp              "&#38;#38;" >
+<!ENTITY apos             "&#x00027;" >
+<!ENTITY ast              "&#x0002A;" >
+<!ENTITY brvbar           "&#x000A6;" >
+<!ENTITY bsol             "&#x0005C;" >
+<!ENTITY cent             "&#x000A2;" >
+<!ENTITY colon            "&#x0003A;" >
+<!ENTITY comma            "&#x0002C;" >
+<!ENTITY commat           "&#x00040;" >
+<!ENTITY copy             "&#x000A9;" >
+<!ENTITY curren           "&#x000A4;" >
+<!ENTITY darr             "&#x02193;" >
+<!ENTITY deg              "&#x000B0;" >
+<!ENTITY divide           "&#x000F7;" >
+<!ENTITY dollar           "&#x00024;" >
+<!ENTITY equals           "&#x0003D;" >
+<!ENTITY excl             "&#x00021;" >
+<!ENTITY frac12           "&#x000BD;" >
+<!ENTITY frac14           "&#x000BC;" >
+<!ENTITY frac18           "&#x0215B;" >
+<!ENTITY frac34           "&#x000BE;" >
+<!ENTITY frac38           "&#x0215C;" >
+<!ENTITY frac58           "&#x0215D;" >
+<!ENTITY frac78           "&#x0215E;" >
+<!ENTITY gt               "&#x0003E;" >
+<!ENTITY half             "&#x000BD;" >
+<!ENTITY horbar           "&#x02015;" >
+<!ENTITY hyphen           "&#x02010;" >
+<!ENTITY iexcl            "&#x000A1;" >
+<!ENTITY iquest           "&#x000BF;" >
+<!ENTITY laquo            "&#x000AB;" >
+<!ENTITY larr             "&#x02190;" >
+<!ENTITY lcub             "&#x0007B;" >
+<!ENTITY ldquo            "&#x0201C;" >
+<!ENTITY lowbar           "&#x0005F;" >
+<!ENTITY lpar             "&#x00028;" >
+<!ENTITY lsqb             "&#x0005B;" >
+<!ENTITY lsquo            "&#x02018;" >
+<!ENTITY lt               "&#38;#60;" >
+<!ENTITY micro            "&#x000B5;" >
+<!ENTITY middot           "&#x000B7;" >
+<!ENTITY nbsp             "&#x000A0;" >
+<!ENTITY not              "&#x000AC;" >
+<!ENTITY num              "&#x00023;" >
+<!ENTITY ohm              "&#x02126;" >
+<!ENTITY ordf             "&#x000AA;" >
+<!ENTITY ordm             "&#x000BA;" >
+<!ENTITY para             "&#x000B6;" >
+<!ENTITY percnt           "&#x00025;" >
+<!ENTITY period           "&#x0002E;" >
+<!ENTITY plus             "&#x0002B;" >
+<!ENTITY plusmn           "&#x000B1;" >
+<!ENTITY pound            "&#x000A3;" >
+<!ENTITY quest            "&#x0003F;" >
+<!ENTITY quot             "&#x00022;" >
+<!ENTITY raquo            "&#x000BB;" >
+<!ENTITY rarr             "&#x02192;" >
+<!ENTITY rcub             "&#x0007D;" >
+<!ENTITY rdquo            "&#x0201D;" >
+<!ENTITY reg              "&#x000AE;" >
+<!ENTITY rpar             "&#x00029;" >
+<!ENTITY rsqb             "&#x0005D;" >
+<!ENTITY rsquo            "&#x02019;" >
+<!ENTITY sect             "&#x000A7;" >
+<!ENTITY semi             "&#x0003B;" >
+<!ENTITY shy              "&#x000AD;" >
+<!ENTITY sol              "&#x0002F;" >
+<!ENTITY sung             "&#x0266A;" >
+<!ENTITY sup1             "&#x000B9;" >
+<!ENTITY sup2             "&#x000B2;" >
+<!ENTITY sup3             "&#x000B3;" >
+<!ENTITY times            "&#x000D7;" >
+<!ENTITY trade            "&#x02122;" >
+<!ENTITY uarr             "&#x02191;" >
+<!ENTITY verbar           "&#x0007C;" >
+<!ENTITY yen              "&#x000A5;" >
+<!ENTITY blank            "&#x02423;" >
+<!ENTITY blk12            "&#x02592;" >
+<!ENTITY blk14            "&#x02591;" >
+<!ENTITY blk34            "&#x02593;" >
+<!ENTITY block            "&#x02588;" >
+<!ENTITY bull             "&#x02022;" >
+<!ENTITY caret            "&#x02041;" >
+<!ENTITY check            "&#x02713;" >
+<!ENTITY cir              "&#x025CB;" >
+<!ENTITY clubs            "&#x02663;" >
+<!ENTITY copysr           "&#x02117;" >
+<!ENTITY cross            "&#x02717;" >
+<!ENTITY Dagger           "&#x02021;" >
+<!ENTITY dagger           "&#x02020;" >
+<!ENTITY dash             "&#x02010;" >
+<!ENTITY diams            "&#x02666;" >
+<!ENTITY dlcrop           "&#x0230D;" >
+<!ENTITY drcrop           "&#x0230C;" >
+<!ENTITY dtri             "&#x025BF;" >
+<!ENTITY dtrif            "&#x025BE;" >
+<!ENTITY emsp             "&#x02003;" >
+<!ENTITY emsp13           "&#x02004;" >
+<!ENTITY emsp14           "&#x02005;" >
+<!ENTITY ensp             "&#x02002;" >
+<!ENTITY female           "&#x02640;" >
+<!ENTITY ffilig           "&#x0FB03;" >
+<!ENTITY fflig            "&#x0FB00;" >
+<!ENTITY ffllig           "&#x0FB04;" >
+<!ENTITY filig            "&#x0FB01;" >
+<!ENTITY flat             "&#x0266D;" >
+<!ENTITY fllig            "&#x0FB02;" >
+<!ENTITY frac13           "&#x02153;" >
+<!ENTITY frac15           "&#x02155;" >
+<!ENTITY frac16           "&#x02159;" >
+<!ENTITY frac23           "&#x02154;" >
+<!ENTITY frac25           "&#x02156;" >
+<!ENTITY frac35           "&#x02157;" >
+<!ENTITY frac45           "&#x02158;" >
+<!ENTITY frac56           "&#x0215A;" >
+<!ENTITY hairsp           "&#x0200A;" >
+<!ENTITY hearts           "&#x02665;" >
+<!ENTITY hellip           "&#x02026;" >
+<!ENTITY hybull           "&#x02043;" >
+<!ENTITY incare           "&#x02105;" >
+<!ENTITY ldquor           "&#x0201E;" >
+<!ENTITY lhblk            "&#x02584;" >
+<!ENTITY loz              "&#x025CA;" >
+<!ENTITY lozf             "&#x029EB;" >
+<!ENTITY lsquor           "&#x0201A;" >
+<!ENTITY ltri             "&#x025C3;" >
+<!ENTITY ltrif            "&#x025C2;" >
+<!ENTITY male             "&#x02642;" >
+<!ENTITY malt             "&#x02720;" >
+<!ENTITY marker           "&#x025AE;" >
+<!ENTITY mdash            "&#x02014;" >
+<!ENTITY mldr             "&#x02026;" >
+<!ENTITY natur            "&#x0266E;" >
+<!ENTITY ndash            "&#x02013;" >
+<!ENTITY nldr             "&#x02025;" >
+<!ENTITY numsp            "&#x02007;" >
+<!ENTITY phone            "&#x0260E;" >
+<!ENTITY puncsp           "&#x02008;" >
+<!ENTITY rdquor           "&#x0201D;" >
+<!ENTITY rect             "&#x025AD;" >
+<!ENTITY rsquor           "&#x02019;" >
+<!ENTITY rtri             "&#x025B9;" >
+<!ENTITY rtrif            "&#x025B8;" >
+<!ENTITY rx               "&#x0211E;" >
+<!ENTITY sext             "&#x02736;" >
+<!ENTITY sharp            "&#x0266F;" >
+<!ENTITY spades           "&#x02660;" >
+<!ENTITY squ              "&#x025A1;" >
+<!ENTITY squf             "&#x025AA;" >
+<!ENTITY star             "&#x02606;" >
+<!ENTITY starf            "&#x02605;" >
+<!ENTITY target           "&#x02316;" >
+<!ENTITY telrec           "&#x02315;" >
+<!ENTITY thinsp           "&#x02009;" >
+<!ENTITY uhblk            "&#x02580;" >
+<!ENTITY ulcrop           "&#x0230F;" >
+<!ENTITY urcrop           "&#x0230E;" >
+<!ENTITY utri             "&#x025B5;" >
+<!ENTITY utrif            "&#x025B4;" >
+<!ENTITY vellip           "&#x022EE;" >
+<!ENTITY % local.notation.class "">
+<!ENTITY % notation.class
+               "BMP| CGM-CHAR | CGM-BINARY | CGM-CLEAR | DITROFF | DVI
+               | EPS | EQN | FAX | GIF | GIF87a | GIF89a
+               | JPG | JPEG | IGES | PCX
+               | PIC | PNG | PS | SGML | TBL | TEX | TIFF | WMF | WPG
+                | SVG | PDF | SWF
+               | linespecific
+               %local.notation.class;">
+<!NOTATION BMP         PUBLIC
+"+//ISBN 0-7923-94.2-1::Graphic Notation//NOTATION Microsoft Windows bitmap//EN">
+<!NOTATION CGM-CHAR    PUBLIC "ISO 8632/2//NOTATION Character encoding//EN">
+<!NOTATION CGM-BINARY  PUBLIC "ISO 8632/3//NOTATION Binary encoding//EN">
+<!NOTATION CGM-CLEAR   PUBLIC "ISO 8632/4//NOTATION Clear text encoding//EN">
+<!NOTATION DITROFF     SYSTEM "DITROFF">
+<!NOTATION DVI         SYSTEM "DVI">
+<!NOTATION EPS         PUBLIC
+"+//ISBN 0-201-18127-4::Adobe//NOTATION PostScript Language Ref. Manual//EN">
+<!NOTATION EQN         SYSTEM "EQN">
+<!NOTATION FAX         PUBLIC
+"-//USA-DOD//NOTATION CCITT Group 4 Facsimile Type 1 Untiled Raster//EN">
+<!NOTATION GIF         SYSTEM "GIF">
+<!NOTATION GIF87a               PUBLIC
+"-//CompuServe//NOTATION Graphics Interchange Format 87a//EN">
+<!NOTATION GIF89a               PUBLIC
+"-//CompuServe//NOTATION Graphics Interchange Format 89a//EN">
+<!NOTATION JPG         SYSTEM "JPG">
+<!NOTATION JPEG                SYSTEM "JPG">
+<!NOTATION IGES                PUBLIC
+"-//USA-DOD//NOTATION (ASME/ANSI Y14.26M-1987) Initial Graphics Exchange Specification//EN">
+<!NOTATION PCX         PUBLIC
+"+//ISBN 0-7923-94.2-1::Graphic Notation//NOTATION ZSoft PCX bitmap//EN">
+<!NOTATION PIC         SYSTEM "PIC">
+<!NOTATION PNG          SYSTEM "http://www.w3.org/TR/REC-png">
+<!NOTATION PS          SYSTEM "PS">
+<!NOTATION SGML                PUBLIC
+"ISO 8879:1986//NOTATION Standard Generalized Markup Language//EN">
+<!NOTATION TBL         SYSTEM "TBL">
+<!NOTATION TEX         PUBLIC
+"+//ISBN 0-201-13448-9::Knuth//NOTATION The TeXbook//EN">
+<!NOTATION TIFF                SYSTEM "TIFF">
+<!NOTATION WMF         PUBLIC
+"+//ISBN 0-7923-94.2-1::Graphic Notation//NOTATION Microsoft Windows Metafile//EN">
+<!NOTATION WPG         SYSTEM "WPG">
+<!NOTATION SVG         SYSTEM "http://www.w3.org/TR/SVG/">
+<!NOTATION PDF         SYSTEM "http://www.adobe.com/products/acrobat/adobepdf.html">
+<!NOTATION SWF          SYSTEM "http://www.macromedia.com/software/flash">
+<!NOTATION linespecific        SYSTEM "linespecific">
+<!ENTITY euro "&#x20AC;">
+<!ENTITY % yesorno.attvals     "CDATA">
+<!ENTITY % formalobject.title.content "title, titleabbrev?">
+<!ENTITY % local.mediaobject.mix "">
+<!ENTITY % mediaobject.mix
+               "videoobject|audioobject|imageobject|textobject %local.mediaobject.mix;">
+<!ENTITY % idreq.attrib
+       "id             ID              #REQUIRED">
+<!ENTITY % lang.attrib
+       "lang           CDATA           #IMPLIED">
+<!ENTITY % remap.attrib
+       "remap          CDATA           #IMPLIED">
+<!ENTITY % role.attrib
+       "role           CDATA           #IMPLIED">
+<!ENTITY % xreflabel.attrib
+       "xreflabel      CDATA           #IMPLIED">
+<!ENTITY % revisionflag.attrib
+       "revisionflag   (changed
+                       |added
+                       |deleted
+                       |off)           #IMPLIED">
+<!ENTITY % dir.attrib
+       "dir            (ltr
+                       |rtl
+                       |lro
+                       |rlo)           #IMPLIED">
+<!ENTITY % xml-base.attrib
+       "xml:base       CDATA           #IMPLIED">
+<!ENTITY % label.attrib
+       "label          CDATA           #IMPLIED">
+<!ENTITY % linespecific.attrib
+       "format         NOTATION
+                       (linespecific)  'linespecific'
+         linenumbering (numbered|unnumbered)   #IMPLIED
+         continuation  (continues|restarts)    #IMPLIED
+         startinglinenumber    CDATA           #IMPLIED
+         language      CDATA                   #IMPLIED">
+<!ENTITY % linkendreq.attrib
+       "linkend        IDREF           #REQUIRED">
+<!ENTITY % local.mark.attrib "">
+<!ENTITY % mark.attrib
+       "mark           CDATA           #IMPLIED
+       %local.mark.attrib;"
+>
+<!ENTITY % moreinfo.attrib
+       "moreinfo       (refentry|none) 'none'">
+<!ENTITY % pagenum.attrib
+       "pagenum        CDATA           #IMPLIED">
+<!ENTITY % local.status.attrib "">
+<!ENTITY % status.attrib
+       "status         CDATA           #IMPLIED
+       %local.status.attrib;"
+>
+<!ENTITY % width.attrib
+       "width          CDATA           #IMPLIED">
+<!ENTITY % local.title.attrib "">
+<!ENTITY % title.role.attrib "%role.attrib;">
+<!ELEMENT title  (%title.char.mix;)*>
+<!ATTLIST title
+               %pagenum.attrib;
+               %common.attrib;
+               %title.role.attrib;
+               %local.title.attrib;
+>
+<!ENTITY % local.titleabbrev.attrib "">
+<!ENTITY % titleabbrev.role.attrib "%role.attrib;">
+<!ELEMENT titleabbrev  (%title.char.mix;)*>
+<!ATTLIST titleabbrev
+               %common.attrib;
+               %titleabbrev.role.attrib;
+               %local.titleabbrev.attrib;
+>
+<!ENTITY % local.subtitle.attrib "">
+<!ENTITY % subtitle.role.attrib "%role.attrib;">
+<!ELEMENT subtitle  (%title.char.mix;)*>
+<!ATTLIST subtitle
+               %common.attrib;
+               %subtitle.role.attrib;
+               %local.subtitle.attrib;
+>
+<!ENTITY % local.bibliomixed.attrib "">
+<!ENTITY % bibliomixed.role.attrib "%role.attrib;">
+<!ATTLIST bibliomixed
+               %common.attrib;
+               %bibliomixed.role.attrib;
+               %local.bibliomixed.attrib;
+>
+<!ENTITY % local.articleinfo.attrib "">
+<!ENTITY % articleinfo.role.attrib "%role.attrib;">
+<!ATTLIST articleinfo
+               %common.attrib;
+               %articleinfo.role.attrib;
+               %local.articleinfo.attrib;
+>
+<!ENTITY % bibliomset.role.attrib "%role.attrib;">
+<!ENTITY % local.bibliomset.attrib "">
+<!ELEMENT bibliomset  (#PCDATA | %bibliocomponent.mix; | bibliomset)*
+                      >
+<!ATTLIST bibliomset
+               relation        CDATA           #IMPLIED
+               %common.attrib;
+               %bibliomset.role.attrib;
+               %local.bibliomset.attrib;
+>
+<!ENTITY % local.bibliomisc.attrib "">
+<!ENTITY % bibliomisc.role.attrib "%role.attrib;">
+<!ELEMENT bibliomisc  (%para.char.mix;)*>
+<!ATTLIST bibliomisc
+               %common.attrib;
+               %bibliomisc.role.attrib;
+               %local.bibliomisc.attrib;
+>
+<!ENTITY % local.subjectset.attrib "">
+<!ENTITY % subjectset.role.attrib "%role.attrib;">
+<!ELEMENT subjectset  (subject+)>
+<!ATTLIST subjectset
+               scheme          NMTOKEN         #IMPLIED
+               %common.attrib;
+               %subjectset.role.attrib;
+               %local.subjectset.attrib;
+>
+<!ENTITY % local.subject.attrib "">
+<!ENTITY % subject.role.attrib "%role.attrib;">
+<!ELEMENT subject  (subjectterm+)>
+<!ATTLIST subject
+               weight          CDATA           #IMPLIED
+               %common.attrib;
+               %subject.role.attrib;
+               %local.subject.attrib;
+>
+<!ENTITY % local.subjectterm.attrib "">
+<!ENTITY % subjectterm.role.attrib "%role.attrib;">
+<!ELEMENT subjectterm  (#PCDATA)>
+<!ATTLIST subjectterm
+               %common.attrib;
+               %subjectterm.role.attrib;
+               %local.subjectterm.attrib;
+>
+<!ENTITY % local.keywordset.attrib "">
+<!ENTITY % keywordset.role.attrib "%role.attrib;">
+<!ELEMENT keywordset  (keyword+)>
+<!ATTLIST keywordset
+               %common.attrib;
+               %keywordset.role.attrib;
+               %local.keywordset.attrib;
+>
+<!ENTITY % local.keyword.attrib "">
+<!ENTITY % keyword.role.attrib "%role.attrib;">
+<!ELEMENT keyword  (#PCDATA)>
+<!ATTLIST keyword
+               %common.attrib;
+               %keyword.role.attrib;
+               %local.keyword.attrib;
+>
+<!ENTITY % local.sidebar.attrib "">
+<!ENTITY % sidebar.role.attrib "%role.attrib;">
+<!ATTLIST sidebar
+               %common.attrib;
+               %sidebar.role.attrib;
+               %local.sidebar.attrib;
+>
+<!ENTITY % local.abstract.attrib "">
+<!ENTITY % abstract.role.attrib "%role.attrib;">
+<!ELEMENT abstract  (title?, (%para.class;)+)>
+<!ATTLIST abstract
+               %common.attrib;
+               %abstract.role.attrib;
+               %local.abstract.attrib;
+>
+<!ENTITY % local.authorblurb.attrib "">
+<!ENTITY % authorblurb.role.attrib "%role.attrib;">
+<!ELEMENT authorblurb  (title?, (%para.class;)+)>
+<!ATTLIST authorblurb
+               %common.attrib;
+               %authorblurb.role.attrib;
+               %local.authorblurb.attrib;
+>
+<!ENTITY % local.blockquote.attrib "">
+<!ENTITY % blockquote.role.attrib "%role.attrib;">
+<!ATTLIST blockquote
+               %common.attrib;
+               %blockquote.role.attrib;
+               %local.blockquote.attrib;
+>
+<!ENTITY % local.attribution.attrib "">
+<!ENTITY % attribution.role.attrib "%role.attrib;">
+<!ELEMENT attribution  (%para.char.mix;)*>
+<!ATTLIST attribution
+               %common.attrib;
+               %attribution.role.attrib;
+               %local.attribution.attrib;
+>
+<!ENTITY % local.epigraph.attrib "">
+<!ENTITY % epigraph.role.attrib "%role.attrib;">
+<!ELEMENT epigraph  (attribution?, ((%para.class;)|literallayout)+)>
+<!ATTLIST epigraph
+               %common.attrib;
+               %epigraph.role.attrib;
+               %local.epigraph.attrib;
+>
+<!ENTITY % local.footnote.attrib "">
+<!ENTITY % footnote.role.attrib "%role.attrib;">
+<!ELEMENT footnote  ((%footnote.mix;)+)
+                      >
+<!ATTLIST footnote
+               %label.attrib;
+               %common.attrib;
+               %footnote.role.attrib;
+               %local.footnote.attrib;
+>
+<!ENTITY % local.para.attrib "">
+<!ENTITY % para.role.attrib "%role.attrib;">
+<!ATTLIST para
+               %common.attrib;
+               %para.role.attrib;
+               %local.para.attrib;
+>
+<!ENTITY % local.admon.attrib "">
+<!ENTITY % admon.role.attrib "%role.attrib;">
+<!ELEMENT note  (title?, (%admon.mix;)+)
+                      >
+<!ATTLIST note
+               %common.attrib;
+               %admon.role.attrib;
+               %local.admon.attrib;
+>
+<!ENTITY % local.itemizedlist.attrib "">
+<!ENTITY % itemizedlist.role.attrib "%role.attrib;">
+<!ATTLIST itemizedlist         spacing         (normal
+                               |compact)       #IMPLIED
+               %mark.attrib;
+               %common.attrib;
+               %itemizedlist.role.attrib;
+               %local.itemizedlist.attrib;
+>
+<!ENTITY % local.orderedlist.attrib "">
+<!ENTITY % orderedlist.role.attrib "%role.attrib;">
+<!ATTLIST orderedlist
+               numeration      (arabic
+                               |upperalpha
+                               |loweralpha
+                               |upperroman
+                               |lowerroman)    #IMPLIED
+               inheritnum      (inherit
+                               |ignore)        "ignore"
+               continuation    (continues
+                               |restarts)      "restarts"
+               spacing         (normal
+                               |compact)       #IMPLIED
+               %common.attrib;
+               %orderedlist.role.attrib;
+               %local.orderedlist.attrib;
+>
+<!ENTITY % local.listitem.attrib "">
+<!ENTITY % listitem.role.attrib "%role.attrib;">
+<!ELEMENT listitem  ((%component.mix;)+)>
+<!ATTLIST listitem
+               override        CDATA           #IMPLIED
+               %common.attrib;
+               %listitem.role.attrib;
+               %local.listitem.attrib;
+>
+<!ENTITY % local.variablelist.attrib "">
+<!ENTITY % variablelist.role.attrib "%role.attrib;">
+<!ATTLIST variablelist
+               termlength      CDATA           #IMPLIED
+               %common.attrib;
+               %variablelist.role.attrib;
+               %local.variablelist.attrib;
+>
+<!ENTITY % local.varlistentry.attrib "">
+<!ENTITY % varlistentry.role.attrib "%role.attrib;">
+<!ELEMENT varlistentry  (term+, listitem)>
+<!ATTLIST varlistentry
+               %common.attrib;
+               %varlistentry.role.attrib;
+               %local.varlistentry.attrib;
+>
+<!ENTITY % local.term.attrib "">
+<!ENTITY % term.role.attrib "%role.attrib;">
+<!ELEMENT term  (%para.char.mix;)*>
+<!ATTLIST term
+               %common.attrib;
+               %term.role.attrib;
+               %local.term.attrib;
+>
+<!ENTITY % local.example.attrib "">
+<!ENTITY % example.role.attrib "%role.attrib;">
+<!ATTLIST example
+               floatstyle      CDATA                   #IMPLIED
+               %label.attrib;
+               %width.attrib;
+               %common.attrib;
+               %example.role.attrib;
+               %local.example.attrib;
+>
+<!ENTITY % local.programlisting.attrib "">
+<!ENTITY % programlisting.role.attrib "%role.attrib;">
+<!ATTLIST programlisting
+               %width.attrib;
+               %linespecific.attrib;
+               %common.attrib;
+               %programlisting.role.attrib;
+               %local.programlisting.attrib;
+>
+<!ENTITY % local.literallayout.attrib "">
+<!ENTITY % literallayout.role.attrib "%role.attrib;">
+<!ATTLIST literallayout
+               %width.attrib;
+               %linespecific.attrib;
+               class   (monospaced|normal)     "normal"
+               %common.attrib;
+               %literallayout.role.attrib;
+               %local.literallayout.attrib;
+>
+<!ENTITY % local.figure.attrib "">
+<!ENTITY % figure.role.attrib "%role.attrib;">
+<!ATTLIST figure
+               float           %yesorno.attvals;       '0'
+               floatstyle      CDATA                   #IMPLIED
+               pgwide          %yesorno.attvals;       #IMPLIED
+               %label.attrib;
+               %common.attrib;
+               %figure.role.attrib;
+               %local.figure.attrib;
+>
+<!ENTITY % local.mediaobject.attrib "">
+<!ENTITY % mediaobject.role.attrib "%role.attrib;">
+<!ELEMENT mediaobject  (objectinfo?,
+                           (%mediaobject.mix;)+,
+                          caption?)>
+<!ATTLIST mediaobject
+               %common.attrib;
+               %mediaobject.role.attrib;
+               %local.mediaobject.attrib;
+>
+<!ENTITY % local.inlinemediaobject.attrib "">
+<!ENTITY % inlinemediaobject.role.attrib "%role.attrib;">
+<!ELEMENT inlinemediaobject  (objectinfo?,
+                                (%mediaobject.mix;)+)>
+<!ATTLIST inlinemediaobject
+               %common.attrib;
+               %inlinemediaobject.role.attrib;
+               %local.inlinemediaobject.attrib;
+>
+<!ENTITY % local.videoobject.attrib "">
+<!ENTITY % videoobject.role.attrib "%role.attrib;">
+<!ELEMENT videoobject  (objectinfo?, videodata)>
+<!ATTLIST videoobject
+               %common.attrib;
+               %videoobject.role.attrib;
+               %local.videoobject.attrib;
+>
+<!ENTITY % local.audioobject.attrib "">
+<!ENTITY % audioobject.role.attrib "%role.attrib;">
+<!ELEMENT audioobject  (objectinfo?, audiodata)>
+<!ATTLIST audioobject
+               %common.attrib;
+               %audioobject.role.attrib;
+               %local.audioobject.attrib;
+>
+<!ENTITY % local.imageobject.attrib "">
+<!ENTITY % imageobject.role.attrib "%role.attrib;">
+<!ELEMENT imageobject  (objectinfo?, imagedata)>
+<!ATTLIST imageobject
+               %common.attrib;
+               %imageobject.role.attrib;
+               %local.imageobject.attrib;
+>
+<!ENTITY % local.textobject.attrib "">
+<!ENTITY % textobject.role.attrib "%role.attrib;">
+<!ELEMENT textobject  (objectinfo?, (phrase|textdata|(%textobject.mix;)+))>
+<!ATTLIST textobject
+               %common.attrib;
+               %textobject.role.attrib;
+               %local.textobject.attrib;
+>
+<!ENTITY % local.objectinfo.attrib "">
+<!ENTITY % objectinfo.role.attrib "%role.attrib;">
+<!ATTLIST objectinfo
+               %common.attrib;
+               %objectinfo.role.attrib;
+               %local.objectinfo.attrib;
+>
+<!ENTITY % local.objectdata.attrib "">
+<!ENTITY % objectdata.attrib
+       "
+       entityref       ENTITY          #IMPLIED
+       fileref         CDATA           #IMPLIED
+       format          (%notation.class;)
+                                       #IMPLIED
+       srccredit       CDATA           #IMPLIED
+       %local.objectdata.attrib;"
+>
+<!ENTITY % local.videodata.attrib "">
+<!ENTITY % videodata.role.attrib "%role.attrib;">
+<!ELEMENT videodata  EMPTY>
+<!ATTLIST videodata
+       width           CDATA           #IMPLIED
+       contentwidth    CDATA           #IMPLIED
+       depth           CDATA           #IMPLIED
+       contentdepth    CDATA           #IMPLIED
+       align           (left
+                       |right
+                       |center)        #IMPLIED
+       valign          (top
+                       |middle
+                       |bottom)        #IMPLIED
+       scale           CDATA           #IMPLIED
+       scalefit        %yesorno.attvals;
+                                       #IMPLIED
+               %objectdata.attrib;
+               %common.attrib;
+               %videodata.role.attrib;
+               %local.videodata.attrib;
+>
+<!ENTITY % local.audiodata.attrib "">
+<!ENTITY % audiodata.role.attrib "%role.attrib;">
+<!ELEMENT audiodata  EMPTY>
+<!ATTLIST audiodata
+               %objectdata.attrib;
+               %common.attrib;
+               %audiodata.role.attrib;
+               %local.audiodata.attrib;
+>
+<!ENTITY % local.imagedata.attrib "">
+<!ENTITY % imagedata.role.attrib "%role.attrib;">
+<!ELEMENT imagedata  EMPTY>
+<!ATTLIST imagedata
+       width           CDATA           #IMPLIED
+       contentwidth    CDATA           #IMPLIED
+       depth           CDATA           #IMPLIED
+       contentdepth    CDATA           #IMPLIED
+       align           (left
+                       |right
+                       |center)        #IMPLIED
+       valign          (top
+                       |middle
+                       |bottom)        #IMPLIED
+       scale           CDATA           #IMPLIED
+       scalefit        %yesorno.attvals;
+                                       #IMPLIED
+               %objectdata.attrib;
+               %common.attrib;
+               %imagedata.role.attrib;
+               %local.imagedata.attrib;
+>
+<!ENTITY % local.textdata.attrib "">
+<!ENTITY % textdata.role.attrib "%role.attrib;">
+<!ELEMENT textdata  EMPTY>
+<!ATTLIST textdata
+               encoding        CDATA   #IMPLIED
+               %objectdata.attrib;
+               %common.attrib;
+               %textdata.role.attrib;
+               %local.textdata.attrib;
+>
+<!ENTITY % html.coreattrs
+ "id          ID             #IMPLIED
+  class       CDATA          #IMPLIED
+  style       CDATA          #IMPLIED
+  title       CDATA         #IMPLIED"
+  >
+<!ENTITY % i18n
+ "xml:lang    NMTOKEN        #IMPLIED"
+  >
+<!ENTITY % events
+ "onclick     CDATA       #IMPLIED
+  ondblclick  CDATA       #IMPLIED
+  onmousedown CDATA       #IMPLIED
+  onmouseup   CDATA       #IMPLIED
+  onmouseover CDATA       #IMPLIED
+  onmousemove CDATA       #IMPLIED
+  onmouseout  CDATA       #IMPLIED
+  onkeypress  CDATA       #IMPLIED
+  onkeydown   CDATA       #IMPLIED
+  onkeyup     CDATA       #IMPLIED"
+  >
+<!ENTITY % attrs "%html.coreattrs; %i18n; %events;">
+<!ENTITY % cellhalign
+  "align      (left|center|right|justify|char) #IMPLIED
+   char       CDATA    #IMPLIED
+   charoff    CDATA       #IMPLIED"
+  >
+<!ENTITY % cellvalign
+  "valign     (top|middle|bottom|baseline) #IMPLIED"
+  >
+<!ELEMENT colgroup (col)*>
+<!ELEMENT col      EMPTY>
+<!ELEMENT tr       (th|td)+>
+<!ELEMENT th       (%para.char.mix; | %tabentry.mix;)*>
+<!ELEMENT td       (%para.char.mix; | %tabentry.mix;)*>
+<!ATTLIST colgroup
+  %attrs;
+  span        CDATA       "1"
+  width       CDATA  #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+<!ATTLIST col
+  %attrs;
+  span        CDATA       "1"
+  width       CDATA  #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+<!ATTLIST tr
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  bgcolor     CDATA        #IMPLIED
+  >
+<!ATTLIST th
+  %attrs;
+  abbr        CDATA         #IMPLIED
+  axis        CDATA          #IMPLIED
+  headers     IDREFS         #IMPLIED
+  scope       (row|col|rowgroup|colgroup)   #IMPLIED
+  rowspan     CDATA       "1"
+  colspan     CDATA       "1"
+  %cellhalign;
+  %cellvalign;
+  nowrap      (nowrap)       #IMPLIED
+  bgcolor     CDATA         #IMPLIED
+  width       CDATA       #IMPLIED
+  height      CDATA       #IMPLIED
+  >
+<!ATTLIST td
+  %attrs;
+  abbr        CDATA         #IMPLIED
+  axis        CDATA          #IMPLIED
+  headers     IDREFS         #IMPLIED
+  scope       (row|col|rowgroup|colgroup)   #IMPLIED
+  rowspan     CDATA       "1"
+  colspan     CDATA       "1"
+  %cellhalign;
+  %cellvalign;
+  nowrap      (nowrap)       #IMPLIED
+  bgcolor     CDATA         #IMPLIED
+  width       CDATA       #IMPLIED
+  height      CDATA       #IMPLIED
+  >
+<!ENTITY % tables.role.attrib "%role.attrib;">
+<!ENTITY % bodyatt "
+               floatstyle      CDATA                   #IMPLIED
+                %label.attrib;"
+>
+<!ENTITY % secur "
+       %common.attrib;
+       class       CDATA          #IMPLIED
+       style       CDATA          #IMPLIED
+       title       CDATA         #IMPLIED
+       %i18n;
+       %events;
+       %tables.role.attrib;">
+<!ENTITY % common.table.attribs
+       "%bodyatt;
+       %secur;">
+<!ENTITY % tbl.table.att        '
+    tabstyle    CDATA           #IMPLIED
+    tocentry    %yesorno.attvals;       #IMPLIED
+    shortentry  %yesorno.attvals;       #IMPLIED
+    orient      (port|land)     #IMPLIED
+    pgwide      %yesorno.attvals;       #IMPLIED 
+    summary     CDATA          #IMPLIED
+    width       CDATA        #IMPLIED
+    border      CDATA        #IMPLIED
+    rules       (none | groups | rows | cols | all)      #IMPLIED
+    cellspacing CDATA        #IMPLIED
+    cellpadding CDATA        #IMPLIED
+    align       (left|center|right)   #IMPLIED
+    bgcolor     CDATA         #IMPLIED
+'>
+<!ENTITY % tbl.frame.attval "void|above|below|hsides|lhs|rhs|vsides|box|border|
+top|bottom|topbot|all|sides|none">
+<!ENTITY % tbl.entry.mdl "%para.char.mix; | %tabentry.mix;">
+<!ENTITY % tbl.hdft.mdl        "(tr+|(colspec*,row+))">
+<!ENTITY % tbl.tbody.mdl       "(tr+|row+)">
+<!ENTITY % yesorno 'CDATA'>
+<!ENTITY % tbl.tgroup.mdl       "colspec*,spanspec*,thead?,tfoot?,tbody">
+<!ENTITY % tbl.tgroup.att       '
+    tgroupstyle CDATA           #IMPLIED '>
+<!ENTITY % tbl.row.mdl          "(entry|entrytbl)+">
+<!ENTITY % tbl.entrytbl.mdl     "colspec*,spanspec*,thead?,tbody">
+<!ELEMENT table  (%tbl.table.mdl;)>
+<!ATTLIST table
+        frame           (%tbl.frame.attval;)                    #IMPLIED
+        colsep          %yesorno;                               #IMPLIED
+        rowsep          %yesorno;                               #IMPLIED
+        %tbl.table.att;
+        %bodyatt;
+        %secur;
+>
+<!ELEMENT tgroup  (%tbl.tgroup.mdl;) >
+<!ATTLIST tgroup
+        cols            CDATA                                   #REQUIRED
+        %tbl.tgroup.att;
+        colsep          %yesorno;                               #IMPLIED
+        rowsep          %yesorno;                               #IMPLIED
+        align           (left|right|center|justify|char)        #IMPLIED
+        char            CDATA                                   #IMPLIED
+        charoff         CDATA                                   #IMPLIED
+        %secur;
+>
+<!ELEMENT colspec  EMPTY >
+<!ATTLIST colspec
+        colnum          CDATA                                   #IMPLIED
+        colname         CDATA                                   #IMPLIED
+        colwidth        CDATA                                   #IMPLIED
+        colsep          %yesorno;                               #IMPLIED
+        rowsep          %yesorno;                               #IMPLIED
+        align           (left|right|center|justify|char)        #IMPLIED
+        char            CDATA                                   #IMPLIED
+        charoff         CDATA                                   #IMPLIED
+>
+<!ELEMENT spanspec  EMPTY >
+<!ATTLIST spanspec
+        namest          CDATA                                   #REQUIRED
+        nameend         CDATA                                   #REQUIRED
+        spanname        CDATA                                   #REQUIRED
+        colsep          %yesorno;                               #IMPLIED
+        rowsep          %yesorno;                               #IMPLIED
+        align           (left|right|center|justify|char)        #IMPLIED
+        char            CDATA                                   #IMPLIED
+        charoff         CDATA                                   #IMPLIED
+>
+<!ELEMENT thead  (%tbl.hdft.mdl;)>
+<!ATTLIST thead
+        valign          (top|middle|bottom)                     #IMPLIED
+        %secur;
+>
+<!ELEMENT tfoot  (%tbl.hdft.mdl;)>
+<!ATTLIST tfoot
+        valign          (top|middle|bottom)                     #IMPLIED
+        %secur;
+>
+<!ELEMENT tbody  (%tbl.tbody.mdl;)>
+<!ATTLIST tbody
+        valign          (top|middle|bottom)                     #IMPLIED
+        %secur;
+>
+<!ELEMENT row  (%tbl.row.mdl;)>
+<!ATTLIST row
+        rowsep          %yesorno;                               #IMPLIED
+        valign          (top|middle|bottom)                     #IMPLIED
+        %secur;
+>
+<!ELEMENT entrytbl  (%tbl.entrytbl.mdl;)>
+<!ATTLIST entrytbl
+        cols            CDATA                                   #REQUIRED
+        %tbl.tgroup.att;
+        colname         CDATA                                   #IMPLIED
+        spanname        CDATA                                   #IMPLIED
+        namest          CDATA                                   #IMPLIED
+        nameend         CDATA                                   #IMPLIED
+        colsep          %yesorno;                               #IMPLIED
+        rowsep          %yesorno;                               #IMPLIED
+        align           (left|right|center|justify|char)        #IMPLIED
+        char            CDATA                                   #IMPLIED
+        charoff         CDATA                                   #IMPLIED
+        %secur;
+>
+<!ELEMENT entry  (%tbl.entry.mdl;)*>
+<!ATTLIST entry
+        colname         CDATA                                   #IMPLIED
+        namest          CDATA                                   #IMPLIED
+        nameend         CDATA                                   #IMPLIED
+        spanname        CDATA                                   #IMPLIED
+        morerows        CDATA                                   #IMPLIED
+        colsep          %yesorno;                               #IMPLIED
+        rowsep          %yesorno;                               #IMPLIED
+        align           (left|right|center|justify|char)        #IMPLIED
+        char            CDATA                                   #IMPLIED
+        charoff         CDATA                                   #IMPLIED
+        rotate          %yesorno;                               #IMPLIED
+        valign          (top|middle|bottom)                     #IMPLIED
+        %secur;
+>
+<!ENTITY % local.informaltable.attrib "">
+<!ATTLIST informaltable
+               frame           (%tbl.frame.attval;)    #IMPLIED
+               colsep          %yesorno.attvals;       #IMPLIED
+               rowsep          %yesorno.attvals;       #IMPLIED
+               %common.table.attribs;
+               %tbl.table.att;
+               %local.informaltable.attrib;
+>
+<!ENTITY % local.caption.attrib "">
+<!ENTITY % caption.role.attrib "%role.attrib;">
+<!ELEMENT caption  (#PCDATA | %textobject.mix;)*>
+<!ENTITY % caption.attlist.content "
+       %lang.attrib;
+       %remap.attrib;
+       %xreflabel.attrib;
+       %revisionflag.attrib;
+       %effectivity.attrib;
+       %dir.attrib;
+       %xml-base.attrib;
+       %local.common.attrib;
+               %caption.role.attrib;
+               %attrs;
+               align   (top|bottom|left|right) #IMPLIED
+               %local.caption.attrib;
+">
+<!ATTLIST caption %caption.attlist.content;>
+<!ENTITY % local.affiliation.attrib "">
+<!ENTITY % affiliation.role.attrib "%role.attrib;">
+<!ATTLIST affiliation
+               %common.attrib;
+               %affiliation.role.attrib;
+               %local.affiliation.attrib;
+>
+<!ENTITY % local.jobtitle.attrib "">
+<!ENTITY % jobtitle.role.attrib "%role.attrib;">
+<!ELEMENT jobtitle  (%docinfo.char.mix;)*>
+<!ATTLIST jobtitle
+               %common.attrib;
+               %jobtitle.role.attrib;
+               %local.jobtitle.attrib;
+>
+<!ENTITY % local.author.attrib "">
+<!ENTITY % author.role.attrib "%role.attrib;">
+<!ATTLIST author
+               %common.attrib;
+               %author.role.attrib;
+               %local.author.attrib;
+>
+<!ENTITY % local.authorgroup.attrib "">
+<!ENTITY % authorgroup.role.attrib "%role.attrib;">
+<!ATTLIST authorgroup
+               %common.attrib;
+               %authorgroup.role.attrib;
+               %local.authorgroup.attrib;
+>
+<!ENTITY % local.authorinitials.attrib "">
+<!ENTITY % authorinitials.role.attrib "%role.attrib;">
+<!ELEMENT authorinitials  (%docinfo.char.mix;)*>
+<!ATTLIST authorinitials
+               %common.attrib;
+               %authorinitials.role.attrib;
+               %local.authorinitials.attrib;
+>
+<!ENTITY % local.copyright.attrib "">
+<!ENTITY % copyright.role.attrib "%role.attrib;">
+<!ELEMENT copyright  (year+, holder*)>
+<!ATTLIST copyright
+               %common.attrib;
+               %copyright.role.attrib;
+               %local.copyright.attrib;
+>
+<!ENTITY % local.year.attrib "">
+<!ENTITY % year.role.attrib "%role.attrib;">
+<!ELEMENT year  (%docinfo.char.mix;)*>
+<!ATTLIST year
+               %common.attrib;
+               %year.role.attrib;
+               %local.year.attrib;
+>
+<!ENTITY % local.holder.attrib "">
+<!ENTITY % holder.role.attrib "%role.attrib;">
+<!ELEMENT holder  (%docinfo.char.mix;)*>
+<!ATTLIST holder
+               %common.attrib;
+               %holder.role.attrib;
+               %local.holder.attrib;
+>
+<!ENTITY % local.corpauthor.attrib "">
+<!ENTITY % corpauthor.role.attrib "%role.attrib;">
+<!ELEMENT corpauthor  (%docinfo.char.mix;)*>
+<!ATTLIST corpauthor
+               %common.attrib;
+               %corpauthor.role.attrib;
+               %local.corpauthor.attrib;
+>
+<!ENTITY % local.date.attrib "">
+<!ENTITY % date.role.attrib "%role.attrib;">
+<!ELEMENT date  (%docinfo.char.mix;)*>
+<!ATTLIST date
+               %common.attrib;
+               %date.role.attrib;
+               %local.date.attrib;
+>
+<!ENTITY % local.edition.attrib "">
+<!ENTITY % edition.role.attrib "%role.attrib;">
+<!ELEMENT edition  (%docinfo.char.mix;)*>
+<!ATTLIST edition
+               %common.attrib;
+               %edition.role.attrib;
+               %local.edition.attrib;
+>
+<!ENTITY % local.editor.attrib "">
+<!ENTITY % editor.role.attrib "%role.attrib;">
+<!ATTLIST editor
+               %common.attrib;
+               %editor.role.attrib;
+               %local.editor.attrib;
+>
+<!ENTITY % local.issuenum.attrib "">
+<!ENTITY % issuenum.role.attrib "%role.attrib;">
+<!ELEMENT issuenum  (%docinfo.char.mix;)*>
+<!ATTLIST issuenum
+               %common.attrib;
+               %issuenum.role.attrib;
+               %local.issuenum.attrib;
+>
+<!ENTITY % local.legalnotice.attrib "">
+<!ENTITY % legalnotice.role.attrib "%role.attrib;">
+<!ATTLIST legalnotice
+               %common.attrib;
+               %legalnotice.role.attrib;
+               %local.legalnotice.attrib;
+>
+<!ENTITY % local.orgname.attrib "">
+<!ENTITY % orgname.role.attrib "%role.attrib;">
+<!ELEMENT orgname  (%docinfo.char.mix;)*>
+<!ATTLIST orgname
+               %common.attrib;
+               class   (corporation|nonprofit|consortium|informal|other)       #IMPLIED
+               otherclass      CDATA                   #IMPLIED
+               %orgname.role.attrib;
+               %local.orgname.attrib;
+>
+<!ENTITY % local.othercredit.attrib "">
+<!ENTITY % othercredit.role.attrib "%role.attrib;">
+<!ATTLIST othercredit
+               class   (graphicdesigner
+                       |productioneditor
+                       |copyeditor
+                       |technicaleditor
+                       |translator
+                       |other)                 #IMPLIED
+               %common.attrib;
+               %othercredit.role.attrib;
+               %local.othercredit.attrib;
+>
+<!ENTITY % local.firstname.attrib "">
+<!ENTITY % firstname.role.attrib "%role.attrib;">
+<!ELEMENT firstname  (%docinfo.char.mix;)*>
+<!ATTLIST firstname
+               %common.attrib;
+               %firstname.role.attrib;
+               %local.firstname.attrib;
+>
+<!ENTITY % local.honorific.attrib "">
+<!ENTITY % honorific.role.attrib "%role.attrib;">
+<!ELEMENT honorific  (%docinfo.char.mix;)*>
+<!ATTLIST honorific
+               %common.attrib;
+               %honorific.role.attrib;
+               %local.honorific.attrib;
+>
+<!ENTITY % local.lineage.attrib "">
+<!ENTITY % lineage.role.attrib "%role.attrib;">
+<!ELEMENT lineage  (%docinfo.char.mix;)*>
+<!ATTLIST lineage
+               %common.attrib;
+               %lineage.role.attrib;
+               %local.lineage.attrib;
+>
+<!ENTITY % local.othername.attrib "">
+<!ENTITY % othername.role.attrib "%role.attrib;">
+<!ELEMENT othername  (%docinfo.char.mix;)*>
+<!ATTLIST othername
+               %common.attrib;
+               %othername.role.attrib;
+               %local.othername.attrib;
+>
+<!ENTITY % local.surname.attrib "">
+<!ENTITY % surname.role.attrib "%role.attrib;">
+<!ELEMENT surname  (%docinfo.char.mix;)*>
+<!ATTLIST surname
+               %common.attrib;
+               %surname.role.attrib;
+               %local.surname.attrib;
+>
+<!ENTITY % local.pubdate.attrib "">
+<!ENTITY % pubdate.role.attrib "%role.attrib;">
+<!ELEMENT pubdate  (%docinfo.char.mix;)*>
+<!ATTLIST pubdate
+               %common.attrib;
+               %pubdate.role.attrib;
+               %local.pubdate.attrib;
+>
+<!ENTITY % local.publishername.attrib "">
+<!ENTITY % publishername.role.attrib "%role.attrib;">
+<!ELEMENT publishername  (%docinfo.char.mix;)*>
+<!ATTLIST publishername
+               %common.attrib;
+               %publishername.role.attrib;
+               %local.publishername.attrib;
+>
+<!ENTITY % local.releaseinfo.attrib "">
+<!ENTITY % releaseinfo.role.attrib "%role.attrib;">
+<!ELEMENT releaseinfo  (%docinfo.char.mix;)*>
+<!ATTLIST releaseinfo
+               %common.attrib;
+               %releaseinfo.role.attrib;
+               %local.releaseinfo.attrib;
+>
+<!ENTITY % local.revhistory.attrib "">
+<!ENTITY % revhistory.role.attrib "%role.attrib;">
+<!ELEMENT revhistory  (revision+)>
+<!ATTLIST revhistory
+               %common.attrib;
+               %revhistory.role.attrib;
+               %local.revhistory.attrib;
+>
+<!ENTITY % local.revision.attrib "">
+<!ENTITY % revision.role.attrib "%role.attrib;">
+<!ELEMENT revision  (revnumber, date, (author|authorinitials)*,
+                    (revremark|revdescription)?)>
+<!ATTLIST revision
+               %common.attrib;
+               %revision.role.attrib;
+               %local.revision.attrib;
+>
+<!ENTITY % local.revnumber.attrib "">
+<!ENTITY % revnumber.role.attrib "%role.attrib;">
+<!ELEMENT revnumber  (%docinfo.char.mix;)*>
+<!ATTLIST revnumber
+               %common.attrib;
+               %revnumber.role.attrib;
+               %local.revnumber.attrib;
+>
+<!ENTITY % local.revremark.attrib "">
+<!ENTITY % revremark.role.attrib "%role.attrib;">
+<!ELEMENT revremark  (%docinfo.char.mix;)*>
+<!ATTLIST revremark
+               %common.attrib;
+               %revremark.role.attrib;
+               %local.revremark.attrib;
+>
+<!ENTITY % local.revdescription.attrib "">
+<!ENTITY % revdescription.role.attrib "%role.attrib;">
+<!ELEMENT revdescription  ((%revdescription.mix;)+)>
+<!ATTLIST revdescription
+               %common.attrib;
+               %revdescription.role.attrib;
+               %local.revdescription.attrib;
+>
+<!ENTITY % local.volumenum.attrib "">
+<!ENTITY % volumenum.role.attrib "%role.attrib;">
+<!ELEMENT volumenum  (%docinfo.char.mix;)*>
+<!ATTLIST volumenum
+               %common.attrib;
+               %volumenum.role.attrib;
+               %local.volumenum.attrib;
+>
+<!ENTITY % local.command.attrib "">
+<!ENTITY % command.role.attrib "%role.attrib;">
+<!ELEMENT command  (%cptr.char.mix;)*>
+<!ATTLIST command
+               %moreinfo.attrib;
+               %common.attrib;
+               %command.role.attrib;
+               %local.command.attrib;
+>
+<!ENTITY % local.computeroutput.attrib "">
+<!ENTITY % computeroutput.role.attrib "%role.attrib;">
+<!ATTLIST computeroutput
+               %moreinfo.attrib;
+               %common.attrib;
+               %computeroutput.role.attrib;
+               %local.computeroutput.attrib;
+>
+<!ENTITY % local.email.attrib "">
+<!ENTITY % email.role.attrib "%role.attrib;">
+<!ELEMENT email  (%docinfo.char.mix;)*>
+<!ATTLIST email
+               %common.attrib;
+               %email.role.attrib;
+               %local.email.attrib;
+>
+<!ENTITY % local.filename.attrib "">
+<!ENTITY % filename.role.attrib "%role.attrib;">
+<!ELEMENT filename  (%cptr.char.mix;)*>
+<!ATTLIST filename
+               class           (headerfile
+                                |partition
+                                |devicefile
+                                |libraryfile
+                                |directory
+                                |extension
+                               |symlink)       #IMPLIED
+               path            CDATA           #IMPLIED
+               %moreinfo.attrib;
+               %common.attrib;
+               %filename.role.attrib;
+               %local.filename.attrib;
+>
+<!ENTITY % local.lineannotation.attrib "">
+<!ENTITY % lineannotation.role.attrib "%role.attrib;">
+<!ELEMENT lineannotation  (%para.char.mix;)*>
+<!ATTLIST lineannotation
+               %common.attrib;
+               %lineannotation.role.attrib;
+               %local.lineannotation.attrib;
+>
+<!ENTITY % local.literal.attrib "">
+<!ENTITY % literal.role.attrib "%role.attrib;">
+<!ELEMENT literal  (%cptr.char.mix;)*>
+<!ATTLIST literal
+               %moreinfo.attrib;
+               %common.attrib;
+               %literal.role.attrib;
+               %local.literal.attrib;
+>
+<!ENTITY % local.option.attrib "">
+<!ENTITY % option.role.attrib "%role.attrib;">
+<!ELEMENT option  (%cptr.char.mix;)*>
+<!ATTLIST option
+               %common.attrib;
+               %option.role.attrib;
+               %local.option.attrib;
+>
+<!ENTITY % local.replaceable.attrib "">
+<!ENTITY % replaceable.role.attrib "%role.attrib;">
+<!ATTLIST replaceable
+               class           (command
+                               |function
+                               |option
+                               |parameter)     #IMPLIED
+               %common.attrib;
+               %replaceable.role.attrib;
+               %local.replaceable.attrib;
+>
+<!ENTITY % local.systemitem.attrib "">
+<!ENTITY % systemitem.role.attrib "%role.attrib;">
+<!ATTLIST systemitem
+               class   (constant
+                       |event
+                       |eventhandler
+                       |domainname
+                       |fqdomainname
+                       |ipaddress
+                       |netmask
+                       |etheraddress
+                       |groupname
+                       |library
+                       |macro
+                       |osname
+                       |filesystem
+                       |resource
+                       |systemname
+                       |username
+                       |newsgroup
+                        |process
+                        |service
+                        |server
+                        |daemon)       #IMPLIED
+               %moreinfo.attrib;
+               %common.attrib;
+               %systemitem.role.attrib;
+               %local.systemitem.attrib;
+>
+<!ENTITY % local.userinput.attrib "">
+<!ENTITY % userinput.role.attrib "%role.attrib;">
+<!ATTLIST userinput
+               %moreinfo.attrib;
+               %common.attrib;
+               %userinput.role.attrib;
+               %local.userinput.attrib;
+>
+<!ENTITY % local.abbrev.attrib "">
+<!ENTITY % abbrev.role.attrib "%role.attrib;">
+<!ELEMENT abbrev  (%word.char.mix;)*>
+<!ATTLIST abbrev
+               %common.attrib;
+               %abbrev.role.attrib;
+               %local.abbrev.attrib;
+>
+<!ENTITY % local.acronym.attrib "">
+<!ENTITY % acronym.role.attrib "%role.attrib;">
+<!ELEMENT acronym  (%word.char.mix;)*
+               >
+<!ATTLIST acronym
+               %common.attrib;
+               %acronym.role.attrib;
+               %local.acronym.attrib;
+>
+<!ENTITY % local.citetitle.attrib "">
+<!ENTITY % citetitle.role.attrib "%role.attrib;">
+<!ELEMENT citetitle  (%para.char.mix;)*>
+<!ATTLIST citetitle
+               pubwork         (article
+                               |book
+                               |chapter
+                               |part
+                               |refentry
+                               |section
+                               |journal
+                               |series
+                               |set
+                               |manuscript
+                               |cdrom
+                               |dvd
+                               |wiki
+                               |gopher
+                               |bbs
+                                |emailmessage
+                                |webpage
+                                |newsposting)  #IMPLIED
+               %common.attrib;
+               %citetitle.role.attrib;
+               %local.citetitle.attrib;
+>
+<!ENTITY % local.emphasis.attrib "">
+<!ENTITY % emphasis.role.attrib "%role.attrib;">
+<!ELEMENT emphasis  (%para.char.mix;)*>
+<!ATTLIST emphasis
+               %common.attrib;
+               %emphasis.role.attrib;
+               %local.emphasis.attrib;
+>
+<!ENTITY % local.phrase.attrib "">
+<!ENTITY % phrase.role.attrib "%role.attrib;">
+<!ELEMENT phrase  (%para.char.mix;)*>
+<!ATTLIST phrase
+               %common.attrib;
+               %phrase.role.attrib;
+               %local.phrase.attrib;
+>
+<!ENTITY % local.quote.attrib "">
+<!ENTITY % quote.role.attrib "%role.attrib;">
+<!ELEMENT quote  (%para.char.mix;)*>
+<!ATTLIST quote
+               %common.attrib;
+               %quote.role.attrib;
+               %local.quote.attrib;
+>
+<!ENTITY % local.ssscript.attrib "">
+<!ENTITY % ssscript.role.attrib "%role.attrib;">
+<!ATTLIST subscript
+               %common.attrib;
+               %ssscript.role.attrib;
+               %local.ssscript.attrib;
+>
+<!ATTLIST superscript
+               %common.attrib;
+               %ssscript.role.attrib;
+               %local.ssscript.attrib;
+>
+<!ENTITY % local.trademark.attrib "">
+<!ENTITY % trademark.role.attrib "%role.attrib;">
+<!ATTLIST trademark
+               class           (service
+                               |trade
+                               |registered
+                               |copyright)     'trade'
+               %common.attrib;
+               %trademark.role.attrib;
+               %local.trademark.attrib;
+>
+<!ENTITY % local.link.attrib "">
+<!ENTITY % link.role.attrib "%role.attrib;">
+<!ELEMENT link  (%para.char.mix;)*
+               >
+<!ATTLIST link
+               endterm         IDREF           #IMPLIED
+               xrefstyle       CDATA           #IMPLIED
+               type            CDATA           #IMPLIED
+               %linkendreq.attrib;
+               %common.attrib;
+               %link.role.attrib;
+               %local.link.attrib;
+>
+<!ENTITY % local.ulink.attrib "">
+<!ENTITY % ulink.role.attrib "%role.attrib;">
+<!ELEMENT ulink  (%para.char.mix;)*
+               >
+<!ATTLIST ulink
+               url             CDATA           #REQUIRED
+               type            CDATA           #IMPLIED
+               xrefstyle       CDATA           #IMPLIED
+               %common.attrib;
+               %ulink.role.attrib;
+               %local.ulink.attrib;
+>
+<!ENTITY % local.footnoteref.attrib "">
+<!ENTITY % footnoteref.role.attrib "%role.attrib;">
+<!ELEMENT footnoteref  EMPTY>
+<!ATTLIST footnoteref
+               %linkendreq.attrib;             %label.attrib;
+               %common.attrib;
+               %footnoteref.role.attrib;
+               %local.footnoteref.attrib;
+>
+<!ENTITY % local.xref.attrib "">
+<!ENTITY % xref.role.attrib "%role.attrib;">
+<!ELEMENT xref  EMPTY>
+<!ATTLIST xref
+               endterm         IDREF           #IMPLIED
+               xrefstyle       CDATA           #IMPLIED
+               %common.attrib;
+               %linkendreq.attrib;
+               %xref.role.attrib;
+               %local.xref.attrib;
+>
+<!ENTITY % local.anchor.attrib "">
+<!ENTITY % anchor.role.attrib "%role.attrib;">
+<!ELEMENT anchor  EMPTY>
+<!ATTLIST anchor
+               %idreq.attrib;          %pagenum.attrib;                %remap.attrib;
+               %xreflabel.attrib;
+               %revisionflag.attrib;
+               %effectivity.attrib;
+               %anchor.role.attrib;
+               %local.anchor.attrib;
+>
+<!ENTITY % local.appendix.class "">
+<!ENTITY % appendix.class      "appendix %local.appendix.class;">
+<!ENTITY % div.title.content
+       "title, subtitle?, titleabbrev?">
+<!ENTITY % bookcomponent.title.content
+       "title, subtitle?, titleabbrev?">
+<!ENTITY % sect.title.content
+       "title, subtitle?, titleabbrev?">
+<!ENTITY % local.appendix.attrib "">
+<!ENTITY % appendix.role.attrib "%role.attrib;">
+<!ATTLIST appendix
+               %label.attrib;
+               %status.attrib;
+               %common.attrib;
+               %appendix.role.attrib;
+               %local.appendix.attrib;
+>
+<!ENTITY % local.section.attrib "">
+<!ENTITY % section.role.attrib "%role.attrib;">
+<!ATTLIST section
+               %label.attrib;
+               %status.attrib;
+               %common.attrib;
+               %section.role.attrib;
+               %local.section.attrib;
+>
+<!ENTITY % local.bibliography.attrib "">
+<!ENTITY % bibliography.role.attrib "%role.attrib;">
+<!ATTLIST bibliography
+               %status.attrib;
+               %common.attrib;
+               %bibliography.role.attrib;
+               %local.bibliography.attrib;
+>
+<!ENTITY % local.bibliodiv.attrib "">
+<!ENTITY % bibliodiv.role.attrib "%role.attrib;">
+<!ATTLIST bibliodiv
+               %status.attrib;
+               %common.attrib;
+               %bibliodiv.role.attrib;
+               %local.bibliodiv.attrib;
+>
+<!ENTITY % local.article.attrib "">
+<!ENTITY % article.role.attrib "%role.attrib;">
+<!ATTLIST article
+               class           (journalarticle
+                               |productsheet
+                               |whitepaper
+                               |techreport
+                                |specification
+                               |faq)           #IMPLIED
+               parentbook      IDREF           #IMPLIED
+               %status.attrib;
+               %common.attrib;
+               %article.role.attrib;
+               %local.article.attrib;
+>
+<!ELEMENT objectinfo ((mediaobject | legalnotice
+       | keywordset | subjectset | %bibliocomponent.mix;)+)>
+<!ELEMENT section (sectioninfo?,
+                       (%sect.title.content;),
+                       (((%divcomponent.mix;)+, section*)
+                        | section+))>
+<!ELEMENT sectioninfo ((mediaobject | legalnotice
+       | keywordset | subjectset | %bibliocomponent.mix;)+)>
+<!ELEMENT authorgroup ((author|editor|corpauthor|othercredit)+)>
+<!ELEMENT author ((%person.ident.mix;)+)>
+<!ELEMENT editor ((%person.ident.mix;)+)>
+<!ELEMENT othercredit ((%person.ident.mix;)+)>
+<!ELEMENT affiliation (jobtitle?, orgname?)>
+<!ELEMENT para (%para.char.mix;)*>
+<!ENTITY % informaltable.table.mdl
+       "((mediaobject+|tgroup+)
+          |(caption, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+)))">
+<!ELEMENT informaltable (%informaltable.table.mdl;) >
+<!ELEMENT replaceable (#PCDATA 
+               | %link.char.class;
+                | %base.char.class;
+               | inlinemediaobject)*>
+<!ELEMENT trademark (#PCDATA 
+               | %link.char.class; 
+               | %tech.char.class;
+               | inlinemediaobject
+               | emphasis)*>
+<!ELEMENT article ((%div.title.content;)?, articleinfo?,
+                      (%bookcomponent.content;),
+                      ((%appendix.class;)|bibliography)*)>
+<!ELEMENT articleinfo ((mediaobject | legalnotice
+       | subjectset | keywordset | %bibliocomponent.mix;)+)>
+<!ELEMENT appendix ((%bookcomponent.title.content;),
+               (%bookcomponent.content;))>
+<!ELEMENT bibliography ((%bookcomponent.title.content;)?,
+                        (%component.mix;)*,
+                        (bibliodiv+ | bibliomixed+))>
+<!ELEMENT bibliomixed (#PCDATA | %bibliocomponent.mix; | bibliomset)*>
+<!ELEMENT bibliodiv ((%sect.title.content;)?, (%component.mix;)*,
+               (bibliomixed)+)>
+<!ELEMENT sidebar ((%formalobject.title.content;)?,
+                   (%sidebar.mix;)+)>
+<!ELEMENT programlisting (%para.char.mix; | lineannotation)*>
+<!ELEMENT literallayout (%para.char.mix; | lineannotation)*>
+<!ELEMENT itemizedlist ((%formalobject.title.content;)?,
+                           (%listpreamble.mix;)*, listitem+)>
+<!ELEMENT orderedlist ((%formalobject.title.content;)?,
+                           (%listpreamble.mix;)*, listitem+)>
+<!ELEMENT variablelist ((%formalobject.title.content;)?,
+                           (%listpreamble.mix;)*, varlistentry+)>
+<!ELEMENT example ((%formalobject.title.content;), (%example.mix;)+)
+               >
+<!ELEMENT figure ((%formalobject.title.content;),
+                       (%figure.mix; | %link.char.class;)+)>
+<!ELEMENT legalnotice (title?, (%legalnotice.mix;)+)
+               >
+<!ELEMENT systemitem (%cptr.char.mix; | acronym)*>
+<!ELEMENT computeroutput  (%cptr.char.mix;)*>
+<!ELEMENT userinput  (%cptr.char.mix;)*>
+<!ELEMENT blockquote  (title?, attribution?, (%component.mix;)+)>
+<!ELEMENT subscript  (#PCDATA
+               | %link.char.class;
+               | emphasis
+               | replaceable
+                | inlinemediaobject
+               | %base.char.class;
+               | %other.char.class;)*
+               >
+<!ELEMENT superscript  (#PCDATA
+               | %link.char.class;
+               | emphasis
+               | replaceable
+                | inlinemediaobject
+               | %base.char.class;
+               | %other.char.class;)*
+               >
diff --git a/Docs/example_makefile b/Docs/example_makefile
new file mode 100644 (file)
index 0000000..8d6459d
--- /dev/null
@@ -0,0 +1,4 @@
+#
+# OBSOLETE
+#
+
diff --git a/Docs/examples.xml b/Docs/examples.xml
new file mode 100644 (file)
index 0000000..15005f6
--- /dev/null
@@ -0,0 +1,164 @@
+<!-- $Id: examples.xml,v 1.3 2007/05/11 08:16:44 thuffir Exp $ -->
+
+<section>
+<title>Examples of How to Create Documentation</title>
+
+<section>
+<title>HTML Example</title>
+  <para> For this you need a web browser, say FireFox or Mozilla.  You can try
+  this in the robodoc root directory.  It creates a document called
+  <filename>HDocs/masterindex.html</filename> plus a lot of smaller
+  documents from all the source files in the directory
+  <filename>Source</filename>.</para>
+
+<programlisting>
+<command>robodoc</command> <option>--src</option> ./Source <option>--doc</option> ./HDocs <option>--multidoc</option> <option>--index</option> <option>--html</option>
+</programlisting>
+</section>
+
+<section>
+<title>RTF Example</title>
+
+    <para>For this you need an rtf reader, for instance
+    <command>Word</command>.  You can try this in the robodoc root
+    directory.</para>
+
+<programlisting>
+<command>robodoc</command> <option>--src</option> ./Source <option>--doc</option> api <option>--singledoc</option> <option>--rtf</option> <option>--sections</option>
+</programlisting>
+
+    <para>This will create a document called
+    <filename>api.rtf</filename>.</para>
+
+    <para>By default the document looks pretty plain.  There is no
+    chapter numbering or a table of contents, even if you asked for
+    it.  All the information for this is included but not visible.
+    This is because chapter numbering and a table of contents are
+    generated by Word based on formatting information that is part of
+    a Word document but not part of a RTF document.  </para>
+
+    <para>To make it visible you include the generated document into a
+    bigger document with the right formatting options.  This is best
+    done with a cut-and-paste operation.  Use the cut-past-paste
+    special menu, and paste it as RTF formatted text into your Word
+    document.</para>
+
+</section>
+
+<section>
+<title>LaTeX Example</title>
+
+  <para> For this you need <command>latex</command> and
+  <command>makeindex</command>. You can try this in the robodoc root
+  directory.  It creates a single document called
+  <filename>api.dvi</filename> from all the source files in the
+  directory Source.</para>
+
+<programlisting>
+<command>robodoc</command> <option>--src</option> ./Source <option>--doc</option> api <option>--singledoc</option> <option>--latex</option> <option>--sections</option>
+<command>latex</command> api.tex
+<command>latex</command> api.tex
+<command>makeindex</command> api.idx
+<command>latex</command> api.tex
+<command>xdvi</command> api.dvi
+</programlisting>
+</section>
+
+<section>
+<title>XML DocBook Example</title>
+
+<para>
+    DocBook is a xml format to create technical documentation, see.
+    <ulink url="http://www.docbook.org/"><citetitle>DocBook.org</citetitle></ulink>.
+    DocBook is quite nice. This manual for instance is written in DocBook and
+    automatically translated into html and pdf format.
+</para>
+
+<para>
+    You can use the DocBook output of ROBODoc to create several other formats,
+    for instance: html, pdf, html-help.
+    For this you need a tool that can process a DocBook file. There
+    are several of these tools.
+</para>
+
+<section>
+    <title>DocBook with html output</title>
+
+<para>The easiest to use is <command>xsltproc</command>. It works under
+    Windows and Unix.  A typical workflow under Windows is:
+</para>
+
+<programlisting>
+<command>robodoc</command> <option>--src</option> ./Source <option>--doc</option> api <option>--singledoc</option> <option>--dbxml</option> <option>--sections</option>
+<command>xsltproc</command> api.xsl api.xml > api.html
+</programlisting>
+
+<para>
+    Where <filename>api.xsl</filename> contains:
+</para>
+
+<literallayout class="monospaced"><![CDATA[
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+    <xsl:import href="e:/docbook/html/docbook.xsl"/>
+    <xsl:param name="admon.graphics" select="1"/>
+    <xsl:param name="section.autolabel" select="1"/>
+</xsl:stylesheet>
+]]>
+</literallayout>
+
+<para>For this you need <command>xsltproc</command>. For Windows these can be found at
+    <ulink url="http://www.zlatkovic.com/libxml.en.html">
+        <citetitle>http://www.zlatkovic.com libxml.en.html</citetitle></ulink>,
+    and the stylesheets which can be found at
+    <ulink url="http://docbook.sourceforge.net/"><citetitle>http://docbook.sourceforge.net/</citetitle></ulink>.
+    In the example above the style sheets are installed on <filename>e:/docbook/</filename>.
+</para>
+
+<para>
+    More information about xsl can be found at
+    <ulink url="http://www.sagehill.net/docbookxsl/"><citetitle>http://www.sagehill.net/docbookxsl/</citetitle></ulink>.
+</para>
+
+</section>
+
+<section>
+    <title>DocBook with html help output</title>
+
+<para>The same program can be used to
+    <ulink
+        url="http://docbook.sourceforge.net/release/xsl/current/doc/htmlhelp.html">
+        <citetitle>create a html help</citetitle>
+    </ulink> file. For this you need
+    <ulink
+        url="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/hwMicrosoftHTMLHelpDownloads.asp">
+        <citetitle>HTML Help Workshop</citetitle>
+    </ulink>. The workflow now is:
+</para>
+
+<programlisting>
+<command>robodoc</command> <option>--src</option> ./Source <option>--doc</option> api <option>--singledoc</option> <option>--dbxml</option> <option>--sections</option>
+<command>xsltproc</command> api.xsl api.xml
+<command>hhc</command> htmlhelp.hhp
+</programlisting>
+
+<para>
+    Where <filename>api.xsl</filename> contains:
+</para>
+
+<literallayout class="monospaced"><![CDATA[
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+    <xsl:import href="e:/docbook/htmlhelp/htmlhelp.xsl"/>
+    <xsl:param name="admon.graphics" select="1"/>
+    <xsl:param name="section.autolabel" select="1"/>
+</xsl:stylesheet>
+]]>
+</literallayout>
+
+</section>
+
+
+</section>
+</section>
+
diff --git a/Docs/extracting.xml b/Docs/extracting.xml
new file mode 100644 (file)
index 0000000..25b66ad
--- /dev/null
@@ -0,0 +1,121 @@
+<section>
+<title>Extracting Documentation with ROBODoc</title>
+
+    <para>Now that you have prepared your source code for use with
+    ROBODoc you are ready to extract the documentation.  There are
+    several choices to be made.</para>
+
+<section>
+<title>Single document or many smaller documents</title>
+
+    <para>First of all, ROBODoc can be used in three modes.</para>
+
+    <itemizedlist> 
+
+    <listitem><para>multidoc -- in this mode ROBODoc scans
+    all the source files in your source directory and creates a
+    separate document file for each of these in a document directory.
+    The document directory is created automatically. Its structure is
+    a mirror of the structure of your source directory.</para></listitem> 
+
+    <listitem><para>singledoc -- in this mode ROBODoc scans all the source
+    files in your source directory and creates a single documentation
+    file that contains all the documentation extracted from your
+    source files.  </para></listitem>
+
+    <listitem><para>singlefile -- in this mode ROBODoc scans a single source
+    file and creates a single documentation file.</para></listitem>
+
+    </itemizedlist>
+</section>
+
+<section>
+<title>multidoc</title>
+
+    <para>The multidoc mode is useful to create browsable documents.
+    For instance many small HTML files that can be viewed with a
+    web-browser.  This mode requires the following arguments:</para>
+
+    <para>
+    <command>robodoc
+    --src <replaceable>source directory</replaceable>
+    --doc <replaceable>document directory</replaceable>
+    --multidoc
+    other options
+    </command>
+</para>
+
+    <para>An additional option that is useful with this mode is
+    <option>--index</option>, this creates a series of index files,
+    one for each header type.</para>
+
+</section>
+
+
+<section>
+<title>singledoc</title>
+
+    <para> The singledoc mode is useful to create bulk documentation
+    that can be incorporated in other documents, or that can be
+    delivered to a client as a single document.  For instance a file
+    created in RTF format can be included into a larger design
+    document written in Word format.  This mode requires the following
+    arguments:</para>
+
+<para>
+    <command>robodoc
+        --src <replaceable>source directory</replaceable>
+        --doc <replaceable>document file without extension</replaceable>
+        --singledoc
+        <replaceable>other options</replaceable>
+    </command>
+</para>
+
+    <para>An additional option that is useful with this mode is
+    <option>--sections</option>, this causes the headers to follow a
+    section layout based on the module element hierarchy defined in the
+    header name.</para>
+
+</section>
+
+
+<section>
+<title>singlefile</title>
+
+    <para>The singlefile mode is not very useful.  It is mainly used
+    for debugging purposes.  This mode requires the following
+    arguments:</para>
+
+<para>
+    <command>robodoc
+    --src <replaceable>source file</replaceable>
+    --doc <replaceable>document file</replaceable>
+    --singlefile
+    other options
+</command>
+</para>
+
+</section>
+
+<section>
+<title>Output formats</title>
+
+    <para>Your next choice is the output format. ROBODoc can create
+    documentation in several formats:</para>
+
+    <itemizedlist> 
+    <listitem><para>HTML, option <option>--html</option></para></listitem> 
+    <listitem><para>RTF, option <option>--rtf</option></para></listitem> 
+    <listitem><para>LaTeX, option <option>--latex</option></para></listitem> 
+    <listitem><para>XML DocBook, option <option>--dbxml</option></para></listitem> 
+    </itemizedlist>
+
+    <para>What format to use depends on your wishes. If you want a
+    single printable document, use LaTeX or XML DocBook.  If you want
+    a document that can be included into a larger (Word) document use
+    RTF.  If you want something that is browsable use HTML, or use XML
+    DocBook and then convert it to HTML.</para>
+
+</section>
+</section>
+
diff --git a/Docs/faq.dat b/Docs/faq.dat
new file mode 100644 (file)
index 0000000..73ff6d7
--- /dev/null
@@ -0,0 +1,73 @@
+<!-- vi:ft=html
+-->
+
+<c>General
+<q>What problem does ROBODoc solve?
+<a>TODO
+
+<c>General
+<q>What is the target audience for ROBODoc?
+<a>TODO
+
+<c>General
+<q>What are the possible uses for ROBODoc?
+<a>TODO
+
+<c>General
+<q>On what platforms foes ROBODoc run?
+<a>Win32, Unix, GNU/Linux, and Mac. But it probably works on
+other OS-es that have a C compiler too.
+
+<c>General
+<q>What programming languages are supported?
+<a>TODO
+
+<c>General
+<q>What human languages are supported?
+<a>TODO
+
+<c>General
+<q>Where can I download ROBODoc?
+<a>TODO
+
+<c>General
+<q>Are there other similar tools that are better?
+<a>TODO
+
+<!-- Theory --!>
+
+<c>Theory
+<q>What are headers
+<a>TODO
+
+<c>Theory
+<q>What are headertypes
+<a>TODO
+
+<c>Theory
+<q>What are items
+<a>TODO
+
+<c>Theory 
+<q>Do item names need to be all captitals?
+<a>No. They can be anything you like, but they
+can not be followed by other text. You can
+define your itemnames in the ROBODoc configuration
+file <code>robodoc.rc</code>
+
+<!-- USE --!>
+
+<c>Use
+<q>Why should I use headertypes
+<a>TODO
+
+<!-- Configuration --!>
+
+<c>Configuration
+<q>How can I define my own items?
+<a>TODO
+
+<c>Configuration
+<q>How can I define my own headertypes?
+<a>TODO
+
diff --git a/Docs/faqfooter.html b/Docs/faqfooter.html
new file mode 100644 (file)
index 0000000..b15a54b
--- /dev/null
@@ -0,0 +1,9 @@
+<hr>
+
+<p>Copyright (c) 2004 Frans Slothouber</p>
+
+<p><i>This list of questions  and answers was generated by 
+<a href="http://www.makefaq.org/">makefaq</a>.</i>
+
+</body>
+</html>
diff --git a/Docs/faqheader.html b/Docs/faqheader.html
new file mode 100644 (file)
index 0000000..3f9ab82
--- /dev/null
@@ -0,0 +1,25 @@
+<html>
+<head>
+
+<!-- Change this title to something more appropriate for your FAQ. You 
+     do NOT need to leave the reference to makefaq.py in there. -->
+
+<title>ROBODoc Frequently-Asked Questions</title>
+
+<!-- If you do not want to use a CSS stylesheet, remove this next line. -->
+
+<link type="text/css" rel="stylesheet" href="faq.css">
+
+</head>
+<body bgcolor="#FFFFFF">
+
+<h1>
+<!-- Change this text line below to something more appropriate -->
+<code>ROBODoc</code> Frequently-Asked Questions
+
+</h1>
+
+<!-- Change this line to have your contact information in it. -->
+<p>For more information about this faq, please contact <b>Frans Slothouber</b>
+
+<hr>
diff --git a/Docs/header_specs.pl b/Docs/header_specs.pl
new file mode 100644 (file)
index 0000000..53e08a3
--- /dev/null
@@ -0,0 +1,203 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+use IO::File;
+
+
+#------------------------------------------
+#
+my @header_specs = (
+    { language => [ 'C' ],
+      begin => '/****',
+      mid   => '*',
+      end_1 => '****',
+      end_2 => '/****',
+      rem_begin => '/*',
+      rem_end   => '*/' 
+    },
+
+    { language => [ 'Modula-2' ],
+      begin => '(****',
+      mid   => '*',
+      end_1 => '****',
+      end_2 => '(****',
+      rem_begin => '(*',
+      rem_end   => '*)' 
+    },
+
+    { language => [ 'Pascal' ],
+      begin => '{****',
+      mid   => '*',
+      end_1 => '****',
+      end_2 => '{****',
+      rem_begin => '{*',
+      rem_end   => '*}' 
+    },
+
+    { language => [ 'C++' ],
+      begin => '//****',
+      mid   => '//',
+      end_2 => '//****',
+    },
+
+    { language => [ 'Tcl', 'Perl' ],
+      begin => '#****',
+      mid   => '#',
+      end_2 => '#****',
+    },
+
+    { language => [ 'LaTeX/TeX', 'Postscript' ],
+      begin => '%****',
+      mid   => '%',
+      end_2 => '%****',
+    },
+
+    { language => [ 'Occam' ],
+      begin => '__****',
+      mid   => '__',
+      end_2 => '__****',
+    },
+
+
+);
+
+#--------------------------------------------------------------------
+#
+
+
+sub make_robodoc_rc_file {
+    my $spec = shift;
+    my $rc_file = "";
+
+    $rc_file .= "header markers:\n";
+    $rc_file .= "  $spec->{begin}\n";
+    $rc_file .= "remark markers:\n";
+    $rc_file .= "  $spec->{mid}\n";
+    $rc_file .= "end markers:\n";
+    if ( exists( $spec->{end_1} ) ) {
+        $rc_file .= "  $spec->{end_1}\n";
+    }
+    if ( exists( $spec->{end_2} ) ) {
+        $rc_file .= "  $spec->{end_2}\n";
+    }
+
+    if ( exists( $spec->{rem_end} ) ) {
+        $rc_file .= "remark begin markers:\n";
+        $rc_file .= "  $spec->{rem_begin}\n";
+        $rc_file .= "remark end markers:\n";
+        $rc_file .= "  $spec->{rem_end}\n";
+    }
+
+    return $rc_file;
+}
+
+
+#
+# given a header spec this returns an example header 
+# that does not contain any source items.
+#
+sub make_example_header_simple {
+    my $spec = shift;
+    my $header = "";
+
+    $header = $spec->{begin} . "f* ModuleName/Foo\n";
+    $header .= $spec->{mid} . " FUNCTION\n";
+    $header .= $spec->{mid} . "   Foo computes the foo factor\n";
+    $header .= $spec->{mid} . "   using a fudge factor.\n";
+    if ( exists( $spec->{end_1} ) ) {
+        $header .= $spec->{end_1} . "\n";
+        $header .= $spec->{rem_end} . "\n";
+    } else {
+        $header .= $spec->{end_2} . "\n";
+    }
+}
+
+
+sub make_example_header {
+    my $spec = shift;
+    my $header = "";
+
+    $header = $spec->{begin} . "f* ModuleName/Foo\n";
+    $header .= $spec->{mid} . " FUNCTION\n";
+    $header .= $spec->{mid} . "   Foo computes the foo factor\n";
+    $header .= $spec->{mid} . "   using a fudge factor.\n";
+    $header .= $spec->{mid} . " SYNOPSIS\n";
+    if ( exists( $spec->{rem_end} ) ) {
+        $header .= $spec->{rem_end} . "\n";
+    } else {
+
+    }
+    $header .= "int Foo( int fudge )\n";
+    if ( exists( $spec->{rem_begin} ) ) {
+        $header .= $spec->{rem_begin} . "\n";
+    } else {
+
+    }
+    $header .= $spec->{mid} . " INPUTS\n";
+    $header .= $spec->{mid} . "   fudge -- the fudge factor\n";
+    $header .= $spec->{mid} . " SOURCE\n";
+    if ( exists( $spec->{rem_end} ) ) {
+        $header .= $spec->{rem_end} . "\n";
+    } else {
+
+    }
+
+    $header .= "\n more source code..\n\n";
+
+    if ( exists( $spec->{rem_end} ) ) {
+        $header .= $spec->{end_2};
+        $header .= $spec->{rem_end} . "\n";
+    } else {
+        $header .= $spec->{end_2} . "\n";
+    }
+
+    return $header;
+}
+
+
+
+
+sub make_examples_for_manual {
+    my $filename = "header_examples.xml";
+    my $file = IO::File->new(">$filename") or die "$filename : $!";
+    foreach my $spec ( @header_specs ) {
+        foreach my $language ( @{$spec->{language}} ) {
+            print $file "<section>\n";
+            print $file "<title>$language</title>\n";
+            print $file "\n\n";
+
+            print $file "<example>\n";
+            print $file "<title>A simple header without any source items in $language.</title>\n";
+            print $file "<programlisting>\n";
+            print $file make_example_header_simple( $spec );
+            print $file "</programlisting>\n";
+            print $file "</example>\n";
+            print $file "\n\n";
+
+            print $file "<example>\n";
+            print $file "<title>A header with source items in $language.</title>\n";
+            print $file "<programlisting>\n";
+            print $file make_example_header( $spec );
+            print $file "</programlisting>\n";
+            print $file "</example>\n";
+            print $file "\n\n";
+
+            print $file "<example>\n";
+            print $file "<title>The robodoc.rc file required for $language if it were not supported by default.</title>\n";
+            print $file "<programlisting>\n";
+            print $file make_robodoc_rc_file( $spec );
+            print $file "</programlisting>\n";
+            print $file "</example>\n";
+
+            print $file "</section>\n";
+        }
+    }
+
+    $file->close();
+}
+
+
+
+make_examples_for_manual;
+
diff --git a/Docs/installing.xml b/Docs/installing.xml
new file mode 100644 (file)
index 0000000..58972ab
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ========== INSTALLING  ===========
+  -->
+<section id="installing">
+  <title id="installing.title">Installing ROBODoc</title>
+  <para>The easiest way to install ROBODoc is to use one of the
+    packages.  There are package for RedHat, Debian, OSX, and a precompiled
+    executable for Windows.</para>
+  <para>You can also compile --- from the sources.  On a system
+    with <command>autoconfig</command> it is as simple as:</para>
+  <programlisting>
+./configure
+make
+make install
+</programlisting>
+  <para>This currently does not work with cygwin.</para>
+  <para>Under Windows you can use one of the makefile. There is a makefile for Borland C, MINGW,
+       and Cygwin.  For other compilers you might want to try  <filename>makefile.plain</filename>.
+</para>
+  <para>For instance for cygwin goto <filename>Source</filename> and run:</para>
+  <programlisting>
+make -f makefile.mingw-cygwin
+</programlisting>
+  <para>To install <command>ROBODoc</command> put the generated executable somewhere in your path.</para>
+  <para>You can test your executable, by going to the
+       <filename>Examples/PerlExample</filename> directory in the
+       archive, and running <command>robodoc</command>.
+       This should create a directory
+       called <filename>Doc</filename>.  In there you should now
+       find a file called <filename>masterindex.html</filename>.
+</para>
+</section>
diff --git a/Docs/main.css b/Docs/main.css
new file mode 100644 (file)
index 0000000..5a5c7a0
--- /dev/null
@@ -0,0 +1,139 @@
+body 
+ { 
+  margin-top:1em;
+  margin-bottom:1em;
+  margin-left:2.5em;
+  margin-right:2.5em;
+  font-family:sans-serif;
+ }
+
+/*
+a:link
+ { 
+  color:#00FF00; 
+ }
+
+a:visited
+ {
+  color:#003333;  
+ }
+a:active
+ {
+  color:#FF00FF;
+ }
+*/
+
+p, form 
+ {
+  font-family:sans-serif;
+  font-size:12pt; 
+ }
+
+/*
+p
+ {
+  text-align:justify;
+ }
+*/
+
+b, strong, i, em, cite, var, tt, code, kbd, samp, img
+ {  
+  display:inline;
+ }
+
+ul
+ {
+  margin-top:1em;
+  margin-bottom:1em;
+  list-style-type:disc;
+  display:block;
+ }
+
+li
+ {
+  margin-bottom:0.2em;
+ }
+
+b, strong
+ { 
+  font-variant:small-caps;
+  font-weight:bold;
+ }
+
+i, cite, em, var, address, blockquote
+ {
+  font-style:italic;
+ }
+
+pre, tt, kbd, samp 
+ {
+  font-family:monospace;
+ }
+
+
+table
+ {
+  color:#000000;
+  background-color:#AAAAAA;
+ }
+
+tt
+ {
+  white-space:pre;
+ }
+
+code
+ {
+  font-family:monospace;
+  font-style:normal;
+  white-space:pre;
+ }
+
+pre
+ { 
+  white-space:pre;
+  margin-top:0.5em; 
+ }
+
+address
+ { 
+  font-family:monospace;
+  font-size:12pt; 
+  text-align:left;
+  margin-bottom:0.5em;
+ }
+
+
+
+h2, h3
+ { 
+  margin-top:0.5em; 
+ }
+
+h1, h2, h3 
+ {
+  font-weight:bold;
+ }
+
+h1
+ { 
+  font-family:sans-serif;
+  font-size:24pt; 
+  text-align:right;
+  margin-right:36px;
+  margin-top:0.5em; 
+  margin-bottom:0.5em;
+ }
+
+h2
+ { 
+  font-family:sans-serif;
+  font-size:18pt; 
+ }
+
+h3
+ { 
+  font-family:sans-serif;
+  font-size:14pt;  
+ }
diff --git a/Docs/makefile.am b/Docs/makefile.am
new file mode 100644 (file)
index 0000000..e2515f5
--- /dev/null
@@ -0,0 +1,25 @@
+## Process this file with automake to produce Makefile.in
+
+man_MANS = robodoc.1 robohdrs.1
+
+if FINK
+man1_MANS = robodoc.1 robohdrs.1
+else
+man1_MANS = robodoc.1 robohdrs.1
+endif
+
+#if FINK
+#docdir = $(prefix)/share/doc/$(PACKAGE)
+#else
+#docdir = $(prefix)/doc/$(PACKAGE)-$(VERSION)
+#endif
+
+if FINK
+doc_DATA = manual.html manual.css robodoc.rc
+else
+doc_DATA = manual.html manual.css robodoc.rc
+endif
+
+#
+# End of automake
+#
diff --git a/Docs/makefile.cygwin b/Docs/makefile.cygwin
new file mode 100644 (file)
index 0000000..f9bbc92
--- /dev/null
@@ -0,0 +1,38 @@
+# Make the documentation under the CYGWIN environment...
+# $Id: makefile.cygwin,v 1.3 2006/08/06 20:46:21 thuffir Exp $
+
+CP = cp
+RM = rm -rf
+
+SOURCE =  manual.xml preparing.xml options.xml tips.xml installing.xml examples.xml extracting.xml bugs.xml configuration.xml header_examples.xml
+
+
+# Manual as a single HTML file
+manual.html : $(SOURCE) manual-cygwin.xsl
+       xsltproc manual-cygwin.xsl manual.xml > manual.html
+
+header_examples.xml : header_specs.pl 
+       perl header_specs.pl
+
+# Manual in Windows help format.
+htmlhelp.chm : $(SOURCE) manual_html_help-cygwin.xsl
+       xsltproc manual_html_help-cygwin.xsl manual.xml
+       -hhc htmlhelp.hhp
+       $(CP) htmlhelp.chm manual.chm
+
+# Clean up.
+clean :
+       $(RM) \
+       manual.html \
+       index.html \
+       ar*.html \
+       *.chm \
+       *.hhc \
+       *.hhp \
+       header_examples.xml \
+
+all : manual.html htmlhelp.chm
+
+# Lint the manual to detect errors against the DTD.
+test : manual.html
+       xmllint --noent --noout manual.xml
diff --git a/Docs/makefile.plain b/Docs/makefile.plain
new file mode 100644 (file)
index 0000000..1dbecde
--- /dev/null
@@ -0,0 +1,19 @@
+# $Id: makefile.plain,v 1.1 2007/06/23 16:29:59 gumpu Exp $
+
+SOURCE =  manual.xml preparing.xml options.xml tips.xml installing.xml examples.xml extracting.xml bugs.xml configuration.xml header_examples.xml
+
+# Manual as a single HTML file
+manual.html : $(SOURCE) manual.xsl
+       xsltproc manual.xsl manual.xml > manual.html
+
+header_examples.xml : header_specs.pl 
+       perl header_specs.pl
+
+
+clean :
+
+all : manual.html
+
+# Lint the manual to detect errors against the DTD.
+test :
+       xmllint --noent --noout manual.xml
diff --git a/Docs/makefile.win32 b/Docs/makefile.win32
new file mode 100644 (file)
index 0000000..d3de843
--- /dev/null
@@ -0,0 +1,30 @@
+# $Id: makefile.win32,v 1.5 2007/02/06 22:31:38 gumpu Exp $
+
+SOURCE =  manual.xml preparing.xml options.xml tips.xml installing.xml examples.xml extracting.xml bugs.xml configuration.xml header_examples.xml
+
+
+# Manual as a single HTML file
+manual.html : $(SOURCE) manual.xsl
+       xsltproc manual.xsl manual.xml > manual.html
+
+header_examples.xml : header_specs.pl 
+       perl header_specs.pl
+
+# Manual in Windows help format.
+htmlhelp.chm : $(SOURCE) manual_html_help.xsl
+       xsltproc manual_html_help.xsl manual.xml
+       -hhc htmlhelp.hhp
+       copy htmlhelp.chm manual.chm
+
+clean :
+       -del ar*.html
+       -del *.chm
+       -del *.hhc
+       -del *.hhp
+       -del header_examples.xml 
+
+all : manual.html htmlhelp.chm
+
+# Lint the manual to detect errors against the DTD.
+test :
+       xmllint --noent --noout manual.xml
diff --git a/Docs/manual-cygwin.xsl b/Docs/manual-cygwin.xsl
new file mode 100644 (file)
index 0000000..b0aba10
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+    <xsl:import href="/usr/share/docbook-xsl/html/docbook.xsl"/>
+    <xsl:param name="html.stylesheet" select="'manual.css'"/>
+    <xsl:param name="admon.graphics" select="1"/>
+    <xsl:param name="section.autolabel" select="1"/>
+</xsl:stylesheet>
+
diff --git a/Docs/manual.css b/Docs/manual.css
new file mode 100644 (file)
index 0000000..a591c71
--- /dev/null
@@ -0,0 +1,57 @@
+body
+{
+    background-color: #ffffff;
+    color: #000000;
+    font-family: 'Lucida Grande', Verdana, 
+                     Geneva, Lucida, Arial, 
+                     Helvetica, sans-serif;
+    font-size: 10pt;
+    margin: 2% 5%;
+}
+h1.title
+{
+    color: #000000;
+    text-align: left;
+    font-size: 16pt;
+    margin-top: 10%;
+}
+
+h2.title
+{
+    color: #000000;
+    text-align: left;
+    font-size: 14pt;
+    margin-top: 3%;
+}
+h3.title
+{
+    color: #000000;
+    text-align: left;
+    font-size: 11pt;
+    margin-top: 3%;
+}
+
+h3.author
+{
+    color: #000000;
+    text-align: left;
+    font-size: 10pt;
+}
+td.even, td.uneven
+{
+    color: #000000;
+    font-size: 10pt;
+}
+td.even
+{
+    background-color: #eeeeee;
+}
+pre.programlisting, pre.literallayout
+{
+    background:#ffe;
+    font-family: monospace;
+    border:solid #aa9 2px;
+    margin:4px;
+    white-space: pre;
+}
+
diff --git a/Docs/manual.html b/Docs/manual.html
new file mode 100644 (file)
index 0000000..8af0ffa
--- /dev/null
@@ -0,0 +1,1690 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ROBODoc 4.99.34 User Manual</title><link rel="stylesheet" href="manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.72.0" /></head><body><div class="article" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="id2434377"></a>ROBODoc 4.99.34 User Manual</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname">Frans</span> <span class="surname">Slothouber</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Petteri</span> <span class="surname">Kettunen</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Gergely</span> <span class="surname">Budai</span></h3></div></div></div><div><p class="copyright">Copyright © 1994-2007 
+          Frans Slothouber, Petteri Kettunen,
+          Jacco van Weert, Gergely Budai
+        </p></div><div><p class="pubdate">Apr 2007</p></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id2488392">1. Preface</a></span></dt><dt><span class="section"><a href="#installing">2. Installing ROBODoc</a></span></dt><dt><span class="section"><a href="#preparing">3. Preparing your source code for ROBODoc</a></span></dt><dd><dl><dt><span class="section"><a href="#id2495696">3.1. Headers</a></span></dt><dt><span class="section"><a href="#header_types">3.2. Header Types</a></span></dt><dt><span class="section"><a href="#id2496633">3.3. Items</a></span></dt><dt><span class="section"><a href="#sections">3.4. Sections</a></span></dt><dt><span class="section"><a href="#formatting">3.5. Smart Text Formatting</a></span></dt></dl></dd><dt><span class="section"><a href="#id2498762">4. Extracting Documentation with ROBODoc</a></span></dt><dd><dl><dt><span class="section"><a href="#id2498774">4.1. Single document or many smaller documents</a></span></dt><dt><span class="section"><a href="#id2497592">4.2. multidoc</a></span></dt><dt><span class="section"><a href="#id2498822">4.3. singledoc</a></span></dt><dt><span class="section"><a href="#id2498869">4.4. singlefile</a></span></dt><dt><span class="section"><a href="#id2498898">4.5. Output formats</a></span></dt></dl></dd><dt><span class="section"><a href="#id2498342">5. Examples of How to Create Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="#id2498347">5.1. HTML Example</a></span></dt><dt><span class="section"><a href="#id2498374">5.2. RTF Example</a></span></dt><dt><span class="section"><a href="#id2498448">5.3. LaTeX Example</a></span></dt><dt><span class="section"><a href="#id2498537">5.4. XML DocBook Example</a></span></dt></dl></dd><dt><span class="section"><a href="#options">6. Options</a></span></dt><dt><span class="section"><a href="#customizing">7. Customizing ROBODoc</a></span></dt><dd><dl><dt><span class="section"><a href="#id2502679">7.1. items block</a></span></dt><dt><span class="section"><a href="#id2502700">7.2. ignore items block</a></span></dt><dt><span class="section"><a href="#id2502714">7.3. item order block</a></span></dt><dt><span class="section"><a href="#sourceitems">7.4. source items block</a></span></dt><dt><span class="section"><a href="#id2502749">7.5. preformatted items block</a></span></dt><dt><span class="section"><a href="#id2502783">7.6. format items block</a></span></dt><dt><span class="section"><a href="#id2502813">7.7. options block</a></span></dt><dt><span class="section"><a href="#headertypes_block">7.8. headertypes block</a></span></dt><dt><span class="section"><a href="#id2502896">7.9. ignore files block</a></span></dt><dt><span class="section"><a href="#id2502963">7.10. accept files block</a></span></dt><dt><span class="section"><a href="#id2502981">7.11. header markers block</a></span></dt><dt><span class="section"><a href="#id2502994">7.12. remark markers block</a></span></dt><dt><span class="section"><a href="#id2503006">7.13. end markers block</a></span></dt><dt><span class="section"><a href="#separate_characters_block">7.14. header separate characters block</a></span></dt><dt><span class="section"><a href="#header_ignore_characters_block">7.15. header ignore characters block</a></span></dt><dt><span class="section"><a href="#remark_begin_end">7.16. 
+remark begin markers and remark end markers block</a></span></dt><dt><span class="section"><a href="#linecomments">7.17. source line comments block</a></span></dt><dt><span class="section"><a href="#keywords">7.18. keywords block</a></span></dt><dt><span class="section"><a href="#id2503510">7.19. Configuration file location</a></span></dt></dl></dd><dt><span class="section"><a href="#id2504528">8. Tips and Tricks</a></span></dt><dd><dl><dt><span class="section"><a href="#id2504533">8.1. The SOURCE Item</a></span></dt><dt><span class="section"><a href="#id2504567">8.2. Minimizing Duplicate Information</a></span></dt><dt><span class="section"><a href="#id2504666">8.3. Advanced formatting with raw HTML and LaTeX code</a></span></dt><dt><span class="section"><a href="#id2504752">8.4. Linking to external documents (href, file, mailto, images)</a></span></dt><dt><span class="section"><a href="#id2504846">8.5. Linking from an external document</a></span></dt><dt><span class="section"><a href="#tools">8.6. Using external tools</a></span></dt><dt><span class="section"><a href="#id2505111">8.7. ROBODoc-ing an existing project</a></span></dt><dt><span class="section"><a href="#id2505169">8.8. Using ROBODoc under Windows</a></span></dt></dl></dd><dt><span class="section"><a href="#defaultheaders">9. Languages Supported by Default</a></span></dt><dd><dl><dt><span class="section"><a href="#id2504474">9.1. C</a></span></dt><dt><span class="section"><a href="#id2504152">9.2. Modula-2</a></span></dt><dt><span class="section"><a href="#id2506135">9.3. Pascal</a></span></dt><dt><span class="section"><a href="#id2506189">9.4. C++</a></span></dt><dt><span class="section"><a href="#id2506241">9.5. Tcl</a></span></dt><dt><span class="section"><a href="#id2506293">9.6. Perl</a></span></dt><dt><span class="section"><a href="#id2506344">9.7. LaTeX/TeX</a></span></dt><dt><span class="section"><a href="#id2506397">9.8. Postscript</a></span></dt><dt><span class="section"><a href="#id2506449">9.9. Occam</a></span></dt></dl></dd><dt><span class="section"><a href="#id2505449">10. Suggestions and Bugs</a></span></dt></dl></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2488392"></a>1. Preface</h2></div></div></div><p>ROBODoc is an API documentation tool for C, C++, Java, Assembler,
+        Basic, Fortran, LaTeX, Postscript, Tcl/Tk, LISP, Forth, Perl, Shell
+        Scripts, Makefiles, Occam, COBOL, DCL, Visual Basic, HTML, DB/C, XML,
+        and many other languages.  It can be made to work with any language that
+        supports comments.</p><p>ROBODoc works by extracting specially formatted headers from your
+        source code and writes these to documentation files. These files can be
+        formatted in HTML, ASCII, XML DocBook, or RTF; and indirectly to
+        PDF and HTML Help.</p><p>ROBODoc is similar to JavaDoc, though the idea is much
+        older than JavaDoc.  ROBODoc allows you to maintain a program and
+        its documentation in a single file.  This makes it easier to keep
+        your documentation up-to-date.</p><p>ROBODoc can be used to document anything you like,
+        functions, methods, variables, definitions, test cases, makefile
+        entries, and anything else you can think of.</p><p>It can create documentation consisting of many small files.
+        For instance in HTML format for easy browsing and publication on
+        the web.  It can also create a single file in LaTeX or RTF format
+        for inclusion into bigger design documents.  The RTF format is
+        suited to be included in Word documents.</p><p>ROBODoc allows you to separate internal documentation from
+        external documentation.  In singledoc mode it can create a section
+        layout based on the hierarchy of your modules.</p><p>ROBODoc is designed to work with a lot of different
+        programming languages.  It has no knowledge of the syntax of
+        programming languages.  It only has some knowledge about how
+        comments start and end in a lot of programming languages.  This
+        means that you sometimes have to do a little more work compared to
+        other tools that have detailed knowledge of the syntax of a
+        particular language.  They can use that knowledge to figure out
+        some of the information automatically.  This usually also means
+        that they work only with one or two languages.  </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="installing"></a>2. Installing ROBODoc</h2></div></div></div><p>The easiest way to install ROBODoc is to use one of the
+    packages.  There are package for RedHat, Debian, OSX, and a precompiled
+    executable for Windows.</p><p>You can also compile --- from the sources.  On a system
+    with <span><strong class="command">autoconfig</strong></span> it is as simple as:</p><pre class="programlisting">
+./configure
+make
+make install
+</pre><p>This currently does not work with cygwin.</p><p>Under Windows you can use one of the makefile. There is a makefile for Borland C, MINGW,
+       and Cygwin.  For other compilers you might want to try  <code class="filename">makefile.plain</code>.
+</p><p>For instance for cygwin goto <code class="filename">Source</code> and run:</p><pre class="programlisting">
+make -f makefile.mingw-cygwin
+</pre><p>To install <span><strong class="command">ROBODoc</strong></span> put the generated executable somewhere in your path.</p><p>You can test your executable, by going to the
+       <code class="filename">Examples/PerlExample</code> directory in the
+       archive, and running <span><strong class="command">robodoc</strong></span>.
+       This should create a directory
+       called <code class="filename">Doc</code>.  In there you should now
+       find a file called <code class="filename">masterindex.html</code>.
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="preparing"></a>3. Preparing your source code for ROBODoc</h2></div></div></div><p> ROBODoc allows you to mix the program documentation with
+    the source code.  It does require though that this documentation
+    has a particular layout so ROBODoc can recognize it.  There are
+    three key concepts: headers, items, and sections.  </p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2495696"></a>3.1. Headers</h3></div></div></div><p>Headers are the building blocks of the documentation. Lets
+    look at an example. The following header was taken from the
+    documentation of the predecessor of ROBODoc, AutoDoc.</p><div class="example"><a id="robodocheader"></a><p class="title"><b>Example 1. A ROBODoc header in C.</b></p><div class="example-contents"><pre class="programlisting">
+ /****f* financial.library/StealMoney
+  *  NAME
+  *    StealMoney -- Steal money from the Federal Reserve Bank. (V77)
+  *  SYNOPSIS
+  *    error = StealMoney( userName, amount, destAccount, falseTrail )
+  *  FUNCTION
+  *    Transfer money from the Federal Reserve Bank into the
+  *    specified interest-earning checking account.  No records of
+  *    the transaction will be retained.
+  *  INPUTS
+  *    userName    - name to make the transaction under.  Popular
+  *                  favorites include "Ronald Reagan" and
+  *                  "Mohamar Quadaffi".
+  *    amount      - Number of dollars to transfer (in thousands).
+  *    destAccount - A filled-in AccountSpec structure detailing the
+  *                  destination account (see financial/accounts.h).
+  *                  If NULL, a second Great Depression will be
+  *                  triggered.
+  *    falseTrail  - If the DA_FALSETRAIL bit is set in the
+  *                  destAccount, a falseTrail structure must be
+  *                  provided.
+  *  RESULT
+  *    error - zero for success, else an error code is returned
+  *           (see financial/errors.h).
+  *  EXAMPLE
+  *    Federal regulations prohibit a demonstration of this function.
+  *  NOTES
+  *    Do not run on Tuesdays!
+  *  BUGS
+  *    Before V88, this function would occasionally print the
+  *    address and home phone number of the caller on local police
+  *    976 terminals.  We are confident that this problem has been
+  *    resolved.
+  *  SEE ALSO
+  *    CreateAccountSpec(),security.device/SCMD_DESTROY_EVIDENCE,
+  *    financial/misc.h
+  ******
+  * You can use this space for remarks that should not be included
+  * in the documentation.
+  */
+</pre></div></div><br class="example-break" /><p>A header consists of three different elements: a
+    begin marker, a number of items, and an end marker.  The begin marker
+    in the example is:</p><pre class="programlisting">
+  ****f* financial.library/StealMoney
+</pre><p>It marks the beginning of a header.  It also tells ROBODoc
+</p><div class="itemizedlist"><ul type="disc"><li><p>the name of the element that is being documented, StealMoney,</p></li><li><p>the module it is part of, financial.library,</p></li><li><p>the kind of element, <code class="literal">f</code>, which stands for function.</p></li></ul></div><p>
+    ROBODoc always expects that a <code class="literal">/</code> separates the module name and an element name.
+    So <code class="literal">ModFoo/funcBar</code>
+    is a valid name, but <code class="literal">funcBar</code> is not.
+    See <a href="#sections" title="3.4.&#xA0;Sections">Sections</a> for more
+    information.
+</p><p>
+    Names can also contain spaces but ROBODoc won't create links to names with
+    embedded spaces.
+</p><p>
+    You can also have multiple names for a header. This is useful if you
+    document similar objects together in one header (for example assembly
+    subroutines with multiple jump-in points). Multiple names are separated by
+    commas and can span over more than one line.
+</p><pre class="programlisting">
+  ****f* financial.library/StealMoney, Steal_Money
+</pre><p>
+    In the above example all references found to <code class="literal">StealMoney</code>
+    and <code class="literal">Steal_Money</code> in other headers will be automatically
+    linked to this header.
+    The separation character(s) can be specified by the
+    <a href="#separate_characters_block" title="7.14.&#xA0;header separate characters block">header separate characters block</a>.
+    See <a href="#customizing" title="7.&#xA0;Customizing ROBODoc">Customizing ROBODoc</a> for more
+    information.
+</p><p>
+The end marker:
+</p><pre class="programlisting">
+  ******
+</pre><p>
+    marks the end of a header.
+    </p><p>Items begin with an item name and are followed by the
+    item's body.  An example: </p><pre class="programlisting">
+  *  FUNCTION
+  *    Transfer money from the Federal Reserve Bank into the
+  *    specified interest-earning checking account.  No records of
+  *    the transaction will be retained.
+</pre><p>
+    In this case the item's name is FUNCTION.
+    </p><p>
+    Each line of an item starts with a remark marker.  In this case
+    <code class="literal">*</code>.
+    </p><p>That what ROBODoc needs to recognize a header is therefore:</p><div class="example"><a id="id2488316"></a><p class="title"><b>Example 2. The markers needed by ROBODoc to recognize a header.</b></p><div class="example-contents"><pre class="programlisting">
+ /****f* financial.library/StealMoney
+  *  NAME
+  *
+  *  SYNOPSIS
+  *
+  *  FUNCTION
+  *
+  *
+  *
+  *  INPUTS
+  *
+  *
+  *
+  *
+  *
+  *
+  *
+  *
+  *
+  *
+  *
+  *  RESULT
+  *
+  *
+  *  EXAMPLE
+  *
+  *  NOTES
+  *
+  *  BUGS
+  *
+  *
+  *
+  *
+  *  SEE ALSO
+  *
+  *
+  ******
+</pre></div></div><br class="example-break" /><p>
+    The above example is in C.  ROBODoc supports many more
+    languages though.  See <a href="#defaultheaders" title="9.&#xA0;Languages Supported by Default">Languages Supported by Default</a>.
+    </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="header_types"></a>3.2. Header Types</h3></div></div></div><p> ROBODoc defines a number of header types.  You don't need
+    to use them but they can be useful for sorting information.  The
+    header type tells ROBODoc what kind of object you are documenting.
+    This information allows ROBODoc to create more useful index
+    tables.</p><p>The type is identified by one or two characters.  ROBODoc
+    expects to find them after the fourth <code class="literal">*</code> in the
+    begin marker.  So <code class="literal">#****f</code> is a valid marker,
+    but <code class="literal">#**f**</code> is not.</p><p>If a single character is given, the type is defined as
+    listed in the following table</p><div class="table"><a id="id2496438"></a><p class="title"><b>Table 1. Default header types</b></p><div class="table-contents"><table summary="Default header types" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left">c</td><td align="left">Header for a class </td></tr><tr><td align="left">d</td><td align="left">Header for a constant (from define)</td></tr><tr><td align="left">f</td><td align="left">Header for a function</td></tr><tr><td align="left">h</td><td align="left"><a id="header_type_h"></a>Header for a module in a project</td></tr><tr><td align="left">m</td><td align="left">Header for a method</td></tr><tr><td align="left">s</td><td align="left">Header for a structure</td></tr><tr><td align="left">t</td><td align="left">Header for a types</td></tr><tr><td align="left">u</td><td align="left">Header for a unit test</td></tr><tr><td align="left">v</td><td align="left">Header for a variable</td></tr><tr><td align="left">*</td><td align="left">Generic header for everything else</td></tr></tbody></table></div></div><br class="table-break" /><p>If two characters are given, the first character should be
+    <code class="literal">i</code> and the second can be any of the other
+    characters from the table above.  This creates an internal header
+    of the type specified by the second character.  Internal headers
+    are special.  They can be used to hide certain headers. They are
+    only extracted if requested. You can use them to document internal
+    functions, classes, etc. that you do not want clients to see,
+    creating what might be a programmer's manual as opposed to a
+    user's manual.</p><p>So <code class="literal">/****if* Module/func1</code> defines an
+    internal function called <code class="literal">func1</code>.
+    </p><p>Headers marked internal are by default not included in the
+    generated documentation.  If you want to include them use the
+    option <code class="option">--internal</code>.   You can also generate the
+    documentation from only the internal headers with the option
+    <code class="option">--internalonly</code>.
+    </p><p>You can define your own header types using the ROBODoc
+    configuration file, <code class="filename">robodoc.rc</code>.
+    See <a href="#headertypes_block" title="7.8.&#xA0;headertypes block">headertypes block</a>.
+    This way you can document anything you like, for instance makefile
+    entries, system tests, or exceptions.
+    </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2496633"></a>3.3. Items</h3></div></div></div><p> By default ROBODoc recognizes the following items: </p><div class="variablelist"><dl><dt><span class="term">
+                NAME
+            </span></dt><dd><p>Item name plus a short description.
+                </p></dd><dt><span class="term">
+                COPYRIGHT
+            </span></dt><dd><p>Who own the copyright : "(c) &lt;year&gt;-&lt;year&gt; by
+                    &lt;company/person&gt;"
+                </p></dd><dt><span class="term">
+                SYNOPSIS
+            , </span><span class="term">
+                USAGE
+            </span></dt><dd><p>
+                    How to use it.
+                </p></dd><dt><span class="term">
+                FUNCTION
+            , </span><span class="term">
+                DESCRIPTION
+            , </span><span class="term">
+                PURPOSE
+            </span></dt><dd><p>
+                    What does it do.
+                </p></dd><dt><span class="term">
+                AUTHOR
+            </span></dt><dd><p>
+                    Who wrote it.
+                </p></dd><dt><span class="term">
+                CREATION DATE
+            </span></dt><dd><p>When did the work start.
+                </p></dd><dt><span class="term">
+                MODIFICATION HISTORY
+            , </span><span class="term">
+                HISTORY
+            </span></dt><dd><p>Who has done which changes and when.
+                </p></dd><dt><span class="term">
+                INPUTS
+            , </span><span class="term">
+                ARGUMENTS
+            , </span><span class="term">
+                OPTIONS
+            , </span><span class="term">
+                PARAMETERS
+            , </span><span class="term">
+                SWITCHES
+            </span></dt><dd><p>
+                    What can we feed into it.
+                </p></dd><dt><span class="term">
+                OUTPUT
+            , </span><span class="term">
+                SIDE EFFECTS
+            </span></dt><dd><p>What output is made.
+                </p></dd><dt><span class="term">
+                RESULT
+            , </span><span class="term">
+                RETURN VALUE
+            </span></dt><dd><p>
+                    What do we get returned.
+                </p></dd><dt><span class="term">
+                EXAMPLE
+            </span></dt><dd><p>
+                    A clear example of the items use.
+                </p></dd><dt><span class="term">
+                NOTES
+            </span></dt><dd><p>
+                    Any annotations
+                </p></dd><dt><span class="term">
+                DIAGNOSTICS
+            </span></dt><dd><p> Diagnostic output.
+                </p></dd><dt><span class="term">
+                WARNINGS
+            , </span><span class="term">
+                ERRORS
+            </span></dt><dd><p>Warning and error-messages.
+                </p></dd><dt><span class="term">
+                BUGS
+            </span></dt><dd><p>Known bugs.
+                </p></dd><dt><span class="term">
+                TODO
+            , </span><span class="term">
+                IDEAS
+            </span></dt><dd><p>What to implement next and ideas. </p></dd><dt><span class="term">
+                PORTABILITY
+            </span></dt><dd><p>Where does it come from, where will it work. </p></dd><dt><span class="term">
+                SEE ALSO
+            </span></dt><dd><p>References to other functions, man pages, other documentation. </p></dd><dt><span class="term">
+                METHODS
+            , </span><span class="term">
+                NEW METHODS
+            </span></dt><dd><p>OOP methods.</p></dd><dt><span class="term">
+                ATTRIBUTES
+            , </span><span class="term">
+                NEW ATTRIBUTES
+            </span></dt><dd><p>OOP attributes.</p></dd><dt><span class="term">
+                TAGS
+            </span></dt><dd><p>Tag-item description.
+            </p></dd><dt><span class="term">
+                DERIVED FROM
+            </span></dt><dd><p>OOP super class. </p></dd><dt><span class="term">
+                DERIVED BY
+            </span></dt><dd><p>OOP sub class. </p></dd><dt><span class="term">
+                USES
+            , </span><span class="term">
+                CHILDREN
+            </span></dt><dd><p>What modules are used by this one. </p></dd><dt><span class="term">
+                USED BY
+            , </span><span class="term">
+                PARENTS
+            </span></dt><dd><p>Which modules do use this one. </p></dd><dt><span class="term">
+                COMMANDS
+            </span></dt><dd><p>Command description. </p></dd><dt><span class="term">
+                SOURCE
+            </span></dt><dd><p>Source code inclusion. </p></dd></dl></div><p>You can define your own items using the ROBODoc
+    configuration file, <code class="filename">robodoc.rc</code>.  See <a href="#customizing" title="7.&#xA0;Customizing ROBODoc">Customizing ROBODoc</a>.  </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="sections"></a>3.4. Sections</h3></div></div></div><p>The structure of source code for a project is usually
+    hierarchical.  A project might consists of several applications,
+    an application of several modules, a module of several functions
+    or even sub modules.  ROBODoc allows you to show this hierarchy in
+    your documentation.  For this you specify the hierarchy in the
+    header name.  For instance,  you have a project that is going to
+    create a new language called D.  The D Language project might
+    consists of three applications: a preprocessor, a compiler, and a
+    linker.  The compiler consists of two modules, a parser and a
+    generator.  The parser module consists of several
+    functions.</p><p>The following three headers show how this hierarchy can be
+    defined in the header name.</p><pre class="programlisting">
+#****h* D-Language/Compiler
+# FUNCTION
+#   The compiler takes a preprocessed source file and
+#   turns it into an object file.
+#***
+</pre><pre class="programlisting">
+#****h* D-Language/Linker
+# FUNCTION
+#   The linker module contains functions that scan a
+#   object file and build the executable.
+#***
+</pre><pre class="programlisting">
+#****h* Compiler/Parser
+# FUNCTION
+#   The parser module contains functions that scan a
+#   preprocessed source file and build the syntax tree.
+#***
+</pre><pre class="programlisting">
+#****f* Parser/ReadToken
+# FUNCTION
+#   ReadToken reads the next token from the input
+#   file.
+#***
+</pre><p>When you generate documentation with the option
+    <code class="option">--section</code>, ROBODoc uses the hierarchical
+    information when generating the table of contents and document
+    section information. For instance in HTML sections are started
+    with &lt;H1&gt;,  &lt;H2&gt;,  &lt;H3&gt; depending on the level
+    in the hierarchy.  The table of contents will also contain levels.  The
+    table of contents for the above example will be: </p><pre class="programlisting">
+1. D-Language/Compiler
+1.1 Compiler/Parser
+1.1.1 Parser/ReadToken
+2. D-Language/Linker
+</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="formatting"></a>3.5. Smart Text Formatting</h3></div></div></div><p>By default ROBODoc creates preformatted text in the output
+documentation for all the text it finds in an item.  This means
+that the formatting of the output looks the same as the formatting of
+the text of an item.  Line-breaks and indentation stay the same.
+This is easy but does not always create the best looking
+output.</p><p>ROBODoc can also try to deduce the formatting of your text based
+on the layout and indentation of your text and on special characters in the text.
+It works a bit similar to the input method of Wikis.  In the context of this
+manual this is called Smart Formatting.
+</p><p>You switch this on with the option <code class="option">--nopre</code>.
+ROBODoc now tries to find three kind of elements: paragraphs,
+lists, and preformatted text.</p><p>Paragraphs are separated by empty lines.  So the following item
+has two paragraphs.</p><div class="example"><a id="id2497225"></a><p class="title"><b>Example 3. Two paragraphs.</b></p><div class="example-contents"><pre class="programlisting">
+  FUNCTION
+    This function does something.
+
+    And it then does something else
+    and a bit more.
+</pre></div></div><br class="example-break" /><p> A List starts with a line that ends with a ':' which is then
+followed by one or more list items. List items should start with '*',
+'-', or 'o'.   So the following item contains a valid list: </p><div class="example"><a id="id2497246"></a><p class="title"><b>Example 4. A list.</b></p><div class="example-contents"><pre class="programlisting">
+  FUNCTION
+     This function does:
+     * a lot of foo
+     * some snafuing
+     * and a bit of foobarring.
+</pre></div></div><br class="example-break" /><p> A list item can span more than one line if the second and following
+lines are indented.  So this is also a valid list:</p><div class="example"><a id="id2497265"></a><p class="title"><b>Example 5. A list where one of the items spans more than one line.</b></p><div class="example-contents"><pre class="programlisting">
+  FUNCTION
+     This function does:
+     * a lot of foo and preprocessing of the
+       raw input with the aid
+       of the some magic
+     * some snafuing
+     * and a bit of foobarring.
+</pre></div></div><br class="example-break" /><p>If list items directly follow the name of a robodoc item they
+also form a valid list.  So this is a valid list:</p><div class="example"><a id="id2497287"></a><p class="title"><b>Example 6. an implicit list</b></p><div class="example-contents"><pre class="programlisting">
+  INPUTS
+    * inputname -- the name of the input file
+    * outputname -- the name of the output file
+    * n -- the number of characters to be written
+</pre></div></div><br class="example-break" /><p> Preformatted text is indicated by indenting it more that the
+surrounding text.  The first non-empty line in an item determines the
+base indenting.  Any lines with an indentation larger than this are
+preformatted.  An example:</p><div class="example"><a id="id2497309"></a><p class="title"><b>Example 7. Preformatted text</b></p><div class="example-contents"><pre class="literallayout">
+   FUNCTION
+     The following lines are preformatted
+        +--------+
+        | A box  |
+        |        |
+        +--------+
+     End of the preformatted text.
+</pre></div></div><br class="example-break" /><p>The following is a complete example.</p><div class="example"><a id="fullsmart"></a><p class="title"><b>Example 8. All three elements of smart formatting.</b></p><div class="example-contents"><pre class="literallayout">
+    This is some example text.
+    And some more.
+
+    This is even more, and we start a list:
+    * a list item
+    * a list item
+    * a list item
+
+    And we can also do preformatted stuff
+    by indenting
+        +--------+
+        |        |
+        +--------+
+    The box will stay.
+</pre></div></div><br class="example-break" /><p>will be turn into</p><div class="example"><a id="fulloutput"></a><p class="title"><b>Example 9. The corresponding HTML output.</b></p><div class="example-contents"><pre class="literallayout">
+    &lt;p&gt;This is some example text.
+    And some more.&lt;/p&gt;
+
+    &lt;p&gt;This is even more, and we start a list:&lt;/p&gt;
+    &lt;ul&gt;
+    &lt;li&gt;a list item&lt;/li&gt;
+    &lt;li&gt;a list item&lt;/li&gt;
+    &lt;li&gt;a list item&lt;/li&gt;
+    &lt;/ul&gt;
+
+    &lt;p&gt;And we can also do preformatted stuff
+    by indenting&lt;/p&gt;
+    &lt;pre&gt;
+        +--------+
+        |        |
+        +--------+
+    &lt;/pre&gt;
+    &lt;p&gt; The box will stay.&lt;/p&gt;
+</pre></div></div><br class="example-break" /></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2498762"></a>4. Extracting Documentation with ROBODoc</h2></div></div></div><p>Now that you have prepared your source code for use with
+    ROBODoc you are ready to extract the documentation.  There are
+    several choices to be made.</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2498774"></a>4.1. Single document or many smaller documents</h3></div></div></div><p>First of all, ROBODoc can be used in three modes.</p><div class="itemizedlist"><ul type="disc"><li><p>multidoc -- in this mode ROBODoc scans
+    all the source files in your source directory and creates a
+    separate document file for each of these in a document directory.
+    The document directory is created automatically. Its structure is
+    a mirror of the structure of your source directory.</p></li><li><p>singledoc -- in this mode ROBODoc scans all the source
+    files in your source directory and creates a single documentation
+    file that contains all the documentation extracted from your
+    source files.  </p></li><li><p>singlefile -- in this mode ROBODoc scans a single source
+    file and creates a single documentation file.</p></li></ul></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2497592"></a>4.2. multidoc</h3></div></div></div><p>The multidoc mode is useful to create browsable documents.
+    For instance many small HTML files that can be viewed with a
+    web-browser.  This mode requires the following arguments:</p><p>
+    <span><strong class="command">robodoc
+    --src <em class="replaceable"><code>source directory</code></em>
+    --doc <em class="replaceable"><code>document directory</code></em>
+    --multidoc
+    other options
+    </strong></span>
+</p><p>An additional option that is useful with this mode is
+    <code class="option">--index</code>, this creates a series of index files,
+    one for each header type.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2498822"></a>4.3. singledoc</h3></div></div></div><p> The singledoc mode is useful to create bulk documentation
+    that can be incorporated in other documents, or that can be
+    delivered to a client as a single document.  For instance a file
+    created in RTF format can be included into a larger design
+    document written in Word format.  This mode requires the following
+    arguments:</p><p>
+    <span><strong class="command">robodoc
+        --src <em class="replaceable"><code>source directory</code></em>
+        --doc <em class="replaceable"><code>document file without extension</code></em>
+        --singledoc
+        <em class="replaceable"><code>other options</code></em>
+    </strong></span>
+</p><p>An additional option that is useful with this mode is
+    <code class="option">--sections</code>, this causes the headers to follow a
+    section layout based on the module element hierarchy defined in the
+    header name.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2498869"></a>4.4. singlefile</h3></div></div></div><p>The singlefile mode is not very useful.  It is mainly used
+    for debugging purposes.  This mode requires the following
+    arguments:</p><p>
+    <span><strong class="command">robodoc
+    --src <em class="replaceable"><code>source file</code></em>
+    --doc <em class="replaceable"><code>document file</code></em>
+    --singlefile
+    other options
+</strong></span>
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2498898"></a>4.5. Output formats</h3></div></div></div><p>Your next choice is the output format. ROBODoc can create
+    documentation in several formats:</p><div class="itemizedlist"><ul type="disc"><li><p>HTML, option <code class="option">--html</code></p></li><li><p>RTF, option <code class="option">--rtf</code></p></li><li><p>LaTeX, option <code class="option">--latex</code></p></li><li><p>XML DocBook, option <code class="option">--dbxml</code></p></li></ul></div><p>What format to use depends on your wishes. If you want a
+    single printable document, use LaTeX or XML DocBook.  If you want
+    a document that can be included into a larger (Word) document use
+    RTF.  If you want something that is browsable use HTML, or use XML
+    DocBook and then convert it to HTML.</p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2498342"></a>5. Examples of How to Create Documentation</h2></div></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2498347"></a>5.1. HTML Example</h3></div></div></div><p> For this you need a web browser, say FireFox or Mozilla.  You can try
+  this in the robodoc root directory.  It creates a document called
+  <code class="filename">HDocs/masterindex.html</code> plus a lot of smaller
+  documents from all the source files in the directory
+  <code class="filename">Source</code>.</p><pre class="programlisting">
+<span><strong class="command">robodoc</strong></span> <code class="option">--src</code> ./Source <code class="option">--doc</code> ./HDocs <code class="option">--multidoc</code> <code class="option">--index</code> <code class="option">--html</code>
+</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2498374"></a>5.2. RTF Example</h3></div></div></div><p>For this you need an rtf reader, for instance
+    <span><strong class="command">Word</strong></span>.  You can try this in the robodoc root
+    directory.</p><pre class="programlisting">
+<span><strong class="command">robodoc</strong></span> <code class="option">--src</code> ./Source <code class="option">--doc</code> api <code class="option">--singledoc</code> <code class="option">--rtf</code> <code class="option">--sections</code>
+</pre><p>This will create a document called
+    <code class="filename">api.rtf</code>.</p><p>By default the document looks pretty plain.  There is no
+    chapter numbering or a table of contents, even if you asked for
+    it.  All the information for this is included but not visible.
+    This is because chapter numbering and a table of contents are
+    generated by Word based on formatting information that is part of
+    a Word document but not part of a RTF document.  </p><p>To make it visible you include the generated document into a
+    bigger document with the right formatting options.  This is best
+    done with a cut-and-paste operation.  Use the cut-past-paste
+    special menu, and paste it as RTF formatted text into your Word
+    document.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2498448"></a>5.3. LaTeX Example</h3></div></div></div><p> For this you need <span><strong class="command">latex</strong></span> and
+  <span><strong class="command">makeindex</strong></span>. You can try this in the robodoc root
+  directory.  It creates a single document called
+  <code class="filename">api.dvi</code> from all the source files in the
+  directory Source.</p><pre class="programlisting">
+<span><strong class="command">robodoc</strong></span> <code class="option">--src</code> ./Source <code class="option">--doc</code> api <code class="option">--singledoc</code> <code class="option">--latex</code> <code class="option">--sections</code>
+<span><strong class="command">latex</strong></span> api.tex
+<span><strong class="command">latex</strong></span> api.tex
+<span><strong class="command">makeindex</strong></span> api.idx
+<span><strong class="command">latex</strong></span> api.tex
+<span><strong class="command">xdvi</strong></span> api.dvi
+</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2498537"></a>5.4. XML DocBook Example</h3></div></div></div><p>
+    DocBook is a xml format to create technical documentation, see.
+    <a href="http://www.docbook.org/" target="_top"><em class="citetitle">DocBook.org</em></a>.
+    DocBook is quite nice. This manual for instance is written in DocBook and
+    automatically translated into html and pdf format.
+</p><p>
+    You can use the DocBook output of ROBODoc to create several other formats,
+    for instance: html, pdf, html-help.
+    For this you need a tool that can process a DocBook file. There
+    are several of these tools.
+</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id2498564"></a>5.4.1. DocBook with html output</h4></div></div></div><p>The easiest to use is <span><strong class="command">xsltproc</strong></span>. It works under
+    Windows and Unix.  A typical workflow under Windows is:
+</p><pre class="programlisting">
+<span><strong class="command">robodoc</strong></span> <code class="option">--src</code> ./Source <code class="option">--doc</code> api <code class="option">--singledoc</code> <code class="option">--dbxml</code> <code class="option">--sections</code>
+<span><strong class="command">xsltproc</strong></span> api.xsl api.xml &gt; api.html
+</pre><p>
+    Where <code class="filename">api.xsl</code> contains:
+</p><pre class="literallayout">
+&lt;?xml version='1.0'?&gt;
+&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"&gt;
+    &lt;xsl:import href="e:/docbook/html/docbook.xsl"/&gt;
+    &lt;xsl:param name="admon.graphics" select="1"/&gt;
+    &lt;xsl:param name="section.autolabel" select="1"/&gt;
+&lt;/xsl:stylesheet&gt;
+
+</pre><p>For this you need <span><strong class="command">xsltproc</strong></span>. For Windows these can be found at
+    <a href="http://www.zlatkovic.com/libxml.en.html" target="_top">
+        <em class="citetitle">http://www.zlatkovic.com libxml.en.html</em></a>,
+    and the stylesheets which can be found at
+    <a href="http://docbook.sourceforge.net/" target="_top"><em class="citetitle">http://docbook.sourceforge.net/</em></a>.
+    In the example above the style sheets are installed on <code class="filename">e:/docbook/</code>.
+</p><p>
+    More information about xsl can be found at
+    <a href="http://www.sagehill.net/docbookxsl/" target="_top"><em class="citetitle">http://www.sagehill.net/docbookxsl/</em></a>.
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id2499568"></a>5.4.2. DocBook with html help output</h4></div></div></div><p>The same program can be used to
+    <a href="http://docbook.sourceforge.net/release/xsl/current/doc/htmlhelp.html" target="_top">
+        <em class="citetitle">create a html help</em>
+    </a> file. For this you need
+    <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/hwMicrosoftHTMLHelpDownloads.asp" target="_top">
+        <em class="citetitle">HTML Help Workshop</em>
+    </a>. The workflow now is:
+</p><pre class="programlisting">
+<span><strong class="command">robodoc</strong></span> <code class="option">--src</code> ./Source <code class="option">--doc</code> api <code class="option">--singledoc</code> <code class="option">--dbxml</code> <code class="option">--sections</code>
+<span><strong class="command">xsltproc</strong></span> api.xsl api.xml
+<span><strong class="command">hhc</strong></span> htmlhelp.hhp
+</pre><p>
+    Where <code class="filename">api.xsl</code> contains:
+</p><pre class="literallayout">
+&lt;?xml version='1.0'?&gt;
+&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"&gt;
+    &lt;xsl:import href="e:/docbook/htmlhelp/htmlhelp.xsl"/&gt;
+    &lt;xsl:param name="admon.graphics" select="1"/&gt;
+    &lt;xsl:param name="section.autolabel" select="1"/&gt;
+&lt;/xsl:stylesheet&gt;
+
+</pre></div></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="options"></a>6. Options</h2></div></div></div><p>The behavior of ROBODoc can be further fine-tune with a large number of
+        options.</p><div class="variablelist"><dl><dt><span class="term">-c</span></dt><dd><p>Show the copyright message.</p></dd><dt><a id="cmode"></a><span class="term"><a id="cmode.term"></a>--cmode</span></dt><dd><p>Use ANSI C grammar in SOURCE items and use this
+                    for syntax highlighting (<code class="literal">HTML</code> only).</p></dd><dt><span class="term">--css</span></dt><dd><p> Use the content of the specified file to create the
+                    <code class="filename">robodoc.css</code>.  The content of the file is
+                    copied into <code class="filename">robodoc.css</code>.  </p></dd><dt><span class="term">--dbxml</span></dt><dd><p>Generate documentation in XML DocBook format.</p></dd><dt><span class="term">--debug</span></dt><dd><p>Works like --tell, bug gives a lot more information.</p></dd><dt><span class="term">--doc</span></dt><dd><p>Define the path to the documentation directory or
+                    documentation file.  A path can start with
+                    <code class="literal">./</code> or <code class="literal">/</code>.  Do not use
+                    <code class="literal">..</code> in the path.  The documentation
+                    directory can be a subdirectory of the source directory,
+                    or be parallel to the source directory,
+                    however they can not be equal. So
+                    <span><strong class="command">--src ./sources</strong></span>
+                    together with
+                    <span><strong class="command">--doc ./documents</strong></span>
+                    is fine,
+                    but
+                    <span><strong class="command">--src ./Everything</strong></span>
+                    together with
+                    <span><strong class="command">--doc ./Everything</strong></span>
+                    is not.
+                </p></dd><dt><span class="term">--doctype_name</span></dt><dd><p>DocBook output requires a <code class="literal">&lt;!DOCTYPE&gt;</code> tag.
+                    With this option you can specify your own version of it.  You have
+                    to use it in combination with <span><strong class="command">--doctype_location</strong></span>.
+                    An example:
+                </p><pre class="programlisting">
+    robodoc --src test --doc test
+        --doctype_location "-//OASIS//DTD Simplified DocBook XML V1.1//EN"
+        --doctype_name docbook-simple/sdocbook.dtd
+        --dbxml
+</pre><p>
+                    results in the following docbook file with the following head:
+                </p><pre class="programlisting">
+&lt;!DOCTYPE article PUBLIC "-//OASIS//DTD Simplified DocBook XML V1.1//EN"
+"docbook-simple/sdocbook.dtd"&gt;
+</pre></dd><dt><span class="term">--doctype_location</span></dt><dd><p>See <span><strong class="command">--doctype_name</strong></span>.</p></dd><dt><span class="term">--headless</span></dt><dd><p>Do not create the head of a document. This allows you to
+                    create documents that can be included in other documents, or
+                    to which you can add your own style.</p><p>For html output this means that no
+                    <code class="literal">&lt;html&gt;&lt;head&gt; ..... &lt;body&gt;</code>
+                    is generated.
+                </p><p>For LaTeX output this means none of the document
+                    initialization code is generated, such as
+                    <code class="literal">\documentclass{article}</code> or
+                    <code class="literal">\begin{document}</code> is generated.  If you use
+                    this option in combination with <code class="option"> --footless</code>
+                    you can use <code class="literal">\include</code> or
+                    <code class="literal">\input</code> commands to include the ROBODoc
+                    generated documents in a larger document.</p><p>For XML DocBook output this means no
+                    <code class="literal">&lt;!DOCTYPE&gt;</code>,
+                    <code class="literal">&lt;article&gt;</code>, and
+                    <code class="literal">&lt;articleinfo&gt;</code> is generated.
+                </p></dd><dt><span class="term">--first_section_level</span></dt><dd><p>Make the first section start at the specified level
+                    instead of 1.  This is useful if you want to include the
+                    generated documentation in another document.
+                </p></dd><dt><span class="term">--footless</span></dt><dd><p>Do not create the foot of a document. This allows you to
+                    create documents that can be included in other documents, or
+                    to which you can add your own style.</p><p>For html output this means that no
+                    <code class="literal">&lt;/body&gt;&lt;/html&gt;</code>
+                    is generated.
+                </p><p>For LaTeX output this means no
+                    <code class="literal">\end{document}</code> is generated.
+                </p><p>For XML DocBook output this means no
+                    <code class="literal">&lt;/article&gt;</code> is generated.
+                </p></dd><dt><span class="term">--html</span></dt><dd><p>Generate documentation in HTML format.</p></dd><dt><span class="term">--ignore_case_when_linking</span></dt><dd><p>Ignore differences in case when creating cross links.
+                    This is handy for languages such as Fortran or Pascal, but
+                    in most cases it is better not to use it.</p></dd><dt><span class="term">--internal</span></dt><dd><p>Also include headers marked internal.</p></dd><dt><span class="term">--internalonly</span></dt><dd><p>Only include headers marked internal.</p></dd><dt><span class="term">--index</span></dt><dd><p>Also create a master index file.</p></dd><dt><span class="term">--lock</span></dt><dd><p> Per source file robodoc locks on the first header marker
+                    it finds and will recognize only that particular header marker
+                    for the remaining part of the file.  In addition it locks on
+                    the first remark marker in each header and will recognize only
+                    that particular remark marker for the remaining part of the
+                    header.  </p></dd><dt><span class="term">--multidoc</span></dt><dd><p>Generate one document per source file, and copy the
+                    directory hierarchy.</p></dd><dt><span class="term">--nosource</span></dt><dd><p>Do not include the SOURCE items.</p></dd><dt><span class="term">--no_subdirectories</span></dt><dd><p>Do not create any subdirectories in the documentation directory
+                instead write all the documentation files in the root directory. The root directory is the one specified with <code class="option">--doc</code>.</p></dd><dt><span class="term">--nodesc</span></dt><dd><p>Do not scan any subdirectories, scan only the top level
+                    directory of the source tree.</p></dd><dt><span class="term">--nosort</span></dt><dd><p>Do not sort the headers when generating the
+                    documentation. The headers will appear in the same order in
+                    the documentation as they appear in the source code.</p></dd><dt><a id="nopre"></a><span class="term"><a id="nopre.term"></a>--nopre</span></dt><dd><p>With this option ROBODoc does not generate preformatted
+                    text when creating the item documentation. (Using
+                    the <code class="literal">&lt;PRE&gt;</code> and
+                    <code class="literal">&lt;/PRE&gt;</code> construction in HTML format
+                    for instance). Instead ROBODoc tries to deduce
+                    the formatting from the indentation and special
+                    characters. See <a href="#formatting" title="3.5.&#xA0;Smart Text Formatting">Smart Text Formatting</a>. This creates much better
+                    looking documentation.
+                </p></dd><dt><span class="term">--nogeneratedwith</span></dt><dd><p>Do not add the "generated with robodoc" message at the
+                    top of each documentation file.</p></dd><dt><span class="term">--one_file_per_header</span></dt><dd><p>Create a separate documentation file for each header.
+                </p></dd><dt><span class="term">--rc</span></dt><dd><p>Use the specified file instead of <code class="filename">robodoc.rc</code>.
+                </p></dd><dt><span class="term">--rtf</span></dt><dd><p>Generate documentation in RTF format.</p></dd><dt><span class="term">--sections</span></dt><dd><p>Create sections based on the module hierarchy.</p></dd><dt><span class="term">--sectionnameonly</span></dt><dd><p>ROBODoc generates the section headers with names only,
+                    no chapter numbers, no parent section names.</p></dd><dt><span class="term">--singledoc</span></dt><dd><p> Define the documentation directory or documentation
+                    file.</p></dd><dt><span class="term">--singlefile</span></dt><dd><p> Generate a single document from a single file </p></dd><dt><span class="term">--src</span></dt><dd><p> Define the path for the source directory or source
+                    file.  The path can start with <code class="literal">./</code> or
+                    <code class="literal">/</code>.  Do not use <code class="literal">..</code> in the
+                    path.  </p></dd><dt><span class="term">--tabsize</span></dt><dd><p>Lets you specify the tab size.</p></dd><dt><span class="term">--tabstops</span></dt><dd><p>Specify tab stop locations in a comma separated list.</p><p>
+                  Example: <code class="option">--tabstops 10,20,40,80</code>
+                </p></dd><dt><span class="term">--toc</span></dt><dd><p>Add a table of contents. This works in multidoc mode as
+                    well as singledoc mode.</p></dd><dt><span class="term">--latex</span></dt><dd><p>Generate documentation in <code class="literal">LaTeX</code> format.</p></dd><dt><span class="term">--tell</span></dt><dd><p>ROBODoc tells you what steps it is taking.</p></dd><dt><span class="term">--documenttitle</span></dt><dd><p>Specify the Title of the whole documentation.</p></dd><dt><span class="term">--altlatex</span></dt><dd><p>Alternate <code class="literal">LaTeX</code> file format
+                (bigger / clearer than normal).
+                </p></dd><dt><span class="term">--latexparts</span></dt><dd><p>Make the first module level as <code class="literal">PART</code>
+                in <code class="literal">LaTeX</code> output
+                (Gives you one more subsection level).</p></dd><dt><a id="syntaxcolors_enable"></a><span class="term"><a id="syntaxcolors_enable.term"></a>--syntaxcolors_enable</span></dt><dd><p>Enable only specific syntax highlighting features in
+                <code class="literal">SOURCE</code> items (<code class="literal">HTML</code> only).</p><p>Usage:
+                  <code class="option">--syntaxcolors_enable
+                  quotes,squotes,line_comments,block_comments,keywords,non_alpha</code>
+                </p><div class="itemizedlist"><ul type="disc"><li><code class="option">quotes</code>
+                    -- Enable highlighting of <code class="literal">"string literals"
+                  </code></li><li><code class="option">squotes</code>
+                    -- Enable highlighting of <code class="literal">'string literals'
+                  </code></li><li><a id="syntaxcolors_enable_line_comments"></a><code class="option"><a id="syntaxcolors_enable_line_comments.option"></a>line_comments</code>
+                    -- Enable highlighting of comments that span until the end of lines
+                    (See <a href="#linecomments" title="7.17.&#xA0;source line comments block">source line comments block</a>)
+                  </li><li><a id="syntaxcolors_enable_block_comments"></a><code class="option"><a id="syntaxcolors_enable_block_comments.option"></a>block_comments</code>
+                    -- Enable highlighting of block comments
+                    (See <a href="#remark_begin_end" title="7.16.&#xA0; remark begin markers and remark end markers block">
+remark begin markers and remark end markers block</a>)
+                  </li><li><a id="syntaxcolors_enable_keywords"></a><code class="option"><a id="syntaxcolors_enable_keywords.option"></a>keywords</code>
+                    -- Enable highlighting of keywords
+                    (See <a href="#keywords" title="7.18.&#xA0;keywords block">keywords block</a>)
+                  </li><li><code class="option">non_alpha</code>
+                    -- Enable highlighting of non alphanumeric characters
+                    (like: <code class="literal">#</code>, <code class="literal">$</code>, <code class="literal">%</code>, etc...)
+                  </li></ul></div><p>You don't need this if you have the
+                  <code class="option"><a href="#cmode">--cmode</a></code>
+                  option specified.
+                </p><p> See also the
+                  <code class="option"><a href="#syntaxcolors">--syntaxcolors</a></code>
+                  option.
+                </p></dd><dt><a id="syntaxcolors"></a><span class="term"><a id="syntaxcolors.term"></a>--syntaxcolors</span></dt><dd><p>Turn on all syntax highlighting features in <code class="literal">SOURCE</code>
+                items (<code class="literal">HTML</code> only).</p><p>This option equals to:
+                  <code class="option">--syntaxcolors_enable
+                  quotes,squotes,line_comments,block_comments,keywords,non_alpha</code>
+                </p><p>You don't need this if you have the
+                  <code class="option"><a href="#cmode">--cmode</a></code>
+                  option specified.
+                </p><p> See also the
+                  <code class="option"><a href="#syntaxcolors_enable">--syntaxcolors_enable</a></code>
+                  option.
+                </p></dd><dt><span class="term">--dotname</span></dt><dd><p>Specify the name (and path / options) of
+                <code class="literal">DOT</code> tool.</p><p>See <a href="#tools" title="8.6.&#xA0;Using external tools">Using external tools</a>.</p></dd><dt><span class="term">--masterindex</span></dt><dd><p>Specify the title and filename of the master index page
+                </p><p>Usage:
+                  <code class="option">--masterindex
+                  <em class="replaceable"><code>title</code></em>,<em class="replaceable"><code>filename</code></em>
+                  </code>
+                </p><p>Example:
+                  <code class="option">--masterindex "Index Page,index"</code>
+                </p></dd><dt><span class="term">--sourceindex</span></dt><dd><p>Specify the title and filename of the source files index
+                page</p><p>Usage:
+                  <code class="option">--sourceindex
+                  <em class="replaceable"><code>title</code></em>,<em class="replaceable"><code>filename</code></em>
+                  </code>
+                </p><p>Example:
+                  <code class="option">--sourceindex "Source files,sources"</code>
+                </p></dd><dt><span class="term">--header_breaks</span></dt><dd><p>If a header has multiple names, ROBODoc can insert line breaks after every
+                specified number of header names to improve readability. If you do not specify this
+                option, ROBODoc will insert a line break after every two header names. Set it to
+                zero to disable the line breaks.</p><p>
+                  Example: <code class="option">--header_breaks 3</code>
+                </p></dd></dl></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="customizing"></a>7. Customizing ROBODoc</h2></div></div></div><p> ROBODoc can be configured with a configuration file called
+    <code class="filename">robodoc.rc</code>.  With it you can define item
+    names, frequently used options, and translations for English
+    terms. One should note that if a configuration file is specified,
+    its definitions over-ride ROBODoc internal (i.e. built-in) settings.
+    This is a feature; some arbitrary language may include syntax
+    which conflicts with ROBODoc's internal markers. By taking advantage
+    of a configuration file, these sort of issues and conflicts
+    can be circumvented.  An example is shown below.
+</p><pre class="programlisting">
+# Example robodoc.rc
+#
+items:
+    NAME
+    FUNCTION
+    SYNOPSIS
+    INPUTS
+    OUTPUTS
+    SIDE EFFECTS
+    HISTORY
+    BUGS
+    EXAMPLE
+ignore items:
+    HISTORY
+    BUGS
+item order:
+    FUNCTION
+    SYNOPSIS
+    INPUTS
+    OUTPUTS
+source items:
+    SYNOPSIS
+preformatted items:
+    INPUTS
+    OUTPUTS
+format items:
+    FUNCTION
+    SIDE EFFECTS
+options:
+    --src ./source
+    --doc ./doc
+    --html
+    --multidoc
+    --index
+    --tabsize 8
+headertypes:
+    J  "Projects"          robo_projects    2
+    F  "Files"             robo_files       1
+    e  "Makefile Entries"  robo_mk_entries
+    x  "System Tests"      robo_syst_tests
+    q  Queries             robo_queries
+ignore files:
+    README
+    CVS
+    *.bak
+    *~
+    "a test_*"
+accept files:
+    *.c
+    *.h
+    *.pl
+header markers:
+    /****
+    #****
+remark markers:
+    *
+    #
+end markers:
+    ****
+    #****
+header separate characters:
+    ,
+header ignore characters:
+    [
+remark begin markers:
+    /*
+remark end markers:
+    */
+source line comments:
+    //
+keywords:
+    if
+    do
+    while
+    for
+</pre><p>The configuration file consists of a number of blocks.
+    Each block starts with a name followed by a
+    <code class="literal">:</code>.
+    In each block you define a number of values.  Each value must
+    start with at least one space.
+</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2502679"></a>7.1. items block</h3></div></div></div><p>In this block you can define the names of items that
+        ROBODoc should recognize.  Item names can consist of more than
+        one word but should be written in all uppercase characters.
+        Define one item name per line.  You do not need to put quotes
+        around them if they contain spaces.
+    </p><p>If you do not define an items block ROBODoc uses its
+        default list of item names.  If you define an items block
+        ROBODoc uses only those item names, any of the default items names
+        (except SOURCE) are no longer recognized.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2502700"></a>7.2. ignore items block</h3></div></div></div><p>In this block you can define the names of items that
+        ROBODoc should ignore when generating documentation.
+        This can be useful if you want to create documentation
+        for a client, but for instance do not want to include
+        the history items and bugs items.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2502714"></a>7.3. item order block</h3></div></div></div><p>In this block you can define the order in which items
+        are to appear in the generated documentation.
+        The items listed here will appear in the given order in the
+        generated documentation.  Any remaining items appear
+        after these items in the order they were found in the header.
+        This allows you to make the documentation look more uniform.
+        </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="sourceitems"></a>7.4. source items block</h3></div></div></div><p>In this block you can define the names of items that
+        ROBODoc handles in the same way as the SOURCE item.
+    </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2502749"></a>7.5. preformatted items block</h3></div></div></div><p>
+    In this block you can define the names of items that should be always
+    preformatted. This is useful if you have the
+    <code class="option"><a href="#nopre">--nopre</a></code> option
+    specified and want specific items (like input and output lists) to be
+    automatically preformatted. See
+    <a href="#formatting" title="3.5.&#xA0;Smart Text Formatting">Smart Text Formatting</a> for more
+    information.
+  </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2502783"></a>7.6. format items block</h3></div></div></div><p>
+    In this block you can define the names of items that should be formatted by
+    the <a href="#formatting" title="3.5.&#xA0;Smart Text Formatting">Smart Text Formatting</a> feature
+    (like function descriptions) even if the
+    <code class="option"><a href="#nopre">--nopre</a></code>
+    option has not been specified.
+  </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2502813"></a>7.7. options block</h3></div></div></div><p>In this block you can define frequently used options.
+        The options you specify here are added to any options you
+        specify on the command line.</p><p>
+      See <a href="#options" title="6.&#xA0;Options">Options</a>.
+    </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="headertypes_block"></a>7.8. headertypes block</h3></div></div></div><p>In this block you can define your own header types.
+        These are added to the existing header types.  Each new
+        header type requires three parameters: the character used to
+        indicate a header of this type, the title for this type as
+        used in the master index and the name of the file in which the
+        index of this type is stored.  If you use a character of an
+        existing header type, this header type is overwritten.
+    </p><p>
+        Additionally the sorting priority can also be specified for each header
+        type. Headers with higher priority will appear earlier in the
+        generated output. (For example you can make module definitions appear
+        at the beginning of a page.) If this parameter is omitted, the header
+        will have the priority 0 (lowest) by default. All pre-defined header
+        types have zero priority, except
+        "<a href="#header_type_h">Header for a module in a project</a>",
+        which has the sorting priority 1.
+        See <a href="#header_types" title="3.2.&#xA0;Header Types">Header Types</a>.
+    </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2502896"></a>7.9. ignore files block</h3></div></div></div><p>In this block you can define the names of files or
+        directories that ROBODoc should ignore while scanning
+        the directory tree for source files.  You can use the
+        wildcard symbols <code class="literal">*</code> and
+        <code class="literal">?</code>.  If you use spaces in the expression
+        enclose the expression in quotes.
+    </p><p> For instance, the rc file above causes ROBODoc
+        to skip all <code class="filename">README</code> files, all files with
+        the name <code class="filename">CVS</code> (these are usually
+        directories).  It also skips all files with a name that ends
+        with <code class="filename">.bak</code> or <code class="filename">~</code> or
+        that start with <code class="filename">a test_</code> </p><p>Normally you specify the names of directories here
+        and do the filtering of file names with a accept files block.
+    </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2502963"></a>7.10. accept files block</h3></div></div></div><p>In this block you can define the names of files that
+        robodoc should accept. This test is carried out after the
+        'ignore files' filtering is performed.  Any files that do
+        not match the patterns in this block are ignored by ROBODoc.
+    </p><p>
+        If there is no accept files block all files are accepted.
+    </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2502981"></a>7.11. header markers block</h3></div></div></div><p>
+        In this block you define what ROBODoc will recognize
+        as start of a header.  If you use this block ROBODoc only
+        recognizes these markers, any of the inbuilt markers will
+        be ignored.
+    </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2502994"></a>7.12. remark markers block</h3></div></div></div><p>
+        In this block you define what ROBODoc will recognize
+        as start of remark.  If you use this block ROBODoc only
+        recognizes these markers, any of the inbuilt markers will
+        be ignored.
+    </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2503006"></a>7.13. end markers block</h3></div></div></div><p>
+        In this block you define what ROBODoc will recognize
+        as end of a header.  If you use this block ROBODoc only
+        recognizes these markers, any of the inbuilt markers will
+        be ignored.
+    </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="separate_characters_block"></a>7.14. header separate characters block</h3></div></div></div><p>
+    In this block you can specify the separation character(s) for multiple
+    header names. The default character is "<code class="literal">,</code>" (comma) if
+    this block is missing. See
+    <a href="#preparing" title="3.&#xA0;Preparing your source code for ROBODoc">Preparing your source code for ROBODoc</a>
+    for more information.
+  </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="header_ignore_characters_block"></a>7.15. header ignore characters block</h3></div></div></div><p>
+    In this block you can specify character(s) where the evaluation of a header
+    should stop. The default character is "<code class="literal">[</code>" if this block
+    is missing. This is useful to supply additional information to the header
+    that ROBODoc should not care about.
+  </p><p>
+    For example one can include the version number of the function:
+</p><pre class="programlisting">
+  ****f* financial.library/StealMoney [2.0]
+</pre><p>
+  </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="remark_begin_end"></a>7.16. 
+remark begin markers and remark end markers block</h3></div></div></div><p>
+        Some languages allow remarks to span more than one line. They
+        start a remark with a begin marker and end it with another
+        marker.  For instance in C you can have:
+    </p><pre class="programlisting">
+   /* This is a
+      multi-line remark.
+    */
+</pre><p>
+        Here the markers are <code class="literal">/*</code> and <code class="literal">*/</code>.
+        If you tell ROBODoc what these markers are in a remark begin
+        markers block and remark end markers block. ROBODoc can skip
+        them in source items.</p><p>We illustrate this with an example. Say we have a language
+        that start a remark with <code class="literal">|*</code> and
+        <code class="literal">*|</code>.  We define <code class="literal">SYNOPSIS</code>
+        to be a source like item.  If we now run ROBODoc on the
+        without a remark begin markers and
+        end markers block on the following piece of source, </p><pre class="programlisting">
+|****f* Bar/foo
+ * FUNCTION
+ *   foo computes the foo factor.
+ * SYNOPSIS
+ *|
+int foo( float correction )
+|*
+ * BUGS
+ *   None
+ * SOURCE
+ *|  .
+{
+    return correction * 42.0;
+}
+|*****|
+</pre><p>the extracted documentation will look like:</p><pre class="literallayout">
+ FUNCTION
+   foo computes the foo factor.
+ SYNOPSIS
+   *|
+   int foo( float correction )
+   |*
+ BUGS
+   None
+ SOURCE
+   *|  .
+   {
+      return correction * 42.0;
+   }
+</pre><p>because ROBODoc considers
+    <code class="literal">|*</code> and <code class="literal">*|</code>.to be part of the
+    source, and not part of the begin or end of a header.</p><p> If you add</p><pre class="programlisting">
+remark begin markers:
+       |*
+remark end markers:
+       *|
+</pre><p>the output will look like:</p><pre class="literallayout">
+ FUNCTION
+   foo computes the foo factor.
+ SYNOPSIS
+   int foo( float correction )
+ BUGS
+   None
+ SOURCE
+   {
+      return correction * 42.0;
+   }
+</pre><p>
+    These markers will also be used to highlight block comments if the
+    <code class="option">
+      <a href="#syntaxcolors_enable">--syntaxcolors_enable</a>
+      <a href="#syntaxcolors_enable_block_comments">block_comments</a>
+    </code>
+    option (or the
+    <code class="option">
+      <a href="#syntaxcolors">--syntaxcolors</a>
+    </code>
+    option) is specified (Similar to
+    <a href="#linecomments" title="7.17.&#xA0;source line comments block">source line comments block</a>).
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="linecomments"></a>7.17. source line comments block</h3></div></div></div><p>
+        Here you can specify markers which start whole line comments.
+        (Comments that span until the end of line like "<code class="literal">//</code>",
+        "<code class="literal">REM</code>", "<code class="literal">;</code>", etc...)
+        These lines will be highlighted in the generated <code class="literal">HTML</code>
+        output if the
+        <code class="option">
+          <a href="#syntaxcolors_enable">--syntaxcolors_enable</a>
+          <a href="#syntaxcolors_enable_line_comments">line_comments</a>
+        </code>
+        option (or the
+        <code class="option">
+          <a href="#syntaxcolors">--syntaxcolors</a>
+        </code>
+        option) has been specified.</p><p>
+        You don't need this if you have the
+        <code class="option">
+          <a href="#cmode">--cmode</a>
+        </code>
+        option specified.
+    </p><p>
+        The default highlighting color can be changed in the <code class="literal">CSS</code>
+        file (<code class="literal">span.comment</code>).
+    </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="keywords"></a>7.18. keywords block</h3></div></div></div><p>
+        Here you can specify the keywords in your <code class="literal">SOURCE</code> items.
+        These keywords will be highlighted in the generated <code class="literal">HTML</code>
+        output if the
+        <code class="option">
+          <a href="#syntaxcolors_enable">--syntaxcolors_enable</a>
+          <a href="#syntaxcolors_enable_keywords">keywords</a>
+        </code>
+        option (or the
+        <code class="option">
+          <a href="#syntaxcolors">--syntaxcolors</a>
+        </code>
+        option) has been specified. Keywords meant to be the language native ones
+        (<code class="literal">for</code>, <code class="literal">if</code>, etc...).
+    </p><p>
+        You don't need this if you have the
+        <code class="option">
+          <a href="#cmode">--cmode</a>
+        </code>
+        option specified.
+    </p><p>
+        The default highlighting color can be changed in the <code class="literal">CSS</code>
+        file (<code class="literal">span.keyword</code>).
+    </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2503510"></a>7.19. Configuration file location</h3></div></div></div><p>ROBODoc searches the your current directory for the
+    <code class="filename">robodoc.rc</code> file. If it can't find
+    it there it will search in <code class="literal">$HOME/</code>, then
+    <code class="filename">$HOMEDRIVE$HOMEPATH/</code>, and finally in
+    <code class="filename">/usr/share/robodoc/</code>.</p><p>With the <code class="option">--rc</code> option you can tell ROBODoc to
+    use a different file than <code class="filename">robodoc.rc</code> as
+    configuration file.  This is handy if you want to create
+    documentation in different formats.  For instance: </p><pre class="programlisting">
+robodoc --rc  htmlsingle.rc
+robodoc --rc  rtfsingle.rc
+robodoc --rc  htmlmulti.rc
+</pre></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2504528"></a>8. Tips and Tricks</h2></div></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2504533"></a>8.1. The SOURCE Item</h3></div></div></div><p> With a little extra work you can include part of your
+    source code into your documentation too.  The following example
+    shows how this is done:</p><pre class="programlisting">
+/****f* Robodoc/RB_Panic [2.0d]
+ * NAME
+ *   RB_Panic - Shout panic, free resources, and shut down.
+ * SYNOPSIS
+ *   RB_Panic (cause, add_info)
+ *   RB_Panic (char *, char *)
+ * FUNCTION
+ *   Prints an error message.
+ *   Frees all resources used by robodoc.
+ *   Terminates program.
+ * INPUTS
+ *   cause    - pointer to a string which describes the
+ *              cause of the error.
+ *   add_info - pointer to a string with additional information.
+ * SEE ALSO
+ *   RB_Close_The_Shop ()
+ * SOURCE
+ */
+
+  void RB_Panic (char *cause, char *add_info)
+  {
+    printf ("Robodoc: Error, %s\n",cause) ;
+    printf ("         %s\n", add_info) ;
+    printf ("Robodoc: Panic Fatal error, closing down..\n") ;
+    RB_Close_The_Shop () ; /* Free All Resources */
+    exit(100) ;
+  }
+
+/*******/
+</pre><p>You can add a SOURCE item as the last item of your header. Then
+    instead of closing your header with an end marker, you close it
+    normally.  The end marker is instead placed at the end of the
+    fragment of source code that you want to include.  </p><p>SOURCE items are included by default.  If you want to create a
+    document without the SOURCE items use the option
+    <code class="option">--nosource</code>.</p><p>You can also make normal items work like the source item,
+    see <a href="#sourceitems" title="7.4.&#xA0;source items block">source items block</a>.
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2504567"></a>8.2. Minimizing Duplicate Information</h3></div></div></div><p>It is always good to avoid having the same information in several different locations.
+    It is easy to create headers that have a lot information duplication.  Take for instance
+    the following header.
+</p><pre class="programlisting">
+/****f* Robodoc/RB_Panic [2.0d]
+ * NAME
+ *   RB_Panic - Shout panic, free resources, and shut down.
+ * SYNOPSIS
+ *   RB_Panic (cause, add_info)
+ *   RB_Panic (char *, char *)
+ * FUNCTION
+ *   Prints an error message.
+ *   Frees all resources used by robodoc.
+ *   Terminates program.
+ * INPUTS
+ *   cause    - pointer to a string which describes the
+ *              cause of the error.
+ *   add_info - pointer to a string with additional information.
+ * SEE ALSO
+ *   RB_Close_The_Shop ()
+ * SOURCE
+ */
+
+  void RB_Panic (char *cause, char *add_info)
+  {
+    printf ("Robodoc: Error, %s\n",cause) ;
+    printf ("         %s\n", add_info) ;
+    printf ("Robodoc: Panic Fatal error, closing down..\n") ;
+    RB_Close_The_Shop () ; /* Free All Resources */
+    exit(100) ;
+  }
+
+/*******/
+</pre><p>
+    The name <code class="literal">RB_Panic</code> occurs five times.  This is tedious to
+    type and difficult to maintain.
+    However with a the right <code class="filename">robodoc.rc</code> this can be changed
+    to:
+</p><pre class="programlisting">
+/****f* Robodoc/RB_Panic [2.0d]
+ * SUMMARY
+ *   Shout panic, free resources, and shut down.
+ * SYNOPSIS
+ */
+
+void RB_Panic (char* cause, char *add_info)
+
+/*
+ * FUNCTION
+ *   Prints an error message.
+ *   Frees all resources used by robodoc.
+ *   Terminates program.
+ * INPUTS
+ *   cause    - pointer to a string which describes the
+ *              cause of the error.
+ *   add_info - pointer to a string with additional information.
+ * SEE ALSO
+ *   RB_Close_The_Shop ()
+ * SOURCE
+ */
+  {
+    printf ("Robodoc: Error, %s\n",cause) ;
+    printf ("         %s\n", add_info) ;
+    printf ("Robodoc: Panic Fatal error, closing down..\n") ;
+    RB_Close_The_Shop () ; /* Free All Resources */
+    exit(100) ;
+  }
+
+/*******/
+</pre><p><code class="literal">RB_Panic</code> occurs only twice now. In addition changes
+to the function definition only have to be done once.</p><p>The <code class="filename">robodoc.rc</code> required for this is: </p><pre class="programlisting">
+# robodoc.rc file
+items:
+    SUMMARY
+    SYNOPSIS
+    INPUTS
+    OUTPUTS
+    SEE ALSO
+    BUGS
+source items:
+    SYNOPSIS
+remark begin markers:
+    /*
+remark end markers:
+    */
+</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2504666"></a>8.3. Advanced formatting with raw HTML and LaTeX code</h3></div></div></div><p> By default an item's body shows up in your documentation in
+    the same way as it is formatted in your source code.  All special
+    characters for the output mode are escaped.  For instance an &lt;
+    is translated to a &amp;lt; in HTML mode.  Sometimes however you
+    like to have some more control of what goes into the
+    documentation.  This is possible with the piping.  If a line of
+    your item's body starts with one of the special piping markers, the
+    text after this marker is copied verbatim into your documentation.
+    The following example shows how this is done, and how to add
+    equations to your documentation.
+    </p><pre class="programlisting">
+/****m* pipe/pipetest
+ * NAME
+ *   pipetest
+ * DESCRIPTION
+ *   Simple header to show "piping" features in items.
+ * EXAMPLE
+ *   Only "pipes" which match selected output style are picked up.
+ *   |html &lt;CENTER&gt;This will be included in &lt;B&gt;HTML&lt;/B&gt; output.&lt;/CENTER&gt;
+ *   |latex \centerline{This will be included in \LaTeX output}
+ *   Space is mandatory following the pipe marker. The following is not a
+ *   valid pipe marker:
+ *   |html&lt;B&gt;Moi!&lt;/B&gt;
+ *   You should see an equation on the following line:
+ *   |html y = x^2 (sorry, plain HTML is not very powerful)
+ *   |latex \centerline{$y = x^2$}
+ *   How does this look like?
+ *   Here comes a multi-line equation array:
+ *    |latex \begin{eqnarray}
+ *    |latex \frac{\partial u}{\partial \tau} &amp; = &amp; D_u {\nabla}^2 u +
+ *    |latex \frac{1}{\epsilon}
+ *    |latex \left ( \hat{u}-{\hat{u}}^2-f\, {v} \, \frac{\hat{u}-q}{\hat{u}+q}
+ *    |latex \right ) \; ,  \label{diffspot:1} \\
+ *    |latex \frac{\partial v}{\partial \tau} &amp; = &amp; \hat{u}-v \; ,
+ *    |latex \label{diffspot:2} \\
+ *    |latex \frac{\partial r}{\partial \tau} &amp; = &amp; D_r {\nabla}^2 r \; .
+ *    |latex \label{diffspAot:3}
+ *    |latex \end{eqnarray}
+ *    |html &lt;I&gt;TODO: write this in html&lt;/I&gt;
+ *   End of the example.
+ ******
+ */
+</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2504752"></a>8.4. Linking to external documents (href, file, mailto, images)</h3></div></div></div><p> In HTML mode ROBODoc recognizes the following links to
+    external documents.  </p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">href:body</code> -- This is replaced with
+      <code class="literal">&lt;a href="body"&gt;body&lt;/A&gt;</code>
+    </p></li><li><p><code class="literal">file:/body</code> -- This is replaced with
+    <code class="literal">&lt;a href="file:/body"&gt;file:/body&lt;/A&gt;</code>
+    </p></li><li><p><code class="literal">mailto:body</code> -- This is replaced with
+    <code class="literal">&lt;a href="mailto:body"&gt;body&lt;/A&gt;</code>
+    </p></li><li><p><code class="literal">http://body</code> -- This is replaced with
+    <code class="literal">&lt;a href="http://body"&gt;http://body&lt;/A&gt;</code>
+    </p></li><li><p><code class="literal">image:body</code> -- This is replaced with
+    <code class="literal">&lt;image src="body"&gt;</code>
+    </p></li></ul></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2504846"></a>8.5. Linking from an external document</h3></div></div></div><p>To link from an external document to one of the HTML
+    documents generated by ROBODoc you need a label.  ROBODoc creates
+    two labels for each header. The first one starts with
+    <code class="literal">robo</code> followed by a number.  You can not use
+    this one because the numbers will change each time you run
+    ROBODoc.  The second label is an escaped version of the whole
+    header name.  In this label all the non alphanumeric characters of
+    the name are replaced by their two digit hexadecimal code.</p><p>An example, if your header name is
+    <code class="literal">Analyser/RB_ToBeAdded</code> the label is
+    <code class="literal">Analyser2fRB5fToBeAdded</code>.  Here
+    <code class="literal">/</code> was replaced by <code class="literal">2f</code> and
+    <code class="literal">_</code> was replaced by <code class="literal">5f</code>.  As
+    long as you do not change the header name, this label stays the
+    same each time you run ROBODoc.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="tools"></a>8.6. Using external tools</h3></div></div></div><p>
+    You can also execute external tools from <code class="literal">ROBODoc</code> and even
+    pass data to them.
+    The output of these tools can be included in your documentation for instance.
+    </p><p>
+    There are several types of external tools you can use:
+    </p><div class="orderedlist"><ol type="1"><li>Arbitrary tool with passing data through stdin</li><li>Arbitrary tool without passing data through stdin</li><li>The <code class="literal">DOT</code> tool</li></ol></div><p>
+    The following example shows how to use each of them.
+    </p><pre class="programlisting">
+/****m* tools/tooltest
+ *
+ * NAME
+ *   Tooltest
+ *
+ * DESCRIPTION
+ *   Example showing how to invoke external tools.
+ *
+ * EXAMPLE
+ * This one sorts elements into the file href:nexus-6.txt
+ * The input data is passed through stdin.
+ *
+ * |tool sort &gt; nexus-6.txt
+ * Zhora
+ * Pris
+ * Leon Kowalski
+ * Roy Batty
+ * Rachel
+ * Rick Deckard?
+ * |tool end
+ *