File Coverage

blib/lib/Kwim/Pod.pm
Criterion Covered Total %
statement 79 88 89.7
branch 23 36 63.8
condition 2 3 66.6
subroutine 20 21 95.2
pod 0 17 0.0
total 124 165 75.1


line stmt bran cond sub pod time code
1 2     2   2244 use strict; use warnings;
  2     2   4  
  2         59  
  2         8  
  2         5  
  2         65  
2             package Kwim::Pod;
3              
4 2     2   8 use base 'Kwim::Markup';
  2         3  
  2         192  
5              
6             # use XXX -with => 'YAML::XS';
7              
8 2     2   9 use constant top_block_separator => "\n";
  2         4  
  2         3165  
9              
10             sub render_text {
11 71     71 0 141 my ($self, $text) = @_;
12 71         164 $text =~ s/\n/ /g;
13 71         236 return $text;
14             }
15              
16             sub render_comment {
17 3     3 0 7 my ($self, $node) = @_;
18 3 100       16 if ($node !~ /\n/) {
    50          
19 2         8 "=for comment $node\n";
20             }
21             elsif ($node !~ /\n\n/) {
22 0         0 "=for comment\n$node\n";
23             }
24             else {
25 1         5 "=begin comment\n$node\n=end\n";
26             }
27             }
28              
29             sub render_para {
30 27     27 0 57 my ($self, $node) = @_;
31 27         99 my $out = $self->render($node);
32 27 50       407 if ($self->option->{'wrap'}) {
33 0         0 require Text::Autoformat;
34 0 0       0 if ($out !~ /^=for /) {
35 0         0 $out = Text::Autoformat::autoformat($out, {right => 78});
36             }
37 0         0 chomp $out;
38 0         0 return $out;
39             }
40 27         367 return "$out\n";
41             }
42              
43 5     5 0 13 sub render_blank { '' }
44              
45             sub render_title {
46 3     3 0 9 my ($self, $node, $number) = @_;
47 3 50       16 my ($name, $abstract) = ref $node ? @$node : (undef, $node);
48 3 50       22 my $label = $self->option->{'pod-upper-head'} ? 'NAME' : 'Name';
49 3         39 $name = $self->render($name);
50 3 100       13 if (defined $abstract) {
51 2         9 $abstract = $self->render($abstract);
52 2         13 "=head1 $label\n\n$name - $abstract\n";
53             }
54             else {
55 1         6 "=head1 $name\n";
56             }
57             }
58              
59             sub render_head {
60 4     4 0 82 my ($self, $node, $number) = @_;
61 4         17 my $out = $self->render($node);
62 4 50 66     77 $out = uc($out) if $number eq '1' and $self->option->{'pod-upper-head'};
63 4         31 "=head$number $out\n";
64             }
65              
66             sub render_pref {
67 4     4 0 9 my ($self, $node) = @_;
68 4         10 my $out = $node;
69 4         12 chomp $out;
70 4         80 $out =~ s/^(.)/ $1/gm;
71 4         19 "$out\n";
72             }
73              
74             sub render_bold {
75 4     4 0 14 my ($self, $node) = @_;
76 4         17 my $out = $self->render($node);
77 4         21 $self->render_phrase(B => $out);
78             }
79              
80             sub render_emph {
81 3     3 0 7 my ($self, $node) = @_;
82 3         17 my $out = $self->render($node);
83 3         16 $self->render_phrase(I => $out);
84             }
85              
86             sub render_code {
87 4     4 0 44 my ($self, $node) = @_;
88 4         796 my $out = $self->render($node);
89 4         20 $self->render_phrase(C => $out);
90             }
91              
92             sub render_hyper {
93 3     3 0 9 my ($self, $node) = @_;
94 3         10 my ($link, $text) = @{$node}{qw(link text)};
  3         12  
95 3 100       22 (length $text == 0)
96             ? $self->render_phrase(L => $link)
97             : $self->render_phrase(L => "$text|$link");
98             }
99              
100             sub render_link {
101 1     1 0 5 my ($self, $node) = @_;
102 1         3 my ($link, $text) = @{$node}{qw(link text)};
  1         7  
103 1 50       11 (length $text == 0)
104             ? $self->render_phrase(L => $link)
105             : $self->render_phrase(L => "$text|$link");
106             }
107              
108             sub render_phrase {
109 15     15 0 45 my ($self, $code, $text) = @_;
110 15 0       164 ($text !~ /[<>]/) ? "$code<$text>" :
    0          
    50          
    100          
    100          
111             ($text !~ /(<< | >>)/) ? "$code<< $text >>" :
112             ($text !~ /(<<< | >>>)/) ? "$code<<< $text >>>" :
113             ($text !~ /(<<<< | >>>>)/) ? "$code<<<< $text >>>>" :
114             ($text !~ /(<<<<< | >>>>>)/) ? "$code<<<<< $text >>>>>" :
115             $text;
116             }
117              
118             sub render_list {
119 4     4 0 8 my ($self, $node) = @_;
120 4         17 my $out = $self->render($node);
121 4         18 "=over\n\n$out=back\n";
122             }
123              
124             sub render_item {
125 10     10 0 17 my ($self, $node) = @_;
126 10         20 my $item = shift @$node;
127 10         39 my $out = "=item * " . $self->render($item) . "\n\n";
128 10 100       47 $out .= $self->render($node) . "\n" if @$node;
129 10         32 $out;
130             }
131              
132             sub render_data {
133 3     3 0 8 my ($self, $node) = @_;
134 3         8 my $out = "=over\n\n";
135 3         9 for my $item (@$node) {
136 6         16 my ($term, $def, $rest) = @$item;
137 6         23 $term = $self->render($term);
138 6         20 $out .= "=item $term\n\n";
139 6 100       21 if (length $def) {
140 2         12 $out .= $self->render($def) . "\n\n";
141             }
142 6 100       22 if ($rest) {
143 5         21 $out .= $self->render($rest, "\n") . "\n";
144             }
145             }
146 3         14 $out . "=back\n";
147             }
148              
149             sub render_complete {
150 0     0 0   my ($self, $out) = @_;
151 0           chomp $out;
152             <<"..."
153             =pod
154              
155             =for comment
156             DO NOT EDIT. This Pod was generated by Kwim.
157             See http://github.com/ingydotnet/kwim-pm#readme
158              
159             =encoding utf8
160              
161             $out
162              
163             =cut
164             ...
165 0           }
166              
167             1;