diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 2000-02-29 22:56:10 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 2000-02-29 22:56:10 +0000 |
commit | 35f2feb095c3dd2b77eb6efc2bf725b5886b6931 (patch) | |
tree | 4179ff28293145f9e2a524a5e8e3472ef9e7b2a4 /lib/Pod | |
parent | b72ff5656275769d47f02d87455d848d39ff01ff (diff) | |
download | perl-35f2feb095c3dd2b77eb6efc2bf725b5886b6931.tar.gz |
fix Pod::Html to recognize C<< > >> etc., and convert some pods
to the more readable form (from Robin Barker)
p4raw-id: //depot/perl@5373
Diffstat (limited to 'lib/Pod')
-rw-r--r-- | lib/Pod/Html.pm | 58 |
1 files changed, 32 insertions, 26 deletions
diff --git a/lib/Pod/Html.pm b/lib/Pod/Html.pm index e48e9b2825..4df9599cf2 100644 --- a/lib/Pod/Html.pm +++ b/lib/Pod/Html.pm @@ -1382,7 +1382,9 @@ sub process_puretext { # converted to html commands. # -sub process_text1($$;$); +sub process_text1($$;$$); +sub pattern ($) { $_[0] ? '[^\S\n]+'.('>' x ($_[0] + 1)) : '>' } +sub closing ($) { local($_) = shift; (defined && s/\s+$//) ? length : 0 } sub process_text { return if $ignore; @@ -1391,8 +1393,8 @@ sub process_text { $$tref = $res; } -sub process_text1($$;$){ - my( $lev, $rstr, $func ) = @_; +sub process_text1($$;$$){ + my( $lev, $rstr, $func, $closing ) = @_; $lev++ unless defined $func; my $res = ''; @@ -1404,7 +1406,7 @@ sub process_text1($$;$){ } elsif( $func eq 'C' ){ # C<code> - can be a ref or <CODE></CODE> # need to extract text - my $par = go_ahead( $rstr, 'C' ); + my $par = go_ahead( $rstr, 'C', $closing ); ## clean-up of the link target my $text = depod( $par ); @@ -1432,7 +1434,7 @@ sub process_text1($$;$){ ## L<text|cross-ref> => produce text, use cross-ref for linking ## L<cross-ref> => make text from cross-ref ## need to extract text - my $par = go_ahead( $rstr, 'L' ); + my $par = go_ahead( $rstr, 'L', $closing ); # some L<>'s that shouldn't be: # a) full-blown URL's are emitted as-is @@ -1557,15 +1559,16 @@ sub process_text1($$;$){ unless $$rstr =~ s/^>//; } else { - while( $$rstr =~ s/\A(.*?)([BCEFILSXZ]<|>)//s ){ + my $term = pattern $closing; + while( $$rstr =~ s/\A(.*?)(([BCEFILSXZ])<(<+[^\S\n]+)?|$term)//s ){ # all others: either recurse into new function or - # terminate at closing angle bracket + # terminate at closing angle bracket(s) my $pt = $1; - $pt .= '>' if $2 eq '>' && $lev == 1; + $pt .= $2 if !$3 && $lev == 1; $res .= $lev == 1 ? pure_text( $pt ) : inIS_text( $pt ); - return $res if $2 eq '>' && $lev > 1; - if( $2 ne '>' ){ - $res .= process_text1( $lev, $rstr, substr($2,0,1) ); + return $res if !$3 && $lev > 1; + if( $3 ){ + $res .= process_text1( $lev, $rstr, $3, closing $4 ); } } @@ -1581,16 +1584,18 @@ sub process_text1($$;$){ # # go_ahead: extract text of an IS (can be nested) # -sub go_ahead($$){ - my( $rstr, $func ) = @_; +sub go_ahead($$$){ + my( $rstr, $func, $closing ) = @_; my $res = ''; - my $level = 1; - while( $$rstr =~ s/\A(.*?)([BCEFILSXZ]<|>)//s ){ + my @closing = ($closing); + while( $$rstr =~ + s/\A(.*?)(([BCEFILSXZ])<(<+[^\S\n]+)?|@{[pattern $closing[0]]})//s ){ $res .= $1; - if( $2 eq '>' ){ - return $res if --$level == 0; + unless( $3 ){ + shift @closing; + return $res unless @closing; } else { - ++$level; + unshift @closing, closing $4; } $res .= $2; } @@ -1889,7 +1894,7 @@ $E2c{sol} = '/'; $E2c{verbar} = '|'; $E2c{amp} = '&'; # in Tk's pods -sub depod1($;$); +sub depod1($;$$); sub depod($){ my $string; @@ -1902,15 +1907,15 @@ sub depod($){ } } -sub depod1($;$){ - my( $rstr, $func ) = @_; +sub depod1($;$$){ + my( $rstr, $func, $closing ) = @_; my $res = ''; return $res unless defined $$rstr; if( ! defined( $func ) ){ # skip to next begin of an interior sequence - while( $$rstr =~ s/\A(.*?)([BCEFILSXZ])<// ){ + while( $$rstr =~ s/\A(.*?)([BCEFILSXZ])<(<+[^\S\n]+)?// ){ # recurse into its text - $res .= $1 . depod1( $rstr, $2 ); + $res .= $1 . depod1( $rstr, $2, closing $3); } $res .= $$rstr; } elsif( $func eq 'E' ){ @@ -1926,10 +1931,11 @@ sub depod1($;$){ } else { # all others: either recurse into new function or # terminate at closing angle bracket - while( $$rstr =~ s/\A(.*?)([BCEFILSXZ]<|>)// ){ + my $term = pattern $closing; + while( $$rstr =~ s/\A(.*?)(([BCEFILSXZ])<(<+[^\S\n]+)?|$term)// ){ $res .= $1; - last if $2 eq '>'; - $res .= depod1( $rstr, substr($2,0,1) ); + last unless $3; + $res .= depod1( $rstr, $3, closing $4 ); } ## If we're here and $2 ne '>': undelimited interior sequence. ## Ignored, as this is called without proper indication of where we are. |