The GHC documentation is written using DocBook XML V4.2, so the first few lines should look like this:
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
The encoding can of course be chosen according to taste.
This guide is not meant to teach you how to write DocBook; read the DocBook book for that. It is more of a reference than a tutorial, so see the DocBook home page for other links.
However, by popular demand, here are some useful points:
Remember to use <para>
inside <listitem>s.
The rest of this section outlines the use of several tags which may not be obvious (DocBook is rather scholastic in style: it has tags for many things from C function prototypes to keyboard bindings; at the same time it has many omissions and oddities). The current scheme has many infelicities, partly because it was dreamt up in a hurry while the author was learning DocBook and converting the documentation thereto, and partly because DocBook is rather C-centric.
Comments in XML look like this: <!--This is a comment-->.
<command>Used for commands typed into interactive sessions (e.g. cp foo bar and the names of programs such as gmake.
<constant>Used for system constants such as
U_MAXINT and
Makefile variables like
SRC_FILES (because they are usually
constant for a given run of make, and
hence have a constant feel to them).
<email>For email addresses. This is a tag that's easy to overlook if you don't know it's there.
<filename>Used for paths, filenames, file extensions.
<function>Used for functions and constructors.
<indexterm>The normal way to mark up an index term is
<indexterm><primary>term</primary></indexterm>.
<keycap>, <keycombo>Some more tags you may miss. Used for combinations such as Control+D.
<literal>Used for everything that should appear in typewriter font that has no other obvious tag: types, monads, small snippets of program text that are formatted inline, and the like.
<option>Used for compiler options and similar.
<programlisting>For displayed program listings (including shell scripts).
<screen>For displayed screen dumps, such as portions of shell interaction. It's easy to tell the difference between these and shell scripts: the latter lack a shell prompt.
<varname>Used for variables, but not type variables.