1#
2# $Id: H2Z.pm,v 2.0 2005/05/16 19:07:57 dankogai Exp $
3#
4
5package Jcode::H2Z;
6
7use strict;
8use vars qw($RCSID $VERSION);
9
10$RCSID = q$Id: H2Z.pm,v 2.0 2005/05/16 19:07:57 dankogai Exp $;
11$VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
12
13use Carp;
14
15use Jcode::Constants qw(:all);
16
17use 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
128sub 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
156sub 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
1681;
169