File Coverage

blib/lib/Encode/Arabic/ArabTeX/ZDMG.pm
Criterion Covered Total %
statement 82 90 91.1
branch 7 10 70.0
condition 3 6 50.0
subroutine 14 14 100.0
pod 2 2 100.0
total 108 122 88.5


line stmt bran cond sub pod time code
1             # ##################################################################### Otakar Smrz, 2003/08/05
2             #
3             # Encoding of Arabic: ArabTeX Notation by Klaus Lagally, ZDMG #################################
4              
5             package Encode::Arabic::ArabTeX::ZDMG;
6              
7             our $VERSION = '14.1';
8              
9 2     2   20260 use 5.008;
  2         5  
10              
11 2     2   6 use strict;
  2         1  
  2         30  
12 2     2   4 use warnings;
  2         2  
  2         35  
13              
14 2     2   5 use Carp;
  2         1  
  2         97  
15              
16 2     2   625 use Encode::Arabic::ArabTeX ();
  2         2  
  2         34  
17 2     2   6 use base 'Encode::Arabic::ArabTeX';
  2         2  
  2         122  
18              
19              
20 2     2   6 use Encode::Encoding;
  2         2  
  2         30  
21 2     2   6 use base 'Encode::Encoding';
  2         2  
  2         61  
22              
23             __PACKAGE__->Define('ZDMG', 'ArabTeX-ZDMG');
24              
25              
26 2     2   6 use Encode::Mapper ':others', ':silent', ':join';
  2         2  
  2         7  
