12 |
Block => 1, |
Block => 1, |
13 |
Vars => 1 ); |
Vars => 1 ); |
14 |
|
|
|
my $i = 0; |
|
|
|
|
15 |
sub Init |
sub Init |
16 |
{ |
{ |
17 |
my $expat = shift; |
my $expat = shift; |
18 |
$expat->{TREE} = $expat->{PTR} = neb::Tree::Container->new; |
my $obj = new neb::Tree::Container; |
19 |
|
$expat->{"neb_parser_current"} = $obj; |
20 |
|
$expat->{"neb_parser_stack"} = []; |
21 |
} |
} |
22 |
|
|
23 |
sub Start |
sub Start |
31 |
} else { |
} else { |
32 |
$obj = neb::Tree::Tag->new($name); |
$obj = neb::Tree::Tag->new($name); |
33 |
} |
} |
|
|
|
|
$obj->bind_parent($expat->{PTR}); |
|
34 |
$obj->attributes(@_); |
$obj->attributes(@_); |
35 |
|
|
36 |
$expat->{PTR} = $obj; |
$expat->{"neb_parser_current"}->add_content($obj); |
37 |
|
|
38 |
|
push @{$expat->{"neb_parser_stack"}}, $expat->{"neb_parser_current"}; |
39 |
|
$expat->{"neb_parser_current"} = $obj; |
40 |
} |
} |
41 |
|
|
42 |
sub End |
sub End |
43 |
{ |
{ |
44 |
my $expat = shift; |
my $expat = shift; |
45 |
my $name = shift; |
my $name = shift; |
46 |
|
|
47 |
$expat->{PTR} = $expat->{PTR}->parent; |
$expat->{"neb_parser_current"} = pop @{$expat->{"neb_parser_stack"}} |
48 |
} |
} |
49 |
|
|
50 |
sub Default |
sub Default |
52 |
my $expat = shift; |
my $expat = shift; |
53 |
my $stuff = shift; |
my $stuff = shift; |
54 |
my $obj = neb::Tree::Stuff->new($stuff); |
my $obj = neb::Tree::Stuff->new($stuff); |
55 |
$obj->bind_parent($expat->{PTR}); |
$expat->{"neb_parser_current"}->add_content($obj); |
56 |
|
return $obj; |
57 |
} |
} |
58 |
|
|
59 |
sub Final |
sub Final |
60 |
{ |
{ |
61 |
my $expat = shift; |
my $expat = shift; |
62 |
delete $expat->{PTR}; |
my $result = $expat->{"neb_parser_current"}; |
63 |
return $expat->{TREE}; |
|
64 |
|
delete $expat->{"neb_parser_stack"}; |
65 |
|
delete $expat->{"neb_parser_current"}; |
66 |
|
return $result->{CONTENT}->[0]; |
67 |
} |
} |
68 |
|
|
69 |
1; |
1; |