1#
2# $Id: H2Z.pm,v 2.0 2004/05/16 20:55:17 dankogai Exp $
3#
4
5package Encode::JP::H2Z;
6
7use strict;
8
9our $RCSID = q$Id: H2Z.pm,v 2.0 2004/05/16 20:55:17 dankogai Exp $;
10our $VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
11
12use Encode::CJKConstants qw(:all);
13
14use vars qw(%_D2Z  $_PAT_D2Z
15	    %_Z2D  $_PAT_Z2D
16	    %_H2Z  $_PAT_H2Z
17	    %_Z2H  $_PAT_Z2H);
18
19%_H2Z = (
20	 "\x8e\xa1"	=>	"\xa1\xa3",	#��
21	 "\x8e\xa2"	=>	"\xa1\xd6",	#��
22	 "\x8e\xa3"	=>	"\xa1\xd7",	#��
23	 "\x8e\xa4"	=>	"\xa1\xa2",	#��
24	 "\x8e\xa5"	=>	"\xa1\xa6",	#��
25	 "\x8e\xa6"	=>	"\xa5\xf2",	#��
26	 "\x8e\xa7"	=>	"\xa5\xa1",	#��
27	 "\x8e\xa8"	=>	"\xa5\xa3",	#��
28	 "\x8e\xa9"	=>	"\xa5\xa5",	#��
29	 "\x8e\xaa"	=>	"\xa5\xa7",	#��
30	 "\x8e\xab"	=>	"\xa5\xa9",	#��
31	 "\x8e\xac"	=>	"\xa5\xe3",	#��
32	 "\x8e\xad"	=>	"\xa5\xe5",	#��
33	 "\x8e\xae"	=>	"\xa5\xe7",	#��
34	 "\x8e\xaf"	=>	"\xa5\xc3",	#��
35	 "\x8e\xb0"	=>	"\xa1\xbc",	#��
36	 "\x8e\xb1"	=>	"\xa5\xa2",	#��
37	 "\x8e\xb2"	=>	"\xa5\xa4",	#��
38	 "\x8e\xb3"	=>	"\xa5\xa6",	#��
39	 "\x8e\xb4"	=>	"\xa5\xa8",	#��
40	 "\x8e\xb5"	=>	"\xa5\xaa",	#��
41	 "\x8e\xb6"	=>	"\xa5\xab",	#��
42	 "\x8e\xb7"	=>	"\xa5\xad",	#��
43	 "\x8e\xb8"	=>	"\xa5\xaf",	#��
44	 "\x8e\xb9"	=>	"\xa5\xb1",	#��
45	 "\x8e\xba"	=>	"\xa5\xb3",	#��
46	 "\x8e\xbb"	=>	"\xa5\xb5",	#��
47	 "\x8e\xbc"	=>	"\xa5\xb7",	#��
48	 "\x8e\xbd"	=>	"\xa5\xb9",	#��
49	 "\x8e\xbe"	=>	"\xa5\xbb",	#��
50	 "\x8e\xbf"	=>	"\xa5\xbd",	#��
51	 "\x8e\xc0"	=>	"\xa5\xbf",	#��
52	 "\x8e\xc1"	=>	"\xa5\xc1",	#��
53	 "\x8e\xc2"	=>	"\xa5\xc4",	#��
54	 "\x8e\xc3"	=>	"\xa5\xc6",	#��
55	 "\x8e\xc4"	=>	"\xa5\xc8",	#��
56	 "\x8e\xc5"	=>	"\xa5\xca",	#��
57	 "\x8e\xc6"	=>	"\xa5\xcb",	#��
58	 "\x8e\xc7"	=>	"\xa5\xcc",	#��
59	 "\x8e\xc8"	=>	"\xa5\xcd",	#��
60	 "\x8e\xc9"	=>	"\xa5\xce",	#��
61	 "\x8e\xca"	=>	"\xa5\xcf",	#��
62	 "\x8e\xcb"	=>	"\xa5\xd2",	#��
63	 "\x8e\xcc"	=>	"\xa5\xd5",	#��
64	 "\x8e\xcd"	=>	"\xa5\xd8",	#��
65	 "\x8e\xce"	=>	"\xa5\xdb",	#��
66	 "\x8e\xcf"	=>	"\xa5\xde",	#��
67	 "\x8e\xd0"	=>	"\xa5\xdf",	#��
68	 "\x8e\xd1"	=>	"\xa5\xe0",	#��
69	 "\x8e\xd2"	=>	"\xa5\xe1",	#��
70	 "\x8e\xd3"	=>	"\xa5\xe2",	#��
71	 "\x8e\xd4"	=>	"\xa5\xe4",	#��
72	 "\x8e\xd5"	=>	"\xa5\xe6",	#��
73	 "\x8e\xd6"	=>	"\xa5\xe8",	#��
74	 "\x8e\xd7"	=>	"\xa5\xe9",	#��
75	 "\x8e\xd8"	=>	"\xa5\xea",	#��
76	 "\x8e\xd9"	=>	"\xa5\xeb",	#��
77	 "\x8e\xda"	=>	"\xa5\xec",	#��
78	 "\x8e\xdb"	=>	"\xa5\xed",	#��
79	 "\x8e\xdc"	=>	"\xa5\xef",	#��
80	 "\x8e\xdd"	=>	"\xa5\xf3",	#��
81	 "\x8e\xde"	=>	"\xa1\xab",	#��
82	 "\x8e\xdf"	=>	"\xa1\xac",	#��
83);
84
85%_D2Z = (
86	 "\x8e\xb6\x8e\xde"	=>	"\xa5\xac",	#��
87	 "\x8e\xb7\x8e\xde"	=>	"\xa5\xae",	#��
88	 "\x8e\xb8\x8e\xde"	=>	"\xa5\xb0",	#��
89	 "\x8e\xb9\x8e\xde"	=>	"\xa5\xb2",	#��
90	 "\x8e\xba\x8e\xde"	=>	"\xa5\xb4",	#��
91	 "\x8e\xbb\x8e\xde"	=>	"\xa5\xb6",	#��
92	 "\x8e\xbc\x8e\xde"	=>	"\xa5\xb8",	#��
93	 "\x8e\xbd\x8e\xde"	=>	"\xa5\xba",	#��
94	 "\x8e\xbe\x8e\xde"	=>	"\xa5\xbc",	#��
95	 "\x8e\xbf\x8e\xde"	=>	"\xa5\xbe",	#��
96	 "\x8e\xc0\x8e\xde"	=>	"\xa5\xc0",	#��
97	 "\x8e\xc1\x8e\xde"	=>	"\xa5\xc2",	#��
98	 "\x8e\xc2\x8e\xde"	=>	"\xa5\xc5",	#��
99	 "\x8e\xc3\x8e\xde"	=>	"\xa5\xc7",	#��
100	 "\x8e\xc4\x8e\xde"	=>	"\xa5\xc9",	#��
101	 "\x8e\xca\x8e\xde"	=>	"\xa5\xd0",	#��
102	 "\x8e\xcb\x8e\xde"	=>	"\xa5\xd3",	#��
103	 "\x8e\xcc\x8e\xde"	=>	"\xa5\xd6",	#��
104	 "\x8e\xcd\x8e\xde"	=>	"\xa5\xd9",	#��
105	 "\x8e\xce\x8e\xde"	=>	"\xa5\xdc",	#��
106	 "\x8e\xca\x8e\xdf"	=>	"\xa5\xd1",	#��
107	 "\x8e\xcb\x8e\xdf"	=>	"\xa5\xd4",	#��
108	 "\x8e\xcc\x8e\xdf"	=>	"\xa5\xd7",	#��
109	 "\x8e\xcd\x8e\xdf"	=>	"\xa5\xda",	#��
110	 "\x8e\xce\x8e\xdf"	=>	"\xa5\xdd",	#��
111	 "\x8e\xb3\x8e\xde"     =>      "\xa5\xf4",     #��
112);
113
114# init only once;
115
116#$_PAT_D2Z = join("|", keys %_D2Z);
117#$_PAT_H2Z = join("|", keys %_H2Z);
118
119%_Z2H = reverse %_H2Z;
120%_Z2D = reverse %_D2Z;
121
122#$_PAT_Z2H    = join("|", keys %_Z2H);
123#$_PAT_Z2D    = join("|", keys %_Z2D);
124
125sub h2z {
126    no warnings qw(uninitialized);
127    my $r_str = shift;
128    my ($keep_dakuten) = @_;
129    my $n = 0;
130    unless ($keep_dakuten){
131	$n = (
132	      $$r_str =~ s(
133			   ($RE{EUC_KANA}
134			    (?:\x8e[\xde\xdf])?)
135			   ){
136		  my $str = $1;
137		  $_D2Z{$str} || $_H2Z{$str} ||
138		      # in case dakuten and handakuten are side-by-side!
139		      $_H2Z{substr($str,0,2)} . $_H2Z{substr($str,2,2)};
140		  }eogx
141	      );
142    }else{
143	$n = (
144	      $$r_str =~ s(
145			   ($RE{EUC_KANA})
146			   ){
147		  $_H2Z{$1};
148		  }eogx
149	      );
150    }
151    $n;
152}
153
154sub z2h {
155    my $r_str = shift;
156    my $n = (
157	     $$r_str =~ s(
158			  ($RE{EUC_C}|$RE{EUC_0212}|$RE{EUC_KANA})
159			  ){
160		 $_Z2D{$1} || $_Z2H{$1} || $1;
161		 }eogx
162	     );
163    $n;
164}
165
1661;
167__END__
168
169
170=head1 NAME
171
172Encode::JP::H2Z -- internally used by Encode::JP::2022_JP*
173
174=cut
175