2. Document layout

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:

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

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.