File Coverage

blib/lib/Pod/Markdown/Githubert.pm
Criterion Covered Total %
statement 55 71 77.4
branch 13 22 59.0
condition 1 5 20.0
subroutine 10 12 83.3
pod 3 7 42.8
total 82 117 70.0


line stmt bran cond sub pod time code
1             package Pod::Markdown::Githubert;
2 1     1   273654 use strict;
  1         3  
  1         48  
3 1     1   10 use warnings;
  1         31  
  1         102  
4              
5 1     1   809 use Pod::Markdown ();
  1         93970  
  1         758  
6             our @ISA = 'Pod::Markdown';
7              
8             our $VERSION = '0.05';
9              
10             sub new {
11 5     5 1 168493 my $class = shift;
12 5         19 my %args = @_;
13              
14 5         12 my $hl_language = '';
15 5 100       22 if (exists $args{hl_language}) {
16 1         4 $hl_language = delete $args{hl_language};
17             }
18              
19             my $self = $class->SUPER::new(
20             markdown_fragment_format => sub {
21 0     0   0 my ($self, $str) = @_;
22 0         0 $str =~ tr/A-Za-z0-9_\- //cd;
23 0         0 $str =~ tr/A-Z /a-z-/;
24 0         0 $str
25             },
26 5         52 html_encode_chars => '\$',
27             %args
28             );
29 5         1884 $self->accept_targets('highlighter', 'github-markdown');
30 5         122 $self->hl_language($hl_language);
31 5         17 $self
32             }
33              
34             sub hl_language {
35 5     5 1 9 my $self = shift;
36 5 50       18 if (@_) {
37 5         19 $self->{+__PACKAGE__}{hl_language} = $_[0];
38             }
39             $self->{+__PACKAGE__}{hl_language}
40 5         13 }
41              
42             sub format_perldoc_url {
43 0     0 1 0 my $self = shift;
44 0         0 my ($name, $section) = @_;
45 0         0 my $prev_url_prefix;
46 0 0 0     0 if (defined $name && $name =~ /\Aperl[a-z0-9]*\z/) {
47 0         0 $prev_url_prefix = $self->perldoc_url_prefix;
48 0         0 $self->perldoc_url_prefix('https://perldoc.perl.org/');
49             }
50 0         0 my $url = $self->SUPER::format_perldoc_url($name, $section);
51 0 0       0 $self->perldoc_url_prefix($prev_url_prefix) if defined $prev_url_prefix;
52 0         0 $url
53             }
54              
55             sub start_for {
56 3     3 0 992 my $self = shift;
57 3         8 my ($attr) = @_;
58 3 50       13 if ($attr->{target} eq 'highlighter') {
59 3         12 $self->_new_stack;
60 3         48 $self->_stack_state->{for_highlighter} = 1;
61 3         23 return;
62             }
63 0         0 $self->SUPER::start_for(@_)
64             }
65              
66             sub end_for {
67 3     3 0 818 my $self = shift;
68 3         8 my ($attr) = @_;
69 3 50       9 if ($self->_stack_state->{for_highlighter}) {
70 3         54 my $text = $self->_pop_stack_text;
71 3 100       83 my %settings =
72             map /\A([^=]*)=(.*)\z/s
73             ? ($1 => $2)
74             : (language => $_),
75             split ' ', $text;
76 3   50     16 $self->{+__PACKAGE__}{hl_language} = $settings{language} // '';
77 3         11 return;
78             }
79 0         0 $self->SUPER::end_for(@_)
80             }
81              
82             sub _indent_verbatim {
83 9     9   7884 my $self = shift;
84 9         19 my ($paragraph) = @_;
85 9         17 my $min_indent = 'inf';
86 9         71 while ($paragraph =~ /^( +)/mg) {
87 12         30 my $n = length $1;
88 12 100       58 $min_indent = $n if $n < $min_indent;
89             }
90 9 50       33 my $rep =
91             $min_indent < 'inf'
92             ? "{$min_indent}"
93             : '+';
94 9         205 $paragraph =~ s/^ $rep//mg;
95 9         19 my $fence = '```';
96 9         72 while ($paragraph =~ /^ *\Q$fence\E *$/m) {
97 2         47 $fence .= '`';
98             }
99 9         24 my $hl_language = $self->{+__PACKAGE__}{hl_language};
100 9 100       34 if ($hl_language !~ /\A[^`\s]\S*\z/) {
101 4         8 $hl_language = '';
102             }
103             "$fence$hl_language\n$paragraph\n$fence"
104 9         38 }
105              
106             sub end_item_number {
107 1     1 0 1453 my $self = shift;
108 1 50       9 if ($self->_last_string =~ /\S/) {
109 0         0 return $self->SUPER::end_item_number(@_);
110             }
111 1         14 $self->_end_item($self->_private->{item_number} . '. ');
112             }
113              
114             sub start_I {
115 2     2 0 2769 my $self = shift;
116 2         8 $self->_save('*');
117             }
118              
119             1
120             __END__