Integrate mainline (Win2k/MinGW all ok except threads/t/end.t)
[p5sagit/p5-mst-13.2.git] / ext / Encode / lib / Encode / JP / H2Z.pm
1 #
2 # $Id: H2Z.pm,v 0.92 2002/03/19 17:01:26 dankogai Exp $
3 #
4
5 package Encode::JP::H2Z;
6
7 use strict;
8 use vars qw($RCSID $VERSION);
9
10 $RCSID = q$Id: H2Z.pm,v 0.92 2002/03/19 17:01:26 dankogai Exp $;
11 $VERSION = do { my @r = (q$Revision: 0.92 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
12
13 use Carp;
14
15 use Encode::JP::Constants qw(:all);
16
17 use vars qw(%_D2Z  $_PAT_D2Z
18             %_Z2D  $_PAT_Z2D
19             %_H2Z  $_PAT_H2Z
20             %_Z2H  $_PAT_Z2H);
21
22 %_H2Z = (
23          "\x8e\xa1"     =>      "\xa1\xa3",     #¡£
24          "\x8e\xa2"     =>      "\xa1\xd6",     #¡Ö
25          "\x8e\xa3"     =>      "\xa1\xd7",     #¡×
26          "\x8e\xa4"     =>      "\xa1\xa2",     #¡¢
27          "\x8e\xa5"     =>      "\xa1\xa6",     #¡¦
28          "\x8e\xa6"     =>      "\xa5\xf2",     #¥ò
29          "\x8e\xa7"     =>      "\xa5\xa1",     #¥¡
30          "\x8e\xa8"     =>      "\xa5\xa3",     #¥£
31          "\x8e\xa9"     =>      "\xa5\xa5",     #¥¥
32          "\x8e\xaa"     =>      "\xa5\xa7",     #¥§
33          "\x8e\xab"     =>      "\xa5\xa9",     #¥©
34          "\x8e\xac"     =>      "\xa5\xe3",     #¥ã
35          "\x8e\xad"     =>      "\xa5\xe5",     #¥å
36          "\x8e\xae"     =>      "\xa5\xe7",     #¥ç
37          "\x8e\xaf"     =>      "\xa5\xc3",     #¥Ã
38          "\x8e\xb0"     =>      "\xa1\xbc",     #¡¼
39          "\x8e\xb1"     =>      "\xa5\xa2",     #¥¢
40          "\x8e\xb2"     =>      "\xa5\xa4",     #¥¤
41          "\x8e\xb3"     =>      "\xa5\xa6",     #¥¦
42          "\x8e\xb4"     =>      "\xa5\xa8",     #¥¨
43          "\x8e\xb5"     =>      "\xa5\xaa",     #¥ª
44          "\x8e\xb6"     =>      "\xa5\xab",     #¥«
45          "\x8e\xb7"     =>      "\xa5\xad",     #¥­
46          "\x8e\xb8"     =>      "\xa5\xaf",     #¥¯
47          "\x8e\xb9"     =>      "\xa5\xb1",     #¥±
48          "\x8e\xba"     =>      "\xa5\xb3",     #¥³
49          "\x8e\xbb"     =>      "\xa5\xb5",     #¥µ
50          "\x8e\xbc"     =>      "\xa5\xb7",     #¥·
51          "\x8e\xbd"     =>      "\xa5\xb9",     #¥¹
52          "\x8e\xbe"     =>      "\xa5\xbb",     #¥»
53          "\x8e\xbf"     =>      "\xa5\xbd",     #¥½
54          "\x8e\xc0"     =>      "\xa5\xbf",     #¥¿
55          "\x8e\xc1"     =>      "\xa5\xc1",     #¥Á
56          "\x8e\xc2"     =>      "\xa5\xc4",     #¥Ä
57          "\x8e\xc3"     =>      "\xa5\xc6",     #¥Æ
58          "\x8e\xc4"     =>      "\xa5\xc8",     #¥È
59          "\x8e\xc5"     =>      "\xa5\xca",     #¥Ê
60          "\x8e\xc6"     =>      "\xa5\xcb",     #¥Ë
61          "\x8e\xc7"     =>      "\xa5\xcc",     #¥Ì
62          "\x8e\xc8"     =>      "\xa5\xcd",     #¥Í
63          "\x8e\xc9"     =>      "\xa5\xce",     #¥Î
64          "\x8e\xca"     =>      "\xa5\xcf",     #¥Ï
65          "\x8e\xcb"     =>      "\xa5\xd2",     #¥Ò
66          "\x8e\xcc"     =>      "\xa5\xd5",     #¥Õ
67          "\x8e\xcd"     =>      "\xa5\xd8",     #¥Ø
68          "\x8e\xce"     =>      "\xa5\xdb",     #¥Û
69          "\x8e\xcf"     =>      "\xa5\xde",     #¥Þ
70          "\x8e\xd0"     =>      "\xa5\xdf",     #¥ß
71          "\x8e\xd1"     =>      "\xa5\xe0",     #¥à
72          "\x8e\xd2"     =>      "\xa5\xe1",     #¥á
73          "\x8e\xd3"     =>      "\xa5\xe2",     #¥â
74          "\x8e\xd4"     =>      "\xa5\xe4",     #¥ä
75          "\x8e\xd5"     =>      "\xa5\xe6",     #¥æ
76          "\x8e\xd6"     =>      "\xa5\xe8",     #¥è
77          "\x8e\xd7"     =>      "\xa5\xe9",     #¥é
78          "\x8e\xd8"     =>      "\xa5\xea",     #¥ê
79          "\x8e\xd9"     =>      "\xa5\xeb",     #¥ë
80          "\x8e\xda"     =>      "\xa5\xec",     #¥ì
81          "\x8e\xdb"     =>      "\xa5\xed",     #¥í
82          "\x8e\xdc"     =>      "\xa5\xef",     #¥ï
83          "\x8e\xdd"     =>      "\xa5\xf3",     #¥ó
84          "\x8e\xde"     =>      "\xa1\xab",     #¡«
85          "\x8e\xdf"     =>      "\xa1\xac",     #¡¬
86 );
87
88 %_D2Z = (
89          "\x8e\xb6\x8e\xde"     =>      "\xa5\xac",     #¥¬
90          "\x8e\xb7\x8e\xde"     =>      "\xa5\xae",     #¥®
91          "\x8e\xb8\x8e\xde"     =>      "\xa5\xb0",     #¥°
92          "\x8e\xb9\x8e\xde"     =>      "\xa5\xb2",     #¥²
93          "\x8e\xba\x8e\xde"     =>      "\xa5\xb4",     #¥´
94          "\x8e\xbb\x8e\xde"     =>      "\xa5\xb6",     #¥¶
95          "\x8e\xbc\x8e\xde"     =>      "\xa5\xb8",     #¥¸
96          "\x8e\xbd\x8e\xde"     =>      "\xa5\xba",     #¥º
97          "\x8e\xbe\x8e\xde"     =>      "\xa5\xbc",     #¥¼
98          "\x8e\xbf\x8e\xde"     =>      "\xa5\xbe",     #¥¾
99          "\x8e\xc0\x8e\xde"     =>      "\xa5\xc0",     #¥À
100          "\x8e\xc1\x8e\xde"     =>      "\xa5\xc2",     #¥Â
101          "\x8e\xc2\x8e\xde"     =>      "\xa5\xc5",     #¥Å
102          "\x8e\xc3\x8e\xde"     =>      "\xa5\xc7",     #¥Ç
103          "\x8e\xc4\x8e\xde"     =>      "\xa5\xc9",     #¥É
104          "\x8e\xca\x8e\xde"     =>      "\xa5\xd0",     #¥Ð
105          "\x8e\xcb\x8e\xde"     =>      "\xa5\xd3",     #¥Ó
106          "\x8e\xcc\x8e\xde"     =>      "\xa5\xd6",     #¥Ö
107          "\x8e\xcd\x8e\xde"     =>      "\xa5\xd9",     #¥Ù
108          "\x8e\xce\x8e\xde"     =>      "\xa5\xdc",     #¥Ü
109          "\x8e\xca\x8e\xdf"     =>      "\xa5\xd1",     #¥Ñ
110          "\x8e\xcb\x8e\xdf"     =>      "\xa5\xd4",     #¥Ô
111          "\x8e\xcc\x8e\xdf"     =>      "\xa5\xd7",     #¥×
112          "\x8e\xcd\x8e\xdf"     =>      "\xa5\xda",     #¥Ú
113          "\x8e\xce\x8e\xdf"     =>      "\xa5\xdd",     #¥Ý
114          "\x8e\xb3\x8e\xde"     =>      "\xa5\xf4",     #¥ô
115 );
116
117 # init only once;
118
119 #$_PAT_D2Z = join("|", keys %_D2Z);
120 #$_PAT_H2Z = join("|", keys %_H2Z);
121
122 %_Z2H = reverse %_H2Z;
123 %_Z2D = reverse %_D2Z;
124
125 #$_PAT_Z2H    = join("|", keys %_Z2H);
126 #$_PAT_Z2D    = join("|", keys %_Z2D);
127
128 sub h2z {
129     my $r_str = shift;
130     my ($keep_dakuten) = @_;
131     my $n = 0;
132     unless ($keep_dakuten){
133         $n = (
134               $$r_str =~ s(
135                            ($RE{EUC_KANA}
136                             (?:\x8e[\xde\xdf])?)
137                            ){
138                   my $str = $1;
139                   $_D2Z{$str} || $_H2Z{$str} || 
140                       # in case dakuten and handakuten are side-by-side!
141                       $_H2Z{substr($str,0,2)} . $_H2Z{substr($str,2,2)};
142                   }eogx
143               );
144     }else{
145         $n = (
146               $$r_str =~ s(
147                            ($RE{EUC_KANA})
148                            ){
149                   $_H2Z{$1};
150                   }eogx
151               );
152     }
153     $n;
154 }
155
156 sub z2h {
157     my $r_str = shift;
158     my $n = (
159              $$r_str =~ s(
160                           ($RE{EUC_C}|$RE{EUC_0212}|$RE{EUC_KANA})
161                           ){
162                  $_Z2D{$1} || $_Z2H{$1} || $1;
163                  }eogx
164              );
165     $n;
166 }
167
168 1;