File Coverage

lib/Pod/Headings.pm
Criterion Covered Total %
statement 60 60 100.0
branch 11 12 91.6
condition 3 3 100.0
subroutine 10 10 100.0
pod 1 1 100.0
total 85 86 98.8


line stmt bran cond sub pod time code
1             package Pod::Headings;
2              
3 2     2   9 use strict;
  2         4  
  2         46  
4 2     2   7 use warnings;
  2         4  
  2         35  
5              
6 2     2   17 use v5.20;
  2         5  
7              
8 2     2   1042 use Pod::Simple;
  2         50096  
  2         98  
9             our @ISA = qw(Pod::Simple);
10             our $VERSION = '0.04';
11              
12 2     2   13 use feature 'signatures';
  2         4  
  2         164  
13 2     2   20 no warnings 'experimental::signatures';
  2         6  
  2         915  
14              
15             #
16             # Can pass a list of handlers to new()
17             #
18 2     2 1 3 sub new ($class, @args) {
  2         3  
  2         5  
  2         3  
19 2         9 my $self = $class->SUPER::new();
20 2         48 $self->{handlers} = {@args}; # if scalar @args;
21 2         12 $self->{_elements} = [];
22 2         4 $self->{_sequence} = 0;
23 2         9 return $self;
24             }
25              
26 77     77   19615 sub _handle_element_start ($parser, $element_name, $attr_hash_r) {
  77         75  
  77         66  
  77         64  
  77         56  
27              
28 77 100       143 return unless defined $parser->{handlers}{$element_name};
29 60         207 push @{$parser->{_elements}}, { element => $element_name,
30             text => '',
31             attrs=> $attr_hash_r,
32 60         51 sequence => $parser->{_sequence}++,
33             };
34             }
35              
36 77     77   422 sub _handle_element_end ($parser, $element_name, $attr_hash_r = undef) {
  77         66  
  77         71  
  77         63  
  77         51  
37              
38 77 100 100     73 return unless scalar @{$parser->{_elements}} && ($element_name eq ${$parser->{_elements}}[-1]->{element});
  77         141  
  62         143  
39            
40 60         61 my $propagate_text = 0;
41 60         61 my $this_element = pop @{$parser->{_elements}};
  60         60  
42 60 100       96 if (ref $parser->{handlers}{$element_name} eq 'CODE') {
43 49         93 $propagate_text = $parser->{handlers}{$element_name}->($parser, $element_name, $this_element, $this_element->{text});
44             } else {
45 11         12 $propagate_text = $parser->{handlers}{$element_name};
46             }
47              
48 60 50       75 if ($propagate_text) {
49 60 100       79 if (scalar @{$parser->{_elements}}) {
  60         148  
50 11         11 ${$parser->{_elements}}[-1]->{text} .= $this_element->{text};
  11         28  
51             }
52             }
53              
54             }
55              
56 80     80   526 sub _handle_text ($parser, $text) {
  80         57  
  80         78  
  80         67  
57              
58 80 100       68 ${$parser->{_elements}}[-1]->{text} .= $text if scalar @{$parser->{_elements}};
  69         148  
  80         118  
59              
60             }
61              
62             1;
63              
64             __END__