File Coverage

blib/lib/HTML/Tree/Create/Callback.pm
Criterion Covered Total %
statement 32 32 100.0
branch 6 6 100.0
condition 5 8 62.5
subroutine 7 7 100.0
pod 1 1 100.0
total 51 54 94.4


line stmt bran cond sub pod time code
1             package HTML::Tree::Create::Callback;
2              
3             our $DATE = '2016-03-31'; # DATE
4             our $VERSION = '0.002'; # VERSION
5              
6 2     2   445 use 5.010001;
  2         4  
7 2     2   6 use strict;
  2         2  
  2         29  
8 2     2   4 use warnings;
  2         2  
  2         55  
9 2     2   392 use HTML::Entities;
  2         4232  
  2         125  
10              
11 2     2   7 use Exporter qw(import);
  2         2  
  2         463  
12             our @EXPORT_OK = qw(create_html_tree_using_callback);
13              
14             sub _render_elem {
15 16     16   16 my ($callback, $level, $seniority) = @_;
16              
17 16         17 my $indent = " " x $level;
18 16         18 my $indent2 = " " x ($level + 1);
19              
20 16         22 my ($elem, $attrs, $text_before, $text_after, $num_children) =
21             $callback->($level, $seniority);
22              
23 16         59 my @res;
24              
25 16   50     23 $attrs //= {};
26             push @res, (
27             $indent,
28             "<$elem",
29             keys(%$attrs) ? " " : "",
30             join(" ",
31 16 100       68 map {$_ . '="' . encode_entities($attrs->{$_}) . '"'}
  22         87  
32             sort keys %$attrs
33             ),
34             ">\n"
35             );
36 16 100 66     156 if (defined($text_before) && length($text_before)) {
37 10         13 push @res, $indent2, $text_before, "\n";
38             }
39 16         24 for (0..$num_children-1) {
40 14         27 push @res, _render_elem($callback, $level+1, $_);
41             }
42 16 100 66     44 if (defined($text_after) && length($text_after)) {
43 10         11 push @res, $indent2, $text_after, "\n";
44             }
45 16         20 push @res, $indent, "\n";
46 16         97 @res;
47             }
48              
49             sub create_html_tree_using_callback {
50 2     2 1 13 my $callback = shift;
51              
52             # create the root node
53 2         6 join("", _render_elem($callback, 0, 0));
54             }
55              
56             1;
57             # ABSTRACT: Create HTML document by using a callback
58              
59             __END__