# This template file is in the Public Domain.
# You may do anything you want with this file.
#
# $Id: ActionTempl.pm,v 1.2 1999/08/16 16:04:03 kmacleod Exp $
#
# replace all occurrences of ACTION with the name of your module!
use strict;
use UNIVERSAL;
package XML::PatAct::ACTION;
sub new {
my $type = shift;
my $self = ($#_ == 0) ? { %{ (shift) } } : { @_ };
bless $self, $type;
my $usage = <<'EOF';
usage: XML::PatAct::ACTION->new( Matcher => $matcher,
Patterns => $patterns );
EOF
die "No Matcher specified\n$usage\n"
if !defined $self->{Matcher};
die "No Patterns specified\n$usage\n"
if !defined $self->{Patterns};
# perform additional initialization here
return $self;
}
sub start_document {
my ($self, $document) = @_;
# initialize the pattern module at the start of a document
$self->{Matcher}->initialize($self);
# create empty name and node lists for passing to `match()'
$self->{Names} = [ ];
$self->{Nodes} = [ ];
# Knowing that a source is a tree can be useful information
$self->{SourceIsGrove} = UNIVERSAL::isa($document, 'Data::Grove');
}
sub end_document {
my ($self, $document) = @_;
# notify the pattern module that we're done
$self->{Matcher}->finalize();
my $value;
# perform any finalization actions, use $value to return a result
# from calling `parse()'
# release all the info that is just used during event handling
$self->{Matcher} = $self->{Names} = $self->{Nodes} = undef;
$self->{SourceIsGrove} = undef;
return $value;
}
sub start_element {
my ($self, $element) = @_;
push @{$self->{Names}}, $element->{Name};
push @{$self->{Nodes}}, $element;
my $index = $self->{Matcher}->match($element,
$self->{Names},
$self->{Nodes});
# use $index to retrieve an action for this element
}
sub end_element {
my ($self, $end_element) = @_;
my $name = pop @{$self->{Names}};
my $element = pop @{$self->{Nodes}};
# perform any finishing steps at the end of an element
}
sub characters {
my ($self, $characters) = @_;
}
sub processing_instruction {
my ($self, $pi) = @_;
}
sub ignorable_whitespace {
my ($self, $characters) = @_;
}
1;
__END__
=head1 NAME
XML::PatAct::ACTION - An action module for
=head1 SYNOPSIS
use XML::PatAct::ACTION;
my $patterns = [ PATTERN => ACTION,
... ];
my $matcher = XML::PatAct::ACTION->new(Patterns => $patterns,
Matcher => $matcher );
=head1 DESCRIPTION
XML::PatAct::ACTION is a PerlSAX handler for applying pattern-action
lists to XML parses or trees. XML::PatAct::ACTION ...
New XML::PatAct::ACTION instances are creating by calling `new()'. A
Parameters can be passed as a list of key, value pairs or a hash.
Patterns and Matcher options are required. Patterns is the
pattern-action list to apply. Matcher is an instance of the pattern
or query matching module.
DESCRIBE THE FORMAT OF YOUR ACTIONS HERE
=head1 AUTHOR
This template file was written by Ken MacLeod, ken@bitsko.slc.ut.us
=head1 SEE ALSO
perl(1)
``Using PatAct Modules'' and ``Creating PatAct Modules'' in libxml-perl.
=cut