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__
|