1SGML::Parser::OpenSP::TUosoelrs(C3o)ntributed Perl DocumSeGnMtLa:t:iPoanrser::OpenSP::Tools(3)
2
3
4
6 SGML::Parser::OpenSP::Tools - Tools to process OpenSP output
7
9 Routines to post-process OpenSP event data.
10
12 specified_attribute($attribute)
13 specified_attribute returns a true value if the attribute is of
14 type "cdata" or "tokenized" and has its "Defaulted" property set to
15 "specified". For example
16
17 sub start_element
18 {
19 my $self = shift;
20 my $elem = shift;
21 my @spec = grep specified_attribute($_),
22 values %{$elem->{Attributes}};
23
24 # @spec contains all explicitly specified attributes
25 }
26
27 defaulted_attribute($attribute)
28 defaulted_attribute returns a true value if the attribute is of
29 type "cdata" or "tokenized" and has its "Defaulted" property set to
30 something but "specified". For all attributes, the following always
31 holds true,
32
33 !defined(attribute_value($_)) or
34 defaulted_attribute($_) or
35 specified_attribute($_)
36
37 since only defaulted and specified attributes can have a value.
38
39 value_attribute($attribute)
40 Returns true if the value can have a value, i.e., it is either
41 specified or defaulted.
42
43 attribute_value($attribute)
44 attribute_value returns a textual representation of the value of an
45 attribute as reported to a "start_element" handler or "undef" if no
46 value is available.
47
48 split_message($message, $filename, $open_ent, $error_num, $open_elem)
49 split_message splits an OpenSP error message into its components,
50 the error or warning message, an optional auxiliary message that
51 provides additional information about the error, like the first
52 occurence of an ID in case of duplicate IDs in a document, each
53 accompanied by line and column numbers relevant to the message, and
54 depending on the parser configuration the open entities for the
55 message, the error number of the message and a list of the current
56 open elements.
57
58 It returns a hash reference like
59
60 # this is always present
61 primary_message =>
62 {
63 Number => 141, # only if $p->show_error_numbers(1)
64 Module => 554521624, # only if $p->show_error_numbers(1)
65 ColumnNumber => 9,
66 LineNumber => 12,
67 Severity => 'E',
68 Text => 'ID "a" already defined'
69 },
70
71 # only some messages have an aux_message
72 aux_message =>
73 {
74 ColumnNumber => 9,
75 LineNumber => 11,
76 Text => 'ID "a" first defined here'
77 },
78
79 # iff $p->show_open_elements(1) and there are open elements
80 open_elements => 'html body[1] (p[1])',
81
82 # iff $p->show_open_entities(1) and there are open entities
83 # other than the document, but the document will be reported
84 # if the error is in some other entity
85 open_entities => [
86 {
87 ColumnNumber => 55,
88 FileName => 'example.xhtml',
89 EntityName => 'html',
90 LineNumber => 2
91 }, ... ],
92
93 This would typically be used like
94
95 sub error
96 {
97 my $self = shift;
98 my $erro = shift;
99 my $mess = $erro->{Message};
100
101 # parser is the SGML::Parser::OpenSP
102 # object stored in the handler object
103 my $loca = $self->{parser}->get_location;
104 my $name = $loca->{FileName};
105
106 my $splt = split_message($mess, $name,
107 $self->{parser}->show_open_entities,
108 $self->{parser}->show_error_numbers,
109 $self->{parser}->show_open_elements);
110
111 # ...
112 }
113
114 A more convenient way to access this function is provided by the
115 "SGML::Parser::OpenSP" module which you can use like
116
117 sub error
118 {
119 my $self = shift;
120 my $erro = shift;
121
122 my $mess = $self->{parser}->split_message($erro);
123
124 # relevant data is now $mess and $erro->{Severity}
125 # of which the latter provides more detailed information
126 # than $mess->{primary_message}->{Severity}, see the
127 # SGML::Parser::OpenSP documentation for details
128 }
129
130 split_pi($data)
131 split_pi splits the data of a processing instructions at the first
132 white space character into two components where white space
133 character is defined in the $WHITESPACE package variable,
134 qr/[\x20\x09\x0d\x0a]/ by default. It returns "undef" if there is
135 no data to split.
136
137 sub pi
138 {
139 my $self = shift;
140 my $proc = shift;
141
142 my ($target, $data) = split_pi($proc->{Data});
143
144 # ...
145 }
146
148 Copyright (c) 2006-2008 Bjoern Hoehrmann <bjoern@hoehrmann.de>.
149 This module is licensed under the same terms as Perl itself.
150
151
152
153perl v5.38.0 2023-07-21 SGML::Parser::OpenSP::Tools(3)