File Coverage

blib/lib/PYX/SGML/Raw.pm
Criterion Covered Total %
statement 67 76 88.1
branch 2 2 100.0
condition n/a
subroutine 14 17 82.3
pod 5 5 100.0
total 88 100 88.0


line stmt bran cond sub pod time code
1             package PYX::SGML::Raw;
2              
3 8     8   278623 use strict;
  8         19  
  8         306  
4 8     8   70 use warnings;
  8         20  
  8         579  
5              
6 8     8   1240 use Class::Utils qw(set_params);
  8         35186  
  8         409  
7 8     8   4626 use PYX::Parser;
  8         175292  
  8         377  
8 8     8   3951 use PYX::Utils qw(encode entity_encode);
  8         65724  
  8         226  
9              
10             our $VERSION = 0.05;
11              
12             # Constructor.
13             sub new {
14 8     8 1 1967025 my ($class, @params) = @_;
15              
16 8         24 my $self = bless {}, $class;
17              
18             # Output handler.
19 8         49 $self->{'output_handler'} = \*STDOUT;
20              
21             # Process params.
22 8         40 set_params($self, @params);
23              
24             # PYX::Parser object.
25             $self->{'pyx_parser'} = PYX::Parser->new(
26             'callbacks' => {
27             'start_element' => \&_start_element,
28             'end_element' => \&_end_element,
29             'data' => \&_data,
30             'instruction' => \&_instruction,
31             'attribute' => \&_attribute,
32             'comment' => \&_comment,
33             },
34             'non_parser_options' => {
35             'tag_open' => 0,
36             },
37 8         236 'output_handler' => $self->{'output_handler'},
38             );
39              
40             # Object.
41 8         546 return $self;
42             }
43              
44             # Parse pyx text or array of pyx text.
45             sub parse {
46 0     0 1 0 my ($self, $pyx, $out) = @_;
47 0         0 $self->{'pyx_parser'}->parse($pyx, $out);
48 0         0 return;
49             }
50              
51             # Parse file with pyx text.
52             sub parse_file {
53 13     13 1 32235 my ($self, $file) = @_;
54              
55 13         71 $self->{'pyx_parser'}->parse_file($file);
56              
57 13         469 return;
58             }
59              
60             # Parse from handler.
61             sub parse_handler {
62 0     0 1 0 my ($self, $input_file_handler, $out) = @_;
63              
64 0         0 $self->{'pyx_parser'}->parse_handler($input_file_handler, $out);
65              
66 0         0 return;
67             }
68              
69             sub finalize {
70 0     0 1 0 my $self = shift;
71              
72 0         0 _end_of_start_tag($self->{'pyx_parser'});
73              
74 0         0 return;
75             }
76              
77             # Process start of element.
78             sub _start_element {
79 6     6   1674 my ($pyx_parser_obj, $elem) = @_;
80              
81 6         12 my $out = $pyx_parser_obj->{'output_handler'};
82 6         19 _end_of_start_tag($pyx_parser_obj);
83 6         9 print {$out} "<$elem";
  6         303  
84 6         23 $pyx_parser_obj->{'non_parser_options'}->{'tag_open'} = 1;
85              
86 6         17 return;
87             }
88              
89             # Process end of element.
90             sub _end_element {
91 4     4   490 my ($pyx_parser_obj, $elem) = @_;
92              
93 4         7 my $out = $pyx_parser_obj->{'output_handler'};
94 4         10 _end_of_start_tag($pyx_parser_obj);
95 4         5 print {$out} "";
  4         98  
96              
97 4         32 return;
98             }
99              
100             # Process data.
101             sub _data {
102 2     2   497 my ($pyx_parser_obj, $decoded_data) = @_;
103              
104 2         4 my $out = $pyx_parser_obj->{'output_handler'};
105 2         7 my $data = encode($decoded_data);
106 2         16 _end_of_start_tag($pyx_parser_obj);
107 2         2 print {$out} entity_encode($data);
  2         7  
108              
109 2         140 return;
110             }
111              
112             # Process attribute.
113             sub _attribute {
114 4     4   303 my ($pyx_parser_obj, $att, $attval) = @_;
115              
116 4         7 my $out = $pyx_parser_obj->{'output_handler'};
117 4         7 print {$out} " $att=\"", entity_encode($attval), '"';
  4         22  
118              
119 4         231 return;
120             }
121              
122             # Process instruction.
123             sub _instruction {
124 2     2   652 my ($pyx_parser_obj, $target, $data) = @_;
125              
126 2         7 my $out = $pyx_parser_obj->{'output_handler'};
127 2         9 _end_of_start_tag($pyx_parser_obj);
128 2         4 print {$out} "";
  2         11  
129              
130 2         156 return;
131             }
132              
133             # Ends start tag.
134             sub _end_of_start_tag {
135 14     14   24 my $pyx_parser_obj = shift;
136              
137 14         20 my $out = $pyx_parser_obj->{'output_handler'};
138 14 100       50 if ($pyx_parser_obj->{'non_parser_options'}->{'tag_open'}) {
139 3         3 print {$out} '>';
  3         54  
140 3         9 $pyx_parser_obj->{'non_parser_options'}->{'tag_open'} = 0;
141             }
142              
143 14         25 return;
144             }
145              
146             # Process comment.
147             sub _comment {
148 2     2   739 my ($pyx_parser_obj, $comment) = @_;
149              
150 2         6 my $out = $pyx_parser_obj->{'output_handler'};
151 2         3 print {$out} '';
  2         17  
152              
153 2         167 return;
154             }
155              
156             1;
157              
158             __END__