File Coverage

blib/lib/Tags/Utils.pm
Criterion Covered Total %
statement 41 43 95.3
branch 10 12 83.3
condition n/a
subroutine 9 9 100.0
pod 3 3 100.0
total 63 67 94.0


line stmt bran cond sub pod time code
1             package Tags::Utils;
2              
3 27     27   167207 use base qw(Exporter);
  27         53  
  27         3974  
4 27     27   175 use strict;
  27         85  
  27         1109  
5 27     27   144 use warnings;
  27         65  
  27         1717  
6              
7 27     27   2629 use Error::Pure qw(err);
  27         68845  
  27         1519  
8 27     27   15643 use HTML::Entities;
  27         186779  
  27         2782  
9 27     27   250 use Readonly;
  27         50  
  27         13961  
10              
11             # Constants.
12             Readonly::Array our @EXPORT_OK => qw(encode_newline encode_attr_entities
13             encode_char_entities);
14             Readonly::Scalar my $ATTR_CHARS => q{<&"};
15             Readonly::Scalar my $CHAR_CHARS => q{<&\240};
16             Readonly::Scalar my $EMPTY_STR => q{};
17              
18             our $VERSION = 0.16;
19              
20             # Encode newline in data to '\n' in output.
21             sub encode_newline {
22 1     1 1 282265 my $string = shift;
23              
24 1         3 $string =~ s/\n/\\n/gms;
25              
26 1         2 return $string;
27             }
28              
29             # Encode '<&"' attribute entities.
30             sub encode_attr_entities {
31 92     92 1 296666 my $data_r = shift;
32              
33 92 100       236 if (ref $data_r eq 'SCALAR') {
    100          
    50          
34 62         85 ${$data_r} = encode_entities(decode_entities(${$data_r}),
  62         1671  
  62         366  
35             $ATTR_CHARS);
36             } elsif (ref $data_r eq 'ARRAY') {
37 29         46 foreach my $one_data (@{$data_r}) {
  29         61  
38 61         140 encode_attr_entities(\$one_data);
39             }
40             } elsif (ref $data_r eq $EMPTY_STR) {
41 1         18 return encode_entities(decode_entities($data_r), $ATTR_CHARS);
42             } else {
43 0         0 err 'Reference \''.(ref $data_r).'\' doesn\'t supported.';
44             }
45 91         221 return;
46             }
47              
48             # Encode '<&NBSP' char entities.
49             sub encode_char_entities {
50 77     77 1 361949 my $data_r = shift;
51              
52 77 100       239 if (ref $data_r eq 'SCALAR') {
    100          
    50          
53 42         63 ${$data_r} = encode_entities(decode_entities(${$data_r}),
  42         1758  
  42         363  
54             $CHAR_CHARS);
55             } elsif (ref $data_r eq 'ARRAY') {
56 34         54 foreach my $one_data (@{$data_r}) {
  34         81  
57 41         192 encode_char_entities(\$one_data);
58             }
59             } elsif (ref $data_r eq $EMPTY_STR) {
60 1         20 return encode_entities(decode_entities($data_r), $CHAR_CHARS);
61             } else {
62 0         0 err 'Reference \''.(ref $data_r).'\' doesn\'t supported.';
63             }
64 76         225 return;
65             }
66              
67             1;
68              
69             __END__