File Coverage

blib/lib/PYX/Sort.pm
Criterion Covered Total %
statement 44 44 100.0
branch n/a
condition n/a
subroutine 11 11 100.0
pod 4 4 100.0
total 59 59 100.0


line stmt bran cond sub pod time code
1             package PYX::Sort;
2              
3             # Pragmas.
4 6     6   136438 use strict;
  6         13  
  6         166  
5 6     6   35 use warnings;
  6         11  
  6         180  
6              
7             # Modules.
8 6     6   2353 use Class::Utils qw(set_params);
  6         79886  
  6         207  
9 6     6   4954 use PYX::Parser;
  6         7526  
  6         3089  
10              
11             # Version.
12             our $VERSION = 0.03;
13              
14             # Constructor.
15             sub new {
16 6     6 1 5743 my ($class, @params) = @_;
17 6         15 my $self = bless {}, $class;
18              
19             # Output handler.
20 6         31 $self->{'output_handler'} = \*STDOUT;
21              
22             # Process params.
23 6         25 set_params($self, @params);
24              
25             # PYX::Parser object.
26             $self->{'pyx_parser'} = PYX::Parser->new(
27             'callbacks' => {
28             'attribute' => \&_attribute,
29             'start_element' => \&_tag,
30             'end_element' => \&_tag,
31             'comment' => \&_tag,
32             'instruction' => \&_tag,
33             'data' => \&_tag,
34             },
35             'non_parser_options' => {
36             'tag' => {},
37             },
38 4         78 'output_handler' => $self->{'output_handler'},
39             );
40              
41             # Object.
42 4         192 return $self;
43             }
44              
45             # Parse pyx text or array of pyx text.
46             sub parse {
47 2     2 1 2917 my ($self, $pyx, $out) = @_;
48 2         9 $self->{'pyx_parser'}->parse($pyx, $out);
49 2         18 return;
50             }
51              
52             # Parse file with pyx text.
53             sub parse_file {
54 2     2 1 2413 my ($self, $file, $out) = @_;
55 2         9 $self->{'pyx_parser'}->parse_file($file, $out);
56 2         38 return;
57             }
58              
59             # Parse from handler.
60             sub parse_handler {
61 2     2 1 2562 my ($self, $input_file_handler, $out) = @_;
62 2         11 $self->{'pyx_parser'}->parse_handler($input_file_handler, $out);
63 2         22 return;
64             }
65              
66             # Process attribute.
67             sub _attribute {
68 18     18   424 my ($pyx_parser_obj, $att, $attval) = @_;
69 18         49 $pyx_parser_obj->{'non_parser_options'}->{'tag'}->{$att} = $attval;
70 18         39 return;
71             }
72              
73             # Process tag.
74             sub _tag {
75 18     18   592 my $pyx_parser_obj = shift;
76 18         30 my $out = $pyx_parser_obj->{'output_handler'};
77 18         39 _flush($pyx_parser_obj);
78 18         22 print {$out} $pyx_parser_obj->line, "\n";
  18         55  
79 18         436 return;
80             }
81              
82             # Flush attributes.
83             sub _flush {
84 18     18   25 my $pyx_parser_obj = shift;
85 18         28 my $out = $pyx_parser_obj->{'output_handler'};
86 18         22 foreach my $key (sort keys %{$pyx_parser_obj->{'non_parser_options'}
87 18         80 ->{'tag'}}) {
88              
89 18         196 print {$out} 'A'.$key.'="'.$pyx_parser_obj
90 18         27 ->{'non_parser_options'}->{'tag'}->{$key}.'"'."\n";
91             }
92 18         43 $pyx_parser_obj->{'non_parser_options'}->{'tag'} = {};
93 18         58 return;
94             }
95              
96             1;
97              
98             __END__