27              
28              
29             our %options; # records of options per package .. global register
30             our %option; # options of the caller package .. used with local
31              
32              
33             sub import { # perform import as if Encode were used one level before this module
34              
35 2 100 66 2   14 if (defined $_[1] and $_[1] eq ':xml') { # interfere little with possible Encode's options
36              
37             Encode::Mapper->options (
38              
39             'override' => [ # override rules of these LHS .. no other tricks ^^
40              
41             ( # combinations of '<' and '>' with the other bytes
42             map {
43              
44 1         2 my $x = chr $_;
  254         171  
45              
46 254         539 "<" . $x, [ "<" . $x, ">" ], # propagate the '>' sign implying ..
47             ">" . $x, [ $x, ">" ], # .. preservation of the bytes
48              
49             } 0x00 .. 0x3B, 0x3D, 0x3F .. 0xFF
50             ),
51              
52             ">>", ">", # stop the whole process ..
53             "<>", "<>", # .. do not even start it
54              
55             "><", [ "<", ">" ], # rather than nested '<' and '>', ..
56             "<<", [ "<<", ">" ],
57              
58             ">\\<", [ "<", ">" ], # .. prefer these escape sequences
59             ">\\\\", [ "\\", ">" ],
60             ">\\>", [ ">", ">" ],
61              
62             ">", ">", # singular symbols may migrate right ..
63             "<", "<", # .. or preserve the rest of the data
64             ]
65              
66             );
67              
68 1         32 splice @_, 1, 1;
69             }
70              
71 2 50 33     6 if (defined $_[1] and $_[1] eq ':describe') {
72              
73 0         0 __PACKAGE__->options($_[1]);
74 0         0 splice @_, 1, 1;
75             }
76              
77 2         10 require Encode;
78              
79 2 100       21 push @Encode::ISA, 'Exporter' unless Encode->can('export_to_level');
80              
81 2         170 Encode->export_to_level(1, @_);
82             }
83              
84              
85             sub encoder ($;%) {
86 1     1 1 1101 my ($cls, %opt) = @_;
87              
88 1         3 my $encoder = [];
89              
90              
91 1         23 $encoder->[0] = Encode::Mapper->compile (
92              
93             [
94             'silent' => 0,
95             ],
96              
97             "\x{0054}", "\\cap t", "\x{0074}", "t",
98              
99             "\x{1E6E}", "\\cap _t", "\x{1E6F}", "_t",
100             "\x{0054}\x{0331}", "\\cap _t", "\x{0074}\x{0331}", "_t",
101              
102             "\x{0044}", "\\cap d", "\x{0064}", "d",
103              
104             "\x{1E0E}", "\\cap _d", "\x{1E0F}", "_d",
105             "\x{0044}\x{0331}", "\\cap _d", "\x{0064}\x{0331}", "_d",
106              
107             "\x{0052}", "\\cap r", "\x{0072}", "r",
108              
109             "\x{005A}", "\\cap z", "\x{007A}", "z",
110              
111             "\x{0053}", "\\cap s", "\x{0073}", "s",
112              
113             "\x{0160}", "\\cap ^s", "\x{0161}", "^s",
114             "\x{0053}\x{030C}", "\\cap ^s", "\x{0073}\x{030C}", "^s",
115              
116             "\x{1E62}", "\\cap .s", "\x{1E63}", ".s",
117             "\x{0053}\x{0323}", "\\cap .s", "\x{0073}\x{0323}", ".s",
118              
119             "\x{1E0C}", "\\cap .d", "\x{1E0D}", ".d",
120             "\x{0044}\x{0323}", "\\cap .d", "\x{0064}\x{0323}", ".d",
121              
122             "\x{1E6C}", "\\cap .t", "\x{1E6D}", ".t",
123             "\x{0054}\x{0323}", "\\cap .t", "\x{0074}\x{0323}", ".t",
124              
125             "\x{1E92}", "\\cap .z", "\x{1E93}", ".z",
126             "\x{005A}\x{0323}", "\\cap .z", "\x{007A}\x{0323}", ".z",
127              
128             "\x{004C}", "\\cap l", "\x{006C}", "l",
129              
130             "\x{004E}", "\\cap n", "\x{006E}", "n",
131              
132             # "\x{0054}", "\\cap T", "\x{0074}", "T",
133             # "\x{004E}", "\\cap N", "\x{006E}", "N",
134             # "\x{0057}", "\\cap W", "\x{0077}", "W",
135              
136             "\x{0041}", "\\cap a", "\x{0061}", "a",
137              
138             "\x{0045}", "\\cap e", "\x{0065}", "e",
139              
140             "\x{0049}", "\\cap i", "\x{0069}", "i",
141              
142             "\x{004F}", "\\cap o", "\x{006F}", "o",
143              
144             "\x{0055}", "\\cap u", "\x{0075}", "u",
145              
146             "\x{0100}", "\\cap A", "\x{0101}", "A",
147             "\x{0041}\x{0304}", "\\cap A", "\x{0061}\x{0304}", "A",
148              
149             "\x{0112}", "\\cap E", "\x{0113}", "E",
150             "\x{0045}\x{0304}", "\\cap E", "\x{0065}\x{0304}", "E",
151              
152             "\x{012A}", "\\cap I", "\x{012B}", "I",
153             "\x{0049}\x{0304}", "\\cap I", "\x{0069}\x{0304}", "I",
154              
155             "\x{014C}", "\\cap O", "\x{014D}", "O",
156             "\x{004F}\x{0304}", "\\cap O", "\x{006F}\x{0304}", "O",
157              
158             "\x{016A}", "\\cap U", "\x{016B}", "U",
159             "\x{0055}\x{0304}", "\\cap U", "\x{0075}\x{0304}", "U",
160              
161             "\x{02BC}", "\"",
162             "\x{02BE}", "'",
163             "\x{02BF}", "`",
164              
165             "\x{0042}", "\\cap b", "\x{0062}", "b",
166              
167             "\x{01E6}", "\\cap ^g", "\x{01E7}", "^g",
168             "\x{0047}\x{030C}", "\\cap ^g", "\x{0067}\x{030C}", "^g",
169              
170             "\x{1E24}", "\\cap .h", "\x{1E25}", ".h",
171             "\x{0048}\x{0323}", "\\cap .h", "\x{0068}\x{0323}", ".h",
172              
173             "\x{1E2A}", "\\cap _h", "\x{1E2B}", "_h",
174             "\x{0048}\x{032E}", "\\cap _h", "\x{0068}\x{032E}", "_h",
175              
176             "\x{0120}", "\\cap .g", "\x{0121}", ".g",
177             "\x{0047}\x{0307}", "\\cap .g", "\x{0067}\x{0307}", ".g",
178              
179             "\x{0046}", "\\cap f", "\x{0066}", "f",
180              
181             "\x{0051}", "\\cap q", "\x{0071}", "q",
182              
183             "\x{004B}", "\\cap k", "\x{006B}", "k",
184              
185             "\x{004D}", "\\cap m", "\x{006D}", "m",
186              
187             "\x{0048}", "\\cap h", "\x{0068}", "h",
188              
189             "\x{0057}", "\\cap w", "\x{0077}", "w",
190              
191             "\x{0059}", "\\cap y", "\x{0079}", "y",
192              
193              
194             "\x{0050}", "\\cap p", "\x{0070}", "p",
195              
196             "\x{0056}", "\\cap v", "\x{0076}", "v",
197              
198             "\x{0047}", "\\cap g", "\x{0067}", "g",
199              
200              
201             "\x{0043}", "\\cap c", "\x{0063}", "c",
202              
203             "\x{010C}", "\\cap ^c", "\x{010D}", "^c",
204             "\x{0043}\x{030C}", "\\cap ^c", "\x{0063}\x{030C}", "^c",
205              
206             "\x{0106}", "\\cap ,c", "\x{0107}", ",c",
207             "\x{0043}\x{0301}", "\\cap ,c", "\x{0063}\x{0301}", ",c",
208              
209             "\x{017D}", "\\cap ^z", "\x{017E}", "^z",
210             "\x{005A}\x{030C}", "\\cap ^z", "\x{007A}\x{030C}", "^z",
211              
212             "\x{00D1}", "\\cap ^n", "\x{00F1}", "^n",
213             "\x{004E}\x{0303}", "\\cap ^n", "\x{006E}\x{0303}", "^n",
214              
215             "\x{004C}\x{0303}", "\\cap ^l", "\x{006C}\x{0303}", "^l",
216              
217             "\x{0052}\x{0307}", "\\cap .r", "\x{0072}\x{0307}", ".r",
218              
219             );
220              
221              
222 2     2   10 no strict 'refs';
  2         1  
  2         3094  
223              
224 1         2 ${ $cls . '::encoder' } = $encoder;
  1         6  
225              
226 1 50       4 if ($option{'describe'}) {
227              
228 0         0 $_->describe('') foreach @{${ $cls . '::encoder' }};
  0         0  
  0         0  
229             }
230              
231 1         1 return ${ $cls . '::encoder' };
  1         4  
232             }
233              
234              
235             sub decoder ($;$$) {
236 1     1 1 5 my ($cls, undef, undef) = @_;
237              
238 1         2 my $decoder = [];
239              
240              
241 1         8 my @sunny = (
242             [ "t", "\x{0074}" ],
243             [ "_t", "\x{0074}\x{0331}" ], # "\x{1E6F}"
244             [ "d", "\x{0064}" ],
245             [ "_d", "\x{0064}\x{0331}" ], # "\x{1E0F}"
246             [ "r", "\x{0072}" ],
247             [ "z", "\x{007A}" ],
248             [ "s", "\x{0073}" ],
249             [ "^s", "\x{0073}\x{030C}" ], # "\x{0161}"
250             [ ".s", "\x{0073}\x{0323}" ], # "\x{1E63}"
251             [ ".d", "\x{0064}\x{0323}" ], # "\x{1E0D}"
252             [ ".t", "\x{0074}\x{0323}" ], # "\x{1E6D}"
253             [ ".z", "\x{007A}\x{0323}" ], # "\x{1E93}"
254             [ "l", "\x{006C}" ],
255             [ "n", "\x{006E}" ],
256             );
257              
258              
259 1         5 my @extra = (
260             [ "T", "\x{0074}" ],
261             [ "H", "\x{0068}" ], # ""
262             [ "N", "\x{006E}" ],
263             [ "W", "\x{0077}" ], # ""
264             );
265              
266              
267 1         10 my @vowel = (
268             [ "a", "\x{0061}" ],
269             [ "_a", "\x{0061}\x{0304}" ], # "\x{0101}"
270             [ "_aA", "\x{0061}\x{0304}" ], # "\x{0101}"
271             [ "_aY", "\x{0061}\x{0304}" ], # "\x{0101}"
272             [ "_aU", "\x{0061}\x{0304}" ], # "\x{0101}"
273             [ "_aI", "\x{0061}\x{0304}" ], # "\x{0101}"
274             [ "A", "\x{0061}\x{0304}" ], # "\x{0101}"
275             [ "^A", "\x{0061}\x{0304}" ], # "\x{0101}"
276             [ "_A", "\x{0061}\x{0304}" ], # "\x{0101}"
277             [ "e", "\x{0065}" ],
278             [ "E", "\x{0065}\x{0304}" ], # "\x{0113}"
279             [ "i", "\x{0069}" ],
280             [ "_i", "\x{0069}\x{0304}" ], # "\x{012B}"
281             [ "I", "\x{0069}\x{0304}" ], # "\x{012B}"
282             [ "^I", "\x{0069}\x{0304}" ], # "\x{012B}"
283             [ "_I", "\x{0069}" ],
284             [ "o", "\x{006F}" ],
285             [ "O", "\x{006F}\x{0304}" ], # "\x{014D}"
286             [ "u", "\x{0075}" ],
287             [ "_u", "\x{0075}\x{0304}" ], # "\x{016B}"
288             [ "U", "\x{0075}\x{0304}" ], # "\x{016B}"
289             [ "^U", "\x{0075}\x{0304}" ], # "\x{016B}"
290             [ "_U", "\x{0075}" ],
291             [ "Y", "\x{0061}\x{0304}" ], # "\x{0101}"
292             );
293              
294              
295 1         3 my @minor = (
296             [ "'", "\x{02BE}" ], # "\x{02BC}"
297             [ "`", "\x{02BF}" ], # "\x{02BB}"
298             );
299              
300              
301 1         2 my @empty = (
302             [ "\"", "", ], # "\x{02BC}"
303             [ "|", "", ],
304             [ "B", "", ],
305             );
306              
307              
308 1         10 my @moony = (
309             [ "b", "\x{0062}" ],
310             [ "^g", "\x{0067}\x{030C}" ], # "\x{01E7}"
311             [ ".h", "\x{0068}\x{0323}" ], # "\x{1E25}"
312             [ "_h", "\x{0068}\x{032E}" ], # "\x{1E2B}"
313             [ ".g", "\x{0067}\x{0307}" ], # "\x{0121}"
314             [ "f", "\x{0066}" ],
315             [ "q", "\x{0071}" ],
316             [ "k", "\x{006B}" ],
317             [ "m", "\x{006D}" ],
318             [ "h", "\x{0068}" ],
319             [ "w", "\x{0077}" ],
320             [ "y", "\x{0079}" ],
321              
322             [ "p", "\x{0070}" ],
323             [ "v", "\x{0076}" ],
324             [ "g", "\x{0067}" ],
325              
326             [ "c", "\x{0063}" ],
327             [ "^c", "\x{0063}\x{030C}" ], # "\x{010D}"
328             [ ",c", "\x{0063}\x{0301}" ], # "\x{0107}"
329             [ "^z", "\x{007A}\x{030C}" ], # "\x{017E}"
330             [ "^n", "\x{006E}\x{0303}" ], # "\x{00F1}"
331             [ "^l", "\x{006C}\x{0303}" ],
332             [ ".r", "\x{0072}\x{0307}" ],
333             );
334              
335              
336             $decoder->[0] = Encode::Mapper->compile (
337              
338             [
339             'silent' => 0,
340             ],
341              
342             # definite article assimilation .. non-linguistic
343             (
344             map {
345              
346 36         54 "l-" . $_->[0] x 2, [ "", $_->[0] . "-" . $_->[0] ],
347              
348             } @sunny, @moony
349             ),
350              
351             # initial vowel tying
352             (
353             map {
354              
355 24         16 my $x = $_;
356              
357             map {
358              
359 24         23 my $y = $_;
  120         84  
360              
361             map {
362              
363 120         76 $x->[0] . $_ . $y, $x->[1] . $_ . "\x{02BC}", # "\x{02C8}"
  1080         4975  
364              
365             "\\cap\x09" . $x->[0] . $_ . $y, ucfirst $x->[1] . $_ . "\x{02BC}", # "\x{02C8}"
366             "\\cap\x0A" . $x->[0] . $_ . $y, ucfirst $x->[1] . $_ . "\x{02BC}", # "\x{02C8}"
367             "\\cap\x0D" . $x->[0] . $_ . $y, ucfirst $x->[1] . $_ . "\x{02BC}", # "\x{02C8}"
368             "\\cap\x20" . $x->[0] . $_ . $y, ucfirst $x->[1] . $_ . "\x{02BC}", # "\x{02C8}"
369              
370             } "-", "\x09", "\x0A", "\x0D", "\x20", "\x0D\x0A",
371             "\x20\x20", "\x20\x20\x20", "\x20\x20\x20\x20"
372              
373             } "a", "e", "i", "o", "u"
374              
375             } @vowel
376             ),
377              
378             # silence the silent
379              
380             "_W", "",
381              
382             "WA", [ "", "W" ],
383              
384             "UW", [ "", "U" ],
385             "UA", [ "", "U" ],
386              
387             "NA", [ "", "N" ],
388             "NY", [ "", "N" ],
389             "NU", [ "", "N" ],
390             "N_A", [ "", "N" ],
391              
392             # regular capitalization
393             (
394             map {
395              
396 67         171 $_->[0], $_->[1],
397              
398             "\\cap\x09" . $_->[0], ucfirst $_->[1],
399             "\\cap\x0A" . $_->[0], ucfirst $_->[1],
400             "\\cap\x0D" . $_->[0], ucfirst $_->[1],
401             "\\cap\x20" . $_->[0], ucfirst $_->[1],
402              
403             } @sunny, @moony, @empty, @vowel, @extra
404             ),
405              
406             (
407             map {
408              
409 39         412 $_->[0] . "i", $_->[1] . "i",
410             $_->[0] . "u", $_->[1] . "u",
411              
412             "\\cap\x09" . $_->[0] . "i", ucfirst $_->[1] . "i",
413             "\\cap\x0A" . $_->[0] . "i", ucfirst $_->[1] . "i",
414             "\\cap\x0D" . $_->[0] . "i", ucfirst $_->[1] . "i",
415             "\\cap\x20" . $_->[0] . "i", ucfirst $_->[1] . "i",
416              
417             "\\cap\x09" . $_->[0] . "u", ucfirst $_->[1] . "u",
418             "\\cap\x0A" . $_->[0] . "u", ucfirst $_->[1] . "u",
419             "\\cap\x0D" . $_->[0] . "u", ucfirst $_->[1] . "u",
420             "\\cap\x20" . $_->[0] . "u", ucfirst $_->[1] . "u",
421              
422             } @sunny, @moony, @empty
423             ),
424              
425             (
426             map {
427              
428 39         30 my $x = $_;
429              
430             map {
431              
432 39         28 $x->[0] . "i" . $_, [ $x->[1], "i" . $_ ],
  195         1903  
433             $x->[0] . "u" . $_, [ $x->[1], "u" . $_ ],
434              
435             "\\cap\x09" . $x->[0] . "i" . $_, [ ucfirst $x->[1], "i" . $_ ],
436             "\\cap\x0A" . $x->[0] . "i" . $_, [ ucfirst $x->[1], "i" . $_ ],
437             "\\cap\x0D" . $x->[0] . "i" . $_, [ ucfirst $x->[1], "i" . $_ ],
438             "\\cap\x20" . $x->[0] . "i" . $_, [ ucfirst $x->[1], "i" . $_ ],
439              
440             "\\cap\x09" . $x->[0] . "u" . $_, [ ucfirst $x->[1], "u" . $_ ],
441             "\\cap\x0A" . $x->[0] . "u" . $_, [ ucfirst $x->[1], "u" . $_ ],
442             "\\cap\x0D" . $x->[0] . "u" . $_, [ ucfirst $x->[1], "u" . $_ ],
443             "\\cap\x20" . $x->[0] . "u" . $_, [ ucfirst $x->[1], "u" . $_ ],
444              
445             } "-", "\x09", "\x0A", "\x0D", "\x20"
446              
447             } @sunny, @moony, @empty
448             ),
449              
450             # initial vowel assimilation
451             (
452             map {
453              
454 2         3 my $fix = $_;
455              
456             "i" . $_, [ "", "I" ],
457             "u" . $_, [ "", "U" ],
458              
459             "\\cap\x09" . "i" . $_, [ "", "\\cap\x09" . "I" ],
460             "\\cap\x0A" . "i" . $_, [ "", "\\cap\x0A" . "I" ],
461             "\\cap\x0D" . "i" . $_, [ "", "\\cap\x0D" . "I" ],
462             "\\cap\x20" . "i" . $_, [ "", "\\cap\x20" . "I" ],
463              
464             "\\cap\x09" . "u" . $_, [ "", "\\cap\x09" . "U" ],
465             "\\cap\x0A" . "u" . $_, [ "", "\\cap\x0A" . "U" ],
466             "\\cap\x0D" . "u" . $_, [ "", "\\cap\x0D" . "U" ],
467             "\\cap\x20" . "u" . $_, [ "", "\\cap\x20" . "U" ],
468              
469             map {
470              
471 2         13 "i" . $fix . $_->[0], [ "i", $fix . $_->[0] ],
  50         425  
472             "u" . $fix . $_->[0], [ "u", $fix . $_->[0] ],
473              
474             "\\cap\x09" . "i" . $fix . $_->[0], [ "I", $fix . $_->[0] ],
475             "\\cap\x0A" . "i" . $fix . $_->[0], [ "I", $fix . $_->[0] ],
476             "\\cap\x0D" . "i" . $fix . $_->[0], [ "I", $fix . $_->[0] ],
477             "\\cap\x20" . "i" . $fix . $_->[0], [ "I", $fix . $_->[0] ],
478              
479             "\\cap\x09" . "u" . $fix . $_->[0], [ "U", $fix . $_->[0] ],
480             "\\cap\x0A" . "u" . $fix . $_->[0], [ "U", $fix . $_->[0] ],
481             "\\cap\x0D" . "u" . $fix . $_->[0], [ "U", $fix . $_->[0] ],
482             "\\cap\x20" . "u" . $fix . $_->[0], [ "U", $fix . $_->[0] ],
483              
484             } @vowel, $empty[0]
485              
486             } "y", "w" # "'"
487             ),
488              
489             # capitalization of minors
490             (
491             map {
492              
493 2         37 $_->[0], $_->[1],
494              
495             $_->[0] . "i", $_->[1] . "i",
496             $_->[0] . "u", $_->[1] . "u",
497              
498             "\\cap\x09" . $_->[0], [ $_->[1], "\\cap " ],
499             "\\cap\x0A" . $_->[0], [ $_->[1], "\\cap " ],
500             "\\cap\x0D" . $_->[0], [ $_->[1], "\\cap " ],
501             "\\cap\x20" . $_->[0], [ $_->[1], "\\cap " ],
502              
503             "\\cap\x09" . $_->[0] . "i", $_->[1] . ucfirst "i",
504             "\\cap\x0A" . $_->[0] . "i", $_->[1] . ucfirst "i",
505             "\\cap\x0D" . $_->[0] . "i", $_->[1] . ucfirst "i",
506             "\\cap\x20" . $_->[0] . "i", $_->[1] . ucfirst "i",
507              
508             "\\cap\x09" . $_->[0] . "u", $_->[1] . ucfirst "u",
509             "\\cap\x0A" . $_->[0] . "u", $_->[1] . ucfirst "u",
510             "\\cap\x0D" . $_->[0] . "u", $_->[1] . ucfirst "u",
511             "\\cap\x20" . $_->[0] . "u", $_->[1] . ucfirst "u",
512              
513             } @minor
514             ),
515              
516             (
517             map {
518              
519 2         1 my $x = $_;
520              
521             map {
522              
523 2         2 $x->[0] . "i" . $_, [ $x->[1], "i" . $_ ],
  10         98  
524             $x->[0] . "u" . $_, [ $x->[1], "u" . $_ ],
525              
526             "\\cap\x09" . $x->[0] . "i" . $_, [ $x->[1], "\\cap i" . $_ ],
527             "\\cap\x0A" . $x->[0] . "i" . $_, [ $x->[1], "\\cap i" . $_ ],
528             "\\cap\x0D" . $x->[0] . "i" . $_, [ $x->[1], "\\cap i" . $_ ],
529             "\\cap\x20" . $x->[0] . "i" . $_, [ $x->[1], "\\cap i" . $_ ],
530              
531             "\\cap\x09" . $x->[0] . "u" . $_, [ $x->[1], "\\cap u" . $_ ],
532             "\\cap\x0A" . $x->[0] . "u" . $_, [ $x->[1], "\\cap u" . $_ ],
533             "\\cap\x0D" . $x->[0] . "u" . $_, [ $x->[1], "\\cap u" . $_ ],
534             "\\cap\x20" . $x->[0] . "u" . $_, [ $x->[1], "\\cap u" . $_ ],
535              
536             } "-", "\x09", "\x0A", "\x0D", "\x20"
537              
538             } @minor
539             ),
540              
541             # white-space collapsing
542             (
543             map {
544              
545 1         3 "\\cap\x09" . $_, [ "", "\\cap " ],
  4         138  
546             "\\cap\x0A" . $_, [ "", "\\cap " ],
547             "\\cap\x0D" . $_, [ "", "\\cap " ],
548             "\\cap\x20" . $_, [ "", "\\cap " ],
549              
550             } "\x09", "\x0A", "\x0D", "\x20"
551             ),
552              
553             );
554              
555              
556 2     2   9 no strict 'refs';
  2         2  
  2         380  
557              
558 1         1111 ${ $cls . '::decoder' } = $decoder;
  1         9  
559              
560 1 50       5 if ($option{'describe'}) {
561              
562 0         0 $_->describe('') foreach @{${ $cls . '::decoder' }};
  0         0  
  0         0  
563             }
564              
565 1         1 return ${ $cls . '::decoder' };
  1         19  
566             }
567              
568              
569             1;
570              
571             __END__