#!/usr/bin/perl -p
sub escape_texi($) {
local $_ = shift;
s/([\@\{\}])/\@$1/g;
s/\n+/ /g;
$_;
}
while (<>) {
if (/^\@c INCLUDE (\S+)/) {
my $name = $1;
my $pod = "$name.pod";
$name =~ s/\.(\d)$/($1)/;
print "\@chapter $name\n\n";
open $x, "<$pod" or die "$pod: $!";
use Pod::Tree;
my $pod = new Pod::Tree;
$pod->load_string(do { local $/; <$x> });
my $walker; $walker = sub {
my $n = $_[0];
if ($n->is_code) {
# nop
} elsif ($n->is_link) {
my $target = $n->get_target;
my $page = $target->get_page;
my $section = $target->get_section;
#print "";
$walker->($_) for @{$n->get_children};
#print "";
} elsif ($n->is_text) {
print escape_texi $n->get_text;
} elsif ($n->is_verbatim) {
print "\n\n\@verbatim\n";
my $text = $n->get_text;
$text =~ s/\n+$//;
print $text;
print "\n\@end verbatim\n\n";
} elsif ($n->is_sequence) {
if ($n->get_letter eq "C") {
print "\@t{";
$walker->($_) for @{$n->get_children};
print "}";
} elsif ($n->get_letter eq "B") {
print "\@strong{";
$walker->($_) for @{$n->get_children};
print "}";
} elsif ($n->get_letter eq "I" or $n->get_letter eq "F") {
print "\@emph{";
$walker->($_) for @{$n->get_children};
print "}";
} else {
# S would mean to use nbsp
$walker->($_) for @{$n->get_children};
}
} elsif ($n->is_command) {
if ($n->is_c_head1) {
print "\n\@subsection ";
$walker->($_) for @{$n->get_children};
print "\n";
} elsif ($n->is_c_head2) {
print "\n\n\@subsubsection ";
$walker->($_) for @{$n->get_children};
print "\n";
} else {
# nop?
}
} elsif ($n->is_ordinary) {
$walker->($_) for @{$n->get_children};
print "\@refill\n";
} elsif ($n->is_root) {
$walker->($_) for @{$n->get_children};
} elsif ($n->is_list) {
print "\n\n\@itemize\n";
$walker->($_) for @{$n->get_children};
print "\@end itemize\n\n";
} elsif ($n->is_item) {
print "\n\n\@item\n";
print "\@b{";
$walker->($_) for @{$n->get_children};
print "}\n\n";
$walker->($_) for @{$n->get_siblings};
} else {
die "UNKNOWN NODE $_[0]{type}
";
$walker->($_) for @{$n->get_children};
}
};
$walker->($pod->get_root);
} else {
print;
}
}