;;; euc-cn.el --- Fixed EUC-CN handling routines. ;; Copyright (C) 1997 Mule Project, ;; Powered by Electrotechnical Laboratory, JAPAN. ;; Project Leader: Satoru Tomura ;; Author: KATAYAMA Yoshio ;; Maintainer: KATAYAMA Yoshio ;; Keywords: mule, multilingual, input method, chinese ;; This file will be part of GNU Emacs (in future). ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;;; Code: (defvar cwnn-zhuyin nil) (defconst chinese-sisheng-leading-chars (concat (char-to-string (aref (charset-info 'chinese-sisheng) 6)) (char-to-string (aref (charset-info 'chinese-sisheng) 7)))) (defconst yincoding-pinyin-shengmu '(("" . 0) ("B" . 1) ("C" . 2) ("Ch" . 3) ("D" . 4) ("F" . 5) ("G" . 6) ("H" . 7) ("J" . 8) ("K" . 9) ("L" . 10) ("M" . 11) ("N" . 12) ("P" . 13) ("Q" . 14) ("R" . 15) ("S" . 16) ("Sh" . 17) ("T" . 18) ("W" . 19) ("X" . 20) ("Y" . 21) ("Z" . 22) ("Zh" . 23))) (defconst yincoding-pinyin-yunmu '(("(0@(B" 0) ("(0@(B" 0 0) ("(0@(B" 0 1) ("(0@(B" 0 2) ("(0@(B" 0 3) ("a(0@(B" 1) ("(0!@(B" 1 0) ("(0"@(B" 1 1) ("(0#@(B" 1 2) ("(0$@(B" 1 3) ("ai(0@(B" 2) ("(0!(Bi(0@(B" 2 0) ("(0"(Bi(0@(B" 2 1) ("(0#(Bi(0@(B" 2 2) ("(0$(Bi(0@(B" 2 3) ("an(0@(B" 3) ("(0!(Bn(0@(B" 3 0) ("(0"(Bn(0@(B" 3 1) ("(0#(Bn(0@(B" 3 2) ("(0$(Bn(0@(B" 3 3) ("ang(0@(B" 4) ("(0!(Bng(0@(B" 4 0) ("(0"(Bng(0@(B" 4 1) ("(0#(Bng(0@(B" 4 2) ("(0$(Bng(0@(B" 4 3) ("ao(0@(B" 5) ("(0!(Bo(0@(B" 5 0) ("(0"(Bo(0@(B" 5 1) ("(0#(Bo(0@(B" 5 2) ("(0$(Bo(0@(B" 5 3) ("e(0@(B" 6) ("(0%@(B" 6 0) ("(0&@(B" 6 1) ("(0'@(B" 6 2) ("(0(@(B" 6 3) ("ei(0@(B" 7) ("(0%(Bi(0@(B" 7 0) ("(0&(Bi(0@(B" 7 1) ("(0'(Bi(0@(B" 7 2) ("(0((Bi(0@(B" 7 3) ("en(0@(B" 8) ("(0%(Bn(0@(B" 8 0) ("(0&(Bn(0@(B" 8 1) ("(0'(Bn(0@(B" 8 2) ("(0((Bn(0@(B" 8 3) ("eng(0@(B" 9) ("(0%(Bng(0@(B" 9 0) ("(0&(Bng(0@(B" 9 1) ("(0'(Bng(0@(B" 9 2) ("(0((Bng(0@(B" 9 3) ("er(0@(B" 10) ("(0%(Br(0@(B" 10 0) ("(0&(Br(0@(B" 10 1) ("(0'(Br(0@(B" 10 2) ("(0((Br(0@(B" 10 3) ("i(0@(B" 11) ("(0)@(B" 11 0) ("(0*@(B" 11 1) ("(0+@(B" 11 2) ("(0,@(B" 11 3) ("ia(0@(B" 12) ("i(0!@(B" 12 0) ("i(0"@(B" 12 1) ("i(0#@(B" 12 2) ("i(0$@(B" 12 3) ("ian(0@(B" 13) ("i(0!(Bn(0@(B" 13 0) ("i(0"(Bn(0@(B" 13 1) ("i(0#(Bn(0@(B" 13 2) ("i(0$(Bn(0@(B" 13 3) ("iang(0@(B" 14) ("i(0!(Bng(0@(B" 14 0) ("i(0"(Bng(0@(B" 14 1) ("i(0#(Bng(0@(B" 14 2) ("i(0$(Bng(0@(B" 14 3) ("iao(0@(B" 15) ("i(0!(Bo(0@(B" 15 0) ("i(0"(Bo(0@(B" 15 1) ("i(0#(Bo(0@(B" 15 2) ("i(0$(Bo(0@(B" 15 3) ("ie(0@(B" 16) ("i(0%@(B" 16 0) ("i(0&@(B" 16 1) ("i(0'@(B" 16 2) ("i(0(@(B" 16 3) ("in(0@(B" 17) ("(0)(Bn(0@(B" 17 0) ("(0*(Bn(0@(B" 17 1) ("(0+(Bn(0@(B" 17 2) ("(0,(Bn(0@(B" 17 3) ("ing(0@(B" 18) ("(0)(Bng(0@(B" 18 0) ("(0*(Bng(0@(B" 18 1) ("(0+(Bng(0@(B" 18 2) ("(0,(Bng(0@(B" 18 3) ("iong(0@(B" 19) ("i(0-(Bng(0@(B" 19 0) ("i(0.(Bng(0@(B" 19 1) ("i(0/(Bng(0@(B" 19 2) ("i(00(Bng(0@(B" 19 3) ("iu(0@(B" 20) ("i(01@(B" 20 0) ("i(02@(B" 20 1) ("i(03@(B" 20 2) ("i(04@(B" 20 3) ("m(0@(B" 21) ("m(0@(B" 21 0) ("m(0@(B" 21 1) ("m(0@(B" 21 2) ("m(0@(B" 21 3) ("n(0@(B" 22) ("n(0@(B" 22 0) ("(0=@(B" 22 1) ("(0>@(B" 22 2) ("(0?@(B" 22 3) ("ng(0@(B" 23) ("ng(0@(B" 23 0) ("ng(0@(B" 23 1) ("ng(0@(B" 23 2) ("ng(0@(B" 23 3) ("o(0@(B" 24) ("(0-@(B" 24 0) ("(0.@(B" 24 1) ("(0/@(B" 24 2) ("(00@(B" 24 3) ("ong(0@(B" 25) ("(0-(Bng(0@(B" 25 0) ("(0.(Bng(0@(B" 25 1) ("(0/(Bng(0@(B" 25 2) ("(00(Bng(0@(B" 25 3) ("ou(0@(B" 26) ("(0-(Bu(0@(B" 26 0) ("(0.(Bu(0@(B" 26 1) ("(0/(Bu(0@(B" 26 2) ("(00(Bu(0@(B" 26 3) ("u(0@(B" 27) ("(01@(B" 27 0) ("(02@(B" 27 1) ("(03@(B" 27 2) ("(04@(B" 27 3) ("ua(0@(B" 28) ("u(0!@(B" 28 0) ("u(0"@(B" 28 1) ("u(0#@(B" 28 2) ("u(0$@(B" 28 3) ("uai(0@(B" 29) ("u(0!(Bi(0@(B" 29 0) ("u(0"(Bi(0@(B" 29 1) ("u(0#(Bi(0@(B" 29 2) ("u(0$(Bi(0@(B" 29 3) ("uan(0@(B" 30) ("u(0!(Bn(0@(B" 30 0) ("u(0"(Bn(0@(B" 30 1) ("u(0#(Bn(0@(B" 30 2) ("u(0$(Bn(0@(B" 30 3) ("uang(0@(B" 31) ("u(0!(Bng(0@(B" 31 0) ("u(0"(Bng(0@(B" 31 1) ("u(0#(Bng(0@(B" 31 2) ("u(0$(Bng(0@(B" 31 3) ("ue(0@(B" 32) ("u(0%@(B" 32 0) ("u(0&@(B" 32 1) ("u(0'@(B" 32 2) ("u(0(@(B" 32 3) ("ui(0@(B" 33) ("u(0)@(B" 33 0) ("u(0*@(B" 33 1) ("u(0+@(B" 33 2) ("u(0,@(B" 33 3) ("un(0@(B" 34) ("(01(Bn(0@(B" 34 0) ("(02(Bn(0@(B" 34 1) ("(03(Bn(0@(B" 34 2) ("(04(Bn(0@(B" 34 3) ("uo(0@(B" 35) ("u(0-@(B" 35 0) ("u(0.@(B" 35 1) ("u(0/@(B" 35 2) ("u(00@(B" 35 3) ("(09@(B" 36) ("(05@(B" 36 0) ("(06@(B" 36 1) ("(07@(B" 36 2) ("(08@(B" 36 3) ("(09(Be(0@(B" 37) ("(09%@(B" 37 0) ("(09&@(B" 37 1) ("(09'@(B" 37 2) ("(09(@(B" 37 3) ("0(0@(B" 38) ("1(0@(B" 38 0) ("2(0@(B" 38 1) ("3(0@(B" 38 2) ("4(0@(B" 38 3))) (defconst yincoding-pinyin-table [ 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 1 1 0 1 0 1 0 1 1 1 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 0 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 0 1 0 0 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 0 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 1 0 0 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 1 1 0 1 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 0 1 0 0 0 0 1 1 1 0 0 1 0 0 0 0 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 0 1 0 1 1 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 1 1 0 0 1 0 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 0 1 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 1 0 1 0 1 1 1 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 0 1 0 1 0 1 0 0 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 0 0 1 ]) (defconst yincoding-zhuyin-length (charset-bytes 'chinese-sisheng)) (defconst yincoding-zhuyin-shengmu '(("" . 0) ("(0E(B" . 1) ("(0X(B" . 2) ("(0T(B" . 3) ("(0I(B" . 4) ("(0H(B" . 5) ("(0M(B" . 6) ("(0O(B" . 7) ("(0P(B" . 8) ("(0N(B" . 9) ("(0L(B" . 10) ("(0G(B" . 11) ("(0K(B" . 12) ("(0F(B" . 13) ("(0Q(B" . 14) ("(0V(B" . 15) ("(0Y(B" . 16) ("(0U(B" . 17) ("(0J(B" . 18) ("(0h(B" . 19) ("(0R(B" . 20) ("(0g(B" . 21) ("(0W(B" . 22) ("(0S(B" . 23))) (defconst yincoding-zhuyin-yunmu '(("(0@(B" 0) ("(0A(B" 0 0) ("(0B(B" 0 1) ("(0C(B" 0 2) ("(0D(B" 0 3) ; i ("(0Z@(B" 1) ("(0ZA(B" 1 0) ("(0ZB(B" 1 1) ("(0ZC(B" 1 2) ("(0ZD(B" 1 3) ; a ("(0^@(B" 2) ("(0^A(B" 2 0) ("(0^B(B" 2 1) ("(0^C(B" 2 2) ("(0^D(B" 2 3) ; ai ("(0b@(B" 3) ("(0bA(B" 3 0) ("(0bB(B" 3 1) ("(0bC(B" 3 2) ("(0bD(B" 3 3) ; an ("(0d@(B" 4) ("(0dA(B" 4 0) ("(0dB(B" 4 1) ("(0dC(B" 4 2) ("(0dD(B" 4 3) ; ang ("(0`@(B" 5) ("(0`A(B" 5 0) ("(0`B(B" 5 1) ("(0`C(B" 5 2) ("(0`D(B" 5 3) ; ao ("(0\@(B" 6) ("(0\A(B" 6 0) ("(0\B(B" 6 1) ("(0\C(B" 6 2) ("(0\D(B" 6 3) ; e ("(0_@(B" 7) ("(0_A(B" 7 0) ("(0_B(B" 7 1) ("(0_C(B" 7 2) ("(0_D(B" 7 3) ; ei ("(0c@(B" 8) ("(0cA(B" 8 0) ("(0cB(B" 8 1) ("(0cC(B" 8 2) ("(0cD(B" 8 3) ; en ("(0e@(B" 9) ("(0eA(B" 9 0) ("(0eB(B" 9 1) ("(0eC(B" 9 2) ("(0eD(B" 9 3) ; eng ("(0f@(B" 10) ("(0fA(B" 10 0) ("(0fB(B" 10 1) ("(0fC(B" 10 2) ("(0fD(B" 10 3) ; er ("(0g@(B" 11) ("(0gA(B" 11 0) ("(0gB(B" 11 1) ("(0gC(B" 11 2) ("(0gD(B" 11 3) ; i ("(0gZ@(B" 12) ("(0gZA(B" 12 0) ("(0gZB(B" 12 1) ("(0gZC(B" 12 2) ("(0gZD(B" 12 3) ; ia ("(0gb@(B" 13) ("(0gbA(B" 13 0) ("(0gbB(B" 13 1) ("(0gbC(B" 13 2) ("(0gbD(B" 13 3) ; ian ("(0gd@(B" 14) ("(0gdA(B" 14 0) ("(0gdB(B" 14 1) ("(0gdC(B" 14 2) ("(0gdD(B" 14 3) ; iang ("(0g`@(B" 15) ("(0g`A(B" 15 0) ("(0g`B(B" 15 1) ("(0g`C(B" 15 2) ("(0g`D(B" 15 3) ; iao ("(0g]@(B" 16) ("(0g]A(B" 16 0) ("(0g]B(B" 16 1) ("(0g]C(B" 16 2) ("(0g]D(B" 16 3) ; ie ("(0gc@(B" 17) ("(0gcA(B" 17 0) ("(0gcB(B" 17 1) ("(0gcC(B" 17 2) ("(0gcD(B" 17 3) ; in ("(0ge@(B" 18) ("(0geA(B" 18 0) ("(0geB(B" 18 1) ("(0geC(B" 18 2) ("(0geD(B" 18 3) ; ing ("(0ie@(B" 19) ("(0ieA(B" 19 0) ("(0ieB(B" 19 1) ("(0ieC(B" 19 2) ("(0ieD(B" 19 3) ; iong ("(0ga@(B" 20) ("(0gaA(B" 20 0) ("(0gaB(B" 20 1) ("(0gaC(B" 20 2) ("(0gaD(B" 20 3) ; iu ("(0G@(B" 21) ("(0GA(B" 21 0) ("(0GB(B" 21 1) ("(0GC(B" 21 2) ("(0GD(B" 21 3) ; m ("(0K@(B" 22) ("(0KA(B" 22 0) ("(0KB(B" 22 1) ("(0KC(B" 22 2) ("(0KD(B" 22 3) ; n ("@(0@(B" 23) ("@(0A(B" 23 0) ("@(0B(B" 23 1) ("@(0C(B" 23 2) ("@(0D(B" 23 3) ; ng ("(0[@(B" 24) ("(0[A(B" 24 0) ("(0[B(B" 24 1) ("(0[C(B" 24 2) ("(0[D(B" 24 3) ; o ("(0he@(B" 25) ("(0heA(B" 25 0) ("(0heB(B" 25 1) ("(0heC(B" 25 2) ("(0heD(B" 25 3) ; ong ("(0a@(B" 26) ("(0aA(B" 26 0) ("(0aB(B" 26 1) ("(0aC(B" 26 2) ("(0aD(B" 26 3) ; ou ("(0h@(B" 27) ("(0hA(B" 27 0) ("(0hB(B" 27 1) ("(0hC(B" 27 2) ("(0hD(B" 27 3) ; u ("(0hZ@(B" 28) ("(0hZA(B" 28 0) ("(0hZB(B" 28 1) ("(0hZC(B" 28 2) ("(0hZD(B" 28 3) ; ua ("(0h^@(B" 29) ("(0h^A(B" 29 0) ("(0h^B(B" 29 1) ("(0h^C(B" 29 2) ("(0h^D(B" 29 3) ; uai ("(0hb@(B" 30) ("(0hbA(B" 30 0) ("(0hbB(B" 30 1) ("(0hbC(B" 30 2) ("(0hbD(B" 30 3) ; uan ("(0hd@(B" 31) ("(0hdA(B" 31 0) ("(0hdB(B" 31 1) ("(0hdC(B" 31 2) ("(0hdD(B" 31 3) ; uang ("(0i]@(B" 37) ("(0i]A(B" 37 0) ("(0i]B(B" 37 1) ("(0i]C(B" 37 2) ("(0i]D(B" 37 3) ; ue ("(0h_@(B" 33) ("(0h_A(B" 33 0) ("(0h_B(B" 33 1) ("(0h_C(B" 33 2) ("(0h_D(B" 33 3) ; ui ("(0hc@(B" 34) ("(0hcA(B" 34 0) ("(0hcB(B" 34 1) ("(0hcC(B" 34 2) ("(0hcD(B" 34 3) ; un ("(0h[@(B" 35) ("(0h[A(B" 35 0) ("(0h[B(B" 35 1) ("(0h[C(B" 35 2) ("(0h[D(B" 35 3) ; uo ("(0i@(B" 36) ("(0iA(B" 36 0) ("(0iB(B" 36 1) ("(0iC(B" 36 2) ("(0iD(B" 36 3) ; (09(B ("(0i]@(B" 37) ("(0i]A(B" 37 0) ("(0i]B(B" 37 1) ("(0i]C(B" 37 2) ("(0i]D(B" 37 3) ; (09(Be ("0(0@(B" 38) ("1(0A(B" 38 0) ("2(0B(B" 38 1) ("3(0C(B" 38 2) ("4(0D(B" 38 3) ; undefined YunMu ("(0ib@(B" 39) ("(0ibA(B" 39 0) ("(0ibB(B" 39 1) ("(0ibC(B" 39 2) ("(0ibD(B" 39 3) ; (09(Ban ("(0ic@(B" 40) ("(0icA(B" 40 0) ("(0icB(B" 40 1) ("(0icC(B" 40 2) ("(0icD(B" 40 3) ; (09(Bn )) (defconst yincoding-zhuyin-table [ ;; empty ShengMu ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x9586 ?\x0000 ?\x9592 ?\x9599 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x959b ?\x95a0 ?\x0000 ?\x959e ?\x95a2 ;; ShengMu B ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu C ?\x828b ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0280 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu Ch ?\x838b ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x0380 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu D ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu F ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu G ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu H ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu J ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x08a4 ?\x0000 ?\x0000 ?\x08a7 ?\x0000 ?\x08a5 ?\x0000 ?\x08a8 ?\x0000 ?\x889b ?\x88a0 ?\x8000 ?\x889e ?\x88a2 ;; ShengMu K ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu L ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu M ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu N ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu P ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu Q ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0ea4 ?\x0000 ?\x0000 ?\x0ea7 ?\x0000 ?\x0ea5 ?\x0000 ?\x0ea8 ?\x0000 ?\x8e9b ?\x8ea0 ?\x8000 ?\x8e9e ?\x8ea2 ;; ShengMu R ?\x8f8b ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x0f80 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu S ?\x908b ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x1080 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu Sh ?\x918b ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x1180 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu T ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu W ?\x939b ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x1380 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu X ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x14a4 ?\x0000 ?\x0000 ?\x14a7 ?\x0000 ?\x14a5 ?\x0000 ?\x14a8 ?\x0000 ?\x949b ?\x94a0 ?\x8000 ?\x949e ?\x94a2 ;; ShengMu Y ?\x958b ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0090 ?\x0000 ?\x9591 ?\x9592 ?\x0000 ?\x1580 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x1588 ?\x1589 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0093 ?\x8000 ?\x00a4 ?\x0000 ?\x0000 ?\x00a7 ?\x0000 ?\x00a5 ?\x0000 ?\x00a8 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu Z ?\x968b ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x1680 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ;; ShengMu Zh ?\x978b ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x1780 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ]) (defun encode-euc-cwnn-region (beg end) "Encode the text in the current region to EUC-cWnn. Return the length of resulting text." (interactive "r") (let (sylend s y z (enable-multibyte-characters t)) (save-excursion (save-restriction (narrow-to-region beg end) (goto-char (point-min)) (while (< (point) (point-max)) (cond ((looking-at "[A-Za-z(0!(B-(0?(B]+(0@(B") ;; PinYin (setq sylend (match-end 0)) (if (and (looking-at "[B-Z]h?") (setq s (assoc (buffer-substring (match-beginning 0) (match-end 0)) yincoding-pinyin-shengmu))) (setq s (cdr s) y (buffer-substring (match-end 0) sylend)) (setq s 0 y (buffer-substring (point) sylend))) (if (and (setq y (assoc y yincoding-pinyin-yunmu)) (= (aref yincoding-pinyin-table (+ (* 39 s) (nth 1 y))) 1)) (progn (delete-region (point) sylend) (insert (char-to-string (+ (* 2 (nth 1 y)) 32 (if (nth 2 y) 1 0))) (char-to-string (+ (* 4 (if (= s 0) 20 s)) 156 (if (nth 2 y) (nth 2 y) 0))))) (encode-euc-cwnn-1-char))) ((looking-at "[(0E(B-(0i(B@0-4]+[(0@ABCD(B]") ;; ZhuYin (setq sylend (match-end 0)) (if (setq y (assoc (buffer-substring (point) sylend) yincoding-zhuyin-yunmu)) (setq s 0) (if (setq s (assoc (char-to-string (following-char)) yincoding-zhuyin-shengmu)) (setq s (cdr s) y (buffer-substring (+ (point) yincoding-zhuyin-length) sylend)) (setq s 0 y (buffer-substring (point) sylend))) (setq y (assoc y yincoding-zhuyin-yunmu))) (if (and y (/= (logand (setq z (aref yincoding-zhuyin-table (+ (* 41 s) (nth 1 y)))) ?\x8000) 0)) (progn (delete-region (point) sylend) (if (/= (logand z ?\x80) 0) (setq s (logand (lsh z -8) 127) y (list nil (logand z 127) (nth 2 y)))) (insert (+ (* 2 (nth 1 y)) 32 (if (nth 2 y) 1 0)) (+ (* 4 (if (= s 0) 20 s)) 156 (if (nth 2 y) (nth 2 y) 0)))) (encode-euc-cwnn-1-char))) (t (encode-euc-cwnn-1-char)))) (- (point-max) (point-min)))))) (defun encode-euc-cwnn-1-char () (let ((enable-multibyte-characters nil)) (cond ((eq (following-char) (charset-id 'chinese-gb2312)) (delete-char 1) (forward-char 2)) ((looking-at chinese-sisheng-leading-chars) (delete-region (match-beginning 0) (match-end 0)) (insert 0) (forward-char)) (t (insert 0) (forward-char))))) (defun pre-write-encode-euc-cwnn (from to) (let ((buf (current-buffer)) (work (get-buffer-create " *pre-write-encoding-work*"))) (set-buffer work) (erase-buffer) (if (stringp from) (insert from) (insert-buffer-substring buf from to)) (encode-euc-cwnn-region 1 (point-max)) nil)) (defun decode-euc-cwnn-region (beg end) "Decode EUC-cWnn encoded text in the current region. Return the length of resulting text." (interactive "r") (prog1 (let (c cc s y ss (enable-multibyte-characters nil)) (save-restriction (narrow-to-region beg end) (goto-char (point-min)) (while (< (point) (point-max)) (setq c (following-char)) (cond ((eq c 0) (delete-char 1) (if (>= (following-char) 128) (insert chinese-sisheng-leading-chars)) (forward-char)) ((>= c 128) (insert (charset-id 'chinese-gb2312)) (forward-char 2) (if (< (setq c (preceding-char)) 128) (progn (delete-char -1) (insert (+ c 128)) (forward-char)))) (t (delete-char 1) (setq cc (logand (following-char) 127)) (delete-char 1) (setq s (+ (lsh (- cc 32) -2) 1) y (lsh (- c 32) -1) ss (+ (logand c 1) (logand cc 3))) (if cwnn-zhuyin (progn (setq c (aref yincoding-zhuyin-table (+ (* 41 s) y))) (if (eq (logand c ?\x8080) ?\x80) (setq s (lsh c -8) y (logand c 127))) (if (and (eq s 20) (eq (aref yincoding-pinyin-table (+ (* 39 s) y)) 0)) (setq s 0)) (insert (car (nth s yincoding-zhuyin-shengmu)) (car (nth (+ (* 5 y) ss) yincoding-zhuyin-yunmu)))) (if (and (eq s 20) (eq (aref yincoding-pinyin-table (+ (* 39 s) y)) 0)) (setq s 0)) (insert (car (nth s yincoding-pinyin-shengmu)) (car (nth (+ (* 5 y) ss) yincoding-pinyin-yunmu))))))) (- (point-max) (point-min)))) (if (looking-at "\0\0") (forward-char 2)))) (defun post-read-decode-euc-cwnn (len) (let ((pos (point)) (buffer-modified-p (buffer-modified-p))) (prog1 (decode-euc-cwnn-region pos (+ pos len)) (set-buffer-modified-p buffer-modified-p)))) (make-coding-system 'fixed-euc-cn 5 ?W "Coding System for fixed EUC Japanese") (put 'fixed-euc-cn 'post-read-conversion 'post-read-decode-euc-cwnn) (put 'fixed-euc-cn 'pre-write-conversion 'pre-write-encode-euc-cwnn) ;;; euc-cn.el ends here.