File Coverage

blib/lib/Perl6/Pod/FormattingCode/E.pm
Criterion Covered Total %
statement 18 44 40.9
branch 0 10 0.0
condition n/a
subroutine 6 9 66.6
pod 2 2 100.0
total 26 65 40.0


line stmt bran cond sub pod time code
1             #===============================================================================
2             #
3             # DESCRIPTION: Implement E (Entities)
4             #
5             # AUTHOR: Aliaksandr P. Zahatski,
6             #===============================================================================
7             package Perl6::Pod::FormattingCode::E;
8 3     3   16 use warnings;
  3         7  
  3         98  
9 3     3   15 use strict;
  3         5  
  3         63  
10 3     3   13 use Data::Dumper;
  3         8  
  3         166  
11 3     3   16 use Perl6::Pod::FormattingCode;
  3         7  
  3         90  
12 3     3   17 use base 'Perl6::Pod::FormattingCode';
  3         4  
  3         948  
13             our $VERSION = '0.01';
14              
15             =pod
16              
17             =head1 NAME
18              
19             Perl6::Pod::FormattingCode::E - include named Unicode or XHTML entities
20              
21             =head1 SYNOPSIS
22              
23             Perl 6 makes considerable use of E<171> and E<187>.
24            
25             C<1E2>
26            
27             my $label-area-width = 1 + [max] @scoresE.keyE.chars;
28              
29              
30             =head1 DESCRIPTION
31              
32             If the contents of the CE> are a number, that number is treated as the decimal Unicode value for the desired codepoint. For example:
33              
34             Perl 6 makes considerable use of E<171> and E<187>.
35              
36             You can also use explicit binary, octal, decimal, or hexadecimal numbers (using the Perl 6 notations for explicitly based numbers):
37              
38             Perl 6 makes considerable use of E<0b10101011> and E<0b10111011>.
39             Perl 6 makes considerable use of E<0o253> and E<0o273>.
40             Perl 6 makes considerable use of E<0d171> and E<0d187>.
41             Perl 6 makes considerable use of E<0xAB> and E<0xBB>.
42              
43             If the contents are not a number, they are interpreted as a Unicode character name (which is always upper-case), or else as an XHTML entity. For example:
44              
45             Perl 6 makes considerable use of E
46             and E.
47              
48             or, equivalently:
49              
50             Perl 6 makes considerable use of E and E.
51              
52             Multiple consecutive entities can be specified in a single CE> code, separated by semicolons:
53              
54             Perl 6 makes considerable use of E.
55              
56             =cut
57              
58             =head2 to_xhtml
59              
60             E
61              
62             Render to
63              
64             <
65            
66             =cut
67             my %line_break = (NEL=>1);
68              
69             sub to_xhtml {
70 0     0 1   my ( $self, $to ) = @_;
71 0           my $line = $self->childs->[0];
72             #split by ;
73             [
74             map {
75 0           s/^\s+//;
  0            
76 0           s/\s+$//;
77 0 0         if ( exists $line_break{$_} ) {
78 0           $to->w->raw('
')
79             } else {
80 0           $to->w->raw( _to_xhtml_entity($_) )
81             }
82             }
83             split( /\s*;\s*/, $line )
84             ];
85             }
86             sub _to_xhtml_entity {
87 0     0     my $str = shift;
88 0 0         if ( $str !~ /^\d/ ) {
89 3     3   20475 use charnames ':full';
  3         176146  
  3         23  
90 0           my $ord = charnames::vianame($str);
91 0 0         return sprintf( '&#%d;', $ord ) if defined $ord;
92 0           return qq{&$str;};
93             }
94             # Otherwise, it's the numeric codepoint in some base...
95             else {
96             # Convert Perl 6 octals and decimals to Perl 5 notation...
97 0 0         if ($str !~ s{\A 0o}{0}xms) { # Convert octal
98 0           $str =~ s{\A 0d}{}xms; # Convert explicit decimal
99 0           $str =~ s{\A 0+ (?=\d)}{}xms; # Convert implicit decimal
100             }
101              
102             # Then return the XHTML numeric code...
103 0           return sprintf '&#%d;', eval $str;
104             }
105              
106 0           die "Unsupported identity $_ in E<>";
107             }
108              
109             =head2 to_docbook
110              
111             E
112              
113             Render to
114              
115             <
116              
117             =cut
118              
119             sub to_docbook {
120 0     0 1   my ( $self, $to ) = @_;
121 0           my $line = $self->childs->[0];
122             #split by ;
123             [
124             map {
125 0           s/^\s+//;
  0            
126 0           s/\s+$//;
127             #
not exists in docbook
128 0 0         if (exists $line_break{$_} ) {()} else {
  0            
129 0           $to->w->raw( _to_xhtml_entity($_) )
130             }
131             }
132             split( /\s*;\s*/, $line )
133             ];
134             }
135              
136             1;
137             __END__