mandoc2docbook.pl revision dafcb997e390efa4423883dafd100c975c4095d6
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski#!/usr/bin/perl
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski#
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# Copyright (C) 2004 Internet Systems Consortium, Inc. ("ISC")
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# Copyright (C) 2001 Internet Software Consortium.
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski#
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# Permission to use, copy, modify, and distribute this software for any
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# purpose with or without fee is hereby granted, provided that the above
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# copyright notice and this permission notice appear in all copies.
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski#
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# PERFORMANCE OF THIS SOFTWARE.
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# $Id: mandoc2docbook.pl,v 1.4 2004/03/05 05:14:16 marka Exp $
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski#
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# Do a quick-and-dirty conversion of .mandoc man pages to
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# DocBook SGML.
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski#
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# Minor hand editing of the output is usually required.
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# This has only been tested with library function man pages
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# (section 3); it probably does not work well for program
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski# man pages.
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski#
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowskiprint <<\END;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski<!--
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski - Copyright (C) 2000, 2001 Internet Software Consortium.
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski -
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski - Permission to use, copy, modify, and distribute this software for any
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski - purpose with or without fee is hereby granted, provided that the above
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski - copyright notice and this permission notice appear in all copies.
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski -
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski - THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski - DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski - INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski - FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski - NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski - WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski-->
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski<!-- $Id: mandoc2docbook.pl,v 1.4 2004/03/05 05:14:16 marka Exp $ -->
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski<refentry>
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski<refentryinfo>
f93990c928a2b0b8f970b86d0fbd18d604147af6Till MossakowskiEND
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowskimy $cursection = undef;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowskimy $in_para = 0;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowskisub begin_para() {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski if (! $in_para) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<para>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski $in_para = 1;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski}
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowskisub end_para() {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski if ($in_para) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "</para>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski $in_para = 0;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski}
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowskisub end_section {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski if ($cursection) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "</$cursection>\n"
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski}
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowskisub section {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski my ($tag) = @_;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski end_para();
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski end_section();
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<$tag>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski $cursection = $tag;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski}
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowskimy %tagmap = (
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski Er => errorcode,
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski Dv => type,
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski Pa => filename,
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski Li => constant, # XXX guess
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski Ar => parameter,
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski Va => parameter,
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski);
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowskiwhile (<>) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski next if m/^\.\\\"/;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski if (/^\.Dd (.*)$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<date>$1<\/date>\n<\/refentryinfo>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski next;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Dt ([^ ]+) ([^ ]+)$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski my $title = lc $1;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski my $volume = $2;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski chomp $volume;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print <<END;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski<refmeta>
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski<refentrytitle>$title</refentrytitle>
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski<manvolnum>$volume</manvolnum>
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski<refmiscinfo>BIND9</refmiscinfo>
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski</refmeta>
f93990c928a2b0b8f970b86d0fbd18d604147af6Till MossakowskiEND
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski next;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Os (.*)$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski next;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.ds (.*)$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski next;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Nm (.*)$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski if ($cursection eq "refnamediv") {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski my $t = $1;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski $t =~ s/ ,$//;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<refname>$t<\/refname>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski } else {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<command>$1<\/command>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski next;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Nd (.*)$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<refpurpose>$1</refpurpose>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski next;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Sh NAME/) { section("refnamediv"); next; }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Sh SYNOPSIS/) { section("refsynopsisdiv"); next; }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Sh (.*)$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski section("refsect1");
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<title>$1</title>\n"; next;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski # special: spaces can occur in arg
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Fd (.*)$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski $_ = $1;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski s/</&lt;/g;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski s/>/&gt;/g;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<funcsynopsisinfo>$_<\/funcsynopsisinfo>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski next;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Fn (.*?)( ([^"]+))?$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski # special: add parenthesis
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<function>$1()<\/function>$3\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Op Fl (.*?)( ([^"]+))?$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski # special: add dash
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<option>-$1<\/option>$3\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Fl (.*?)( ([^"]+))?$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski # special: add dash
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<option>-$1<\/option>$3\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Ft (.*)$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<funcprototype>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<funcdef>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "$1\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski next;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Fa (.*?)( ([^"]+))?$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski if ($cursection eq "refsynopsisdiv") {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski my $t = $1;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski $t =~ s/^"//;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski $t =~ s/"$//;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<paramdef>$t<\/paramdef>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski } else {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<parameter>$1<\/parameter>$3\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski next;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Fo (.*)$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<function>$1<\/function></funcdef>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski next;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Xr ([^ ]+) ([^ ]+)( ([^ ]+))?$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<citerefentry>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<refentrytitle>$1</refentrytitle><manvolnum>$2</manvolnum>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "</citerefentry>$4\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski next;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.([A-Z][a-z]) (.*?)( ([^"]+))?$/ && defined($tagmap{$1})) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski my $tag = $tagmap{$1};
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski my $t = $2;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski my $punct = $4;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski $t =~ s/^"//;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski $t =~ s/"$//;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski $t =~ s/</&lt;/g;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski $t =~ s/>/&gt;/g;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<$tag>$t<\/$tag>$punct\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski next;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Fc$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "</funcprototype>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski next;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Pp$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski end_para();
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski begin_para();
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Bd /) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<programlisting>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Ed$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "</programlisting>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.Bl /) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<variablelist>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.El$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "</para>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "</listitem>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "</variablelist>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski $in_list = 0;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.It .. (.*)$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski if ($in_list) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "</listitem>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<varlistentry><term><constant>$1</constant></term>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<listitem>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<para>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski $in_list = 1;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski elsif (/^\.It Dv (.*)$/) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski if ($in_list) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "</listitem>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<varlistentry><term><errorcode>$1</errorcode></term>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<listitem>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print "<para>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski $in_list = 1;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski } else {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski if (/./) {
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski begin_para();
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski print;
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski }
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski}
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowskiend_para();
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowskiend_section();
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowskiprint "</refentry>\n";
f93990c928a2b0b8f970b86d0fbd18d604147af6Till Mossakowski