summaryrefslogtreecommitdiffstats
path: root/man
diff options
context:
space:
mode:
authorColin Guthrie <pulse@colin.guthr.ie>2008-06-25 00:28:23 +0100
committerColin Guthrie <pulse@colin.guthr.ie>2008-06-25 00:28:23 +0100
commit517727ebdcd9d6dbc7eacdc843f886ed2e0f38f6 (patch)
treecb6448863b38f75385319c58a3bb419c407f346f /man
parent5099ab7b8b758cb5d1fd3438eb83d8d0c96b3e97 (diff)
Add xmltoman to the distribution. This saves pulling in an external dependancy
Diffstat (limited to 'man')
-rw-r--r--man/Makefile.am31
-rwxr-xr-xman/xmltoman217
2 files changed, 231 insertions, 17 deletions
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');
+}