Add xmltoman to the distribution. This saves pulling in an external dependancy
authorColin Guthrie <pulse@colin.guthr.ie>
Tue, 24 Jun 2008 23:28:23 +0000 (00:28 +0100)
committerColin Guthrie <pulse@colin.guthr.ie>
Tue, 24 Jun 2008 23:28:23 +0000 (00:28 +0100)
configure.ac
man/Makefile.am
man/xmltoman [new file with mode: 0755]

index 296dc17..029875c 100644 (file)
@@ -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  #####
index 31ac69c..b0536d8 100644 (file)
@@ -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 (executable)
index 0000000..6a7489a
--- /dev/null
@@ -0,0 +1,217 @@
+#!/usr/bin/perl -w
+
+#    xmltoman - simple xml to man converter
+#    Copyright (C) 2000-2002 Oliver Kurth <oku@masqmail.cx>
+#                       2003 Lennart Poettering <mzkzygbzna@0pointer.de>
+#
+#    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');
+}