From: Gurusamy Sarathy Date: Mon, 6 Mar 2000 20:23:37 +0000 (+0000) Subject: change#5513 accidentally undid change#5373, put it back X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=c68ea5d1bbf115cf43f2f35fec04ae3f1da7d5f0;p=p5sagit%2Fp5-mst-13.2.git change#5513 accidentally undid change#5373, put it back p4raw-link: @5513 on //depot/perl: 02369fa527750edc8d271e763f24410e6166959e p4raw-link: @5373 on //depot/perl: 35f2feb095c3dd2b77eb6efc2bf725b5886b6931 p4raw-id: //depot/perl@5585 --- diff --git a/lib/Pod/Html.pm b/lib/Pod/Html.pm index d8dced6..24d546d 100644 --- a/lib/Pod/Html.pm +++ b/lib/Pod/Html.pm @@ -1399,7 +1399,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; @@ -1408,8 +1410,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 = ''; @@ -1421,7 +1423,7 @@ sub process_text1($$;$){ } elsif( $func eq 'C' ){ # C - can be a ref or # 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 ); @@ -1449,7 +1451,7 @@ sub process_text1($$;$){ ## L => produce text, use cross-ref for linking ## L => 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 @@ -1574,17 +1576,17 @@ 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 ); + } } if( $lev == 1 ){ $res .= pure_text( $$rstr ); @@ -1598,16 +1600,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; } @@ -1907,7 +1911,7 @@ $E2c{sol} = '/'; $E2c{verbar} = '|'; $E2c{amp} = '&'; # in Tk's pods -sub depod1($;$); +sub depod1($;$$); sub depod($){ my $string; @@ -1920,15 +1924,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]))// ){ + 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.