← Index
Performance Profile   « block view • line view • sub view »
For t/test-parsing
  Run on Sun Nov 14 09:49:57 2010
Reported on Sun Nov 14 09:50:07 2010

File /usr/share/perl5/XML/SAX/DocumentLocator.pm
Statements Executed 4
Total Time 0.0005202 seconds
Subroutines — ordered by exclusive time
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
0000s0sXML::SAX::DocumentLocator::::BEGINXML::SAX::DocumentLocator::BEGIN
0000s0sXML::SAX::DocumentLocator::::CLEARXML::SAX::DocumentLocator::CLEAR
0000s0sXML::SAX::DocumentLocator::::DELETEXML::SAX::DocumentLocator::DELETE
0000s0sXML::SAX::DocumentLocator::::EXISTSXML::SAX::DocumentLocator::EXISTS
0000s0sXML::SAX::DocumentLocator::::FETCHXML::SAX::DocumentLocator::FETCH
0000s0sXML::SAX::DocumentLocator::::FIRSTKEYXML::SAX::DocumentLocator::FIRSTKEY
0000s0sXML::SAX::DocumentLocator::::NEXTKEYXML::SAX::DocumentLocator::NEXTKEY
0000s0sXML::SAX::DocumentLocator::::STOREXML::SAX::DocumentLocator::STORE
0000s0sXML::SAX::DocumentLocator::::TIEHASHXML::SAX::DocumentLocator::TIEHASH
0000s0sXML::SAX::DocumentLocator::::newXML::SAX::DocumentLocator::new
LineStmts.Exclusive
Time
Avg.Code
1# $Id: DocumentLocator.pm,v 1.3 2005/10/14 20:31:20 matt Exp $
2
3package XML::SAX::DocumentLocator;
43517µs172µsuse strict;
# spent 12µs making 1 call to strict::import
5
6sub new {
7 my $class = shift;
8 my %object;
9 tie %object, $class, @_;
10
11 return bless \%object, $class;
12}
13
14sub TIEHASH {
15 my $class = shift;
16 my ($pubmeth, $sysmeth, $linemeth, $colmeth, $encmeth, $xmlvmeth) = @_;
17 return bless {
18 pubmeth => $pubmeth,
19 sysmeth => $sysmeth,
20 linemeth => $linemeth,
21 colmeth => $colmeth,
22 encmeth => $encmeth,
23 xmlvmeth => $xmlvmeth,
24 }, $class;
25}
26
27sub FETCH {
28 my ($self, $key) = @_;
29 my $method;
30 if ($key eq 'PublicId') {
31 $method = $self->{pubmeth};
32 }
33 elsif ($key eq 'SystemId') {
34 $method = $self->{sysmeth};
35 }
36 elsif ($key eq 'LineNumber') {
37 $method = $self->{linemeth};
38 }
39 elsif ($key eq 'ColumnNumber') {
40 $method = $self->{colmeth};
41 }
42 elsif ($key eq 'Encoding') {
43 $method = $self->{encmeth};
44 }
45 elsif ($key eq 'XMLVersion') {
46 $method = $self->{xmlvmeth};
47 }
48 if ($method) {
49 my $value = $method->($key);
50 return $value;
51 }
52 return undef;
53}
54
55sub EXISTS {
56 my ($self, $key) = @_;
57 if ($key =~ /^(PublicId|SystemId|LineNumber|ColumnNumber|Encoding|XMLVersion)$/) {
58 return 1;
59 }
60 return 0;
61}
62
63sub STORE {
64 my ($self, $key, $value) = @_;
65}
66
67sub DELETE {
68 my ($self, $key) = @_;
69}
70
71sub CLEAR {
72 my ($self) = @_;
73}
74
75sub FIRSTKEY {
76 my ($self) = @_;
77 # assignment resets.
78 $self->{keys} = {
79 PublicId => 1,
80 SystemId => 1,
81 LineNumber => 1,
82 ColumnNumber => 1,
83 Encoding => 1,
84 XMLVersion => 1,
85 };
86 return each %{$self->{keys}};
87}
88
89sub NEXTKEY {
90 my ($self, $lastkey) = @_;
91 return each %{$self->{keys}};
92}
93
9413µs3µs1;
95__END__
96
97=head1 NAME
98
99XML::SAX::DocumentLocator - Helper class for document locators
100
101=head1 SYNOPSIS
102
103 my $locator = XML::SAX::DocumentLocator->new(
104 sub { $object->get_public_id },
105 sub { $object->get_system_id },
106 sub { $reader->current_line },
107 sub { $reader->current_column },
108 sub { $reader->get_encoding },
109 sub { $reader->get_xml_version },
110 );
111
112=head1 DESCRIPTION
113
114This module gives you a tied hash reference that calls the
115specified closures when asked for PublicId, SystemId,
116LineNumber and ColumnNumber.
117
118It is useful for writing SAX Parsers so that you don't have
119to constantly update the line numbers in a hash reference on
120the object you pass to set_document_locator(). See the source
121code for XML::SAX::PurePerl for a usage example.
122
123=head1 API
124
125There is only 1 method: C<new>. Simply pass it a list of
126closures that when called will return the PublicId, the
127SystemId, the LineNumber, the ColumnNumber, the Encoding
128and the XMLVersion respectively.
129
130The closures are passed a single parameter, the key being
131requested. But you're free to ignore that.
132
133=cut
134