texi2pod.pl: - Add real command line parsing.
* texi2pod.pl: - Add real command line parsing. - Support @ifset, @ifclear, @set, @value, -D switch. - Support @sc. Improve handling of @ref and friends. - Discard @subsection, @need, @node lines. - Un-nest font changes to match texinfo semantics. - Handle @{ and @}. Oops. - Don't emit E<> directives inside verbatim blocks. From-SVN: r37569
This commit is contained in:
parent
564b42a144
commit
3d6f4d76bc
@ -1,3 +1,14 @@
|
||||
2000-11-19 Zack Weinberg <zackw@stanford.edu>
|
||||
|
||||
* texi2pod.pl:
|
||||
- Add real command line parsing.
|
||||
- Support @ifset, @ifclear, @set, @value, -D switch.
|
||||
- Support @sc. Improve handling of @ref and friends.
|
||||
- Discard @subsection, @need, @node lines.
|
||||
- Un-nest font changes to match texinfo semantics.
|
||||
- Handle @{ and @}. Oops.
|
||||
- Don't emit E<> directives inside verbatim blocks.
|
||||
|
||||
2000-11-12 Bruce Korb <bkorb@gnu.org>
|
||||
|
||||
* release: generalize the release script a bit.
|
||||
|
@ -4,48 +4,82 @@
|
||||
# markup to Perl POD format. It's intended to be used to extract
|
||||
# something suitable for a manpage from a Texinfo document.
|
||||
|
||||
$in = $ARGV[0];
|
||||
$out = "x";
|
||||
die "usage: $0 infile outfile\n" unless defined $in && defined $out;
|
||||
|
||||
close STDIN;
|
||||
open(IN,$in);
|
||||
|
||||
$output = 0;
|
||||
$ignore = 0;
|
||||
$skipping = 0;
|
||||
%sects = ();
|
||||
$section = "";
|
||||
@icstack = ();
|
||||
@endwstack = ();
|
||||
@skstack = ();
|
||||
$shift = "";
|
||||
%defs = ();
|
||||
|
||||
while(<IN>)
|
||||
while($_ = shift)
|
||||
{
|
||||
if (/^-D(.*)$/) {
|
||||
if ($1 ne "") {
|
||||
$flag = $1;
|
||||
} else {
|
||||
$flag = shift;
|
||||
}
|
||||
die "no flag specified for -D\n"
|
||||
unless $flag ne "";
|
||||
die "flags may only contain letters, digits, hyphens, and underscores\n"
|
||||
unless $flag =~ /^[a-zA-Z0-9_-]+$/;
|
||||
$defs{$flag} = "";
|
||||
} elsif (/^-/) {
|
||||
usage();
|
||||
} else {
|
||||
$in = $_, next unless defined $in;
|
||||
$out = $_, next unless defined $out;
|
||||
usage();
|
||||
}
|
||||
}
|
||||
|
||||
if (defined $in) {
|
||||
open(STDIN, $in) or die "opening \"$in\": $!\n";
|
||||
}
|
||||
if (defined $out) {
|
||||
open(STDOUT, ">$out") or die "opening \"$out\": $!\n";
|
||||
}
|
||||
|
||||
while(<STDIN>)
|
||||
{
|
||||
chomp;
|
||||
/^\@end ignore/ and $ignore = 0, next;
|
||||
next if $ignore;
|
||||
/^\@c man begin ([A-Z]+)/ and $sect = $1, $output = 1, next;
|
||||
/^\@c man end/ and do {
|
||||
$_ = $section;
|
||||
s/</</g;
|
||||
s/>/>/g;
|
||||
|
||||
s/\@(?:dfn|var|emph|cite)\{([^\}]*)\}/I<$1>/g;
|
||||
s/\@(?:code|kbd)\{([^\}]*)\}/C<$1>/g;
|
||||
s/\@(?:samp|strong|key)\{([^\}]*)\}/B<$1>/g;
|
||||
s/\@value\{([a-zA-Z0-9_-]+)\}/$defs{$1}/g;
|
||||
s/\@sc\{([^\}]*)\}/\U$1/g;
|
||||
s/\@file\{([^\}]*)\}/F<$1>/g;
|
||||
s/\@(?:url|email)\{([^\}]*)\}/E<lt>C<$1>E<rt>/g;
|
||||
s/\@[a-z]?ref\{(?:[^\}]*)\}.?//g;
|
||||
s/\(\@p[a-z]?ref\{(?:[^\}]*)\}\).?//g;
|
||||
s/\@xref\{(?:[^\}]*)\}[^.]*.//g;
|
||||
s/\s+\(\@p[a-z]?ref\{(?:[^\}]*)\}\)//g;
|
||||
s/\@copyright\{\}//g;
|
||||
s/\@noindent\s*//g;
|
||||
s/\@refill//g;
|
||||
s/\@\././g;
|
||||
|
||||
s/</E<lt>/g;
|
||||
s/>/E<gt>/g;
|
||||
# Turn B<blah I<blah> blah> into B<blah> I<blah> B<blah> to
|
||||
# match Texinfo semantics of @emph inside @samp.
|
||||
|
||||
s/</</g;
|
||||
s/>/>/g;
|
||||
1 while (s/B<([^<>]*)I<([^>]+)>/B<$1>I<$2>B</g);
|
||||
1 while (s/I<([^<>]*)B<([^>]+)>/I<$1>B<$2>I</g);
|
||||
s/[BI]<>//g;
|
||||
s/([BI])<(\s+)([^>]+)>/$2$1<$3>/g;
|
||||
s/([BI])<([^>]+?)(\s+)>/$1<$2>$3/g;
|
||||
|
||||
s/</E<lt>/g;
|
||||
s/>/E<gt>/g;
|
||||
s/{/\{/g;
|
||||
s/}/\}/g;
|
||||
|
||||
$sects{$sect} = $_;
|
||||
$section = "";
|
||||
@ -54,14 +88,63 @@ while(<IN>)
|
||||
};
|
||||
|
||||
/^\@(c|[a-z]+index)\b/ and next;
|
||||
/^\@subsection/ and next;
|
||||
/^\@need/ and next;
|
||||
/^\@node/ and next;
|
||||
|
||||
/^\@setfilename\s+([^.]+)/ and $fn = $1, next;
|
||||
/^\@settitle\s+([^.]+)/ and $tl = $1, next;
|
||||
|
||||
next unless $output;
|
||||
|
||||
/^\@end\s+([a-z]+)/ and do {
|
||||
if(defined $endw)
|
||||
{
|
||||
die "\@$endw ended by \@end $1 at line $.\n"
|
||||
unless $1 eq $endw;
|
||||
|
||||
if($endw =~ /example$/)
|
||||
{
|
||||
$shift = "";
|
||||
$_ = "";
|
||||
}
|
||||
elsif($endw =~ /^if/)
|
||||
{
|
||||
$skipping = pop @skstack;
|
||||
$_ = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
$_ = "\n=back\n";
|
||||
$ic = pop @icstack;
|
||||
}
|
||||
$endw = pop @endwstack;
|
||||
}
|
||||
};
|
||||
|
||||
/^\@end ignore/ and $ignore = 0, next;
|
||||
next if $ignore;
|
||||
next if $skipping;
|
||||
|
||||
/^\@ignore/ and $ignore = 1, next;
|
||||
|
||||
/^\@set\s+([a-zA-Z0-9_-]+)\s*(.*)$/ and $defs{$1} = $2, next;
|
||||
/^\@clear\s+([a-zA-Z0-9_-]+)/ and delete $defs{$1}, next;
|
||||
|
||||
/^\@ifset\s+([a-zA-Z0-9_-]+)/ and do {
|
||||
push @endwstack, $endw;
|
||||
push @skstack, $skipping;
|
||||
$endw = "ifset";
|
||||
$skipping = 1 unless exists $defs{$1};
|
||||
};
|
||||
|
||||
/^\@ifclear\s+([a-zA-Z0-9_-]+)/ and do {
|
||||
push @endwstack, $endw;
|
||||
push @skstack, $skipping;
|
||||
$endw = "ifset";
|
||||
$skipping = 1 if exists $defs{$1};
|
||||
};
|
||||
|
||||
/^\@itemize (\@[a-z]+)/ and do {
|
||||
push @endwstack, $endw;
|
||||
push @icstack, $ic;
|
||||
@ -99,27 +182,6 @@ while(<IN>)
|
||||
next;
|
||||
};
|
||||
|
||||
/^\@end\s+([a-z]+)/ and do {
|
||||
if(defined $endw)
|
||||
{
|
||||
die "\@$endw ended by \@end $1 at line $.\n"
|
||||
unless $1 eq $endw;
|
||||
|
||||
if($endw =~ /example$/)
|
||||
{
|
||||
$shift = "";
|
||||
$_ = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
$_ = "\n=back\n";
|
||||
undef $endw;
|
||||
$ic = pop @icstack;
|
||||
}
|
||||
$endw = pop @endwstack;
|
||||
}
|
||||
};
|
||||
|
||||
/^\@itemx?\s*(.+)?$/ and do {
|
||||
if(defined $1)
|
||||
{
|
||||
@ -132,6 +194,20 @@ while(<IN>)
|
||||
}
|
||||
};
|
||||
|
||||
/^\@section\s+(.+)$/ and do {
|
||||
$_ = "\n=head2 $1\n";
|
||||
};
|
||||
|
||||
# POD doesn't interpret E<> inside a verbatim block.
|
||||
if ($shift eq "") {
|
||||
s/</</g;
|
||||
s/>/>/g;
|
||||
} else {
|
||||
s/</</g;
|
||||
s/>/>/g;
|
||||
}
|
||||
s/\@\{/{/g;
|
||||
s/\@\}/}/g;
|
||||
$section .= $shift.$_."\n";
|
||||
}
|
||||
|
||||
@ -149,3 +225,8 @@ for $sect (qw(NAME SYNOPSIS DESCRIPTION OPTIONS ENVIRONMENT FILES
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub usage
|
||||
{
|
||||
die "usage: $0 [-D toggle...] [infile [outfile]]\n";
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user