James Gardner: Home > Blog > 2009 > Generating Man Pages From...

Generating Man Pages From reStructuredText

Posted:2009-04-24 14:41
Tags:Python

First install subversion:

$ sudo apt-get install subversion

Then get the rst2man tool from the docutils sandbox:

$ svn co http://svn.berlios.de/svnroot/repos/docutils/trunk/sandbox/manpage-writer/

You'll need to copy the writers/manpage.py file into your docutils/writers directory. I'm using a virtual Python environment so I do so like this:

cd manpage-writer
cp writers/manpage.py ~/env/lib/python2.5/site-packages/docutils-0.5-py2.5.egg/docutils/writers/

Next edit runtests so that the CMD variable points to the virtual Python environment:

CMD="/home/james/env/bin/python tools/rst2man.py --traceback"

Now run the tests:

./runtests

This generates some manpages in the output directory and compares them to the pre-generated ones in the expected directory. There are actually a few differences but it generates the test.man page OK.

Next you will want to test the manpage. Each man page has to appear in the appropriate man section, denoted by a single character:

Section The human readable name
   1    User commands that may be started by everyone.
   2    System calls, that is, functions provided by the kernel.
   3    Subroutines, that is, library functions.
   4    Devices, that is, special files in the /dev directory.
   5    File format descriptions, e.g. /etc/passwd.
   6    Games, self-explanatory.
   7    Miscellaneous, e.g. macro packages, conventions.
   8    System administration tools that only root can execute.
   9    Another (Linux specific) place for kernel routine documentation.
   n    (Deprecated) New documentation, that may be moved to a more appropriate section.
   o    (Deprecated) Old documentation, that may be kept for a grace period.
   l    (Deprecated) Local documentation referring to this particular system.

Since you are likely to be documenting command line tools, your man page will probably be in section 1.

As a test, rename test.man to test.1 then create a .gz file of it and place the compressed file in a directory called man1:

$ cd output
$ mv test.man test.1
$ gzip test.1
$ mkdir man1
$ mv test.1.gz man1

Now you can test the man page like this. The -M ./ options tell man to look in the current directory, not in /usr/share/man.

man -M ./ test

You will now see your output:

rst2man(1)                      text processing                     rst2man(1)

NAME
       rst2man - generate unix manpages from reStructured text

SYNOPSIS
       rst2man --help

       rst2man [ OPTIONS ] [ SOURCE [ destination ] ]

DESCRIPTION
       Run it and examine output.

OPTIONS
       -o x   an option

       -b     another

       For all other options see --help.

EXAMPLES
       rst2man.py xml-schema-catalog.rst xml-schema-catalog.man
              create a manpage from xml-schema-catalog.rst

You can now create your own manpages by following the same procedure.

To generate a man page directly rather than using the runtest you can use this command:

$ cd ../tools
$ ~/env/bin/python tools/rst2man.py path/to/input.txt output.1

Further reading:

(view source)

James Gardner: Home > Blog > 2009 > Generating Man Pages From...