summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac26
-rw-r--r--man/Makefile.am31
-rwxr-xr-xman/xmltoman217
3 files changed, 231 insertions, 43 deletions
diff --git a/configure.ac b/configure.ac
index 296dc17e..029875cb 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 31ac69ce..b0536d84 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 00000000..6a7489ac
--- /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 <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');
+}