Data-Stag
view release on metacpan or search on metacpan
Data/Stag/BaseHandler.pm view on Meta::CPAN
return @R;
}
sub E {shift->end_event(@_)}
sub e {shift->end_event(@_)}
sub popnode {
my $self = shift;
my $node = $self->{node};
my $topnode = pop @$node;
return $topnode;
}
sub event {
my $self = shift;
my $ev = shift;
my $st = shift;
$self->start_event($ev);
if (ref($st)) {
if (ref($st) ne "ARRAY") {confess($st)}
foreach (@$st) {
confess("$ev $st $_") unless ref($_);
$self->event(@$_)
}
}
else {
$self->evbody($st);
}
$self->end_event($ev);
}
*ev = \&event;
sub print {
my $self = shift;
print "@_";
}
sub printf {
my $self = shift;
printf @_;
}
sub start_element {
my ($self, $element) = @_;
my $name = $element->{Name};
my $atts = $element->{Attributes};
if (!$self->{sax_stack}) {
$self->{sax_stack} = [];
}
push(@{$self->{sax_stack}}, $name);
push(@{$self->{is_nonterminal_stack}}, 0);
if (@{$self->{is_nonterminal_stack}} > 1) {
$self->{is_nonterminal_stack}->[-2] = 1;
}
# check if we need an event
# for any preceeding pcdata
my $str = $self->{__str};
if (defined $str) {
# mixed attribute text - use element '.'
$str =~ s/^\s*//;
$str =~ s/\s*$//;
if ($str) {
$self->event(".", $str) if $str;
}
$self->{__str} = undef;
}
$self->start_event($name);
if ($atts && %$atts) {
# treat atts same way as SXML
$self->start_event('@');
foreach my $k (keys %$atts) {
$self->event("$k", $atts->{$k});
$self->{is_nonterminal_stack}->[-1] = 1;
}
$self->end_event('@');
}
return $element;
}
sub characters {
my ($self, $characters) = @_;
my $char = $characters->{Data};
if (defined $char) {
$self->{__str} = "" unless defined $self->{__str};
$self->{__str} .= $char;
}
return;
}
sub end_element {
my ($self, $element) = @_;
my $name = $element->{Name};
my $str = $self->{__str};
my $parent = pop(@{$self->{sax_stack}});
my $is_nt = pop(@{$self->{is_nonterminal_stack}});
if (defined $str) {
$str =~ s/^\s*//;
$str =~ s/\s*$//;
if ($str || $str eq '0') {
if ($is_nt) {
$self->event('.' =>
$str);
}
else {
$self->evbody($str);
}
}
}
$self->end_event($name);
$self->{__str} = undef;
# $self->{Handler}->end_element($element);
}
sub start_document {
( run in 0.532 second using v1.01-cache-2.11-cpan-6aa56a78535 )