File Coverage

blib/lib/XML/Parser/EasyTree.pm
Criterion Covered Total %
statement 6 57 10.5
branch 0 10 0.0
condition 0 11 0.0
subroutine 2 11 18.1
pod 0 9 0.0
total 8 98 8.1


line stmt bran cond sub pod time code
1             package XML::Parser::EasyTree;
2            
3 1     1   2376 use strict;
  1         3  
  1         251  
4 1     1   6 use vars qw($VERSION $Noempty $Latin);
  1         2  
  1         2174  
5            
6             $VERSION = '0.01';
7            
8             $XML::Parser::Built_In_Styles{EasyTree} = 1;
9            
10             sub Init {
11 0     0 0   my $expat = shift;
12 0           $expat->{Lists} = [];
13 0           $expat->{Curlist} = $expat->{Tree} = [];
14             }
15            
16             sub Start {
17 0     0 0   my $expat = shift;
18 0           my $tag = shift;
19 0           checkempty($expat);
20 0           my $newlist=[];
21 0           my $newnode={type=>'e',attrib=>{},name=>nsname($expat,$tag),content=>$newlist};
22 0           while (@_) {
23 0           my ($name,$val)=(shift @_,shift@_);
24 0           $newnode->{attrib}{nsname($expat,$name)}=encode($val);
25             }
26 0           push @{ $expat->{Lists} }, $expat->{Curlist};
  0            
27 0           push @{ $expat->{Curlist} }, $newnode;
  0            
28 0           $expat->{Curlist} = $newlist;
29             }
30            
31             sub End {
32 0     0 0   my $expat=shift;
33 0           checkempty($expat);
34 0           $expat->{Curlist}=pop @{$expat->{Lists}};
  0            
35             }
36            
37             sub Char {
38 0     0 0   my ($expat,$text)=@_;
39 0           my $clist=$expat->{Curlist};
40 0 0 0       if (!@$clist || $clist->[-1]{type} ne 't') {
41 0           push @$clist,{type=>'t',content=>''};
42             }
43 0           $clist->[-1]{content}.=encode($text);
44             }
45            
46             sub Proc {
47 0     0 0   my ($expat,$target,$value)=@_;
48 0           checkempty($expat);
49 0           my $clist=$expat->{Curlist};
50 0           push @$clist,{type=>'p',target=>encode($target),content=>encode($value)};
51             }
52            
53             sub Final {
54 0     0 0   my $expat = shift;
55 0           checkempty($expat);
56 0           delete $expat->{Curlist};
57 0           delete $expat->{Lists};
58 0           $expat->{Tree};
59             }
60            
61             sub nsname {
62 0     0 0   my ($parser,$name)=@_;
63 0 0         if ($parser->{Namespaces}) {
64 0   0       my $ns=$parser->namespace($name)||'';
65 0           $name="{$ns}".$name;
66             }
67 0           return encode($name);
68             }
69            
70             sub encode {
71 0     0 0   my $text=shift;
72 0 0         if ($Latin) {
73 0           $text=~s{([\xc0-\xc3])(.)}{
74 0           my $hi = ord($1);
75 0           my $lo = ord($2);
76 0           chr((($hi & 0x03) <<6) | ($lo & 0x3F))
77             }ge;
78             }
79 0           $text;
80             }
81            
82             sub checkempty() {
83 0     0 0   my $expat=shift;
84 0 0         if ($Noempty) {
85 0           my $clist=$expat->{Curlist};
86 0 0 0       if (@$clist && $clist->[-1]{type} eq 't' && $clist->[-1]{content}=~/^\s+$/) {
      0        
87 0           pop @$clist;
88             }
89             }
90             }
91            
92             1;
93             __END__