#!/usr/bin/perl -w use Getopt::Std; use strict; my $inmethods; my $doneback; my $lasttag; my $tag; my $file; local $::opt_t = 'Gtk'; getopts("t:"); $tag = lc($::opt_t); $tag =~ s/://g; my $outf = $file = shift || "build/perl-$tag-ref.xml"; $outf =~ s/\.xml$/.pod/; require XML::Parser; if ($@ || ! -f $file) { print "Using provided pod file '$outf' because you probably don't have\n". "the XML::parser and/or XML::Writer modules\n". "The documentation for this module may not be up to date.\n" ; $file = $outf; $file =~ s(build/)(); system ("cp $file $outf"); exit(0); } open (OUT, ">$outf") || die "Cannot open $outf: $!"; select OUT; my $refname = $::opt_t ."::reference"; print <<"EOF"; =head1 NAME $refname - Reference documentation for the $::opt_t module EOF my $parser = new XML::Parser(Style=>'Stream', Pkg=>'main'); $parser->parsefile($file); close(OUT); sub StartTag { my ($p, $t) = @_; $lasttag = $t; for ($t) { /^package$/ && do { print "\n=head1 $_{name}\n\n"; next; }; /^desc$/ && do { print "=back\n\n" unless $doneback; $doneback = 1; }; /^method$/ && do { $inmethods = {%_}; }; /^arg$/ && do { if (defined $inmethods) { print "\n=head2 $inmethods->{out} $_{name}","-E","$inmethods->{name} ($inmethods->{args})\n\n"; print "=over 4\n\n"; $doneback = 0; undef $inmethods; } else { print "=item * $_{name} (I<$_{type}>) $_{desc}\n\n"; } }; } } sub EndTag { my ($p, $t) = @_; for ($t) { /^package$/ && do { }; /^method$/ && do { print "=back\n\n" unless $doneback; undef $inmethods; }; } } sub Text { if ($lasttag eq 'desc') { print; print "\n\n"; } }