File Coverage

blib/lib/EPublisher/Target/Plugin/OTRSDoc.pm
Criterion Covered Total %
statement 27 78 34.6
branch 0 16 0.0
condition 0 9 0.0
subroutine 9 15 60.0
pod 2 4 50.0
total 38 122 31.1


line stmt bran cond sub pod time code
1             package EPublisher::Target::Plugin::OTRSDoc;
2              
3             # ABSTRACT: Create HTML version of OTRS documentation
4              
5 1     1   1650 use strict;
  1         3  
  1         38  
6 1     1   7 use warnings;
  1         2  
  1         34  
7 1     1   7 use File::Basename;
  1         11  
  1         113  
8 1     1   7 use File::Path qw(make_path);
  1         2  
  1         96  
9 1     1   1531 use HTML::Template::Compiled;
  1         136682  
  1         14  
10 1     1   297839 use Pod::Simple::XHTML;
  1         61451  
  1         42  
11              
12 1     1   1077 use EPublisher;
  1         14954  
  1         119  
13 1     1   927 use EPublisher::Target::Base;
  1         352  
  1         595  
14             our @ISA = qw(EPublisher::Target::Base);
15              
16             our $VERSION = 0.4;
17              
18             sub deploy {
19 0     0 1   my ($self) = @_;
20            
21 0   0       my $pods = $self->_config->{source} || [];
22            
23 0   0       my $encoding = $self->_config->{encoding} || ':encoding(UTF-8)';
24 0   0       my $base_url = $self->_config->{base_url} || '';
25 0           my $version = 0;
26            
27 0           my @TOC = map{
28 0           (my $name = $_->{title}) =~ s/::/_/g;
29 0           { target => join( '/', $base_url, lc( $name ) . '.html'), name => $_->{title} };
30 0           } @{$pods};
31            
32 0           my $output = $self->_config->{output};
33 0 0 0       make_path $output if $output && !-d $output;
34            
35 0           for my $pod ( @{$pods} ) {
  0            
36 0           my $parser = Pod::Simple::XHTML->new;
37 0           $parser->index(0);
38            
39 0           (my $name = $pod->{title}) =~ s/::/_/g;
40            
41 0           $parser->output_string( \my $xhtml );
42 0           $parser->parse_string_document( $pod->{pod} );
43            
44 0           my $tmpl = HTML::Template::Compiled->new(
45             filename => $self->_config->{template},
46             );
47            
48 0           $xhtml =~ s{}{};
49 0           $xhtml =~ s{}{};
50            
51 0           $tmpl->param(
52             TOC => \@TOC,
53             Body => $xhtml,
54             );
55            
56 0 0         if ( open my $fh, '>', File::Spec->catfile( $output, lc $name . '.html' ) ) {
57 0           print $fh $tmpl->output;
58 0           close $fh;
59             }
60             }
61             }
62              
63             ## -------------------------------------------------------------------------- ##
64             ## Change behavour of Pod::Simple::XHTML
65             ## -------------------------------------------------------------------------- ##
66              
67             {
68 1     1   8 no warnings 'redefine';
  1         1  
  1         1403  
69            
70             sub Pod::Simple::XHTML::idify {
71 0     0 1   my ($self, $t, $not_unique) = @_;
72 0           for ($t) {
73 0           s/<[^>]+>//g; # Strip HTML.
74 0           s/&[^;]+;//g; # Strip entities.
75 0           s/^([^a-zA-Z]+)$/pod$1/; # Prepend "pod" if no valid chars.
76 0           s/^[^a-zA-Z]+//; # First char must be a letter.
77 0           s/[^-a-zA-Z0-9_]+/-/g; # All other chars must be valid.
78             }
79 0 0         return $t if $not_unique;
80 0           my $i = '';
81 0           $i++ while $self->{ids}{"$t$i"}++;
82 0           return "$t$i";
83             }
84            
85 0     0 0   sub Pod::Simple::XHTML::start_Verbatim {}
86            
87             sub Pod::Simple::XHTML::end_Verbatim {
88 0     0 0   my ($self) = @_;
89            
90 0           $self->{scratch} =~ s{ }{  }g;
91 0           $self->{scratch} =~ s{\n}{
}g;
92             #$self->{scratch} = '
' . $self->{scratch} . '
';
93 0           $self->{scratch} = '

' . $self->{scratch} . '

';
94            
95 0           $self->emit;
96             }
97              
98             *Pod::Simple::XHTML::start_L = sub {
99              
100             # The main code is taken from Pod::Simple::XHTML.
101 0     0     my ( $self, $flags ) = @_;
102 0           my ( $type, $to, $section ) = @{$flags}{ 'type', 'to', 'section' };
  0            
103 0 0         my $url =
    0          
    0          
104             $type eq 'url' ? $to
105             : $type eq 'pod' ? $self->resolve_pod_page_link( $to, $section )
106             : $type eq 'man' ? $self->resolve_man_page_link( $to, $section )
107             : undef;
108              
109             # This is the new/overridden section.
110 0 0         if ( defined $url ) {
111 0           $url = $self->encode_entities( $url );
112             }
113              
114             # If it's an unknown type, use an attribute-less like HTML.pm.
115 0 0         $self->{'scratch'} .= '' : '>' );
116             };
117            
118             *Pod::Simple::XHTML::start_Document = sub {
119 0     0     my ($self) = @_;
120              
121             #my $xhtml_headers =
122             # qq{\n}
123             # . qq{
124             # . qq{ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"\n}
125             # . qq{ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n} . qq{\n}
126             # . qq{\n}
127             # . qq{\n}
128             # . qq{\n}
129             # . qq{
130             # . qq{content="text/html; charset=utf-8"/>\n}
131             # . qq{
132             # . qq{type="text/css"/>\n}
133             # . qq{\n} . qq{\n}
134             # . qq{\n};
135              
136              
137             #$self->{'scratch'} .= $xhtml_headers;
138 0           $self->emit('nowrap');
139             }
140             }
141              
142             1;
143              
144              
145              
146             =pod
147              
148             =head1 NAME
149              
150             EPublisher::Target::Plugin::OTRSDoc - Create HTML version of OTRS documentation
151              
152             =head1 VERSION
153              
154             version 0.4
155              
156             =head1 SYNOPSIS
157              
158             use EPublisher::Target;
159             my $EPub = EPublisher::Target->new( { type => 'OTRSDoc' } );
160             $EPub->deploy;
161              
162             =encoding utf8
163              
164             =head1 METHODS
165              
166             =head2 deploy
167              
168             creates the output.
169              
170             $EPub->deploy;
171              
172             =head1 YAML SPEC
173              
174             EPubTest:
175             source:
176             #...
177             target:
178             type: ÓTRSDoc
179              
180             =head1 TODO
181              
182             =head2 document methods
183              
184             =head1 AUTHOR
185              
186             Renee Bäcker
187              
188             =head1 COPYRIGHT AND LICENSE
189              
190             This software is Copyright (c) 2013 by Renee Bäcker.
191              
192             This is free software, licensed under:
193              
194             The Artistic License 2.0 (GPL Compatible)
195              
196             =cut
197              
198              
199             __END__