File Coverage

blib/lib/XML/Directory/String.pm
Criterion Covered Total %
statement 50 91 54.9
branch 7 20 35.0
condition 1 3 33.3
subroutine 12 18 66.6
pod 0 11 0.0
total 70 143 48.9


line stmt bran cond sub pod time code
1             package XML::Directory::String;
2              
3             require 5.005_03;
4 1 50   1   745 BEGIN { require warnings if $] >= 5.006; }
5              
6 1     1   5 use strict;
  1         2  
  1         44  
7 1     1   6 use File::Spec::Functions ();
  1         1  
  1         16  
8 1     1   10 use Carp;
  1         2  
  1         69  
9 1     1   5 use XML::Directory;
  1         2  
  1         1298  
10              
11             @XML::Directory::String::ISA = qw(XML::Directory);
12              
13             sub parse_dir {
14 1     1 0 3 my $self = shift;
15 1         10 $self->SUPER::parse;
16 1         2 return scalar @{$self->{xml}};
  1         4  
17             }
18              
19             sub parse {
20 0     0 0 0 my $self = shift;
21 0         0 $self->SUPER::parse;
22 0         0 return scalar @{$self->{xml}};
  0         0  
23             }
24              
25             sub get_arrayref {
26 0     0 0 0 my $self = shift;
27 0         0 return $self->{xml};
28             }
29              
30             sub get_array {
31 0     0 0 0 my $self = shift;
32 0         0 my $xml = $self->{xml};
33 0         0 return @$xml;
34             }
35              
36             sub get_string {
37 0     0 0 0 my $self = shift;
38 0         0 my $xml = $self->{xml};
39 0         0 return join "\n", @$xml, '';
40             }
41              
42             sub doStartDocument {
43 1     1 0 7 my $self = shift;
44 1         34 $self->{xml} = [];
45 1         13 $self->{level} = 0;
46 1         6 push @{$self->{xml}},
  1         7  
47             "{encoding}\"?>";
48              
49 1 50       57 if ($self->{doctype}) {
50 0         0 my $doctype = $self->_doctype;
51 0         0 push @{$self->{xml}}, $doctype;
  0         0  
52             }
53             }
54              
55 1     1 0 4 sub doEndDocument {
56             }
57              
58             sub doStartElement {
59 2     2 0 9 my ($self, $tag, $attr, $qname) = @_;
60 2         7 my $pref = '';
61 2 50       16 $pref = $self->_ns_prefix unless $qname;
62 2         23 push @{$self->{xml}},
  1         9  
63             ' ' x $self->{level}++
64             . "<$pref"
65             . "$tag "
66 2         13 . join(' ', map {qq/$_->[0]="$_->[1]"/} @$attr)
67             . ">";
68             }
69              
70             sub doEndElement {
71 2     2 0 4 my ($self, $tag, $qname) = @_;
72 2         2036 my $pref = '';
73 2 50       11 $pref = $self->_ns_prefix unless $qname;
74 2         4 push @{$self->{xml}},
  2         21  
75             ' ' x --$self->{level}
76             . "
77             . "$tag>"
78             ;
79             }
80              
81             sub doElement {
82 8     8 0 13 my ($self, $tag, $attr, $value, $qname) = @_;
83 8         12 my $pref = '';
84 8 50       266 $pref = $self->_ns_prefix unless $qname;
85 8         29 my $element = ' ' x $self->{level}
86             . "<$pref"
87             . "$tag "
88 8         22 . join(' ', map {qq/$_->[0]="$_->[1]"/} @$attr)
89             . '>';
90 8         21 $element =~ s/ >$/>/;
91 8 50       23 $element .= $value if defined $value;
92 8         11 $element .= "
93 8         16 $element .= "$tag>";
94 8         10 push @{$self->{xml}}, $element;
  8         42  
95             }
96              
97             sub doError {
98 0     0 0 0 my ($self, $n, $par) = @_;
99 0         0 my $msg = $self->_msg($n);
100 0         0 $msg = "[Error $n] $msg: $par";
101              
102 0 0       0 unless ($self->{catch_error}) {
103 0         0 croak "$msg\n"
104              
105             } else {
106            
107 0         0 $self->doStartDocument;
108              
109 0 0       0 if ($self->{ns_enabled}) {
110 0         0 my @attr = ();
111 0         0 my $decl = $self->_ns_declaration;
112 0         0 push @attr, [$decl => $self->{ns_uri}];
113 0         0 $self->doStartElement('dirtree', \@attr);
114             } else {
115 0         0 $self->doStartElement('dirtree', undef);
116             }
117              
118 0         0 my @attr2 = ([number => $n]);
119 0         0 $msg =~ s/&/&/g;
120 0         0 $msg =~ s/
121 0         0 $msg =~ s/>/>/g;
122 0         0 $self->doElement('error', \@attr2, $msg);
123              
124 0         0 $self->doEndElement('dirtree');
125 0         0 $self->{error} = $n;
126             }
127             }
128              
129             sub _ns_prefix {
130 12     12   16 my $self = shift;
131            
132 12         18 my $pref = '';
133 12 50 33     35 if ($self->{ns_enabled} && $self->{ns_prefix}) {
134 0         0 $pref = "$self->{ns_prefix}:";
135             }
136 12         24 return $pref;
137             }
138              
139             sub _doctype {
140 0     0     my $self = shift;
141              
142 0           my $doctype = '
143             . '"-//GA//DTD XML-Directory 1.0 Level_DET_//EN"'
144             . "\n "
145             . '"http://www.gingerall.org/dtd/XML-Directory/1.0/'
146             . 'dirtree-level_DET_.dtd">';
147              
148 0 0         if ($self->{details}) {
149 0           $doctype =~ s/_DET_/$self->{details}/g;
150             } else {
151 0           $doctype =~ s/_DET_/2/g;
152             }
153 0           return $doctype;
154             }
155              
156             1;
157              
158             __END__