]> code.delx.au - gnu-emacs/blob - lisp/international/characters.el
(create-fontset-from-fontset-spec): Typo in doc-string fixed.
[gnu-emacs] / lisp / international / characters.el
1 ;;; characters.el --- set syntax and category for multibyte characters
2
3 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
4 ;; Licensed to the Free Software Foundation.
5
6 ;; Keywords: multibyte character, character set, syntax, category
7
8 ;; This file is part of GNU Emacs.
9
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation; either version 2, or (at your option)
13 ;; any later version.
14
15 ;; GNU Emacs is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ;; GNU General Public License for more details.
19
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
24
25 ;;; Commentary:
26
27 ;; This file contains multibyte characters. Save this file always in
28 ;; the coding system `iso-2022-7bit'.
29
30 ;; This file does not define the syntax for Latin-N character sets;
31 ;; those are defined by the files latin-N.el.
32
33 ;;; Predefined categories.
34
35 ;; For each character set.
36
37 (define-category ?a "ASCII")
38 (define-category ?l "Latin")
39 (define-category ?t "Thai")
40 (define-category ?g "Greek")
41 (define-category ?b "Arabic")
42 (define-category ?w "Hebrew")
43 (define-category ?y "Cyrillic")
44 (define-category ?k "Japanese katakana")
45 (define-category ?r "Japanese roman")
46 (define-category ?c "Chinese")
47 (define-category ?j "Japanese")
48 (define-category ?h "Korean")
49 (define-category ?e "Ethiopic (Ge'ez)")
50 (define-category ?v "Vietnamese")
51 (define-category ?i "Indian")
52 (define-category ?o "Lao")
53 (define-category ?q "Tibetan")
54
55 ;; For each group (row) of 2-byte character sets.
56
57 (define-category ?A "Alpha numeric characters of 2-byte character sets")
58 (define-category ?C "Chinese (Han) characters of 2-byte character sets")
59 (define-category ?G "Greek characters of 2-byte characters sets")
60 (define-category ?H "Japanese Hiragana characters of 2-byte character sets")
61 (define-category ?K "Japanese Katakana characters of 2-byte character sets")
62 (define-category ?N "Korean Hangul characters of 2-byte character sets")
63 (define-category ?Y "Cyrillic character of 2-byte character sets")
64 (define-category ?I "Indian Glyphs")
65
66 ;; For phonetic classifications.
67
68 (define-category ?0 "consonant")
69 (define-category ?1 "base (independent) vowel")
70 (define-category ?2 "upper diacritical mark (including upper vowel)")
71 (define-category ?3 "lower diacritical mark (including lower vowel)")
72 (define-category ?4 "tone mark")
73 (define-category ?5 "symbol")
74 (define-category ?6 "digit")
75 (define-category ?7 "vowel-modifying diacritical mark")
76 (define-category ?8 "vowel-signs")
77 (define-category ?9 "semivowel lower")
78
79 ;; For filling.
80 (define-category ?| "While filling, we can break a line at this character.")
81
82 ;; Keep the followings for `kinsoku' processing. See comments in
83 ;; kinsoku.el.
84 (define-category ?> "A character which can't be placed at beginning of line.")
85 (define-category ?< "A character which can't be placed at end of line.")
86
87 \f
88 ;;; Setting syntax and category.
89
90 ;; ASCII
91
92 (let ((ch 32))
93 (while (< ch 127) ; All ASCII characters have
94 (modify-category-entry ch ?a) ; the category `a' (ASCII)
95 (modify-category-entry ch ?l) ; and `l' (Latin).
96 (setq ch (1+ ch))))
97
98 ;; Arabic character set
99
100 (let ((charsets '(arabic-iso8859-6
101 arabic-digit
102 arabic-1-column
103 arabic-2-column)))
104 (while charsets
105 (modify-syntax-entry (make-char (car charsets)) "w")
106 (modify-category-entry (make-char (car charsets)) ?b)
107 (setq charsets (cdr charsets))))
108
109 ;; Chinese character set (GB2312)
110
111 (modify-syntax-entry (make-char 'chinese-gb2312) "w")
112 (modify-syntax-entry (make-char 'chinese-gb2312 33) "_")
113 (modify-syntax-entry (make-char 'chinese-gb2312 34) "_")
114 (modify-syntax-entry (make-char 'chinese-gb2312 41) "_")
115 (modify-syntax-entry ?\\e$A!2\e(B "(\e$A!3\e(B")
116 (modify-syntax-entry ?\\e$A!4\e(B "(\e$A!5\e(B")
117 (modify-syntax-entry ?\\e$A!6\e(B "(\e$A!7\e(B")
118 (modify-syntax-entry ?\\e$A!8\e(B "(\e$A!9\e(B")
119 (modify-syntax-entry ?\\e$A!:\e(B "(\e$A!;\e(B")
120 (modify-syntax-entry ?\\e$A!<\e(B "(\e$A!=\e(B")
121 (modify-syntax-entry ?\\e$A!>\e(B "(\e$A!?\e(B")
122 (modify-syntax-entry ?\\e$A!3\e(B ")\e$A!2\e(B")
123 (modify-syntax-entry ?\\e$A!5\e(B ")\e$A!4\e(B")
124 (modify-syntax-entry ?\\e$A!7\e(B ")\e$A!6\e(B")
125 (modify-syntax-entry ?\\e$A!9\e(B ")\e$A!8\e(B")
126 (modify-syntax-entry ?\\e$A!;\e(B ")\e$A!:\e(B")
127 (modify-syntax-entry ?\\e$A!=\e(B ")\e$A!<\e(B")
128 (modify-syntax-entry ?\\e$A!?\e(B ")\e$A!>\e(B")
129
130 (modify-category-entry (make-char 'chinese-gb2312) ?c)
131 (modify-category-entry (make-char 'chinese-gb2312) ?\|)
132 (modify-category-entry (make-char 'chinese-gb2312 35) ?A)
133 (modify-category-entry (make-char 'chinese-gb2312 36) ?H)
134 (modify-category-entry (make-char 'chinese-gb2312 37) ?K)
135 (modify-category-entry (make-char 'chinese-gb2312 38) ?G)
136 (modify-category-entry (make-char 'chinese-gb2312 39) ?Y)
137 (modify-category-entry (make-char 'chinese-gb2312 35) ?A)
138 (let ((row 48))
139 (while (< row 127)
140 (modify-category-entry (make-char 'chinese-gb2312 row) ?C)
141 (setq row (1+ row))))
142
143 ;; Chinese character set (BIG5)
144
145 (let ((generic-big5-1-char (make-char 'chinese-big5-1))
146 (generic-big5-2-char (make-char 'chinese-big5-2)))
147 (modify-syntax-entry generic-big5-1-char "w")
148 (modify-syntax-entry generic-big5-2-char "w")
149
150 (modify-category-entry generic-big5-1-char ?c)
151 (modify-category-entry generic-big5-2-char ?c)
152
153 (modify-category-entry generic-big5-1-char ?C)
154 (modify-category-entry generic-big5-2-char ?C)
155
156 (modify-category-entry generic-big5-1-char ?\|)
157 (modify-category-entry generic-big5-2-char ?\|))
158
159
160 ;; Chinese character set (CNS11643)
161
162 (let ((cns-list '(chinese-cns11643-1
163 chinese-cns11643-2
164 chinese-cns11643-3
165 chinese-cns11643-4
166 chinese-cns11643-5
167 chinese-cns11643-6
168 chinese-cns11643-7))
169 generic-char)
170 (while cns-list
171 (setq generic-char (make-char (car cns-list)))
172 (modify-syntax-entry generic-char "w")
173 (modify-category-entry generic-char ?c)
174 (modify-category-entry generic-char ?C)
175 (modify-category-entry generic-char ?|)
176 (setq cns-list (cdr cns-list))))
177
178 ;; Cyrillic character set (ISO-8859-5)
179
180 (modify-category-entry (make-char 'cyrillic-iso8859-5) ?y)
181
182 (let ((c 160))
183 (while (< c 256)
184 (modify-syntax-entry (make-char 'cyrillic-iso8859-5 c) "w")
185 (setq c (1+ c))))
186 (modify-syntax-entry ?\e,L-\e(B ".")
187 (modify-syntax-entry ?\e,Lp\e(B ".")
188 (modify-syntax-entry ?\e,L}\e(B ".")
189
190 ;; Devanagari character set
191
192 (let ((deflist '(;; chars syntax category
193 ("\e$(5!!!"!#\e(B" "w" ?7) ; vowel-modifying diacritical mark
194 ; chandrabindu, anuswar, visarga
195 ("\e$(5!$\e(B-\e$(5!2\e(B" "w" ?1) ; independent vowel
196 ("\e$(5!3\e(B-\e$(5!X\e(B" "w" ?0) ; consonant
197 ("\e$(5!Z\e(B-\e$(5!g\e(B" "w" ?8) ; matra
198 ("\e$(5!q\e(B-\e$(5!z\e(B" "w" ?6) ; digit
199 ))
200 elm chars len syntax category to ch i)
201 (while deflist
202 (setq elm (car deflist))
203 (setq chars (car elm)
204 len (length chars)
205 syntax (nth 1 elm)
206 category (nth 2 elm)
207 i 0)
208 (while (< i len)
209 (if (= (aref chars i) ?-)
210 (setq i (1+ i)
211 to (sref chars i))
212 (setq ch (sref chars i)
213 to ch))
214 (while (<= ch to)
215 (modify-syntax-entry ch syntax)
216 (modify-category-entry ch category)
217 (setq ch (1+ ch)))
218 (setq i (+ i (char-bytes to))))
219 (setq deflist (cdr deflist))))
220
221 ;; Ethiopic character set
222
223 (modify-category-entry (make-char 'ethiopic) ?e)
224 (modify-syntax-entry (make-char 'ethiopic) "w")
225 (let ((chars '(?\e$(3$h\e(B ?\e$(3$i\e(B ?\e$(3$j\e(B ?\e$(3$k\e(B ?\e$(3$l\e(B ?\e$(3$m\e(B ?\e$(3$n\e(B ?\e$(3$o\e(B ?\e$(3%i\e(B ?\e$(3%t\e(B ?\e$(3%u\e(B ?\e$(3%v\e(B ?\e$(3%w\e(B ?\e$(3%x\e(B)))
226 (while chars
227 (modify-syntax-entry (car chars) ".")
228 (setq chars (cdr chars))))
229
230 ;; European character set (Latin-1,2,3,4,5)
231
232 (modify-category-entry (make-char 'latin-iso8859-1) ?l)
233 (modify-category-entry (make-char 'latin-iso8859-2) ?l)
234 (modify-category-entry (make-char 'latin-iso8859-3) ?l)
235 (modify-category-entry (make-char 'latin-iso8859-4) ?l)
236 (modify-category-entry (make-char 'latin-iso8859-9) ?l)
237
238 ;; Greek character set (ISO-8859-7)
239
240 (modify-category-entry (make-char 'greek-iso8859-7) ?g)
241
242 (let ((c 182))
243 (while (< c 255)
244 (modify-syntax-entry (make-char 'greek-iso8859-7 c) "w")
245 (setq c (1+ c))))
246 (modify-syntax-entry (make-char 'greek-iso8859-7 160) "w") ; NBSP
247 (modify-syntax-entry ?\e,F7\e(B ".")
248 (modify-syntax-entry ?\e,F;\e(B ".")
249 (modify-syntax-entry ?\e,F=\e(B ".")
250
251 ;; Hebrew character set (ISO-8859-8)
252
253 (modify-category-entry (make-char 'hebrew-iso8859-8) ?w)
254
255 (let ((c 224))
256 (while (< c 251)
257 (modify-syntax-entry (make-char 'hebrew-iso8859-8 c) "w")
258 (setq c (1+ c))))
259 (modify-syntax-entry (make-char 'hebrew-iso8859-8 160) "w") ; NBSP
260
261 ;; Indian character set (IS 13194 and other Emacs original Indian charsets)
262
263 (modify-category-entry (make-char 'indian-is13194) ?i)
264 (modify-category-entry (make-char 'indian-2-column) ?I)
265 (modify-category-entry (make-char 'indian-1-column) ?I)
266
267 ;; Japanese character set (JISX0201-kana, JISX0201-roman, JISX0208, JISX0212)
268
269 (modify-category-entry (make-char 'katakana-jisx0201) ?k)
270 (modify-category-entry (make-char 'latin-jisx0201) ?r)
271 (modify-category-entry (make-char 'japanese-jisx0208) ?j)
272 (modify-category-entry (make-char 'japanese-jisx0212) ?j)
273 (modify-category-entry (make-char 'katakana-jisx0201) ?\|)
274 (modify-category-entry (make-char 'japanese-jisx0208) ?\|)
275 (modify-category-entry (make-char 'japanese-jisx0212) ?\|)
276
277 ;; JISX0208
278 (modify-syntax-entry (make-char 'japanese-jisx0208) "w")
279 (modify-syntax-entry (make-char 'japanese-jisx0208 33) "_")
280 (modify-syntax-entry (make-char 'japanese-jisx0208 34) "_")
281 (modify-syntax-entry (make-char 'japanese-jisx0208 40) "_")
282 (let ((chars '(?\e$B!<\e(B ?\e$B!+\e(B ?\e$B!,\e(B ?\e$B!3\e(B ?\e$B!4\e(B ?\e$B!5\e(B ?\e$B!6\e(B ?\e$B!7\e(B ?\e$B!8\e(B ?\e$B!9\e(B ?\e$B!:\e(B ?\e$B!;\e(B)))
283 (while chars
284 (modify-syntax-entry (car chars) "w")
285 (setq chars (cdr chars))))
286 (modify-syntax-entry ?\\e$B!J\e(B "(\e$B!K\e(B")
287 (modify-syntax-entry ?\\e$B!N\e(B "(\e$B!O\e(B")
288 (modify-syntax-entry ?\\e$B!P\e(B "(\e$B!Q\e(B")
289 (modify-syntax-entry ?\\e$B!V\e(B "(\e$B!W\e(B")
290 (modify-syntax-entry ?\\e$B!X\e(B "(\e$B!Y\e(B")
291 (modify-syntax-entry ?\\e$B!K\e(B ")\e$B!J\e(B")
292 (modify-syntax-entry ?\\e$B!O\e(B ")\e$B!N\e(B")
293 (modify-syntax-entry ?\\e$B!Q\e(B ")\e$B!P\e(B")
294 (modify-syntax-entry ?\\e$B!W\e(B ")\e$B!V\e(B")
295 (modify-syntax-entry ?\\e$B!Y\e(B ")\e$B!X\e(B")
296
297 (modify-category-entry (make-char 'japanese-jisx0208 35) ?A)
298 (modify-category-entry (make-char 'japanese-jisx0208 36) ?H)
299 (modify-category-entry (make-char 'japanese-jisx0208 37) ?K)
300 (modify-category-entry (make-char 'japanese-jisx0208 38) ?G)
301 (modify-category-entry (make-char 'japanese-jisx0208 39) ?Y)
302 (let ((row 48))
303 (while (< row 127)
304 (modify-category-entry (make-char 'japanese-jisx0208 row) ?C)
305 (setq row (1+ row))))
306 (modify-category-entry ?\e$B!<\e(B ?K)
307 (let ((chars '(?\e$B!+\e(B ?\e$B!,\e(B)))
308 (while chars
309 (modify-category-entry (car chars) ?K)
310 (modify-category-entry (car chars) ?H)
311 (setq chars (cdr chars))))
312 (let ((chars '(?\e$B!3\e(B ?\e$B!4\e(B ?\e$B!5\e(B ?\e$B!6\e(B ?\e$B!7\e(B ?\e$B!8\e(B ?\e$B!9\e(B ?\e$B!:\e(B ?\e$B!;\e(B)))
313 (while chars
314 (modify-category-entry (car chars) ?C)
315 (setq chars (cdr chars))))
316
317 ;; JISX0212
318 (modify-syntax-entry (make-char 'japanese-jisx0212) "w")
319 (modify-syntax-entry (make-char 'japanese-jisx0212 33) "_")
320 (modify-syntax-entry (make-char 'japanese-jisx0212 34) "_")
321 (modify-syntax-entry (make-char 'japanese-jisx0212 35) "_")
322
323 (modify-category-entry (make-char 'japanese-jisx0212 ) ?C)
324
325 ;; JISX0201-Kana
326 (modify-syntax-entry (make-char 'katakana-jisx0201) "w")
327 (let ((chars '(?\e(I!\e(B ?\e(I"\e(B ?\e(I#\e(B ?\e(I$\e(B ?\e(I%\e(B)))
328 (while chars
329 (modify-syntax-entry (car chars) ".")
330 (setq chars (cdr chars))))
331
332 ;; Korean character set (KSC5601)
333
334 (modify-syntax-entry (make-char 'korean-ksc5601) "w")
335 (modify-syntax-entry (make-char 'korean-ksc5601 33) "_")
336 (modify-syntax-entry (make-char 'korean-ksc5601 34) "_")
337 (modify-syntax-entry (make-char 'korean-ksc5601 38) "_")
338 (modify-syntax-entry (make-char 'korean-ksc5601 39) "_")
339 (modify-syntax-entry (make-char 'korean-ksc5601 40) "_")
340 (modify-syntax-entry (make-char 'korean-ksc5601 41) "_")
341
342 (modify-category-entry (make-char 'korean-ksc5601) ?h)
343 (modify-category-entry (make-char 'korean-ksc5601 35) ?A)
344 (modify-category-entry (make-char 'korean-ksc5601 37) ?G)
345 (modify-category-entry (make-char 'korean-ksc5601 42) ?H)
346 (modify-category-entry (make-char 'korean-ksc5601 43) ?K)
347 (modify-category-entry (make-char 'korean-ksc5601 44) ?Y)
348
349 ;; Lao character set
350
351 (modify-category-entry (make-char 'lao) ?o)
352
353 (let ((deflist '(;; chars syntax category
354 ("\e(1!\e(B-\e(1N\e(B" "w" ?0) ; consonant
355 ("\e(1PRS]`\e(B-\e(1d\e(B" "w" ?1) ; vowel base
356 ("\e(1QT\e(B-\e(1W[m\e(B" "w" ?2) ; vowel upper
357 ("\e(1XY\e(B" "w" ?3) ; vowel lower
358 ("\e(1h\e(B-\e(1l\e(B" "w" ?4) ; tone mark
359 ("\e(1\\e(B" "w" ?9) ; semivowel lower
360 ("\e(1p\e(B-\e(1y\e(B" "w" ?6) ; digit
361 ("\e(1Of\e(B" "_" ?0) ; symbol
362 ))
363 elm chars len syntax category to ch i)
364 (while deflist
365 (setq elm (car deflist))
366 (setq chars (car elm)
367 len (length chars)
368 syntax (nth 1 elm)
369 category (nth 2 elm)
370 i 0)
371 (while (< i len)
372 (if (= (aref chars i) ?-)
373 (setq i (1+ i)
374 to (sref chars i))
375 (setq ch (sref chars i)
376 to ch))
377 (while (<= ch to)
378 (modify-syntax-entry ch syntax)
379 (modify-category-entry ch category)
380 (setq ch (1+ ch)))
381 (setq i (+ i (char-bytes to))))
382 (setq deflist (cdr deflist))))
383
384 ;; Thai character set (TIS620)
385
386 (modify-category-entry (make-char 'thai-tis620) ?t)
387
388 (let ((deflist '(;; chars syntax category
389 ("\e,T!\e(B-\e,TCEG\e(B-\e,TN\e(B" "w" ?0) ; consonant
390 ("\e,TDFPRS`\e(B-\e,Te\e(B" "w" ?1) ; vowel base
391 ("\e,TQT\e(B-\e,TWgn\e(B" "w" ?2) ; vowel upper
392 ("\e,TX\e(B-\e,TZ\e(B" "w" ?3) ; vowel lower
393 ("\e,Th\e(B-\e,Tm\e(B" "w" ?4) ; tone mark
394 ("\e,Tp\e(B-\e,Ty\e(B" "w" ?6) ; digit
395 ("\e,TOf_oz{\e(B" "_" ?5) ; symbol
396 ))
397 elm chars len syntax category to ch i)
398 (while deflist
399 (setq elm (car deflist))
400 (setq chars (car elm)
401 len (length chars)
402 syntax (nth 1 elm)
403 category (nth 2 elm)
404 i 0)
405 (while (< i len)
406 (if (= (aref chars i) ?-)
407 (setq i (1+ i)
408 to (sref chars i))
409 (setq ch (sref chars i)
410 to ch))
411 (while (<= ch to)
412 (modify-syntax-entry ch syntax)
413 (modify-category-entry ch category)
414 (setq ch (1+ ch)))
415 (setq i (+ i (char-bytes to))))
416 (setq deflist (cdr deflist))))
417
418 ;; Tibetan character set
419
420 (let ((row 33))
421 (while (< row 38)
422 (modify-category-entry (make-char 'tibetan row) ?q)
423 (setq row (1+ row))))
424
425 (modify-category-entry (make-char 'tibetan-1-column 33) ?q)
426
427 (let ((deflist '(;; chars syntax category
428 ("\e$(7"!\e(B-\e$(7"J\e(B" "w" ?0) ; consonant
429 ("\e$(7#!\e(B-\e$(7#J#P#Q\e(B" "w" ?0) ;
430 ("\e$(7$!\e(B-\e$(7$e\e(B" "w" ?0) ;
431 ("\e$(7%!\e(B-\e$(7%u\e(B" "w" ?0) ;
432 ("\e$(7"S"["\"]"^"a\e(B" "w" ?2) ; upper vowel
433 ("\e$(7"_"c"d"g"h"i"j"k"l\e(B" "w" ?2) ; upper modifier
434 ("\e$(7!I"Q"U"e!e!g\e(B" "w" ?3) ; lowel vowel/modifier
435 ("\e$(7!P\e(B-\e$(7!Y!Z\e(B-\e$(7!c\e(B" "w" ?6) ; digit
436 ("\e$(7!;!=\e(B-\e$(7!B!D"`\e(B" "." ?|) ; line-break char
437 ("\e$(8!;!=!?!@!A!D"`\e(B" "." ?|) ;
438 ("\e$(7!8!;!=\e(B-\e$(7!B!D"`!m!d\e(B" "." ?>) ; prohibition
439 ("\e$(8!;!=!?!@!A!D"`\e(B" "." ?>) ;
440 ("\e$(7!0\e(B-\e$(7!:!l#R#S"f\e(B" "." ?<) ; prohibition
441 ("\e$(7!C!E\e(B-\e$(7!H!J\e(B-\e$(7!O!f!h\e(B-\e$(7!k!n!o\e(B" "." ?q) ; others
442 ))
443 elm chars len syntax category to ch i)
444 (while deflist
445 (setq elm (car deflist))
446 (setq chars (car elm)
447 len (length chars)
448 syntax (nth 1 elm)
449 category (nth 2 elm)
450 i 0)
451 (while (< i len)
452 (if (= (aref chars i) ?-)
453 (setq i (1+ i)
454 to (sref chars i))
455 (setq ch (sref chars i)
456 to ch))
457 (while (<= ch to)
458 (modify-syntax-entry ch syntax)
459 (modify-category-entry ch category)
460 (setq ch (1+ ch)))
461 (setq i (+ i (char-bytes to))))
462 (setq deflist (cdr deflist))))
463
464 ;; Vietnamese character set
465
466 (let ((lower (make-char 'vietnamese-viscii-lower))
467 (upper (make-char 'vietnamese-viscii-upper)))
468 (modify-syntax-entry lower "w")
469 (modify-syntax-entry upper "w")
470 (modify-category-entry lower ?v)
471 (modify-category-entry upper ?v)
472 (modify-category-entry lower ?l) ; To make a word with
473 (modify-category-entry upper ?l) ; latin characters.
474 )
475
476 \f
477 ;;; Setting word boundary.
478
479 (setq word-combining-categories
480 '((?l . ?l)))
481
482 (setq word-separating-categories ; (2-byte character sets)
483 '((?A . ?K) ; Alpha numeric - Katakana
484 (?A . ?C) ; Alpha numeric - Chinese
485 (?H . ?A) ; Hiragana - Alpha numeric
486 (?H . ?K) ; Hiragana - Katakana
487 (?H . ?C) ; Hiragana - Chinese
488 (?K . ?A) ; Katakana - Alpha numeric
489 (?K . ?C) ; Katakana - Chinese
490 (?C . ?A) ; Chinese - Alpha numeric
491 (?C . ?K) ; Chinese - Katakana
492 ))