File Coverage

blib/lib/Lingua/EN/Pseudolocalize.pm
Criterion Covered Total %
statement 27 27 100.0
branch n/a
condition n/a
subroutine 7 7 100.0
pod 2 2 100.0
total 36 36 100.0


line stmt bran cond sub pod time code
1             package Lingua::EN::Pseudolocalize;
2 1     1   55743 use strict; use warnings; use 5.008;
  1     1   2  
  1     1   40  
  1         8  
  1         2  
  1         41  
  1         43  
  1         5  
3 1     1   599 use Sub::Exporter::Simple qw/convert deconvert/;
  1         13500  
  1         8  
4 1     1   846 use charnames ':full';
  1         33390  
  1         10  
5              
6             # ABSTRACT: Test Unicode support by pretending to speak a different language.
7              
8             our $lookup = {
9             'A' => [
10             "\N{LATIN CAPITAL LETTER A WITH GRAVE}",
11             "\N{LATIN CAPITAL LETTER A WITH ACUTE}",
12             "\N{LATIN CAPITAL LETTER A WITH CIRCUMFLEX}",
13             "\N{LATIN CAPITAL LETTER A WITH TILDE}",
14             "\N{LATIN CAPITAL LETTER A WITH DIAERESIS}",
15             "\N{LATIN CAPITAL LETTER A WITH RING ABOVE}",
16             "\N{LATIN CAPITAL LETTER A WITH RING BELOW}",
17             ],
18             'C' => [ "\N{LATIN CAPITAL LETTER C WITH CEDILLA}", ],
19             'D' => [ "\N{LATIN CAPITAL LETTER D WITH STROKE}", ],
20             'E' => [
21             "\N{LATIN CAPITAL LETTER E WITH GRAVE}",
22             "\N{LATIN CAPITAL LETTER E WITH ACUTE}",
23             "\N{LATIN CAPITAL LETTER E WITH CIRCUMFLEX}",
24             "\N{LATIN CAPITAL LETTER E WITH DIAERESIS}",
25             "\N{LATIN CAPITAL LETTER E WITH TILDE BELOW}",
26             ],
27             'H' => [ "\N{LATIN CAPITAL LETTER H WITH DIAERESIS}", ],
28             'I' => [
29             "\N{LATIN CAPITAL LETTER I WITH GRAVE}",
30             "\N{LATIN CAPITAL LETTER I WITH ACUTE}",
31             "\N{LATIN CAPITAL LETTER I WITH CIRCUMFLEX}",
32             "\N{LATIN CAPITAL LETTER I WITH DIAERESIS}",
33             "\N{LATIN CAPITAL LETTER I WITH INVERTED BREVE}",
34             ],
35             'L' => [ "\N{LATIN CAPITAL LETTER L WITH MIDDLE DOT}", ],
36             'N' => [
37             "\N{LATIN CAPITAL LETTER N WITH TILDE}",
38             "\N{LATIN CAPITAL LETTER N WITH ACUTE}",
39             ],
40             'O' => [
41             "\N{LATIN CAPITAL LETTER O WITH GRAVE}",
42             "\N{LATIN CAPITAL LETTER O WITH ACUTE}",
43             "\N{LATIN CAPITAL LETTER O WITH CIRCUMFLEX}",
44             "\N{LATIN CAPITAL LETTER O WITH TILDE}",
45             "\N{LATIN CAPITAL LETTER O WITH DIAERESIS}",
46             "\N{LATIN CAPITAL LETTER O WITH STROKE}",
47             "\N{LATIN CAPITAL LETTER O WITH STROKE AND ACUTE}",
48             ],
49             'R' => [ "\N{LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON}", ],
50             'S' => [ "\N{LATIN CAPITAL LETTER S WITH COMMA BELOW}", ],
51             'T' => [ "\N{LATIN CAPITAL LETTER T WITH HOOK}", ],
52             'U' => [
53             "\N{LATIN CAPITAL LETTER U WITH GRAVE}",
54             "\N{LATIN CAPITAL LETTER U WITH ACUTE}",
55             "\N{LATIN CAPITAL LETTER U WITH CIRCUMFLEX}",
56             "\N{LATIN CAPITAL LETTER U WITH DIAERESIS}",
57             "\N{LATIN CAPITAL LETTER U WITH DIAERESIS BELOW}",
58             ],
59             'Y' => [ "\N{LATIN CAPITAL LETTER Y WITH ACUTE}", ],
60              
61             'a' => [
62             "\N{LATIN SMALL LETTER A WITH GRAVE}",
63             "\N{LATIN SMALL LETTER A WITH ACUTE}",
64             "\N{LATIN SMALL LETTER A WITH CIRCUMFLEX}",
65             "\N{LATIN SMALL LETTER A WITH TILDE}",
66             "\N{LATIN SMALL LETTER A WITH DIAERESIS}",
67             "\N{LATIN SMALL LETTER A WITH RING ABOVE}",
68             "\N{LATIN SMALL LETTER A WITH HOOK ABOVE}",
69             ],
70             'b' => [ "\N{LATIN SMALL LETTER B WITH MIDDLE TILDE}", ],
71             'c' => [ "\N{LATIN SMALL LETTER C WITH CEDILLA}", ],
72             'd' => [ "\N{LATIN SMALL LETTER D WITH CURL}", ],
73             'e' => [
74             "\N{LATIN SMALL LETTER E WITH GRAVE}",
75             "\N{LATIN SMALL LETTER E WITH ACUTE}",
76             "\N{LATIN SMALL LETTER E WITH CIRCUMFLEX}",
77             "\N{LATIN SMALL LETTER E WITH DIAERESIS}",
78             "\N{LATIN SMALL LETTER E WITH INVERTED BREVE}",
79             ],
80             'i' => [
81             "\N{LATIN SMALL LETTER I WITH GRAVE}",
82             "\N{LATIN SMALL LETTER I WITH ACUTE}",
83             "\N{LATIN SMALL LETTER I WITH CIRCUMFLEX}",
84             "\N{LATIN SMALL LETTER I WITH DIAERESIS}",
85             "\N{LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE}",
86             ],
87             'n' => [ "\N{LATIN SMALL LETTER N WITH TILDE}", ],
88             'o' => [
89             "\N{LATIN SMALL LETTER O WITH GRAVE}",
90             "\N{LATIN SMALL LETTER O WITH ACUTE}",
91             "\N{LATIN SMALL LETTER O WITH CIRCUMFLEX}",
92             "\N{LATIN SMALL LETTER O WITH TILDE}",
93             "\N{LATIN SMALL LETTER O WITH DIAERESIS}",
94             "\N{LATIN SMALL LETTER O WITH STROKE}",
95             "\N{LATIN SMALL LETTER O WITH DOT ABOVE}",
96             ],
97             'st' => [ "\N{LATIN SMALL LIGATURE ST}", ],
98             'th' => [ "\N{LATIN SMALL LETTER TH WITH STRIKETHROUGH}", ],
99             'ts' => [ "\N{LATIN SMALL LETTER TS DIGRAPH}", ],
100             'u' => [
101             "\N{LATIN SMALL LETTER U WITH GRAVE}",
102             "\N{LATIN SMALL LETTER U WITH ACUTE}",
103             "\N{LATIN SMALL LETTER U WITH CIRCUMFLEX}",
104             "\N{LATIN SMALL LETTER U WITH DIAERESIS}",
105             "\N{LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE}",
106             ],
107             'y' => [
108             "\N{LATIN SMALL LETTER Y WITH ACUTE}",
109             "\N{LATIN SMALL LETTER Y WITH DIAERESIS}",
110             ],
111             };
112              
113             sub convert {
114 1     1 1 118 my $str = shift;
115              
116 1         12 for my $key ( keys %$lookup ) {
117 27         47 my @list = @{ $lookup->{$key} };
  27         65  
118 27         73 my $char = $list[ int rand @list ];
119 27         208 $str =~ s/\Q$key/$char/g;
120             }
121              
122 1         4 return $str
123             }
124              
125             sub deconvert {
126 1     1 1 411 my $str = shift;
127              
128 1         6 for my $key ( keys %$lookup ) {
129 27         40 for my $char ( @{ $lookup->{$key} } ) {
  27         41  
130 77         423 $str =~ s/$char/$key/g;
131             }
132             }
133              
134 1         4 return $str
135             }
136              
137             1;
138              
139             __END__