diff -r 30113bfbe723 -r b3afb9f1e801 lib/cli/cli2pod.pl --- a/lib/cli/cli2pod.pl Sun Jan 20 00:12:17 2008 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,212 +0,0 @@ -#!/usr/bin/perl - -sub cstr2pod { - local($_) = shift; - s/\\"/"/go; - s/"([^\"]*)"/"C<$1>"/go; - $_; -} - -$section = 1; - -@section_order = ( - 'NAME', - 'SYNOPSIS', - 'DESCRIPTION', - 'OPTIONS', - 'RETURN VALUE', - 'ERRORS', - 'EXAMPLES', - 'ENVIRONMENT', - 'FILES', - 'SEE ALSO', - 'NOTES', - 'CAVEATS', - 'WARNINGS', - 'DIAGNOSTICS', - 'BUGS', - 'RESTRICTIONS', - 'AUTHOR', - 'AUTHORS', - 'HISTORY' - ); - -sub type2word { - my($type) = shift; - return 'INT' if $type eq 'integer'; - return 'UINT' if $type eq 'uinteger'; - return 'STR' if $type eq 'string' || $type eq 'stringlist'; - return '' if $type eq 'flag' || $type eq 'counter'; - die "Invalid cli option type '$type'"; -} - -sub add_option { - my($short, $long, $type, $desc) = @_; - - my $s = '[B<'; - my $o = '=item B<'; - if($short) { - $s .= "-$short"; - $o .= "-$short"; - if($type) { - $s .= " $type"; - $o .= " $type"; - } - } - if($short && $long) { - $s .= ">]\n[B<"; - $o .= ">, B<"; - } - if($long) { - $s .= "--$long"; - $o .= "--$long"; - if($type) { - $s .= "=$type"; - $o .= "=$type"; - } - } - $s .= ">]\n"; - $o .= ">\n\n$desc\n\n"; - - $synopsis .= $s; - $options = "=over 8\n\n" unless $options; - $options .= $o; -} - -sub parse_option { - local($_) = shift; - s/^\s*\{\s*//o; - s/\s*\},?\s*/ /o; - - my $short = $1 if s/^'([^\'])',\s*//o; - die "Invalid cli option" unless $short || s/^0,\s*//o; - - my $long = $1 if s/^"([^\"]+)",\s*//o; - die "Invalid cli_option" unless $long || s/^0,\s*//o; - - my $type = $1 if s/^cli_option::(\S+),\s*//o; - die "Invalid cli_option" unless $type; - $type = &type2word($type); - - my $val = $1 if s/^([^,]+),\s*//o; - my $var = $1 if s/^&([^,]+),\s*//o; - - my $desc = cstr2pod($1) if s/^"([^,]+)",\s*//o; - die "Invalid cli_option" unless $desc; - $desc =~ s/\.?$/./o if $desc; - - my $default = $1 if s/^"([^\"]+)"\s+//o; - die "Invalid cli_option" unless $default || s/^0\s+//o; - $desc .= " Defaults to $default." if $default; - - s/\s*\/\/\s*/ /go; - s/^\s*//o; - - add_option($short, $long, $type, $_ || $desc); -} - -sub parse_options { - $synopsis = "B<$program>\n"; - - my $line; - while(<>) { - s/^\s+//o; - s/\s+$//o; - if($line && /^\{/o) { - &parse_option($line); - $line = ""; - } - next if /^\{\s*0\s*\},?/o; - last if /^\s*\};/o; - $line =~ s/$/ $_/; - } - &parse_option($line) if $line; - - $synopsis .= "I<$usage>" if $usage; - $options .= "=back" if $options; - $sections{'SYNOPSIS'} = $synopsis; - $sections{'OPTIONS'} = $options; -} - -sub parse_notes { - my $section; - my $title; - while(<>) { - chomp; - last unless /^$/o || s/^\/\/\s*//o; - if(/^[\sA-Z]+$/o) { - $sections{$title} = $section if $title && $section; - undef $section; - $title = $_; - } else { - $section .= "$_\n"; - } - } - $sections{$title} = $section if $title && $section; -} - -sub parse_header_line { - local($_, $comment) = @_; - if(s/^\s*const\s+char\s*\*\s*cli_(\S+)\s*=\s*//o) { - my $name = $1; - s/;\s*$//o; - s/^\"//; - s/\"$//o; - s/\\n$//o; - s/\\n""/\n/go; - $program = $_ if $name eq 'program'; - $prefix = $_ if $name eq 'help_prefix'; - $usage = $_ if $name eq 'args_usage'; - $suffix = $_ if $name eq 'help_suffix'; - } -} - -sub parse_header { - my $comment = ''; - my $line = ''; - while(<>) { - s/^\s+//o; - s/\s+$//o; - if(s/^.*Copyright\s*\(C\)\s*[\d,]+\s*//o) { - $author = $_; - } else { - last if ($program && $prefix && /^$/o); - next if /^#/o; - $comment .= "$1\n" if s|\s*//\s*(.*)$||o; - $line =~ s/$/\n$_/; - if(/;$/o) { - &parse_header_line($line, $comment); - undef $line; - undef $comment; - } - } - } -} - -sub parse_description { - while(<>) { - s/^\s+//o; - s/\s+$//o; - last if / cli_options\[\]\s*=\s*\{/o; - next unless s/^\/\/\s*//o; - $description .= "$_\n"; - } -} - -&parse_header; -&parse_description; -&parse_options; -&parse_notes; - -$description .= "\n\n$suffix\n" if $suffix; - -$sections{'NAME'} = "$program - $prefix"; -$sections{'DESCRIPTION'} = $description; -$sections{'AUTHORS'} = $author if $author; - -foreach $section (@section_order) { - print "=head1 $section\n\n$sections{$section}\n\n" - if $sections{$section}; -} - -1;