-#! /usr/bin/perl -w
+#!/usr/bin/env perl
# Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
# markup to Perl POD format. It's intended to be used to extract
# something suitable for a manpage from a Texinfo document.
+use warnings;
+
$output = 0;
$skipping = 0;
%sects = ();
%defs = ();
$fnno = 1;
$inf = "";
-$ibase = "";
+@ibase = ();
while ($_ = shift) {
if (/^-D(.*)$/) {
die "flags may only contain letters, digits, hyphens, dashes and underscores\n"
unless $flag =~ /^[a-zA-Z0-9_-]+$/;
$defs{$flag} = $value;
+ } elsif (/^-I(.*)$/) {
+ push @ibase, $1 ne "" ? $1 : shift;
} elsif (/^-/) {
usage();
} else {
}
}
+push @ibase, ".";
+
if (defined $in) {
$inf = gensym();
open($inf, "<$in") or die "opening \"$in\": $!\n";
- $ibase = $1 if $in =~ m|^(.+)/[^/]+$|;
+ push @ibase, $1 if $in =~ m|^(.+)/[^/]+$|;
} else {
$inf = \*STDIN;
}
}
while(defined $inf) {
-while(<$inf>) {
+INF: while(<$inf>) {
# Certain commands are discarded without further processing.
/^\@(?:
[a-z]+index # @*index: useful only in complete manual
push @instack, $inf;
$inf = gensym();
- # Try cwd and $ibase.
- open($inf, "<" . $1)
- or open($inf, "<" . $ibase . "/" . $1)
- or die "cannot open $1 or $ibase/$1: $!\n";
- next;
+ for (@ibase) {
+ open($inf, "<" . $_ . "/" . $1) and next INF;
+ }
+ die "cannot open $1: $!\n";
};
# Look for blocks surrounded by @c man begin SECTION ... @c man end.
} elsif ($ended =~ /^(?:example|smallexample|display)$/) {
$shift = "";
$_ = ""; # need a paragraph break
- } elsif ($ended =~ /^(?:itemize|enumerate|[fv]?table)$/) {
+ } elsif ($ended =~ /^(?:itemize|enumerate|(?:multi|[fv])?table)$/) {
$_ = "\n=back\n";
$ic = pop @icstack;
} else {
$endw = "enumerate";
};
- /^\@([fv]?table)\s+(\@[a-z]+)/ and do {
+ /^\@((?:multi|[fv])?table)\s+(\@[a-z]+)/ and do {
push @endwstack, $endw;
push @icstack, $ic;
$endw = $1;
$ic =~ s/\@(?:code|kbd)/C/;
$ic =~ s/\@(?:dfn|var|emph|cite|i)/I/;
$ic =~ s/\@(?:file)/F/;
+ $ic =~ s/\@(?:columnfractions)//;
+ $_ = "\n=over 4\n";
+ };
+
+ /^\@(multitable)\s+{.*/ and do {
+ push @endwstack, $endw;
+ push @icstack, $ic;
+ $endw = $1;
+ $ic = "";
$_ = "\n=over 4\n";
};
$_ = ""; # need a paragraph break
};
+ /^\@item\s+(.*\S)\s*$/ and $endw eq "multitable" and do {
+ my $columns = $1;
+ $columns =~ s/\@tab/ : /;
+
+ $_ = "\n=item B<". $columns .">\n";
+ };
+
+ /^\@tab\s+(.*\S)\s*$/ and $endw eq "multitable" and do {
+ my $columns = $1;
+ $columns =~ s/\@tab//;
+
+ $_ = $columns;
+ $section =~ s/$//;
+ };
+
/^\@itemx?\s*(.+)?$/ and do {
if (defined $1) {
# Entity escapes prevent munging by the <> processing below.
unshift @sects_sequence, "NAME";
for $sect (@sects_sequence) {
+ # always use utf8
+ print "=encoding utf8\n";
if(exists $sects{$sect}) {
$head = $sect;
$head =~ s/SEEALSO/SEE ALSO/;
s/\(?\@xref\{(?:[^\}]*)\}(?:[^.<]|(?:<[^<>]*>))*\.\)?//g;
s/\s+\(\@pxref\{(?:[^\}]*)\}\)//g;
s/;\s+\@pxref\{(?:[^\}]*)\}//g;
+ s/\@ref\{([^\}]*)\}/$1/g;
s/\@noindent\s*//g;
s/\@refill//g;
s/\@gol//g;