File Coverage

blib/lib/Locale/RecodeData/IBM290.pm
Criterion Covered Total %
statement 12 12 100.0
branch 4 4 100.0
condition 3 3 100.0
subroutine 3 3 100.0
pod n/a
total 22 22 100.0


line stmt bran cond sub pod time code
1             #! /bin/false
2             # vim: set autoindent shiftwidth=4 tabstop=4:
3              
4             # Conversion routines for IBM290.
5             # Copyright (C) 2002-2017 Guido Flohr ,
6             # all rights reserved.
7              
8             # This program is free software: you can redistribute it and/or modify
9             # it under the terms of the GNU General Public License as published by
10             # the Free Software Foundation; either version 3 of the License, or
11             # (at your option) any later version.
12              
13             # This program is distributed in the hope that it will be useful,
14             # but WITHOUT ANY WARRANTY; without even the implied warranty of
15             # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16             # GNU General Public License for more details.
17              
18             # You should have received a copy of the GNU General Public License
19             # along with this program. If not, see .
20              
21             package Locale::RecodeData::IBM290;
22              
23 1     1   6 use strict;
  1         2  
  1         38  
24              
25             require Locale::RecodeData;
26 1     1   5 use base qw(Locale::RecodeData);
  1         2  
  1         468  
27              
28             my @to_ucs4 = (
29             0x0000,
30             0x0001,
31             0x0002,
32             0x0003,
33             0x009c,
34             0x0009,
35             0x0086,
36             0x007f,
37             0x0097,
38             0x008d,
39             0x008e,
40             0x000b,
41             0x000c,
42             0x000d,
43             0x000e,
44             0x000f,
45             0x0010,
46             0x0011,
47             0x0012,
48             0x0013,
49             0x009d,
50             0x0085,
51             0x0008,
52             0x0087,
53             0x0018,
54             0x0019,
55             0x0092,
56             0x008f,
57             0x001c,
58             0x001d,
59             0x001e,
60             0x001f,
61             0x0080,
62             0x0081,
63             0x0082,
64             0x0083,
65             0x0084,
66             0x000a,
67             0x0017,
68             0x001b,
69             0x0088,
70             0x0089,
71             0x008a,
72             0x008b,
73             0x008c,
74             0x0005,
75             0x0006,
76             0x0007,
77             0x0090,
78             0x0091,
79             0x0016,
80             0x0093,
81             0x0094,
82             0x0095,
83             0x0096,
84             0x0004,
85             0x0098,
86             0x0099,
87             0x009a,
88             0x009b,
89             0x0014,
90             0x0015,
91             0x009e,
92             0x001a,
93             0x0020,
94             0x3002,
95             0x300c,
96             0x300d,
97             0x3001,
98             0x30fb,
99             0x30f2,
100             0x30a1,
101             0x30a3,
102             0x30a5,
103             0x00a3,
104             0x002e,
105             0x003c,
106             0x0028,
107             0x002b,
108             0x007c,
109             0x0026,
110             0x30a7,
111             0x30a9,
112             0x30e3,
113             0x30e5,
114             0x30e7,
115             0x30c3,
116             0xfffd,
117             0x30fc,
118             0xfffd,
119             0x0021,
120             0x00a5,
121             0x002a,
122             0x0029,
123             0x003b,
124             0x00ac,
125             0x002d,
126             0x002f,
127             0xfffd,
128             0xfffd,
129             0xfffd,
130             0xfffd,
131             0xfffd,
132             0xfffd,
133             0xfffd,
134             0xfffd,
135             0x00a6,
136             0x002c,
137             0x0025,
138             0x005f,
139             0x003e,
140             0x003f,
141             0xfffd,
142             0xfffd,
143             0xfffd,
144             0xfffd,
145             0xfffd,
146             0xfffd,
147             0xfffd,
148             0xfffd,
149             0xfffd,
150             0x0060,
151             0x003a,
152             0x0023,
153             0x0040,
154             0x0027,
155             0x003d,
156             0x0022,
157             0xfffd,
158             0x30a2,
159             0x30a4,
160             0x30a6,
161             0x30a8,
162             0x30aa,
163             0x30ab,
164             0x30ad,
165             0x30af,
166             0x30b1,
167             0x30b3,
168             0xfffd,
169             0x30b5,
170             0x30b7,
171             0x30b9,
172             0x30bb,
173             0x30bd,
174             0x30bf,
175             0x30c1,
176             0x30c4,
177             0x30c6,
178             0x30c8,
179             0x30ca,
180             0x30cb,
181             0x30cc,
182             0x30cd,
183             0x30ce,
184             0xfffd,
185             0xfffd,
186             0x30cf,
187             0x30d2,
188             0x30d5,
189             0xfffd,
190             0x203e,
191             0x30d8,
192             0x30db,
193             0x30de,
194             0x30df,
195             0x30e0,
196             0x30e1,
197             0x30e2,
198             0x30e4,
199             0x30e6,
200             0xfffd,
201             0x30e8,
202             0x30e9,
203             0x30ea,
204             0x30eb,
205             0xfffd,
206             0xfffd,
207             0xfffd,
208             0xfffd,
209             0xfffd,
210             0xfffd,
211             0xfffd,
212             0xfffd,
213             0xfffd,
214             0xfffd,
215             0x30ec,
216             0x30ed,
217             0x30ef,
218             0x30f3,
219             0x309b,
220             0x309c,
221             0xfffd,
222             0x0041,
223             0x0042,
224             0x0043,
225             0x0044,
226             0x0045,
227             0x0046,
228             0x0047,
229             0x0048,
230             0x0049,
231             0xfffd,
232             0xfffd,
233             0xfffd,
234             0xfffd,
235             0xfffd,
236             0xfffd,
237             0xfffd,
238             0x004a,
239             0x004b,
240             0x004c,
241             0x004d,
242             0x004e,
243             0x004f,
244             0x0050,
245             0x0051,
246             0x0052,
247             0xfffd,
248             0xfffd,
249             0xfffd,
250             0xfffd,
251             0xfffd,
252             0xfffd,
253             0x0024,
254             0xfffd,
255             0x0053,
256             0x0054,
257             0x0055,
258             0x0056,
259             0x0057,
260             0x0058,
261             0x0059,
262             0x005a,
263             0xfffd,
264             0xfffd,
265             0xfffd,
266             0xfffd,
267             0xfffd,
268             0xfffd,
269             0x0030,
270             0x0031,
271             0x0032,
272             0x0033,
273             0x0034,
274             0x0035,
275             0x0036,
276             0x0037,
277             0x0038,
278             0x0039,
279             0xfffd,
280             0xfffd,
281             0xfffd,
282             0xfffd,
283             0xfffd,
284             0x009f,
285             );
286              
287             my @to_utf8 = (
288             "\x00",
289             "\x01",
290             "\x02",
291             "\x03",
292             "\xc2\x9c",
293             "\x09",
294             "\xc2\x86",
295             "\x7f",
296             "\xc2\x97",
297             "\xc2\x8d",
298             "\xc2\x8e",
299             "\x0b",
300             "\x0c",
301             "\x0d",
302             "\x0e",
303             "\x0f",
304             "\x10",
305             "\x11",
306             "\x12",
307             "\x13",
308             "\xc2\x9d",
309             "\xc2\x85",
310             "\x08",
311             "\xc2\x87",
312             "\x18",
313             "\x19",
314             "\xc2\x92",
315             "\xc2\x8f",
316             "\x1c",
317             "\x1d",
318             "\x1e",
319             "\x1f",
320             "\xc2\x80",
321             "\xc2\x81",
322             "\xc2\x82",
323             "\xc2\x83",
324             "\xc2\x84",
325             "\x0a",
326             "\x17",
327             "\x1b",
328             "\xc2\x88",
329             "\xc2\x89",
330             "\xc2\x8a",
331             "\xc2\x8b",
332             "\xc2\x8c",
333             "\x05",
334             "\x06",
335             "\x07",
336             "\xc2\x90",
337             "\xc2\x91",
338             "\x16",
339             "\xc2\x93",
340             "\xc2\x94",
341             "\xc2\x95",
342             "\xc2\x96",
343             "\x04",
344             "\xc2\x98",
345             "\xc2\x99",
346             "\xc2\x9a",
347             "\xc2\x9b",
348             "\x14",
349             "\x15",
350             "\xc2\x9e",
351             "\x1a",
352             "\x20",
353             "\xe3\x80\x82",
354             "\xe3\x80\x8c",
355             "\xe3\x80\x8d",
356             "\xe3\x80\x81",
357             "\xe3\x83\xbb",
358             "\xe3\x83\xb2",
359             "\xe3\x82\xa1",
360             "\xe3\x82\xa3",
361             "\xe3\x82\xa5",
362             "\xc2\xa3",
363             "\x2e",
364             "\x3c",
365             "\x28",
366             "\x2b",
367             "\x7c",
368             "\x26",
369             "\xe3\x82\xa7",
370             "\xe3\x82\xa9",
371             "\xe3\x83\xa3",
372             "\xe3\x83\xa5",
373             "\xe3\x83\xa7",
374             "\xe3\x83\x83",
375             "\xef\xbf\xbd",
376             "\xe3\x83\xbc",
377             "\xef\xbf\xbd",
378             "\x21",
379             "\xc2\xa5",
380             "\x2a",
381             "\x29",
382             "\x3b",
383             "\xc2\xac",
384             "\x2d",
385             "\x2f",
386             "\xef\xbf\xbd",
387             "\xef\xbf\xbd",
388             "\xef\xbf\xbd",
389             "\xef\xbf\xbd",
390             "\xef\xbf\xbd",
391             "\xef\xbf\xbd",
392             "\xef\xbf\xbd",
393             "\xef\xbf\xbd",
394             "\xc2\xa6",
395             "\x2c",
396             "\x25",
397             "\x5f",
398             "\x3e",
399             "\x3f",
400             "\xef\xbf\xbd",
401             "\xef\xbf\xbd",
402             "\xef\xbf\xbd",
403             "\xef\xbf\xbd",
404             "\xef\xbf\xbd",
405             "\xef\xbf\xbd",
406             "\xef\xbf\xbd",
407             "\xef\xbf\xbd",
408             "\xef\xbf\xbd",
409             "\x60",
410             "\x3a",
411             "\x23",
412             "\x40",
413             "\x27",
414             "\x3d",
415             "\x22",
416             "\xef\xbf\xbd",
417             "\xe3\x82\xa2",
418             "\xe3\x82\xa4",
419             "\xe3\x82\xa6",
420             "\xe3\x82\xa8",
421             "\xe3\x82\xaa",
422             "\xe3\x82\xab",
423             "\xe3\x82\xad",
424             "\xe3\x82\xaf",
425             "\xe3\x82\xb1",
426             "\xe3\x82\xb3",
427             "\xef\xbf\xbd",
428             "\xe3\x82\xb5",
429             "\xe3\x82\xb7",
430             "\xe3\x82\xb9",
431             "\xe3\x82\xbb",
432             "\xe3\x82\xbd",
433             "\xe3\x82\xbf",
434             "\xe3\x83\x81",
435             "\xe3\x83\x84",
436             "\xe3\x83\x86",
437             "\xe3\x83\x88",
438             "\xe3\x83\x8a",
439             "\xe3\x83\x8b",
440             "\xe3\x83\x8c",
441             "\xe3\x83\x8d",
442             "\xe3\x83\x8e",
443             "\xef\xbf\xbd",
444             "\xef\xbf\xbd",
445             "\xe3\x83\x8f",
446             "\xe3\x83\x92",
447             "\xe3\x83\x95",
448             "\xef\xbf\xbd",
449             "\xe2\x80\xbe",
450             "\xe3\x83\x98",
451             "\xe3\x83\x9b",
452             "\xe3\x83\x9e",
453             "\xe3\x83\x9f",
454             "\xe3\x83\xa0",
455             "\xe3\x83\xa1",
456             "\xe3\x83\xa2",
457             "\xe3\x83\xa4",
458             "\xe3\x83\xa6",
459             "\xef\xbf\xbd",
460             "\xe3\x83\xa8",
461             "\xe3\x83\xa9",
462             "\xe3\x83\xaa",
463             "\xe3\x83\xab",
464             "\xef\xbf\xbd",
465             "\xef\xbf\xbd",
466             "\xef\xbf\xbd",
467             "\xef\xbf\xbd",
468             "\xef\xbf\xbd",
469             "\xef\xbf\xbd",
470             "\xef\xbf\xbd",
471             "\xef\xbf\xbd",
472             "\xef\xbf\xbd",
473             "\xef\xbf\xbd",
474             "\xe3\x83\xac",
475             "\xe3\x83\xad",
476             "\xe3\x83\xaf",
477             "\xe3\x83\xb3",
478             "\xe3\x82\x9b",
479             "\xe3\x82\x9c",
480             "\xef\xbf\xbd",
481             "\x41",
482             "\x42",
483             "\x43",
484             "\x44",
485             "\x45",
486             "\x46",
487             "\x47",
488             "\x48",
489             "\x49",
490             "\xef\xbf\xbd",
491             "\xef\xbf\xbd",
492             "\xef\xbf\xbd",
493             "\xef\xbf\xbd",
494             "\xef\xbf\xbd",
495             "\xef\xbf\xbd",
496             "\xef\xbf\xbd",
497             "\x4a",
498             "\x4b",
499             "\x4c",
500             "\x4d",
501             "\x4e",
502             "\x4f",
503             "\x50",
504             "\x51",
505             "\x52",
506             "\xef\xbf\xbd",
507             "\xef\xbf\xbd",
508             "\xef\xbf\xbd",
509             "\xef\xbf\xbd",
510             "\xef\xbf\xbd",
511             "\xef\xbf\xbd",
512             "\x24",
513             "\xef\xbf\xbd",
514             "\x53",
515             "\x54",
516             "\x55",
517             "\x56",
518             "\x57",
519             "\x58",
520             "\x59",
521             "\x5a",
522             "\xef\xbf\xbd",
523             "\xef\xbf\xbd",
524             "\xef\xbf\xbd",
525             "\xef\xbf\xbd",
526             "\xef\xbf\xbd",
527             "\xef\xbf\xbd",
528             "\x30",
529             "\x31",
530             "\x32",
531             "\x33",
532             "\x34",
533             "\x35",
534             "\x36",
535             "\x37",
536             "\x38",
537             "\x39",
538             "\xef\xbf\xbd",
539             "\xef\xbf\xbd",
540             "\xef\xbf\xbd",
541             "\xef\xbf\xbd",
542             "\xef\xbf\xbd",
543             "\xc2\x9f",
544             );
545              
546             my %from_ucs4 = (
547             0x00000000 => "\x00",
548             0x00000001 => "\x01",
549             0x00000002 => "\x02",
550             0x00000003 => "\x03",
551             0x00000004 => "\x37",
552             0x00000005 => "\x2d",
553             0x00000006 => "\x2e",
554             0x00000007 => "\x2f",
555             0x00000008 => "\x16",
556             0x00000009 => "\x05",
557             0x0000000a => "\x25",
558             0x0000000b => "\x0b",
559             0x0000000c => "\x0c",
560             0x0000000d => "\x0d",
561             0x0000000e => "\x0e",
562             0x0000000f => "\x0f",
563             0x00000010 => "\x10",
564             0x00000011 => "\x11",
565             0x00000012 => "\x12",
566             0x00000013 => "\x13",
567             0x00000014 => "\x3c",
568             0x00000015 => "\x3d",
569             0x00000016 => "\x32",
570             0x00000017 => "\x26",
571             0x00000018 => "\x18",
572             0x00000019 => "\x19",
573             0x0000001a => "\x3f",
574             0x0000001b => "\x27",
575             0x0000001c => "\x1c",
576             0x0000001d => "\x1d",
577             0x0000001e => "\x1e",
578             0x0000001f => "\x1f",
579             0x00000020 => "\x40",
580             0x00000021 => "\x5a",
581             0x00000022 => "\x7f",
582             0x00000023 => "\x7b",
583             0x00000024 => "\xe0",
584             0x00000025 => "\x6c",
585             0x00000026 => "\x50",
586             0x00000027 => "\x7d",
587             0x00000028 => "\x4d",
588             0x00000029 => "\x5d",
589             0x0000002a => "\x5c",
590             0x0000002b => "\x4e",
591             0x0000002c => "\x6b",
592             0x0000002d => "\x60",
593             0x0000002e => "\x4b",
594             0x0000002f => "\x61",
595             0x00000030 => "\xf0",
596             0x00000031 => "\xf1",
597             0x00000032 => "\xf2",
598             0x00000033 => "\xf3",
599             0x00000034 => "\xf4",
600             0x00000035 => "\xf5",
601             0x00000036 => "\xf6",
602             0x00000037 => "\xf7",
603             0x00000038 => "\xf8",
604             0x00000039 => "\xf9",
605             0x0000003a => "\x7a",
606             0x0000003b => "\x5e",
607             0x0000003c => "\x4c",
608             0x0000003d => "\x7e",
609             0x0000003e => "\x6e",
610             0x0000003f => "\x6f",
611             0x00000040 => "\x7c",
612             0x00000041 => "\xc1",
613             0x00000042 => "\xc2",
614             0x00000043 => "\xc3",
615             0x00000044 => "\xc4",
616             0x00000045 => "\xc5",
617             0x00000046 => "\xc6",
618             0x00000047 => "\xc7",
619             0x00000048 => "\xc8",
620             0x00000049 => "\xc9",
621             0x0000004a => "\xd1",
622             0x0000004b => "\xd2",
623             0x0000004c => "\xd3",
624             0x0000004d => "\xd4",
625             0x0000004e => "\xd5",
626             0x0000004f => "\xd6",
627             0x00000050 => "\xd7",
628             0x00000051 => "\xd8",
629             0x00000052 => "\xd9",
630             0x00000053 => "\xe2",
631             0x00000054 => "\xe3",
632             0x00000055 => "\xe4",
633             0x00000056 => "\xe5",
634             0x00000057 => "\xe6",
635             0x00000058 => "\xe7",
636             0x00000059 => "\xe8",
637             0x0000005a => "\xe9",
638             0x0000005f => "\x6d",
639             0x00000060 => "\x79",
640             0x0000007c => "\x4f",
641             0x0000007f => "\x07",
642             0x00000080 => "\x20",
643             0x00000081 => "\x21",
644             0x00000082 => "\x22",
645             0x00000083 => "\x23",
646             0x00000084 => "\x24",
647             0x00000085 => "\x15",
648             0x00000086 => "\x06",
649             0x00000087 => "\x17",
650             0x00000088 => "\x28",
651             0x00000089 => "\x29",
652             0x0000008a => "\x2a",
653             0x0000008b => "\x2b",
654             0x0000008c => "\x2c",
655             0x0000008d => "\x09",
656             0x0000008e => "\x0a",
657             0x0000008f => "\x1b",
658             0x00000090 => "\x30",
659             0x00000091 => "\x31",
660             0x00000092 => "\x1a",
661             0x00000093 => "\x33",
662             0x00000094 => "\x34",
663             0x00000095 => "\x35",
664             0x00000096 => "\x36",
665             0x00000097 => "\x08",
666             0x00000098 => "\x38",
667             0x00000099 => "\x39",
668             0x0000009a => "\x3a",
669             0x0000009b => "\x3b",
670             0x0000009c => "\x04",
671             0x0000009d => "\x14",
672             0x0000009e => "\x3e",
673             0x0000009f => "\xff",
674             0x000000a3 => "\x4a",
675             0x000000a5 => "\x5b",
676             0x000000a6 => "\x6a",
677             0x000000ac => "\x5f",
678             0x0000203e => "\xa1",
679             0x00003001 => "\x44",
680             0x00003002 => "\x41",
681             0x0000300c => "\x42",
682             0x0000300d => "\x43",
683             0x0000309b => "\xbe",
684             0x0000309c => "\xbf",
685             0x000030a1 => "\x47",
686             0x000030a2 => "\x81",
687             0x000030a3 => "\x48",
688             0x000030a4 => "\x82",
689             0x000030a5 => "\x49",
690             0x000030a6 => "\x83",
691             0x000030a7 => "\x51",
692             0x000030a8 => "\x84",
693             0x000030a9 => "\x52",
694             0x000030aa => "\x85",
695             0x000030ab => "\x86",
696             0x000030ad => "\x87",
697             0x000030af => "\x88",
698             0x000030b1 => "\x89",
699             0x000030b3 => "\x8a",
700             0x000030b5 => "\x8c",
701             0x000030b7 => "\x8d",
702             0x000030b9 => "\x8e",
703             0x000030bb => "\x8f",
704             0x000030bd => "\x90",
705             0x000030bf => "\x91",
706             0x000030c1 => "\x92",
707             0x000030c3 => "\x56",
708             0x000030c4 => "\x93",
709             0x000030c6 => "\x94",
710             0x000030c8 => "\x95",
711             0x000030ca => "\x96",
712             0x000030cb => "\x97",
713             0x000030cc => "\x98",
714             0x000030cd => "\x99",
715             0x000030ce => "\x9a",
716             0x000030cf => "\x9d",
717             0x000030d2 => "\x9e",
718             0x000030d5 => "\x9f",
719             0x000030d8 => "\xa2",
720             0x000030db => "\xa3",
721             0x000030de => "\xa4",
722             0x000030df => "\xa5",
723             0x000030e0 => "\xa6",
724             0x000030e1 => "\xa7",
725             0x000030e2 => "\xa8",
726             0x000030e3 => "\x53",
727             0x000030e4 => "\xa9",
728             0x000030e5 => "\x54",
729             0x000030e6 => "\xaa",
730             0x000030e7 => "\x55",
731             0x000030e8 => "\xac",
732             0x000030e9 => "\xad",
733             0x000030ea => "\xae",
734             0x000030eb => "\xaf",
735             0x000030ec => "\xba",
736             0x000030ed => "\xbb",
737             0x000030ef => "\xbc",
738             0x000030f2 => "\x46",
739             0x000030f3 => "\xbd",
740             0x000030fb => "\x45",
741             0x000030fc => "\x58",
742             );
743              
744             sub _recode
745             {
746 587 100   587   1149 if ($_[0]->{_from} eq 'INTERNAL') {
    100          
747             $_[1] = join '',
748             map $from_ucs4{$_}
749             || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
750 197   100     237 @{$_[1]};
  197         656  
751             } elsif ($_[0]->{_to} eq 'UTF-8',) {
752 195         523 $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
753             } else {
754 195         518 $_[1] = [ map
755             $to_ucs4[$_],
756             unpack 'C*', $_[1]
757             ];
758             }
759              
760 587         1182 return 1;
761             }
762              
763             1;
764              
765             __END__