File Coverage

blib/lib/Text/Trac/Ul.pm
Criterion Covered Total %
statement 38 38 100.0
branch 8 8 100.0
condition 7 7 100.0
subroutine 5 5 100.0
pod 0 2 0.0
total 58 60 96.6


line stmt bran cond sub pod time code
1             package Text::Trac::Ul;
2              
3 8     8   56 use strict;
  8         17  
  8         262  
4 8     8   48 use warnings;
  8         21  
  8         216  
5 8     8   40 use base qw(Text::Trac::BlockNode);
  8         15  
  8         42  
6              
7             our $VERSION = '0.22';
8              
9             sub init {
10 120     120 0 279 my $self = shift;
11 120         2437 $self->pattern(qr/(\s+) \* \s+ (.*)$/xms);
12             }
13              
14             sub parse {
15 77     77 0 152 my ( $self, $l ) = @_;
16 77         113 my $c = $self->{context};
17 77         1289 my $pattern = $self->pattern;
18 77 100       521 $l =~ $pattern or return $l;
19              
20 43         102 my $space = length($1);
21 43   100     706 my $level = $c->ul->{level} || 0;
22 43   100     1284 $c->ul->{space} ||= 0;
23              
24 43 100       881 if ( $space > $c->ul->{space} ) {
    100          
25 18         149 for ( 1 .. ( $space + 1 ) / 2 - $level ) {
26 18         44 $l = '
    ' . $l;
27 18         43 $level++;
28             }
29             }
30             elsif ( $space < $c->ul->{space} ) {
31 4         197 for ( 1 .. ( $c->ul->{space} - $space ) / 2 ) {
32 6         34 $l = '' . $l;
33 6         12 $level--;
34             }
35 4         26 $l =~ s!(?<=)(?= )!!;
36             }
37             else {
38 21         498 $l = "$l";
39             }
40              
41 43         813 $c->ul( { level => $level, space => $space } );
42              
43             # parse inline nodes
44 43         538 $l =~ s{ $pattern }{"
  • " . $self->replace($2)}xmsge;
  •   43         140  
    45              
    46 43 100 100     2006 if ( $c->hasnext and $c->nextline =~ /$pattern/ ) {
    47 34         107 $self->parse($l);
    48             }
    49             else {
    50 9         160 for ( 1 .. $c->ul->{level} ) {
    51 12         80 $l .= '';
    52             }
    53 9         155 $c->ul->{level} = 0;
    54 9         171 $c->ul->{space} = 0;
    55             }
    56              
    57             # parse inline nodes
    58 43         169 $c->htmllines($l);
    59              
    60 43         175 return;
    61             }
    62              
    63             1;