line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
# -*- perl -*-
|
2
|
|
|
|
|
|
|
|
3
|
4
|
|
|
4
|
|
19
|
use strict;
|
|
4
|
|
|
|
|
9
|
|
|
4
|
|
|
|
|
144
|
|
4
|
4
|
|
|
4
|
|
11004
|
use XML::DOM ();
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
package XML::EP::Control;
|
7
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
$XML::EP::Control::VERSION = '0.01';
|
9
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
sub new {
|
12
|
|
|
|
|
|
|
my $proto = shift;
|
13
|
|
|
|
|
|
|
my $self = (@_ == 1) ? \%{ shift() } : { @_ };
|
14
|
|
|
|
|
|
|
bless($self, (ref($proto) || $proto));
|
15
|
|
|
|
|
|
|
}
|
16
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
sub CreatePipe {
|
18
|
|
|
|
|
|
|
my $self = shift; my $ep = shift;
|
19
|
|
|
|
|
|
|
my $class = $ep->{cfg}->{Producer} || "XML::EP::Producer::File";
|
20
|
|
|
|
|
|
|
$ep->Require($class);
|
21
|
|
|
|
|
|
|
my $producer = $class->new();
|
22
|
|
|
|
|
|
|
my $xml = $producer->Produce($ep);
|
23
|
|
|
|
|
|
|
my $processors = $ep->{cfg}->{Processors} || [];
|
24
|
|
|
|
|
|
|
my $formatter = $ep->{cfg}->{Formatter} || "XML::EP::Formatter::HTML";
|
25
|
|
|
|
|
|
|
my $elem = $xml->getFirstChild();
|
26
|
|
|
|
|
|
|
while ($elem) {
|
27
|
|
|
|
|
|
|
my $pi = $elem;
|
28
|
|
|
|
|
|
|
$elem = $pi->getNextSibling();
|
29
|
|
|
|
|
|
|
next unless $pi->getNodeType() ==
|
30
|
|
|
|
|
|
|
XML::DOM::PROCESSING_INSTRUCTION_NODE();
|
31
|
|
|
|
|
|
|
if ($pi->getTarget() eq "xmlep:processor") {
|
32
|
|
|
|
|
|
|
my $data = $pi->getData();
|
33
|
|
|
|
|
|
|
if ($data =~ /^\s*(\S+)\s*(.*)/) {
|
34
|
|
|
|
|
|
|
$ep->Require($1);
|
35
|
|
|
|
|
|
|
push(@$processors, $1->new('pidata' => $2));
|
36
|
|
|
|
|
|
|
$xml->removeChild($pi);
|
37
|
|
|
|
|
|
|
} else {
|
38
|
|
|
|
|
|
|
die "Failed to parse processor instruction: $data";
|
39
|
|
|
|
|
|
|
}
|
40
|
|
|
|
|
|
|
} elsif ($pi->getTarget() eq "xml-stylesheet") {
|
41
|
|
|
|
|
|
|
my $data = $pi->getData();
|
42
|
|
|
|
|
|
|
require XML::EP::Processor::XSLT;
|
43
|
|
|
|
|
|
|
push(@$processors,
|
44
|
|
|
|
|
|
|
XML::EP::Processor::XSLT->new('pidata' => $data));
|
45
|
|
|
|
|
|
|
$xml->removeChild($pi);
|
46
|
|
|
|
|
|
|
} elsif ($pi->getTarget() eq "xmlep:formatter") {
|
47
|
|
|
|
|
|
|
my $data = $pi->getData();
|
48
|
|
|
|
|
|
|
if ($data =~ /^\s*(\S+)\s*(.*)/) {
|
49
|
|
|
|
|
|
|
$ep->Require($1);
|
50
|
|
|
|
|
|
|
$formatter = $1->new('pidata' => $2);
|
51
|
|
|
|
|
|
|
$xml->removeChild($pi);
|
52
|
|
|
|
|
|
|
} else {
|
53
|
|
|
|
|
|
|
die "Failed to parse formatter instruction: $data";
|
54
|
|
|
|
|
|
|
}
|
55
|
|
|
|
|
|
|
}
|
56
|
|
|
|
|
|
|
}
|
57
|
|
|
|
|
|
|
$ep->Formatter($formatter);
|
58
|
|
|
|
|
|
|
$ep->Processors($processors);
|
59
|
|
|
|
|
|
|
$xml;
|
60
|
|
|
|
|
|
|
}
|
61
|
|
|
|
|
|
|
|
62
|
|
|
|
|
|
|
|
63
|
|
|
|
|
|
|
__END__
|