File Coverage

lib/Petal/Entities.pm
Criterion Covered Total %
statement 6 17 35.2
branch 0 8 0.0
condition n/a
subroutine 2 3 66.6
pod 0 1 0.0
total 8 29 27.5


line stmt bran cond sub pod time code
1             # Entirely stolen from HTML::Entities
2             # And modified to fit Petal's purposes.
3             package Petal::Entities;
4 77     77   251 use strict;
  77         86  
  77         2077  
5 77     77   1846 use warnings;
  77         98  
  77         53694  
6              
7              
8             our %ENTITY_2_CHAR = (
9             # Some normal chars that have special meaning in SGML context
10             # those will be managed by XML::Parser
11             # so we don't want to expand them
12             # amp => '&', # ampersand
13             # 'gt' => '>', # greater than
14             # 'lt' => '<', # less than
15             # quot => '"', # double quote
16             # apos => "'", # single quote
17            
18             # PUBLIC ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML
19             AElig => 'Æ', # capital AE diphthong (ligature)
20             Aacute => 'Á', # capital A, acute accent
21             Acirc => 'Â', # capital A, circumflex accent
22             Agrave => 'À', # capital A, grave accent
23             Aring => 'Å', # capital A, ring
24             Atilde => 'Ã', # capital A, tilde
25             Auml => 'Ä', # capital A, dieresis or umlaut mark
26             Ccedil => 'Ç', # capital C, cedilla
27             ETH => 'Ð', # capital Eth, Icelandic
28             Eacute => 'É', # capital E, acute accent
29             Ecirc => 'Ê', # capital E, circumflex accent
30             Egrave => 'È', # capital E, grave accent
31             Euml => 'Ë', # capital E, dieresis or umlaut mark
32             Iacute => 'Í', # capital I, acute accent
33             Icirc => 'Î', # capital I, circumflex accent
34             Igrave => 'Ì', # capital I, grave accent
35             Iuml => 'Ï', # capital I, dieresis or umlaut mark
36             Ntilde => 'Ñ', # capital N, tilde
37             Oacute => 'Ó', # capital O, acute accent
38             Ocirc => 'Ô', # capital O, circumflex accent
39             Ograve => 'Ò', # capital O, grave accent
40             Oslash => 'Ø', # capital O, slash
41             Otilde => 'Õ', # capital O, tilde
42             Ouml => 'Ö', # capital O, dieresis or umlaut mark
43             THORN => 'Þ', # capital THORN, Icelandic
44             Uacute => 'Ú', # capital U, acute accent
45             Ucirc => 'Û', # capital U, circumflex accent
46             Ugrave => 'Ù', # capital U, grave accent
47             Uuml => 'Ü', # capital U, dieresis or umlaut mark
48             Yacute => 'Ý', # capital Y, acute accent
49             aacute => 'á', # small a, acute accent
50             acirc => 'â', # small a, circumflex accent
51             aelig => 'æ', # small ae diphthong (ligature)
52             agrave => 'à', # small a, grave accent
53             aring => 'å', # small a, ring
54             atilde => 'ã', # small a, tilde
55             auml => 'ä', # small a, dieresis or umlaut mark
56             ccedil => 'ç', # small c, cedilla
57             eacute => 'é', # small e, acute accent
58             ecirc => 'ê', # small e, circumflex accent
59             egrave => 'è', # small e, grave accent
60             eth => 'ð', # small eth, Icelandic
61             euml => 'ë', # small e, dieresis or umlaut mark
62             iacute => 'í', # small i, acute accent
63             icirc => 'î', # small i, circumflex accent
64             igrave => 'ì', # small i, grave accent
65             iuml => 'ï', # small i, dieresis or umlaut mark
66             ntilde => 'ñ', # small n, tilde
67             oacute => 'ó', # small o, acute accent
68             ocirc => 'ô', # small o, circumflex accent
69             ograve => 'ò', # small o, grave accent
70             oslash => 'ø', # small o, slash
71             otilde => 'õ', # small o, tilde
72             ouml => 'ö', # small o, dieresis or umlaut mark
73             szlig => 'ß', # small sharp s, German (sz ligature)
74             thorn => 'þ', # small thorn, Icelandic
75             uacute => 'ú', # small u, acute accent
76             ucirc => 'û', # small u, circumflex accent
77             ugrave => 'ù', # small u, grave accent
78             uuml => 'ü', # small u, dieresis or umlaut mark
79             yacute => 'ý', # small y, acute accent
80             yuml => 'ÿ', # small y, dieresis or umlaut mark
81              
82             # Some extra Latin 1 chars that are listed in the HTML3.2 draft (21-May-96)
83             copy => '©', # copyright sign
84             reg => '®', # registered sign
85             nbsp => "\240", # non breaking space
86              
87             # Additional ISO-8859/1 entities listed in rfc1866 (section 14)
88             iexcl => '¡',
89             cent => '¢',
90             pound => '£',
91             curren => '¤',
92             yen => '¥',
93             brvbar => '¦',
94             sect => '§',
95             uml => '¨',
96             ordf => 'ª',
97             laquo => '«',
98             'not' => '¬', # not is a keyword in perl
99             shy => '­',
100             macr => '¯',
101             deg => '°',
102             plusmn => '±',
103             sup1 => '¹',
104             sup2 => '²',
105             sup3 => '³',
106             acute => '´',
107             micro => 'µ',
108             para => '¶',
109             middot => '·',
110             cedil => '¸',
111             ordm => 'º',
112             raquo => '»',
113             frac14 => '¼',
114             frac12 => '½',
115             frac34 => '¾',
116             iquest => '¿',
117             'times' => '×', # times is a keyword in perl
118             divide => '÷',
119              
120             ( $] > 5.007 ? (
121             OElig => chr(338),
122             oelig => chr(339),
123             Scaron => chr(352),
124             scaron => chr(353),
125             Yuml => chr(376),
126             fnof => chr(402),
127             circ => chr(710),
128             tilde => chr(732),
129             Alpha => chr(913),
130             Beta => chr(914),
131             Gamma => chr(915),
132             Delta => chr(916),
133             Epsilon => chr(917),
134             Zeta => chr(918),
135             Eta => chr(919),
136             Theta => chr(920),
137             Iota => chr(921),
138             Kappa => chr(922),
139             Lambda => chr(923),
140             Mu => chr(924),
141             Nu => chr(925),
142             Xi => chr(926),
143             Omicron => chr(927),
144             Pi => chr(928),
145             Rho => chr(929),
146             Sigma => chr(931),
147             Tau => chr(932),
148             Upsilon => chr(933),
149             Phi => chr(934),
150             Chi => chr(935),
151             Psi => chr(936),
152             Omega => chr(937),
153             alpha => chr(945),
154             beta => chr(946),
155             gamma => chr(947),
156             delta => chr(948),
157             epsilon => chr(949),
158             zeta => chr(950),
159             eta => chr(951),
160             theta => chr(952),
161             iota => chr(953),
162             kappa => chr(954),
163             lambda => chr(955),
164             mu => chr(956),
165             nu => chr(957),
166             xi => chr(958),
167             omicron => chr(959),
168             pi => chr(960),
169             rho => chr(961),
170             sigmaf => chr(962),
171             sigma => chr(963),
172             tau => chr(964),
173             upsilon => chr(965),
174             phi => chr(966),
175             chi => chr(967),
176             psi => chr(968),
177             omega => chr(969),
178             thetasym => chr(977),
179             upsih => chr(978),
180             piv => chr(982),
181             ensp => chr(8194),
182             emsp => chr(8195),
183             thinsp => chr(8201),
184             zwnj => chr(8204),
185             zwj => chr(8205),
186             lrm => chr(8206),
187             rlm => chr(8207),
188             ndash => chr(8211),
189             mdash => chr(8212),
190             lsquo => chr(8216),
191             rsquo => chr(8217),
192             sbquo => chr(8218),
193             ldquo => chr(8220),
194             rdquo => chr(8221),
195             bdquo => chr(8222),
196             dagger => chr(8224),
197             Dagger => chr(8225),
198             bull => chr(8226),
199             hellip => chr(8230),
200             permil => chr(8240),
201             prime => chr(8242),
202             Prime => chr(8243),
203             lsaquo => chr(8249),
204             rsaquo => chr(8250),
205             oline => chr(8254),
206             frasl => chr(8260),
207             euro => chr(8364),
208             image => chr(8465),
209             weierp => chr(8472),
210             real => chr(8476),
211             trade => chr(8482),
212             alefsym => chr(8501),
213             larr => chr(8592),
214             uarr => chr(8593),
215             rarr => chr(8594),
216             darr => chr(8595),
217             harr => chr(8596),
218             crarr => chr(8629),
219             lArr => chr(8656),
220             uArr => chr(8657),
221             rArr => chr(8658),
222             dArr => chr(8659),
223             hArr => chr(8660),
224             forall => chr(8704),
225             part => chr(8706),
226             exist => chr(8707),
227             empty => chr(8709),
228             nabla => chr(8711),
229             isin => chr(8712),
230             notin => chr(8713),
231             ni => chr(8715),
232             prod => chr(8719),
233             sum => chr(8721),
234             minus => chr(8722),
235             lowast => chr(8727),
236             radic => chr(8730),
237             prop => chr(8733),
238             infin => chr(8734),
239             ang => chr(8736),
240             'and' => chr(8743),
241             'or' => chr(8744),
242             cap => chr(8745),
243             cup => chr(8746),
244             'int' => chr(8747),
245             there4 => chr(8756),
246             sim => chr(8764),
247             cong => chr(8773),
248             asymp => chr(8776),
249             'ne' => chr(8800),
250             equiv => chr(8801),
251             'le' => chr(8804),
252             'ge' => chr(8805),
253             'sub' => chr(8834),
254             sup => chr(8835),
255             nsub => chr(8836),
256             sube => chr(8838),
257             supe => chr(8839),
258             oplus => chr(8853),
259             otimes => chr(8855),
260             perp => chr(8869),
261             sdot => chr(8901),
262             lceil => chr(8968),
263             rceil => chr(8969),
264             lfloor => chr(8970),
265             rfloor => chr(8971),
266             lang => chr(9001),
267             rang => chr(9002),
268             loz => chr(9674),
269             spades => chr(9824),
270             clubs => chr(9827),
271             hearts => chr(9829),
272             diams => chr(9830),
273             ) : ())
274             );
275              
276              
277             my %subst; # compiled encoding regexps
278              
279              
280             sub decode_entities
281             {
282 0     0 0   my $array = \@_; # modify in-place
283            
284 0           my $c;
285 0           for (@$array) {
286 0 0         s/(&\#(\d+);?)/$2 < 256 ? chr($2) : $1/eg;
  0            
287 0 0         s/(&\#[xX]([0-9a-fA-F]+);?)/$c = hex($2); $c < 256 ? chr($c) : $1/eg;
  0            
  0            
288 0 0         s/(&(\w+);?)/$ENTITY_2_CHAR{$2} || $1/eg;
  0            
289             }
290 0 0         wantarray ? @$array : $array->[0];
291             }
292              
293              
294             1;