[gimp-perl] Move to Pod::Simple::SimpleTree.
- From: Ed J <edj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp-perl] Move to Pod::Simple::SimpleTree.
- Date: Mon, 19 May 2014 04:41:45 +0000 (UTC)
commit 043dfccab029898cf8e3bc66ebfa851700e61532
Author: Ed J <edj src gnome org>
Date: Mon May 19 05:41:34 2014 +0100
Move to Pod::Simple::SimpleTree.
Gimp/Pod.pm | 49 ++++++++++++++++++++-----------------------------
t/gimppod.t | 18 +++++++++++++++---
2 files changed, 35 insertions(+), 32 deletions(-)
---
diff --git a/Gimp/Pod.pm b/Gimp/Pod.pm
index 8932e10..5f838a7 100644
--- a/Gimp/Pod.pm
+++ b/Gimp/Pod.pm
@@ -6,6 +6,7 @@ use strict;
use FindBin qw($RealBin $RealScript);
use File::Basename;
use base 'Exporter';
+use Pod::Simple::SimpleTree;
our @EXPORT = qw(fixup_args make_arg_line);
our $VERSION = 2.3003;
@@ -14,13 +15,6 @@ warn "$$-Loading ".__PACKAGE__ if $Gimp::verbose;
sub __ ($) { goto &Gimp::__ }
-{
-package Gimp::Pod::Parser;
-use base 'Pod::Text';
-sub output { shift->{gpp_text} .= join '', @_; }
-sub get_text { $_[0]->{gpp_text} }
-}
-
sub new {
return unless -f "$RealBin/$RealScript";
bless { path => "$RealBin/$RealScript", }, $_[0];
@@ -29,29 +23,32 @@ sub new {
sub _cache {
my $self = shift;
return $self->{doc} if $self->{doc};
- my $parser = Gimp::Pod::Parser->new;
- $parser->parse_from_file($self->{path});
- $self->{doc} = $parser->get_text;
+ $self->{doc} = Pod::Simple::SimpleTree->new->parse_file($self->{path})->root;
}
-sub format { $_[0]->_cache; }
+sub sections {
+ map $_->[2], grep { ref eq 'ARRAY' and $_->[0] eq 'head1' } @{$_[0]->_cache};
+}
-sub sections { $_[0]->_cache =~ /^\S.*$/mg; }
+sub _flatten_para {
+ my $para = shift;
+ join '', map { ref($_) ? _flatten_para($_) : $_ } @{$para}[2..$#{$para}];
+}
sub section {
my $self = shift;
warn __PACKAGE__."::section(@_)" if $Gimp::verbose >= 2;
return unless defined(my $doc = $self->_cache);
- ($doc) = $doc =~ /^$_[0]\n(.*?)(?:^[A-Z]|\Z)/sm;
- if ($doc) {
- $doc =~ y/\r//d;
- $doc =~ s/^\s*\n//;
- $doc =~ s/[\s]+$/\n/;
- $doc =~ s/^ //mg;
- chomp $doc;
- }
- warn __PACKAGE__."::section returning '$doc'" if $Gimp::verbose >= 2;
- $doc;
+ my $i = 2; # skip 'Document' and initial attrs
+ $i++ until
+ $i >= @$doc or ($doc->[$i]->[0] eq 'head1' and $doc->[$i]->[2] eq $_[0]);
+ return if $i >= @$doc;
+ my $i2 = ++$i;
+ $i2++ until $i2 >= @$doc or $doc->[$i2]->[0] =~ /^head/;
+ $i2--;
+ my $text = join "\n\n", map { _flatten_para($_) } @{$doc}[$i..$i2];
+ warn __PACKAGE__."::section returning '$text'" if $Gimp::verbose >= 2;
+ $text;
}
my %IND2SECT = (
@@ -110,7 +107,6 @@ Gimp::Pod - Evaluate pod documentation embedded in scripts.
use Gimp::Pod;
my $pod = Gimp::Pod->new;
- my $text = $pod->format;
my $synopsis = $pod->section('SYNOPSIS');
my @sections = $pod->sections;
@@ -210,11 +206,6 @@ an empty string).
Return a new Gimp::Pod object representing the current script or undef, if
an error occured.
-=item format
-
-Return the embedded pod documentation in text format, or undef if no
-documentation can be found.
-
=item section($header)
Return the section with the header C<$header>, or undef if not
@@ -222,7 +213,7 @@ found. There is no trailing newline on the returned string.
=item sections
-Returns a list of paragraph titles found in the pod.
+Returns a list of section titles found in the pod.
=back
diff --git a/t/gimppod.t b/t/gimppod.t
index 313bd7e..2cbfedf 100644
--- a/t/gimppod.t
+++ b/t/gimppod.t
@@ -9,8 +9,16 @@ is_deeply(
[ ('NAME', 'SPACE NAME', 'VERBATIM', 'OTHER') ], 'sections'
);
is($p->section('NAME'), 'test - Run some tests', 'sect name');
-is($p->section('SPACE NAME'), 'Some text.', 'sect space-name');
-is($p->section('VERBATIM'), " verbatim\n verbatim2", 'sect verbatim');
+is(
+ $p->section('SPACE NAME'),
+ "Some bold text.\n\nSecond para.",
+ 'sect space-name'
+);
+is(
+ $p->section('VERBATIM'),
+ " verbatim\n verbatim2 \n\n new verbatim para",
+ 'sect verbatim'
+);
is($p->section('OTHER'), 'Other text.', 'sect at eof');
is($p->section('NOT THERE'), undef, 'sect not there');
@@ -23,13 +31,17 @@ test - Run some tests
=head1 SPACE NAME
-Some text.
+Some B<bold> text.
+
+Second para.
=head1 VERBATIM
verbatim
verbatim2
+ new verbatim para
+
=head1 OTHER
Other text.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]