X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/093571c374d671607c822dd2e5bedb2ac877ea91..77ab81d0545e980c57c0a35510ade29a9e43b4cd:/admin/charsets/eucjp-ms.awk diff --git a/admin/charsets/eucjp-ms.awk b/admin/charsets/eucjp-ms.awk index 1c508ec9ca..1580352599 100644 --- a/admin/charsets/eucjp-ms.awk +++ b/admin/charsets/eucjp-ms.awk @@ -1,78 +1,104 @@ # eucjp-ms.awk -- Generate a translation table for eucJP-ms. -# Copyright (C) 2004, 2005, 2006, 2007, 2008 +# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 # National Institute of Advanced Industrial Science and Technology (AIST) # Registration Number H13PRO009 -# + # This file is part of GNU Emacs. -# -# GNU Emacs is free software; you can redistribute it and/or modify + +# 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 3, or (at your option) -# any later version. -# +# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. +# along with GNU Emacs. If not, see . -# Comment: +# Commentary: # eucJP-ms is one of eucJP-open encoding defined at this page: -# http://www.opengroup.or.jp/jvc/cde/appendix.html +# http://home.m05.itscom.net/numa/cde/ucs-conv/appendix.html +# This program reads the mapping file EUC-JP-MS (of glibc) and +# generates the Elisp file eucjp-ms.el that defines two translation +# tables `eucjp-ms-decode' and `eucjp-ms-encode'. BEGIN { + FS = "[ \t][ \t]*" + + # STATE: 0/ignore, 1/JISX0208, 2/JISX0208 target range + # 3/JISX0212 4/JISX0212 target range + state = 0; + + JISX0208_FROM1 = "/xad/xa1"; + JISX0208_TO1 = "/xad/xfc"; + JISX0208_FROM2 = "/xf5/xa1"; + JISX0212_FROM = "/x8f/xf3/xf3"; + print ";;; eucjp-ms.el -- translation table for eucJP-ms. -*- no-byte-compile: t -*-"; - print ";;; Automatically genrated from eucJP-13th.txt, eucJP-udc.txt, eucJP-ibmext.txt"; + print ";;; Automatically generated from /usr/share/i18n/charmaps/EUC-JP-MS.gz"; print "(let ((map"; - printf " '(;JISEXT<->UNICODE"; - - tohex["A"] = 10; - tohex["B"] = 11; - tohex["C"] = 12; - tohex["D"] = 13; - tohex["E"] = 14; - tohex["F"] = 15; + print " '(;JISEXT<->UNICODE"; } -function decode_hex(str) { - n = 0; - len = length(str); - for (i = 1; i <= len; i++) - { - c = substr(str, i, 1); - if (c >= "0" && c <= "9") - n = n * 16 + (c - "0"); - else - n = n * 16 + tohex[c]; +function write_entry (unicode) { + if (state == 1) { + if ($2 == JISX0208_FROM1 || $2 == JISX0208_FROM2) + state = 2; + } else if (state == 3) { + if ($2 == JISX0212_FROM) + state = 4; + } + if (state == 2) { + jis = $2 + gsub("/x", "", jis); + printf "\n (#x%s . #x%s)", jis, unicode; + if ($2 == JISX0208_TO1) + state = 1; + } else if (state == 4) { + jis = substr($2, 5, 8); + gsub("/x", "", jis); + printf "\n (#x%s #x%s)", jis, unicode; } - return n; } -/0x8F/ { - code = decode_hex(substr($1, 5, 4)); - code -= 32896; # code -= 0x8080 - printf "\n (#x%04x #x%s)", code, substr($2, 3, 4); - next; + +/^% JIS X 0208/ { + state = 1; + next; +} + +/^% JIS X 0212/ { + state = 3; + next; +} + +/^END CHARMAP/ { + state = 0; + next; +} + +/^/ { + if (state > 0) + write_entry(substr($1, 3, 4)); } -/0x[A-F]/ { - code = decode_hex(substr($1, 3, 4)); - code -= 32896; # code -= 0x8080 - printf "\n (#x%04x . #x%s)", code, substr($2, 3, 4); +/^%IRREVERSIBLE%/ { + if (state > 0) + write_entry(substr($1, 17, 4)); } END { print ")))"; print " (mapc #'(lambda (x)"; - print " (if (integerp (cdr x))"; - print " (setcar x (decode-char 'japanese-jisx0208 (car x)))"; - print " (setcar x (decode-char 'japanese-jisx0212 (car x)))"; - print " (setcdr x (cadr x))))"; + print " (let ((code (logand (car x) #x7F7F)))"; + print " (if (integerp (cdr x))"; + print " (setcar x (decode-char 'japanese-jisx0208 code))"; + print " (setcar x (decode-char 'japanese-jisx0212 code))"; + print " (setcdr x (cadr x)))))"; print " map)"; print " (define-translation-table 'eucjp-ms-decode map)"; print " (mapc #'(lambda (x)"; @@ -80,6 +106,8 @@ END { print " (setcar x (cdr x)) (setcdr x tmp)))"; print " map)"; print " (define-translation-table 'eucjp-ms-encode map))"; + print ""; + print ";; arch-tag: c4191096-288a-4f13-9b2a-ee7a1f11eb4a"; } # arch-tag: d9cc7af7-2d6e-48cd-8eed-a6d25226de7c