From 517727ebdcd9d6dbc7eacdc843f886ed2e0f38f6 Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Wed, 25 Jun 2008 00:28:23 +0100 Subject: [PATCH] Add xmltoman to the distribution. This saves pulling in an external dependancy --- configure.ac | 26 ------- man/Makefile.am | 31 ++++---- man/xmltoman | 217 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 231 insertions(+), 43 deletions(-) create mode 100755 man/xmltoman diff --git a/configure.ac b/configure.ac index 296dc17..029875c 100644 --- a/configure.ac +++ b/configure.ac @@ -1009,32 +1009,6 @@ AC_ARG_ENABLE(manpages, *) AC_MSG_ERROR([bad value ${enableval} for --disable-manpages]) ;; esac],[manpages=yes]) -if test x$manpages = xyes ; then - # - # XMLTOMAN manpage generation - # - AC_ARG_ENABLE(xmltoman, - AS_HELP_STRING([--disable-xmltoman],[Enable rebuilding of man pages with xmltoman]), - [case "${enableval}" in - yes) xmltoman=yes ;; - no) xmltoman=no ;; - *) AC_MSG_ERROR([bad value ${enableval} for --disable-xmltoman]) ;; - esac],[xmltoman=yes]) - - if test x$xmltoman = xyes ; then - AC_CHECK_PROG(have_xmltoman, xmltoman, yes, no) - fi - - if test x$have_xmltoman = xno -o x$xmltoman = xno; then - if ! test -e man/pulseaudio.1 ; then - AC_MSG_ERROR([*** xmltoman was not found or was disabled, it is required to build the manpages as they have not been pre-built, install xmltoman, pass --disable-manpages or dont pass --disable-xmltoman]) - exit 1 - fi - AC_MSG_WARN([*** Not rebuilding man pages as xmltoman is not found ***]) - xmltoman=no - fi -fi -AM_CONDITIONAL([USE_XMLTOMAN], [test "x$xmltoman" = xyes]) AM_CONDITIONAL([BUILD_MANPAGES], [test "x$manpages" = xyes]) #### PulseAudio system group & user ##### diff --git a/man/Makefile.am b/man/Makefile.am index 31ac69c..b0536d8 100644 --- a/man/Makefile.am +++ b/man/Makefile.am @@ -117,49 +117,47 @@ default.pa.5.xml: default.pa.5.xml.in Makefile -e 's,@PACKAGE_BUGREPORT\@,$(PACKAGE_BUGREPORT),g' \ -e 's,@PACKAGE_URL\@,$(PACKAGE_URL),g' $< > $@ -if USE_XMLTOMAN - CLEANFILES += \ $(man_MANS) pulseaudio.1: pulseaudio.1.xml Makefile - xmltoman $< > $@ || rm -f $@ + perl xmltoman $< > $@ || rm -f $@ esdcompat.1: esdcompat.1.xml Makefile - xmltoman $< > $@ || rm -f $@ + perl xmltoman $< > $@ || rm -f $@ pax11publish.1: pax11publish.1.xml Makefile - xmltoman $< > $@ || rm -f $@ + perl xmltoman $< > $@ || rm -f $@ paplay.1: paplay.1.xml Makefile - xmltoman $< > $@ || rm -f $@ + perl xmltoman $< > $@ || rm -f $@ pacat.1: pacat.1.xml Makefile - xmltoman $< > $@ || rm -f $@ + perl xmltoman $< > $@ || rm -f $@ pacmd.1: pacmd.1.xml Makefile - xmltoman $< > $@ || rm -f $@ + perl xmltoman $< > $@ || rm -f $@ pactl.1: pactl.1.xml Makefile - xmltoman $< > $@ || rm -f $@ + perl xmltoman $< > $@ || rm -f $@ pasuspender.1: pasuspender.1.xml Makefile - xmltoman $< > $@ || rm -f $@ + perl xmltoman $< > $@ || rm -f $@ padsp.1: padsp.1.xml Makefile - xmltoman $< > $@ || rm -f $@ + perl xmltoman $< > $@ || rm -f $@ pabrowse.1: pabrowse.1.xml Makefile - xmltoman $< > $@ || rm -f $@ + perl xmltoman $< > $@ || rm -f $@ pulse-daemon.conf.5: pulse-daemon.conf.5.xml Makefile - xmltoman $< > $@ || rm -f $@ + perl xmltoman $< > $@ || rm -f $@ pulse-client.conf.5: pulse-client.conf.5.xml Makefile - xmltoman $< > $@ || rm -f $@ + perl xmltoman $< > $@ || rm -f $@ default.pa.5: default.pa.5.xml Makefile - xmltoman $< > $@ || rm -f $@ + perl xmltoman $< > $@ || rm -f $@ xmllint: $(noinst_DATA) for f in $(noinst_DATA) ; do \ @@ -168,8 +166,6 @@ xmllint: $(noinst_DATA) endif -endif - EXTRA_DIST = \ $(man_MANS) \ pulseaudio.1.xml.in \ @@ -185,6 +181,7 @@ EXTRA_DIST = \ pulse-daemon.conf.5.xml.in \ pulse-client.conf.5.xml.in \ default.pa.5.xml.in \ + xmltoman \ xmltoman.css \ xmltoman.xsl \ xmltoman.dtd diff --git a/man/xmltoman b/man/xmltoman new file mode 100755 index 0000000..6a7489a --- /dev/null +++ b/man/xmltoman @@ -0,0 +1,217 @@ +#!/usr/bin/perl -w + +# xmltoman - simple xml to man converter +# Copyright (C) 2000-2002 Oliver Kurth +# 2003 Lennart Poettering +# +# 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 + +use XML::Parser; + +my $buffer = ""; +my $break_req = 0; + +my @stack; +my $stack_n = 0; + +my $para = 0; + +sub out { + my $t = shift; + + if ($t ne "") { + print $t; + $break_req=1; + } +} + +sub out_buf { + local $_; + + my $space = shift; + + $_ = $buffer; + $buffer = ""; + + s/\n/\ /gm; + s/\s+/\ /gm; + s/^\s*//gm if (!$break_req); + s/^\s$//gm if (!$space); + + out($_); +} + +sub stack_push { + my $a = shift; + + if ($stack_n == 0 or $a ne $stack[$stack_n-1]) { + out("\\fB") if $a =~ /^bold$/; + out("\\fI") if $a =~ /^italic$/; + } + + $stack[$stack_n++] = $a; +} + +sub stack_pop { + local $_; + + if ($stack_n > 0) { + $stack_n--; + + if ($stack_n > 0) { + $a = $stack[$stack_n-1]; + out("\\fB") if $a =~ /^bold$/; + out("\\fI") if $a =~ /^italic$/; + } else { + out("\\f1"); + } + } +} + +sub handle_start { + local $_; + my $expat = shift; + my $element = shift; + my %attr = @_; + + $_ = $element; + + if (/^manpage$/) { + out_buf(0); + print "\n" if ($break_req); + print ".TH " . $attr{name} . " " . $attr{section} . " User Manuals\n"; + print ".SH NAME\n"; + print $attr{name} . " \\- " . $attr{desc} . "\n"; + $break_req = 0; + } elsif (/^synopsis$/) { + out_buf(0); + print "\n" if ($break_req); + print ".SH SYNOPSIS\n"; + $section = $element; + $break_req = 0; + stack_push("bold"); + } elsif (/^description$/) { + out_buf(0); + print "\n" if ($break_req); + print ".SH DESCRIPTION\n"; + $section = $element; + $break_req = 0; + } elsif (/^options$/) { + out_buf(0); + print "\n" if ($break_req); + print ".SH OPTIONS\n"; + $section = $element; + $break_req = 0; + } elsif (/^seealso$/) { + out_buf(0); + print "\n" if ($break_req); + print ".SH SEE ALSO\n"; + $section = $element; + $break_req = 0; + } elsif (/^section$/) { + out_buf(0); + print "\n" if ($break_req); + print ".SH ".uc($attr{name})."\n"; + $section = $attr{name}; + $break_req = 0; + } elsif (/^option$/) { + out_buf(0); + print "\n" if ($break_req); + print ".TP\n"; + $break_req = 0; + } elsif (/^p$/ or /^cmd$/) { + out_buf(0); + print "\n" if ($para); + $break_req = 0; + } elsif (/^optdesc$/) { + out_buf(0); + $break_req = 0; + } elsif (/^arg$/ or /^file$/) { + out_buf(1); + stack_push("italic"); + } elsif (/^opt$/) { + out_buf(1); + stack_push("bold"); + } elsif (/^manref$/) { + out_buf(1); + stack_push("bold"); + out($attr{name} ."(" . $attr{section} . ")"); + stack_pop(); + } elsif (/^url$/) { + out_buf(1); + stack_push("bold"); + out($attr{href}); + stack_pop(); + }; + + $para = 0; +} + +sub handle_end { + local $_; + my $expat = shift; + my $element = shift; + + $_ = $element; + + $para = 0; + + if (/^description$/ or /^options$/ or /^section$/ or /^seealso$/) { + out_buf(0); + } elsif (/^p$/ or /^cmd$/) { + out_buf(0); + print "\n" if ($break_req); + $para = 1; + $break_req = 0; + } elsif (/^synopsis$/) { + out_buf(0); + stack_pop(); + } elsif (/^opt$/ or /^arg$/ or /^file$/) { + out_buf(1); + stack_pop(); + } elsif (/^manpage$/) { + out_buf(0); + print "\n" if $break_req; + $break_req = 0; + } elsif (/^optdesc$/ or /^cmd$/ or /^option$/) { + # Simply ignore + } else { + out_buf(1); + } +}; + +sub handle_char { + local $_; + my $expat = shift; + my $string = shift; + + $buffer .= $string; +} + +MAIN:{ + my $file = shift; + + if (!$file) { + print STDERR "You need to specify a file to parse\n"; + exit(1); + } + + my $parser = new XML::Parser(Handlers => { + Start => \&handle_start, + End => \&handle_end, + Char => \&handle_char}); + + $parser->parsefile($file, ProtocolEncoding => 'ISO-8859-1'); +} -- 2.7.4