File Coverage

blib/lib/Text/Trac/Ol.pm
Criterion Covered Total %
statement 44 47 93.6
branch 13 20 65.0
condition 7 7 100.0
subroutine 5 5 100.0
pod 0 2 0.0
total 69 81 85.1


line stmt bran cond sub pod time code
1             package Text::Trac::Ol;
2              
3 8     8   60 use strict;
  8         16  
  8         261  
4 8     8   41 use warnings;
  8         18  
  8         247  
5 8     8   45 use base qw(Text::Trac::BlockNode);
  8         19  
  8         46  
6              
7             our $VERSION = '0.23';
8              
9             sub init {
10 120     120 0 258 my $self = shift;
11 120         2456 $self->pattern(qr/(\s+) ([\daiAI])\. \s+ (.*)$/xms);
12 120         858 return $self;
13             }
14              
15             sub parse {
16 80     80 0 162 my ( $self, $l ) = @_;
17 80         144 my $c = $self->{context};
18 80         1366 my $pattern = $self->pattern;
19 80 100       569 $l =~ $pattern or return $l;
20 45         109 my $type = $2;
21              
22 45         88 my $space = length($1);
23 45   100     787 my $level = $c->ol->{level} || 0;
24 45   100     928 $c->ol->{space} ||= 0;
25              
26 45         279 my $start_tag;
27 45 100       173 if ( $type =~ /(\d)/ ) {
    50          
    0          
    0          
    0          
28 10 100       41 $start_tag = $type == 1 ? '
    ' : qq{
      };
29             }
30             elsif ( $type eq 'a' ) {
31 35         60 $start_tag = q{
    };
32             }
33             elsif ( $type eq 'A' ) {
34 0         0 $start_tag = q{
    };
35             }
36             elsif ( $type eq 'i' ) {
37 0         0 $start_tag = q{
    };
38             }
39             elsif ( $type eq 'I' ) {
40 0         0 $start_tag = q{
    };
41             }
42              
43 45 100       755 if ( $space > $c->ol->{space} ) {
    100          
44 19         155 for ( 1 .. ( $space + 1 ) / 2 - $level ) {
45 19         53 $l = $start_tag . $l;
46 19         46 $level++;
47             }
48             }
49             elsif ( $space < $c->ol->{space} ) {
50 4         153 for ( 1 .. ( $c->ol->{space} - $space ) / 2 ) {
51 6         40 $l = '' . $l;
52 6         13 $level--;
53             }
54 4         26 $l =~ s!(?<=)(?= )!!;
55             }
56             else {
57 22         573 $l = "$l";
58             }
59              
60 45         841 $c->ol( { level => $level, space => $space } );
61              
62             # parse inline nodes
63 45         611 $l =~ s{ $pattern }{'
  • ' . $self->replace($3)}xmsge;
  •   45         154  
    64              
    65 45 100 100     1843 if ( $c->hasnext and $c->nextline =~ $pattern ) {
    66 35         113 $self->parse($l);
    67             }
    68             else {
    69 10         188 for ( 1 .. $c->ol->{level} ) {
    70 13         80 $l .= '';
    71             }
    72 10         169 $c->ol->{level} = 0;
    73 10         195 $c->ol->{space} = 0;
    74             }
    75              
    76 45         187 $c->htmllines($l);
    77              
    78 45         202 return;
    79             }
    80              
    81             1;