Gimp::Pod - Evaluate pod documentation embedded in scripts.


Gimp documentation Contained in the Gimp distribution.

Index


Code Index:

NAME

Top

Gimp::Pod - Evaluate pod documentation embedded in scripts.

SYNOPSIS

Top

  use Gimp::Pod;

  $pod = new Gimp::Pod;
  $text = $pod->format ();
  $html = $pod->format ('html');
  $synopsis = $pod->section ('SYNOPSIS');
  $author = $pod->author;
  @sections = $pod->sections;

DESCRIPTION

Top

Gimp::Pod can be used to find and parse embedded pod documentation in gimp-perl scripts. At the moment only the formatted text can be fetched, future versions might have more interesting features.

METHODS

Top

new

return a new Gimp::Pod object representing the current script or undef, if an error occured.

format([$format])

Returns the embedded pod documentation in the given format, or undef if no documentation can be found. Format can be one of 'text', 'html', 'man' or 'latex'. If none is specified, 'text' is assumed.

section($header)

Tries to retrieve the section with the header $header. There is no trailing newline on the returned string, which may be undef in case the section can't be found.

author
blurb
description

Tries to retrieve fields suitable for calls to the register function.

sections

Returns a list of paragraphs found in the pod.

AUTHOR

Top

Marc Lehmann <pcg@goof.com>

SEE ALSO

Top

perl(1), Gimp(1),


Gimp documentation Contained in the Gimp distribution.

package Gimp::Pod;

$VERSION=1.211;

sub myqx(&) {
   local $/;
   local *MYQX;
   if (0==open MYQX,"-|") {
      &{$_[0]};
      close STDOUT;
      Gimp::_exit;
   }
   <MYQX>;
}

sub find_converters {
   my $path = eval 'use Config; $Config{installscript}';

   if ($] < 5.00558) {
      $converter{text} = sub { my $pod=shift; require Pod::Text; myqx { Pod::Text::pod2text (-60000,       $pod) } };
      $converter{texta}= sub { my $pod=shift; require Pod::Text; myqx { Pod::Text::pod2text (-60000, '-a', $pod) } };
   } else {
      $converter{text} = sub { qx($path/pod2text $_[0]) } if -x "$path/pod2text" ;
      $converter{texta}= sub { qx($path/pod2text $_[0]) } if -x "$path/pod2text" ;
   }
   $converter{html} = sub { my $pod=shift; require Pod::Html; myqx { Pod::Html::pod2html ($pod) } };
   $converter{man}  = sub { qx($path/pod2man   $_[0]) } if -x "$path/pod2man" ;
   $converter{latex}= sub { qx($path/pod2latex $_[0]) } if -x "$path/pod2latex" ;
}

sub find {
   -f $0 ? $0 : ();
}

sub new {
   my $pkg = shift;
   my $self={};
   return () unless defined($self->{path}=find);
   bless $self, $pkg;
}

sub _cache {
   my $self = shift;
   my $fmt = shift;
   if (!$self->{doc}{$fmt} && $converter{$fmt}) {
      local $^W = 0;
      my $doc = $converter{$fmt}->($self->{path});
      undef $doc if $?>>8;
      undef $doc if $doc=~/^[ \t\r\n]*$/;
      $self->{doc}{$fmt}=\$doc;
   }
   $self->{doc}{$fmt};
}

sub format {
   my $self = shift;
   my $fmt = shift || 'text';
   ${$self->_cache($fmt)};
}

sub sections {
   my $self = shift;
   my $doc = $self->_cache('text');
   $$doc =~ /^\S.*$/mg;
}

sub section {
   my $self = shift;
   my $doc = $self->_cache('text');
   if (defined $$doc) {
      ($doc) = $$doc =~ /^$_[0]$(.*?)(?:^[A-Z]|$)/sm;
      if ($doc) {
         $doc =~ y/\r//d;
         $doc =~ s/^\s*\n//;
         $doc =~ s/[ \t\r\n]+$/\n/;
         $doc =~ s/^    //mg;
      }
      $doc;
   } else {
      ();
   }
}

sub author {
   my $self = shift;
   $self->section('AUTHOR');
}

sub blurb {
   my $self = shift;
   $self->section('BLURB') || $self->section('NAME');
}

sub description {
   my $self = shift;
   $self->section('DESCRIPTION');
}

sub copyright {
   my $self = shift;
   $self->section('COPYRIGHT') || $self->section('AUTHOR');
}

find_converters;

1;
__END__