]> code.delx.au - gnu-emacs/blobdiff - lisp/international/ucs-tables.el
Merge from emacs--rel--22
[gnu-emacs] / lisp / international / ucs-tables.el
index 7aa05ca799f338234c24f93b60b6724dca9aa173..222209582bd04c1fb5a9d3b9ae4ec91f9fa672df 100644 (file)
 ;;; ucs-tables.el --- translation to, from and via Unicode  -*- coding: iso-2022-7bit -*-
 
-;; Copyright (C) 2001  Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2005, 2006, 2007  Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+;;   National Institute of Advanced Industrial Science and Technology (AIST)
+;;   Registration Number H14PRO021
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: i18n
 
-;; This file is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; 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.
 
-;; This file is distributed in the hope that it will be useful,
+;; 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.
+;; 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.
 
 ;;; Commentary:
 
 ;; This file provides tables mapping between Unicode numbers and
-;; emacs-mule characters from the iso8859 charsets.  These are used to
-;; construct other mappings between the Mule iso8859 charsets and the
-;; emacs-unicode charsets and also a table that unifies iso8859
-;; characters using a single charset as far as possible.  These tables
-;; can be used by latin1-disp.el to display some Unicode characters
-;; without a Unicode font and by utf-8.el to unify Latin-N as far as
-;; possible into Latin-1 on encoding.
+;; emacs-mule characters from the iso-8859 charsets (and others).  It
+;; also provides some auxiliary functions.
+
+;; These tables are used to construct other mappings between the Mule
+;; iso8859 charsets and the emacs-unicode charsets and a table that
+;; unifies iso-8859 characters using a single charset as far as
+;; possible.  These tables are used by latin1-disp.el to display some
+;; Unicode characters without a Unicode font and by utf-8.el to unify
+;; Latin-N as far as possible on encoding.
+
+;; More drastically, they can be used to unify 8859 into Latin-1 plus
+;; mule-unicode-0100-24ff on decoding, with the corresponding
+;; adjustments on encoding; see `ucs-unify-8859'.  Be wary of using
+;; unification when, for instance, editing Lisp files such as this one
+;; which are supposed to contain distinct 8859 charsets.  Also, it can
+;; make reading and writing of emacs-mule and iso-2022-based encodings
+;; not idempotent.
+
+;; Global minor modes are provided to unify on encoding and decoding.
+;; These could be extended to non-iso-8859 charsets.  However 8859 is
+;; all that users normally care about unifying although, for instance,
+;; Greek occurs in as many as nine Emacs charsets.
+
+;; The translation-table `utf-translation-table-for-encode' is
+;; populated, which could be used for more general unification on
+;; decoding.  This is used by the `mule-utf-8' coding system to encode
+;; extra characters, and also by the coding systems set up by
+;; code-pages.el.  The decoding tables here take account of
+;; `utf-fragment-on-decoding' which may specify decoding Greek and
+;; Cyrillic into 8859 charsets.
+
+;; Unification also arranges for `translation-table-for-input' to be
+;; set either globally or locally.  This is used to translate input
+;; characters appropriately for the buffer's coding system (if
+;; possible).  Unification on decoding sets it globally to translate
+;; to Unicode.  Unification on encoding uses hooks to set it up
+;; locally to buffers.  Thus in the latter case, typing `"a' into a
+;; Latin-1 buffer using the `latin-2-prefix' method translates the
+;; generated latin-iso8859-2 `\e,Bd\e(B' into latin-iso8859-1 `\e,Ad\e(B'.
+
+;; NB, this code depends on the default value of
+;; `enable-character-translation'.  (Making it nil would anyway lead
+;; to inconsistent behaviour between CCL-based coding systems which
+;; use explicit translation tables and the rest.)
+
+;; Command `ucs-insert' is convenient for inserting a given unicode.
+;; (See also the `ucs' input method.)
 
 ;;; Code:
 
+;;; Define tables, to be populated later.
+
 (defvar ucs-mule-8859-to-ucs-table (make-translation-table)
-  "Translation table from Emacs ISO-8859 characters to Unicode.
+  "Char table from Emacs ISO-8859 characters to Unicode.
 This maps Emacs characters from the non-Latin-1
 ...-iso8859-... charsets to their Unicode code points.  This is a
 many-to-one mapping.")
 
-(defvar ucs-ucs-to-mule-8859-table (make-translation-table)
-  "Translation table from Unicode to Emacs ISO-8859 characters.
-This maps Unicode code points to corresponding Emacs characters from
-the ...-iso8859-... charsets.  This is made a one-to-one mapping where
-the same character occurs in more than one set by preferring the Emacs
-iso-8859-N character with lowest N .")
-
 (defvar ucs-mule-8859-to-mule-unicode (make-translation-table)
-  "Translation table from Emacs ISO-8859 characters to Mule Unicode.
+  "Char table from Emacs ISO-8859 characters to Mule Unicode.
 This maps Emacs characters from the non-Latin-1
 ...-iso8859-... charsets to characters from the
 mule-unicode-... charsets.  This is a many-to-one mapping.  The
 characters translated to are suitable for encoding using the
 `mule-utf-8' coding system.")
 
-(defvar ucs-mule-unicode-to-mule-8859 (make-translation-table)
-  "Translation table from Mule Unicode to Emacs ISO-8859 characters.
-This maps non-Latin-1 Emacs characters from the
-mule-unicode-... charsets used by the `mule-utf-8' coding system to
-characters from the ...-iso8859-... charsets.  This is made a
-one-to-one mapping where the same character occurs in more than one
-set by preferring the Emacs iso-8859-N character with lowest N.")
+;; (defvar ucs-ucs-to-mule-8859-table (make-translation-table)
+;;   "Translation table from Unicode to Emacs ISO-8859 characters.
+;; This maps Unicode code points to corresponding Emacs characters from
+;; the ...-iso8859-... charsets.  This is made a one-to-one mapping where
+;; the same character occurs in more than one set by preferring the Emacs
+;; iso-8859-N character with lowest N.")
 
-(defvar ucs-latin-1-unification-table (make-translation-table)
-  "Translation table from other ISO-8859 characters to Latin-1.
-This maps Emacs characters from the non-Latin-1
-...-iso8859-... charsets to their equivalent Latin-1 characters, when
-they have an equivalent.  E.g. capital A with diaresis is code point
-0xC4 in both Latin-1 and Latin-2, so this table maps Emacs character
-0x944 to 0x8c4.  This is a many-to-one mapping.")
-
-(defcustom ucs-preferred-8859-set 'latin-iso8859-1
-  "Preferred charset to use for the `ucs-latin-1-unification-table'
-target.  Only a Latin-N set makes sense.  You might want to change
-this from the default latin-iso8859-1 to match your preferred coding
-system in a non-Latin-1 environment."
-  :type '(choice (const latin-iso8859-15)
-                (const latin-iso8859-14)
-                (const latin-iso8859-9)
-                (const latin-iso8859-5)
-                (const latin-iso8859-4)
-                (const latin-iso8859-3)
-                (const latin-iso8859-2)
-                (const latin-iso8859-1)))
+;; (defvar ucs-mule-unicode-to-mule-8859 (make-translation-table)
+;;   "Translation table from Mule Unicode to Emacs ISO-8859 characters.
+;; This maps non-Latin-1 Emacs characters from the
+;; mule-unicode-... charsets used by the `mule-utf-8' coding system to
+;; characters from the ...-iso8859-... charsets.  This is made a
+;; one-to-one mapping where the same character occurs in more than one
+;; set by preferring the Emacs iso-8859-N character with lowest N.")
+
+(defvar ucs-8859-1-encode-table nil
+  "Used as `translation-table-for-encode' for iso-8859-2.
+Translates from the iso8859 charsets and `mule-unicode-0100-24ff'.")
+
+(defvar ucs-8859-2-encode-table nil
+  "Used as `translation-table-for-encode' for iso-8859-2.
+Translates from the iso8859 charsets and `mule-unicode-0100-24ff'.")
+
+(defvar ucs-8859-3-encode-table nil
+  "Used as `translation-table-for-encode' for iso-8859-3.
+Translates from the iso8859 charsets and `mule-unicode-0100-24ff'.")
+
+(defvar ucs-8859-4-encode-table nil
+  "Used as `translation-table-for-encode' for iso-8859-4.
+Translates from the iso8859 charsets and `mule-unicode-0100-24ff'.")
+
+(defvar ucs-8859-5-encode-table nil
+  "Used as `translation-table-for-encode' for iso-8859-5.
+Translates from the iso8859 charsets and `mule-unicode-0100-24ff'.")
+
+(defvar ucs-8859-7-encode-table nil
+  "Used as `translation-table-for-encode' for iso-8859-7.
+Translates from the iso8859 charsets and `mule-unicode-0100-24ff'.")
+
+(defvar ucs-8859-8-encode-table nil
+  "Used as `translation-table-for-encode' for iso-8859-8.
+Translates from the iso8859 charsets and `mule-unicode-0100-24ff'.")
+
+(defvar ucs-8859-9-encode-table nil
+  "Used as `translation-table-for-encode' for iso-8859-9.
+Translates from the iso8859 charsets and `mule-unicode-0100-24ff'.")
+
+(defvar ucs-8859-14-encode-table nil
+  "Used as `translation-table-for-encode' for iso-8859-14.
+Translates from the iso8859 charsets and `mule-unicode-0100-24ff'.")
+
+(defvar ucs-8859-15-encode-table nil
+  "Used as `translation-table-for-encode' for iso-8859-15.
+Translates from the iso8859 charsets and `mule-unicode-0100-24ff'.")
+
+(setq translation-table-for-input (make-translation-table))
+;; It will normally be set locally, before the major mode is invoked.
+(put 'translation-table-for-input 'permanent-local t)
+
+(define-translation-table 'ucs-translation-table-for-decode)
+
+;;; Set up the tables.
+
+;; Most of these tables were derived from ones in Mule-UCS.
 
 ;; There doesn't seem to be a need to make these let bindings into
 ;; defvars, so we'll let the data get GC'ed.
@@ -480,55 +555,55 @@ system in a non-Latin-1 environment."
       (ucs-8859-6-alist
        '((?\e,G \e(B . ?\x00A0)  ;; NO-BREAK SPACE
         (?\e,G$\e(B . ?\x00A4)   ;; CURRENCY SIGN
-        (?\e,G,\e(B . ?\x060C) ;; ARABIC COMMA
+        (?\e,G,\e(B . ?\x060C)   ;; ARABIC COMMA
         (?\e,G-\e(B . ?\x00AD)   ;; SOFT HYPHEN
-        (?\e,G;\e(B . ?\x061B) ;; ARABIC SEMICOLON
-        (?\e,G?\e(B . ?\x061F) ;; ARABIC QUESTION MARK
-        (?\e,GA\e(B . ?\x0621) ;; ARABIC LETTER HAMZA
-        (?\e,GB\e(B . ?\x0622) ;; ARABIC LETTER ALEF WITH MADDA ABOVE
-        (?\e,GC\e(B . ?\x0623) ;; ARABIC LETTER ALEF WITH HAMZA ABOVE
-        (?\e,GD\e(B . ?\x0624) ;; ARABIC LETTER WAW WITH HAMZA ABOVE
-        (?\e,GE\e(B . ?\x0625) ;; ARABIC LETTER ALEF WITH HAMZA BELOW
-        (?\e,GF\e(B . ?\x0626) ;; ARABIC LETTER YEH WITH HAMZA ABOVE
-        (?\e,GG\e(B . ?\x0627) ;; ARABIC LETTER ALEF
-        (?\e,GH\e(B . ?\x0628) ;; ARABIC LETTER BEH
-        (?\e,GI\e(B . ?\x0629) ;; ARABIC LETTER TEH MARBUTA
-        (?\e,GJ\e(B . ?\x062A) ;; ARABIC LETTER TEH
-        (?\e,GK\e(B . ?\x062B) ;; ARABIC LETTER THEH
-        (?\e,GL\e(B . ?\x062C) ;; ARABIC LETTER JEEM
-        (?\e,GM\e(B . ?\x062D) ;; ARABIC LETTER HAH
-        (?\e,GN\e(B . ?\x062E) ;; ARABIC LETTER KHAH
-        (?\e,GO\e(B . ?\x062F) ;; ARABIC LETTER DAL
-        (?\e,GP\e(B . ?\x0630) ;; ARABIC LETTER THAL
-        (?\e,GQ\e(B . ?\x0631) ;; ARABIC LETTER REH
-        (?\e,GR\e(B . ?\x0632) ;; ARABIC LETTER ZAIN
-        (?\e,GS\e(B . ?\x0633) ;; ARABIC LETTER SEEN
-        (?\e,GT\e(B . ?\x0634) ;; ARABIC LETTER SHEEN
-        (?\e,GU\e(B . ?\x0635) ;; ARABIC LETTER SAD
-        (?\e,GV\e(B . ?\x0636) ;; ARABIC LETTER DAD
-        (?\e,GW\e(B . ?\x0637) ;; ARABIC LETTER TAH
-        (?\e,GX\e(B . ?\x0638) ;; ARABIC LETTER ZAH
-        (?\e,GY\e(B . ?\x0639) ;; ARABIC LETTER AIN
-        (?\e,GZ\e(B . ?\x063A) ;; ARABIC LETTER GHAIN
-        (?\e,G`\e(B . ?\x0640) ;; ARABIC TATWEEL
-        (?\e,Ga\e(B . ?\x0641) ;; ARABIC LETTER FEH
-        (?\e,Gb\e(B . ?\x0642) ;; ARABIC LETTER QAF
-        (?\e,Gc\e(B . ?\x0643) ;; ARABIC LETTER KAF
-        (?\e,Gd\e(B . ?\x0644) ;; ARABIC LETTER LAM
-        (?\e,Ge\e(B . ?\x0645) ;; ARABIC LETTER MEEM
-        (?\e,Gf\e(B . ?\x0646) ;; ARABIC LETTER NOON
-        (?\e,Gg\e(B . ?\x0647) ;; ARABIC LETTER HEH
-        (?\e,Gh\e(B . ?\x0648) ;; ARABIC LETTER WAW
-        (?\e,Gi\e(B . ?\x0649) ;; ARABIC LETTER ALEF MAKSURA
-        (?\e,Gj\e(B . ?\x064A) ;; ARABIC LETTER YEH
-        (?\e,Gk\e(B . ?\x064B) ;; ARABIC FATHATAN
-        (?\e,Gl\e(B . ?\x064C) ;; ARABIC DAMMATAN
-        (?\e,Gm\e(B . ?\x064D) ;; ARABIC KASRATAN
-        (?\e,Gn\e(B . ?\x064E) ;; ARABIC FATHA
-        (?\e,Go\e(B . ?\x064F) ;; ARABIC DAMMA
-        (?\e,Gp\e(B . ?\x0650) ;; ARABIC KASRA
-        (?\e,Gq\e(B . ?\x0651) ;; ARABIC SHADDA
-        (?\e,Gr\e(B . ?\x0652) ;; ARABIC SUKUN
+        (?\e,G;\e(B . ?\x061B)   ;; ARABIC SEMICOLON
+        (?\e,G?\e(B . ?\x061F)   ;; ARABIC QUESTION MARK
+        (?\e,GA\e(B . ?\x0621)   ;; ARABIC LETTER HAMZA
+        (?\e,GB\e(B . ?\x0622)   ;; ARABIC LETTER ALEF WITH MADDA ABOVE
+        (?\e,GC\e(B . ?\x0623)   ;; ARABIC LETTER ALEF WITH HAMZA ABOVE
+        (?\e,GD\e(B . ?\x0624)   ;; ARABIC LETTER WAW WITH HAMZA ABOVE
+        (?\e,GE\e(B . ?\x0625)   ;; ARABIC LETTER ALEF WITH HAMZA BELOW
+        (?\e,GF\e(B . ?\x0626)   ;; ARABIC LETTER YEH WITH HAMZA ABOVE
+        (?\e,GG\e(B . ?\x0627)   ;; ARABIC LETTER ALEF
+        (?\e,GH\e(B . ?\x0628)   ;; ARABIC LETTER BEH
+        (?\e,GI\e(B . ?\x0629)   ;; ARABIC LETTER TEH MARBUTA
+        (?\e,GJ\e(B . ?\x062A)   ;; ARABIC LETTER TEH
+        (?\e,GK\e(B . ?\x062B)   ;; ARABIC LETTER THEH
+        (?\e,GL\e(B . ?\x062C)   ;; ARABIC LETTER JEEM
+        (?\e,GM\e(B . ?\x062D)   ;; ARABIC LETTER HAH
+        (?\e,GN\e(B . ?\x062E)   ;; ARABIC LETTER KHAH
+        (?\e,GO\e(B . ?\x062F)   ;; ARABIC LETTER DAL
+        (?\e,GP\e(B . ?\x0630)   ;; ARABIC LETTER THAL
+        (?\e,GQ\e(B . ?\x0631)   ;; ARABIC LETTER REH
+        (?\e,GR\e(B . ?\x0632)   ;; ARABIC LETTER ZAIN
+        (?\e,GS\e(B . ?\x0633)   ;; ARABIC LETTER SEEN
+        (?\e,GT\e(B . ?\x0634)   ;; ARABIC LETTER SHEEN
+        (?\e,GU\e(B . ?\x0635)   ;; ARABIC LETTER SAD
+        (?\e,GV\e(B . ?\x0636)   ;; ARABIC LETTER DAD
+        (?\e,GW\e(B . ?\x0637)   ;; ARABIC LETTER TAH
+        (?\e,GX\e(B . ?\x0638)   ;; ARABIC LETTER ZAH
+        (?\e,GY\e(B . ?\x0639)   ;; ARABIC LETTER AIN
+        (?\e,GZ\e(B . ?\x063A)   ;; ARABIC LETTER GHAIN
+        (?\e,G`\e(B . ?\x0640)   ;; ARABIC TATWEEL
+        (?\e,Ga\e(B . ?\x0641)   ;; ARABIC LETTER FEH
+        (?\e,Gb\e(B . ?\x0642)   ;; ARABIC LETTER QAF
+        (?\e,Gc\e(B . ?\x0643)   ;; ARABIC LETTER KAF
+        (?\e,Gd\e(B . ?\x0644)   ;; ARABIC LETTER LAM
+        (?\e,Ge\e(B . ?\x0645)   ;; ARABIC LETTER MEEM
+        (?\e,Gf\e(B . ?\x0646)   ;; ARABIC LETTER NOON
+        (?\e,Gg\e(B . ?\x0647)   ;; ARABIC LETTER HEH
+        (?\e,Gh\e(B . ?\x0648)   ;; ARABIC LETTER WAW
+        (?\e,Gi\e(B . ?\x0649)   ;; ARABIC LETTER ALEF MAKSURA
+        (?\e,Gj\e(B . ?\x064A)   ;; ARABIC LETTER YEH
+        (?\e,Gk\e(B . ?\x064B)   ;; ARABIC FATHATAN
+        (?\e,Gl\e(B . ?\x064C)   ;; ARABIC DAMMATAN
+        (?\e,Gm\e(B . ?\x064D)   ;; ARABIC KASRATAN
+        (?\e,Gn\e(B . ?\x064E)   ;; ARABIC FATHA
+        (?\e,Go\e(B . ?\x064F)   ;; ARABIC DAMMA
+        (?\e,Gp\e(B . ?\x0650)   ;; ARABIC KASRA
+        (?\e,Gq\e(B . ?\x0651)   ;; ARABIC SHADDA
+        (?\e,Gr\e(B . ?\x0652)   ;; ARABIC SUKUN
         ))
 
       (ucs-8859-7-alist
@@ -655,6 +730,31 @@ system in a non-Latin-1 environment."
         (?\\e,H<\e(B . ?\x00BC) ;; VULGAR FRACTION ONE QUARTER
         (?\\e,H=\e(B . ?\x00BD) ;; VULGAR FRACTION ONE HALF
         (?\\e,H>\e(B . ?\x00BE) ;; VULGAR FRACTION THREE QUARTERS
+        ;; These are commented out since the current 8859-8 standard
+        ;; does not yet define these codepoints, although there are
+        ;; drafts which do).
+;       (?\\e,H@\e(B . ?\x05B0) ;; HEBREW POINT SHEVA
+;       (?\\e,HA\e(B . ?\x05B1) ;; HEBREW POINT HATAF SEGOL
+;       (?\\e,HB\e(B . ?\x05B2) ;; HEBREW POINT HATAF PATAH
+;       (?\\e,HC\e(B . ?\x05B3) ;; HEBREW POINT HATAF QAMATS
+;       (?\\e,HD\e(B . ?\x05B4) ;; HEBREW POINT HIRIQ
+;       (?\\e,HE\e(B . ?\x05B5) ;; HEBREW POINT TSERE
+;       (?\\e,HF\e(B . ?\x05B6) ;; HEBREW POINT SEGOL
+;       (?\\e,HG\e(B . ?\x05B7) ;; HEBREW POINT PATAH
+;       (?\\e,HH\e(B . ?\x05B8) ;; HEBREW POINT QAMATS
+;       (?\\e,HI\e(B . ?\x05B9) ;; HEBREW POINT HOLAM
+;       (?\\e,HK\e(B . ?\x05BB) ;; HEBREW POINT QUBUTS
+;       (?\\e,HL\e(B . ?\x05BC) ;; HEBREW POINT DAGESH
+;       (?\\e,HM\e(B . ?\x05BD) ;; HEBREW POINT METEG
+;       (?\\e,HN\e(B . ?\x05BE) ;; HEBREW POINT MAQAF
+;       (?\\e,HO\e(B . ?\x05BF) ;; HEBREW POINT RAFE
+;       (?\\e,HP\e(B . ?\x05C0) ;; HEBREW PUNCTUATION PASEQ
+;       (?\\e,HQ\e(B . ?\x05C1) ;; HEBREW POINT SHIN DOT
+;       (?\\e,HR\e(B . ?\x05C2) ;; HEBREW POINT SIN DOT
+;       (?\\e,HS\e(B . ?\x05C3) ;; HEBREW PUNCTUATION SOF PASUQ
+        (?\\e,H[\e(B . ?\x202D) ;; LEFT-TO-RIGHT OVERRIDE
+        (?\\e,H\\e(B . ?\x202E) ;; RIGHT-TO-LEFT OVERRIDE
+        (?\\e,H]\e(B . ?\x202C) ;; POP DIRECTIONAL FORMATTING
         (?\\e,H_\e(B . ?\x2017) ;; DOUBLE LOW LINE
         (?\\e,H`\e(B . ?\x05D0) ;; HEBREW LETTER ALEF
         (?\\e,Ha\e(B . ?\x05D1) ;; HEBREW LETTER BET
@@ -683,6 +783,8 @@ system in a non-Latin-1 environment."
         (?\\e,Hx\e(B . ?\x05E8) ;; HEBREW LETTER RESH
         (?\\e,Hy\e(B . ?\x05E9) ;; HEBREW LETTER SHIN
         (?\\e,Hz\e(B . ?\x05EA) ;; HEBREW LETTER TAV
+        (?\\e,H{\e(B . ?\x202A) ;; LEFT-TO-RIGHT EMBEDDING
+        (?\\e,H|\e(B . ?\x202B) ;; RIGHT-TO-LEFT EMBEDDING
         (?\\e,H}\e(B . ?\x200E) ;; LEFT-TO-RIGHT MARK
         (?\\e,H~\e(B . ?\x200F) ;; RIGHT-TO-LEFT MARK
         ))
@@ -991,89 +1093,1454 @@ system in a non-Latin-1 environment."
           (push (cons (make-char 'latin-iso8859-1 (- i 128)) i)
                 l)
           (setq i (1+ i)))
-        (nreverse l)))
-      )
-
-  (dolist (cs (list ucs-8859-15-alist ucs-8859-14-alist
-                   ucs-8859-9-alist ucs-8859-8-alist ucs-8859-7-alist
-                   ucs-8859-6-alist ucs-8859-5-alist ucs-8859-4-alist
-                   ucs-8859-3-alist ucs-8859-2-alist
-                   (or (cdr-safe 
-                        (assq ucs-preferred-8859-set
-                              '((latin-iso8859-15 . ucs-8859-15-alist)
-                                (latin-iso8859-14 . ucs-8859-14-alist)
-                                (latin-iso8859-9 . ucs-8859-9-alist)
-                                (latin-iso8859-5 . ucs-8859-5-alist)
-                                (latin-iso8859-4 . ucs-8859-4-alist)
-                                (latin-iso8859-3 . ucs-8859-3-alist)
-                                (latin-iso8859-2 . ucs-8859-2-alist))))
-                       ucs-8859-1-alist)))
-    (dolist (pair cs)
-      (aset ucs-mule-8859-to-ucs-table (car pair) (cdr pair))
-      (aset ucs-ucs-to-mule-8859-table (cdr pair) (car pair))
-      (aset ucs-mule-8859-to-mule-unicode
-           (car pair) (decode-char 'ucs (cdr pair)))
-      (aset ucs-mule-unicode-to-mule-8859
-           (decode-char 'ucs (cdr pair)) (car pair))))
-
-  (map-char-table
-   (lambda (c cu)
-     (when (and cu (< cu 256))
-       (aset ucs-latin-1-unification-table
-            c (make-char 'latin-iso8859-1 (- cu 128)))))
-   ucs-mule-8859-to-ucs-table)
-  )
-
-;; Register them for use in CCL.
-(define-translation-table 'ucs-mule-8859-to-mule-unicode
-  ucs-mule-8859-to-mule-unicode)
-(define-translation-table 'ucs-latin-1-unification-table
-  ucs-latin-1-unification-table)
-
-(defun ucs-translate-region (beg end table)
-  (save-restriction
-    (narrow-to-region beg end)
-    (goto-char (point-min))
-    (while (not (eobp))
-      (let* ((c (char-after))
-            (c2 (aref table c)))
-            (if c2
-                (progn 
-                  (delete-char 1)
-                  (insert c2))    
-              (forward-char))))))
-
-(defun ucs-unify-to-latin-1 (&optional arg)
-  "Re-set up the Latin-1 coding system to encode unified characters.
-When this is done, text encoded using the `iso-latin-1' coding system
-is first translated using the translation table
-`ucs-latin-1-unification-table'.  This converts ISO-8859-N (N>1)
-characters to their Latin-1 equivalents when such equivalents exist.
-Thus a buffer which contains a Latin-2 \"small y with acute\" (code
-point 253) will be safely encoded to that code point since it occurs
-there in Latin-1.  On the other hand, \"small t with cedilla\" does
-not occur in Latin-1 and so can't be safely encoded when this
-unification is done.
-
-With optional ARG, turn off such unification."
-  (if arg
-      (make-coding-system
-       'iso-latin-1 2 ?1
-       "ISO 2022 based 8-bit encoding for Latin-1 (MIME:ISO-8859-1)"
-       '(ascii latin-iso8859-1 nil nil
-              nil nil nil nil nil nil nil nil nil nil nil nil t)
-       `((safe-charsets ascii latin-iso8859-1)
-        (mime-charset . iso-8859-1)
-        (safe-chars . ucs-latin-1-unification-table)
-        (translation-table-for-encode . ,ucs-latin-1-unification-table)))
-    (make-coding-system
-     'iso-latin-1 2 ?1
-     "ISO 2022 based 8-bit encoding for Latin-1 (MIME:ISO-8859-1)"
-     '(ascii latin-iso8859-1 nil nil
-            nil nil nil nil nil nil nil nil nil nil nil nil t)
-     '((safe-charsets ascii latin-iso8859-1)
-       (mime-charset . iso-8859-1)))))
+        (nreverse l))))
+
+  ;; Note: Here, using decode-char is safe because
+  ;; utf-fragment-on-decoding is by default nil, thus the translation
+  ;; table `utf-translation-table-for-decode' does nothing.
+
+  ;; Convert the lists to the basic char tables.
+  (dolist (n (list 15 14 9 8 7 6 5 4 3 2 1))
+    (let ((alist (symbol-value (intern (format "ucs-8859-%d-alist" n)))))
+      (dolist (pair alist)
+       (let ((mule (car pair))
+             (uc (cdr pair))
+             (mu (decode-char 'ucs (cdr pair))))
+         (aset ucs-mule-8859-to-ucs-table mule uc)
+         ;;      (aset ucs-ucs-to-mule-8859-table uc mule)
+         ;;      (aset ucs-mule-unicode-to-mule-8859 mu mule)
+         (aset ucs-mule-8859-to-mule-unicode mule mu)
+         (aset ucs-mule-to-mule-unicode mule mu)))))
+
+  ;; Derive tables that can be used as per-coding-system
+  ;; `translation-table-for-encode's.
+  ;; N.B., there's no 8859-6 coding system.
+  (dolist (n (list 15 14 9 8 7 5 4 3 2 1))
+    (let* ((alist (symbol-value (intern (format "ucs-8859-%d-alist" n))))
+          (encode-translator (set (intern (format "ucs-8859-%d-encode-table"
+                                                  n))
+                                  (make-translation-table)))
+          (coding-system
+           (coding-system-base (intern (format "iso-8859-%d" n))))
+          (dependency (coding-system-get coding-system 'dependency))
+          elt)
+      ;; Start with the mule-unicode component (except for latin-iso8859-1).
+      (if (/= n 1)
+         (dolist (pair alist)
+           (let ((mule (car pair))
+                 (mu (decode-char 'ucs (cdr pair))))
+             (aset encode-translator mu mule))))
+      ;; Find characters from other 8859 sets which map to the same
+      ;; unicode as some character in this set.
+      (map-char-table (lambda (k v)
+                       (if (and (setq elt (rassq v alist))
+                                (not (assq k alist)))
+                           (aset encode-translator k (car elt))))
+                     ucs-mule-8859-to-ucs-table)
+      (optimize-char-table encode-translator)
+
+      (or (memq 'unify-8859-on-encoding-mode dependency)
+         (setq dependency (cons 'unify-8859-on-encoding-mode dependency)))
+      (or (memq 'unify-8859-on-decoding-mode dependency)
+         (setq dependency (cons 'unify-8859-on-decoding-mode dependency)))
+      (coding-system-put coding-system 'dependency dependency))))
+
+(defun ucs-unify-8859 (for-encode for-decode)
+  "Set up translation-tables for unifying characters from ISO 8859.
+
+On decoding, non-ASCII characters are mapped into the `iso-latin-1'
+and `mule-unicode-0100-24ff' charsets.  On encoding, these are mapped
+back appropriate for the coding system.
+
+With prefix arg, do unification on encoding only, i.e. don't unify
+everything on input operations."
+  (when for-decode
+    ;; Unify 8859 on decoding.  (Non-CCL coding systems only.)
+    (if utf-fragment-on-decoding
+       (progn (map-char-table
+               (lambda (k v)
+                 (if v (aset ucs-mule-8859-to-mule-unicode v nil)))
+               utf-fragmentation-table)
+              (optimize-char-table ucs-mule-8859-to-mule-unicode))
+      ;; Reset in case it was changed.
+      (map-char-table
+       (lambda (k v)
+        (if v (aset ucs-mule-8859-to-mule-unicode v k)))
+       utf-fragmentation-table))
+
+    ;; For non-CCL coding systems (e.g. iso-latin-2).
+    (set-char-table-parent standard-translation-table-for-decode
+                          ucs-mule-8859-to-mule-unicode)
+    ;; For CCL coding systems other than mule-utf-*
+    (define-translation-table 'ucs-translation-table-for-decode
+      ucs-mule-8859-to-mule-unicode)
+
+    ;; Translate Quail input globally.
+    (setq-default translation-table-for-input ucs-mule-to-mule-unicode)
+    ;; In case this is set up, but we should use the global
+    ;; translation-table.
+    (remove-hook 'minibuffer-setup-hook 'ucs-minibuffer-setup))
+
+  (when for-encode
+    ;; Make mule-utf-* encode all characters in ucs-mule-to-mule-unicode.
+    (let ((coding-list '(mule-utf-8 mule-utf-16be mule-utf-16le
+                                   mule-utf-16be-with-signature
+                                   mule-utf-16le-with-signature)))
+      (define-translation-table 'utf-translation-table-for-encode
+       ucs-mule-to-mule-unicode)
+      (dolist (coding coding-list)
+       (set-char-table-parent (coding-system-get coding 'safe-chars)
+                              ucs-mule-to-mule-unicode)))
+
+    ;; Adjust the 8859 coding systems to fragment the unified characters
+    ;; on encoding.
+    (dolist (n '(1 2 3 4 5 7 8 9 14 15))
+      (let* ((coding-system
+             (coding-system-base (intern (format "iso-8859-%d" n))))
+            (table (symbol-value
+                    (intern (format "ucs-8859-%d-encode-table" n))))
+            (safe (coding-system-get coding-system 'safe-chars)))
+       ;; Actually, the coding system's safe-chars are not normally
+       ;; used after they've been registered, but we might as well
+       ;; record them.  Setting the parent here is a convenience.
+       (set-char-table-parent safe table)
+       (coding-system-put coding-system 'translation-table-for-encode table)))
+    (add-hook 'minibuffer-setup-hook 'ucs-minibuffer-setup)))
+
+(defun ucs-fragment-8859 (for-encode for-decode)
+  "Undo the unification done by `ucs-unify-8859'.
+With prefix arg, undo unification on encoding only, i.e. don't undo
+unification on input operations."
+  (when for-decode
+    ;; Don't Unify 8859 on decoding.
+    ;; For non-CCL coding systems (e.g. iso-latin-2).
+    (set-char-table-parent standard-translation-table-for-decode nil)
+    ;; For CCL coding systems other than mule-utf-* (e.g. cyrillic-koi8).
+    (define-translation-table 'ucs-translation-table-for-decode)
+    (setq-default translation-table-for-input nil))
+
+  (when for-encode
+    ;; Disable mule-utf-* encoding for all characters in
+    ;; ucs-mule-to-mule-unicode except what was originally supported
+    ;; and what is translated by utf-translation-table-for-decode when
+    ;; `utf-fragment-on-decoding' is non-nil.
+    (let ((coding-list '(mule-utf-8 mule-utf-16be mule-utf-16le
+                                   mule-utf-16be-with-signature
+                                   mule-utf-16le-with-signature))
+         (safe (coding-system-get 'mule-utf-8 'safe-chars)))
+      (dolist (coding coding-list)
+       (set-char-table-parent (coding-system-get coding 'safe-chars) nil))
+      (if (not utf-fragment-on-decoding)
+         (define-translation-table 'utf-translation-table-for-encode)
+       (define-translation-table 'utf-translation-table-for-encode
+         utf-defragmentation-table)))
+
+    ;; For each charset, remove the parent of `safe-chars' property of
+    ;; the corresponding coding system.
+    (dolist (n '(1 2 3 4 5 7 8 9 14 15))
+      (let* ((coding-system
+             (coding-system-base (intern (format "iso-8859-%d" n))))
+            (safe (coding-system-get coding-system 'safe-chars)))
+       (if (char-table-parent safe)
+           (set-char-table-parent safe nil))
+       (coding-system-put coding-system 'translation-table-for-encode nil)))
+    (remove-hook 'minibuffer-setup-hook 'ucs-minibuffer-setup)))
+
+(defun ucs-insert (arg)
+  "Insert the Emacs character representation of the given Unicode.
+Interactively, prompts for a hex string giving the code."
+  (interactive "sUnicode (hex): ")
+  (or (integerp arg)
+      (setq arg (string-to-number arg 16)))
+  (let ((c (decode-char 'ucs arg)))
+    (if c
+       (insert c)
+      (if (or (< arg 0) (> arg #x10FFFF))
+         (error "Not a Unicode character code: 0x%X" arg)
+       (error "Character U+%04X is not yet supported" arg)))))
+
+;;; Dealing with non-8859 character sets.
+
+;; We only set up translation on encoding to utf-8.  Also translation
+;; tables ucs-CS-encode-table are constructed for some coding systems
+;; CS which could be used as `translation-table-for-encode', currently
+;; for indian-is13194, lao, thai, tibetan-iso-8bit and
+;; vietnamese-viscii.
+
+;; The alists here cover both coding systems (external charsets), like
+;; VISCII, and individual Emacs charsets, like `ipa'.
+(let ((vietnamese-viscii
+       '((?\e,1!\e(B . ?\e$,1o/\e(B)
+        (?\e,1"\e(B . ?\e$,1o1\e(B)
+        (?\e,1#\e(B . ?\e$,1o7\e(B)
+        (?\e,1$\e(B . ?\e$,1o%\e(B)
+        (?\e,1%\e(B . ?\e$,1o'\e(B)
+        (?\e,1&\e(B . ?\e$,1o)\e(B)
+        (?\e,1'\e(B . ?\e$,1o-\e(B)
+        (?\e,1(\e(B . ?\e$,1o=\e(B)
+        (?\e,1)\e(B . ?\e$,1o9\e(B)
+        (?\e,1*\e(B . ?\e$,1o?\e(B)
+        (?\e,1+\e(B . ?\e$,1oA\e(B)
+        (?\e,1,\e(B . ?\e$,1oC\e(B)
+        (?\e,1-\e(B . ?\e$,1oE\e(B)
+        (?\e,1.\e(B . ?\e$,1oG\e(B)
+        (?\e,1/\e(B . ?\e$,1oQ\e(B)
+        (?\e,10\e(B . ?\e$,1oS\e(B)
+        (?\e,11\e(B . ?\e$,1oU\e(B)
+        (?\e,12\e(B . ?\e$,1oW\e(B)
+        (?\e,15\e(B . ?\e$,1oY\e(B)
+        (?\e,16\e(B . ?\e$,1o]\e(B)
+        (?\e,17\e(B . ?\e$,1o_\e(B)
+        (?\e,18\e(B . ?\e$,1oK\e(B)
+        (?\e,1=\e(B . ?\e$,1!a\e(B)
+        (?\e,1>\e(B . ?\e$,1o[\e(B)
+        (?\e,1F\e(B . ?\e$,1o3\e(B)
+        (?\e,1G\e(B . ?\e$,1o5\e(B)
+        (?\e,1O\e(B . ?\e$,1os\e(B)
+        (?\e,1Q\e(B . ?\e$,1oi\e(B)
+        (?\e,1U\e(B . ?\e$,1o!\e(B)
+        (?\e,1V\e(B . ?\e$,1ow\e(B)
+        (?\e,1W\e(B . ?\e$,1ok\e(B)
+        (?\e,1X\e(B . ?\e$,1om\e(B)
+        (?\e,1[\e(B . ?\e$,1oy\e(B)
+        (?\e,1\\e(B . ?\e$,1ou\e(B)
+        (?\e,1^\e(B . ?\e$,1oa\e(B)
+        (?\e,1_\e(B . ?\e$,1!p\e(B)
+        (?\e,1`\e(B . ?\e,A`\e(B)
+        (?\e,1a\e(B . ?\e,Aa\e(B)
+        (?\e,1b\e(B . ?\e,Ab\e(B)
+        (?\e,1c\e(B . ?\e,Ac\e(B)
+        (?\e,1d\e(B . ?\e$,1o#\e(B)
+        (?\e,1e\e(B . ?\e$,1 #\e(B)
+        (?\e,1f\e(B . ?\e$,1oo\e(B)
+        (?\e,1g\e(B . ?\e$,1o+\e(B)
+        (?\e,1h\e(B . ?\e,Ah\e(B)
+        (?\e,1i\e(B . ?\e,Ai\e(B)
+        (?\e,1j\e(B . ?\e,Aj\e(B)
+        (?\e,1k\e(B . ?\e$,1o;\e(B)
+        (?\e,1l\e(B . ?\e,Al\e(B)
+        (?\e,1m\e(B . ?\e,Am\e(B)
+        (?\e,1n\e(B . ?\e$,1 I\e(B)
+        (?\e,1o\e(B . ?\e$,1oI\e(B)
+        (?\e,1p\e(B . ?\e$,1 1\e(B)
+        (?\e,1q\e(B . ?\e$,1oq\e(B)
+        (?\e,1r\e(B . ?\e,Ar\e(B)
+        (?\e,1s\e(B . ?\e,As\e(B)
+        (?\e,1t\e(B . ?\e,At\e(B)
+        (?\e,1u\e(B . ?\e,Au\e(B)
+        (?\e,1v\e(B . ?\e$,1oO\e(B)
+        (?\e,1w\e(B . ?\e$,1oM\e(B)
+        (?\e,1x\e(B . ?\e$,1oe\e(B)
+        (?\e,1y\e(B . ?\e,Ay\e(B)
+        (?\e,1z\e(B . ?\e,Az\e(B)
+        (?\e,1{\e(B . ?\e$,1!)\e(B)
+        (?\e,1|\e(B . ?\e$,1og\e(B)
+        (?\e,1}\e(B . ?\e,A}\e(B)
+        (?\e,1~\e(B . ?\e$,1oc\e(B)
+
+        (?\e,2!\e(B . ?\e$,1o.\e(B)
+        (?\e,2"\e(B . ?\e$,1o0\e(B)
+        (?\e,2#\e(B . ?\e$,1o6\e(B)
+        (?\e,2$\e(B . ?\e$,1o$\e(B)
+        (?\e,2%\e(B . ?\e$,1o&\e(B)
+        (?\e,2&\e(B . ?\e$,1o(\e(B)
+        (?\e,2'\e(B . ?\e$,1o,\e(B)
+        (?\e,2(\e(B . ?\e$,1o<\e(B)
+        (?\e,2)\e(B . ?\e$,1o8\e(B)
+        (?\e,2*\e(B . ?\e$,1o>\e(B)
+        (?\e,2+\e(B . ?\e$,1o@\e(B)
+        (?\e,2,\e(B . ?\e$,1oB\e(B)
+        (?\e,2-\e(B . ?\e$,1oD\e(B)
+        (?\e,2.\e(B . ?\e$,1oF\e(B)
+        (?\e,2/\e(B . ?\e$,1oP\e(B)
+        (?\e,20\e(B . ?\e$,1oR\e(B)
+        (?\e,21\e(B . ?\e$,1oT\e(B)
+        (?\e,22\e(B . ?\e$,1oV\e(B)
+        (?\e,25\e(B . ?\e$,1oX\e(B)
+        (?\e,26\e(B . ?\e$,1o\\e(B)
+        (?\e,27\e(B . ?\e$,1o^\e(B)
+        (?\e,28\e(B . ?\e$,1oJ\e(B)
+        (?\e,2=\e(B . ?\e$,1!`\e(B)
+        (?\e,2>\e(B . ?\e$,1oZ\e(B)
+        (?\e,2F\e(B . ?\e$,1o2\e(B)
+        (?\e,2G\e(B . ?\e$,1o4\e(B)
+        (?\e,2O\e(B . ?\e$,1or\e(B)
+        (?\e,2Q\e(B . ?\e$,1oh\e(B)
+        (?\e,2U\e(B . ?\e$,1o \e(B)
+        (?\e,2V\e(B . ?\e$,1ov\e(B)
+        (?\e,2W\e(B . ?\e$,1oj\e(B)
+        (?\e,2X\e(B . ?\e$,1ol\e(B)
+        (?\e,2[\e(B . ?\e$,1ox\e(B)
+        (?\e,2\\e(B . ?\e$,1ot\e(B)
+        (?\e,2^\e(B . ?\e$,1o`\e(B)
+        (?\e,2_\e(B . ?\e$,1!o\e(B)
+        (?\e,2`\e(B . ?\e,A@\e(B)
+        (?\e,2a\e(B . ?\e,AA\e(B)
+        (?\e,2b\e(B . ?\e,AB\e(B)
+        (?\e,2c\e(B . ?\e,AC\e(B)
+        (?\e,2d\e(B . ?\e$,1o"\e(B)
+        (?\e,2e\e(B . ?\e$,1 "\e(B)
+        (?\e,2f\e(B . ?\e$,1on\e(B)
+        (?\e,2g\e(B . ?\e$,1o*\e(B)
+        (?\e,2h\e(B . ?\e,AH\e(B)
+        (?\e,2i\e(B . ?\e,AI\e(B)
+        (?\e,2j\e(B . ?\e,AJ\e(B)
+        (?\e,2k\e(B . ?\e$,1o:\e(B)
+        (?\e,2l\e(B . ?\e,AL\e(B)
+        (?\e,2m\e(B . ?\e,AM\e(B)
+        (?\e,2n\e(B . ?\e$,1 H\e(B)
+        (?\e,2o\e(B . ?\e$,1oH\e(B)
+        (?\e,2p\e(B . ?\e$,1 0\e(B)
+        (?\e,2q\e(B . ?\e$,1op\e(B)
+        (?\e,2r\e(B . ?\e,AR\e(B)
+        (?\e,2s\e(B . ?\e,AS\e(B)
+        (?\e,2t\e(B . ?\e,AT\e(B)
+        (?\e,2u\e(B . ?\e,AU\e(B)
+        (?\e,2v\e(B . ?\e$,1oN\e(B)
+        (?\e,2w\e(B . ?\e$,1oL\e(B)
+        (?\e,2x\e(B . ?\e$,1od\e(B)
+        (?\e,2y\e(B . ?\e,AY\e(B)
+        (?\e,2z\e(B . ?\e,AZ\e(B)
+        (?\e,2{\e(B . ?\e$,1!(\e(B)
+        (?\e,2|\e(B . ?\e$,1of\e(B)
+        (?\e,2}\e(B . ?\e,A]\e(B)
+        (?\e,2~\e(B . ?\e$,1ob\e(B)))
+
+      (thai-tis620
+       '((?\e,T!\e(B . ?\e$,1Ba\e(B)
+        (?\e,T"\e(B . ?\e$,1Bb\e(B)
+        (?\e,T#\e(B . ?\e$,1Bc\e(B)
+        (?\e,T$\e(B . ?\e$,1Bd\e(B)
+        (?\e,T%\e(B . ?\e$,1Be\e(B)
+        (?\e,T&\e(B . ?\e$,1Bf\e(B)
+        (?\e,T'\e(B . ?\e$,1Bg\e(B)
+        (?\e,T(\e(B . ?\e$,1Bh\e(B)
+        (?\e,T)\e(B . ?\e$,1Bi\e(B)
+        (?\e,T*\e(B . ?\e$,1Bj\e(B)
+        (?\e,T+\e(B . ?\e$,1Bk\e(B)
+        (?\e,T,\e(B . ?\e$,1Bl\e(B)
+        (?\e,T-\e(B . ?\e$,1Bm\e(B)
+        (?\e,T.\e(B . ?\e$,1Bn\e(B)
+        (?\e,T/\e(B . ?\e$,1Bo\e(B)
+        (?\e,T0\e(B . ?\e$,1Bp\e(B)
+        (?\e,T1\e(B . ?\e$,1Bq\e(B)
+        (?\e,T2\e(B . ?\e$,1Br\e(B)
+        (?\e,T3\e(B . ?\e$,1Bs\e(B)
+        (?\e,T4\e(B . ?\e$,1Bt\e(B)
+        (?\e,T5\e(B . ?\e$,1Bu\e(B)
+        (?\e,T6\e(B . ?\e$,1Bv\e(B)
+        (?\e,T7\e(B . ?\e$,1Bw\e(B)
+        (?\e,T8\e(B . ?\e$,1Bx\e(B)
+        (?\e,T9\e(B . ?\e$,1By\e(B)
+        (?\e,T:\e(B . ?\e$,1Bz\e(B)
+        (?\e,T;\e(B . ?\e$,1B{\e(B)
+        (?\e,T<\e(B . ?\e$,1B|\e(B)
+        (?\e,T=\e(B . ?\e$,1B}\e(B)
+        (?\e,T>\e(B . ?\e$,1B~\e(B)
+        (?\e,T?\e(B . ?\e$,1B\7f\e(B)
+        (?\e,T@\e(B . ?\e$,1C \e(B)
+        (?\e,TA\e(B . ?\e$,1C!\e(B)
+        (?\e,TB\e(B . ?\e$,1C"\e(B)
+        (?\e,TC\e(B . ?\e$,1C#\e(B)
+        (?\e,TD\e(B . ?\e$,1C$\e(B)
+        (?\e,TE\e(B . ?\e$,1C%\e(B)
+        (?\e,TF\e(B . ?\e$,1C&\e(B)
+        (?\e,TG\e(B . ?\e$,1C'\e(B)
+        (?\e,TH\e(B . ?\e$,1C(\e(B)
+        (?\e,TI\e(B . ?\e$,1C)\e(B)
+        (?\e,TJ\e(B . ?\e$,1C*\e(B)
+        (?\e,TK\e(B . ?\e$,1C+\e(B)
+        (?\e,TL\e(B . ?\e$,1C,\e(B)
+        (?\e,TM\e(B . ?\e$,1C-\e(B)
+        (?\e,TN\e(B . ?\e$,1C.\e(B)
+        (?\e,TO\e(B . ?\e$,1C/\e(B)
+        (?\e,TP\e(B . ?\e$,1C0\e(B)
+        (?\e,TQ\e(B . ?\e$,1C1\e(B)
+        (?\e,TR\e(B . ?\e$,1C2\e(B)
+        (?\e,TS\e(B . ?\e$,1C3\e(B)
+        (?\e,TT\e(B . ?\e$,1C4\e(B)
+        (?\e,TU\e(B . ?\e$,1C5\e(B)
+        (?\e,TV\e(B . ?\e$,1C6\e(B)
+        (?\e,TW\e(B . ?\e$,1C7\e(B)
+        (?\e,TX\e(B . ?\e$,1C8\e(B)
+        (?\e,TY\e(B . ?\e$,1C9\e(B)
+        (?\e,TZ\e(B . ?\e$,1C:\e(B)
+        (?\e,T_\e(B . ?\e$,1C?\e(B)
+        (?\e,T`\e(B . ?\e$,1C@\e(B)
+        (?\e,Ta\e(B . ?\e$,1CA\e(B)
+        (?\e,Tb\e(B . ?\e$,1CB\e(B)
+        (?\e,Tc\e(B . ?\e$,1CC\e(B)
+        (?\e,Td\e(B . ?\e$,1CD\e(B)
+        (?\e,Te\e(B . ?\e$,1CE\e(B)
+        (?\e,Tf\e(B . ?\e$,1CF\e(B)
+        (?\e,Tg\e(B . ?\e$,1CG\e(B)
+        (?\e,Th\e(B . ?\e$,1CH\e(B)
+        (?\e,Ti\e(B . ?\e$,1CI\e(B)
+        (?\e,Tj\e(B . ?\e$,1CJ\e(B)
+        (?\e,Tk\e(B . ?\e$,1CK\e(B)
+        (?\e,Tl\e(B . ?\e$,1CL\e(B)
+        (?\e,Tm\e(B . ?\e$,1CM\e(B)
+        (?\e,Tn\e(B . ?\e$,1CN\e(B)
+        (?\e,To\e(B . ?\e$,1CO\e(B)
+        (?\e,Tp\e(B . ?\e$,1CP\e(B)
+        (?\e,Tq\e(B . ?\e$,1CQ\e(B)
+        (?\e,Tr\e(B . ?\e$,1CR\e(B)
+        (?\e,Ts\e(B . ?\e$,1CS\e(B)
+        (?\e,Tt\e(B . ?\e$,1CT\e(B)
+        (?\e,Tu\e(B . ?\e$,1CU\e(B)
+        (?\e,Tv\e(B . ?\e$,1CV\e(B)
+        (?\e,Tw\e(B . ?\e$,1CW\e(B)
+        (?\e,Tx\e(B . ?\e$,1CX\e(B)
+        (?\e,Ty\e(B . ?\e$,1CY\e(B)
+        (?\e,Tz\e(B . ?\e$,1CZ\e(B)
+        (?\e,T{\e(B . ?\e$,1C[\e(B)))
+
+      (tibetan-iso-8bit
+       '((?\e$(7!0\e(B . ?\e$,1E@\e(B)
+        (?\e$(7!1\e(B . ?\e$,1EA\e(B)
+        (?\e$(7!2\e(B . ?\e$,1EB\e(B)
+        (?\e$(7!3\e(B . ?\e$,1EC\e(B)
+        (?\e$(7!4\e(B . ?\e$,1ED\e(B)
+        (?\e$(7!5\e(B . ?\e$,1EE\e(B)
+        (?\e$(7!6\e(B . ?\e$,1EF\e(B)
+        (?\e$(7!7\e(B . ?\e$,1EG\e(B)
+        (?\e$(7!8\e(B . ?\e$,1EH\e(B)
+        (?\e$(7!9\e(B . ?\e$,1EI\e(B)
+        (?\e$(7!:\e(B . ?\e$,1EJ\e(B)
+        (?\e$(7!;\e(B . ?\e$,1EK\e(B)
+        (?\e$(7!<\e(B . ?\e$,1EL\e(B)
+        (?\e$(7!=\e(B . ?\e$,1EM\e(B)
+        (?\e$(7!>\e(B . ?\e$,1EN\e(B)
+        (?\e$(7!?\e(B . ?\e$,1EO\e(B)
+        (?\e$(7!@\e(B . ?\e$,1EP\e(B)
+        (?\e$(7!A\e(B . ?\e$,1EQ\e(B)
+        (?\e$(7!B\e(B . ?\e$,1ER\e(B)
+        (?\e$(7!C\e(B . ?\e$,1ES\e(B)
+        (?\e$(7!D\e(B . ?\e$,1ET\e(B)
+        (?\e$(7!E\e(B . ?\e$,1EU\e(B)
+        (?\e$(7!F\e(B . ?\e$,1EV\e(B)
+        (?\e$(7!G\e(B . ?\e$,1EW\e(B)
+        (?\e$(7!H\e(B . ?\e$,1EX\e(B)
+        (?\e$(7!I\e(B . ?\e$,1EY\e(B)
+        (?\e$(7!J\e(B . ?\e$,1EZ\e(B)
+        (?\e$(7!K\e(B . ?\e$,1E[\e(B)
+        (?\e$(7!L\e(B . ?\e$,1E\\e(B)
+        (?\e$(7!M\e(B . ?\e$,1E]\e(B)
+        (?\e$(7!N\e(B . ?\e$,1E^\e(B)
+        (?\e$(7!O\e(B . ?\e$,1E_\e(B)
+        (?\e$(7!P\e(B . ?\e$,1E`\e(B)
+        (?\e$(7!Q\e(B . ?\e$,1Ea\e(B)
+        (?\e$(7!R\e(B . ?\e$,1Eb\e(B)
+        (?\e$(7!S\e(B . ?\e$,1Ec\e(B)
+        (?\e$(7!T\e(B . ?\e$,1Ed\e(B)
+        (?\e$(7!U\e(B . ?\e$,1Ee\e(B)
+        (?\e$(7!V\e(B . ?\e$,1Ef\e(B)
+        (?\e$(7!W\e(B . ?\e$,1Eg\e(B)
+        (?\e$(7!X\e(B . ?\e$,1Eh\e(B)
+        (?\e$(7!Y\e(B . ?\e$,1Ei\e(B)
+        (?\e$(7!Z\e(B . ?\e$,1Ej\e(B)
+        (?\e$(7![\e(B . ?\e$,1Ek\e(B)
+        (?\e$(7!\\e(B . ?\e$,1El\e(B)
+        (?\e$(7!]\e(B . ?\e$,1Em\e(B)
+        (?\e$(7!^\e(B . ?\e$,1En\e(B)
+        (?\e$(7!_\e(B . ?\e$,1Eo\e(B)
+        (?\e$(7!`\e(B . ?\e$,1Ep\e(B)
+        (?\e$(7!a\e(B . ?\e$,1Eq\e(B)
+        (?\e$(7!b\e(B . ?\e$,1Er\e(B)
+        (?\e$(7!c\e(B . ?\e$,1Es\e(B)
+        (?\e$(7!d\e(B . ?\e$,1Et\e(B)
+        (?\e$(7!e\e(B . ?\e$,1Eu\e(B)
+        (?\e$(7!f\e(B . ?\e$,1Ev\e(B)
+        (?\e$(7!g\e(B . ?\e$,1Ew\e(B)
+        (?\e$(7!h\e(B . ?\e$,1Ex\e(B)
+        (?\e$(7!i\e(B . ?\e$,1Ey\e(B)
+        (?\e$(7!j\e(B . ?\e$,1Ez\e(B)
+        (?\e$(7!k\e(B . ?\e$,1E{\e(B)
+        (?\e$(7!l\e(B . ?\e$,1E|\e(B)
+        (?\e$(7!m\e(B . ?\e$,1E}\e(B)
+        (?\e$(7!n\e(B . ?\e$,1E~\e(B)
+        (?\e$(7!o\e(B . ?\e$,1E\7f\e(B)
+        (?\e$(7"!\e(B . ?\e$,1F \e(B)
+        (?\e$(7""\e(B . ?\e$,1F!\e(B)
+        (?\e$(7"#\e(B . ?\e$,1F"\e(B)
+        (?\e$(7"$\e(B . ?\e$,1F#\e(B)
+        (?\e$(7"%\e(B . ?\e$,1F$\e(B)
+        (?\e$(7"&\e(B . ?\e$,1F%\e(B)
+        (?\e$(7"'\e(B . ?\e$,1F&\e(B)
+        (?\e$(7"(\e(B . ?\e$,1F'\e(B)
+        (?\e$(7"*\e(B . ?\e$,1F)\e(B)
+        (?\e$(7"+\e(B . ?\e$,1F*\e(B)
+        (?\e$(7",\e(B . ?\e$,1F+\e(B)
+        (?\e$(7"-\e(B . ?\e$,1F,\e(B)
+        (?\e$(7".\e(B . ?\e$,1F-\e(B)
+        (?\e$(7"/\e(B . ?\e$,1F.\e(B)
+        (?\e$(7"0\e(B . ?\e$,1F/\e(B)
+        (?\e$(7"1\e(B . ?\e$,1F0\e(B)
+        (?\e$(7"2\e(B . ?\e$,1F1\e(B)
+        (?\e$(7"3\e(B . ?\e$,1F2\e(B)
+        (?\e$(7"4\e(B . ?\e$,1F3\e(B)
+        (?\e$(7"5\e(B . ?\e$,1F4\e(B)
+        (?\e$(7"6\e(B . ?\e$,1F5\e(B)
+        (?\e$(7"7\e(B . ?\e$,1F6\e(B)
+        (?\e$(7"8\e(B . ?\e$,1F7\e(B)
+        (?\e$(7"9\e(B . ?\e$,1F8\e(B)
+        (?\e$(7":\e(B . ?\e$,1F9\e(B)
+        (?\e$(7";\e(B . ?\e$,1F:\e(B)
+        (?\e$(7"<\e(B . ?\e$,1F;\e(B)
+        (?\e$(7"=\e(B . ?\e$,1F<\e(B)
+        (?\e$(7">\e(B . ?\e$,1F=\e(B)
+        (?\e$(7"?\e(B . ?\e$,1F>\e(B)
+        (?\e$(7"@\e(B . ?\e$,1F?\e(B)
+        (?\e$(7"A\e(B . ?\e$,1F@\e(B)
+        (?\e$(7"B\e(B . ?\e$,1FA\e(B)
+        (?\e$(7"C\e(B . ?\e$,1FB\e(B)
+        (?\e$(7"D\e(B . ?\e$,1FC\e(B)
+        (?\e$(7"E\e(B . ?\e$,1FD\e(B)
+        (?\e$(7"F\e(B . ?\e$,1FE\e(B)
+        (?\e$(7"G\e(B . ?\e$,1FF\e(B)
+        (?\e$(7"H\e(B . ?\e$,1FG\e(B)
+        (?\e$(7"I\e(B . ?\e$,1FH\e(B)
+        (?\e$(7"J\e(B . ?\e$,1FI\e(B)
+        (?\e$(7"K\e(B . ?\e$,1FJ\e(B)
+        (?\e$(7"R\e(B . ?\e$,1FQ\e(B)
+        (?\e$(7"S\e(B . ?\e$,1FR\e(B)
+        (?\e$(7"T\e(B . ?\e$,1FS\e(B)
+        (?\e$(7"U\e(B . ?\e$,1FT\e(B)
+        (?\e$(7"V\e(B . ?\e$,1FU\e(B)
+        (?\e$(7"W\e(B . ?\e$,1FV\e(B)
+        (?\e$(7"X\e(B . ?\e$,1FW\e(B)
+        (?\e$(7"Y\e(B . ?\e$,1FX\e(B)
+        (?\e$(7"Z\e(B . ?\e$,1FY\e(B)
+        (?\e$(7"[\e(B . ?\e$,1FZ\e(B)
+        (?\e$(7"\\e(B . ?\e$,1F[\e(B)
+        (?\e$(7"]\e(B . ?\e$,1F\\e(B)
+        (?\e$(7"^\e(B . ?\e$,1F]\e(B)
+        (?\e$(7"_\e(B . ?\e$,1F^\e(B)
+        (?\e$(7"`\e(B . ?\e$,1F_\e(B)
+        (?\e$(7"a\e(B . ?\e$,1F`\e(B)
+        (?\e$(7"b\e(B . ?\e$,1Fa\e(B)
+        (?\e$(7"c\e(B . ?\e$,1Fb\e(B)
+        (?\e$(7"d\e(B . ?\e$,1Fc\e(B)
+        (?\e$(7"e\e(B . ?\e$,1Fd\e(B)
+        (?\e$(7"f\e(B . ?\e$,1Fe\e(B)
+        (?\e$(7"g\e(B . ?\e$,1Ff\e(B)
+        (?\e$(7"h\e(B . ?\e$,1Fg\e(B)
+        (?\e$(7"i\e(B . ?\e$,1Fh\e(B)
+        (?\e$(7"j\e(B . ?\e$,1Fi\e(B)
+        (?\e$(7"k\e(B . ?\e$,1Fj\e(B)
+        (?\e$(7"l\e(B . ?\e$,1Fk\e(B)
+        (?\e$(7#!\e(B . ?\e$,1Fp\e(B)
+        (?\e$(7#"\e(B . ?\e$,1Fq\e(B)
+        (?\e$(7##\e(B . ?\e$,1Fr\e(B)
+        (?\e$(7#$\e(B . ?\e$,1Fs\e(B)
+        (?\e$(7#%\e(B . ?\e$,1Ft\e(B)
+        (?\e$(7#&\e(B . ?\e$,1Fu\e(B)
+        (?\e$(7#'\e(B . ?\e$,1Fv\e(B)
+        (?\e$(7#(\e(B . ?\e$,1Fw\e(B)
+        (?\e$(7#*\e(B . ?\e$,1Fy\e(B)
+        (?\e$(7#+\e(B . ?\e$,1Fz\e(B)
+        (?\e$(7#,\e(B . ?\e$,1F{\e(B)
+        (?\e$(7#-\e(B . ?\e$,1F|\e(B)
+        (?\e$(7#.\e(B . ?\e$,1F}\e(B)
+        (?\e$(7#/\e(B . ?\e$,1F~\e(B)
+        (?\e$(7#0\e(B . ?\e$,1F\7f\e(B)
+        (?\e$(7#1\e(B . ?\e$,1G \e(B)
+        (?\e$(7#2\e(B . ?\e$,1G!\e(B)
+        (?\e$(7#3\e(B . ?\e$,1G"\e(B)
+        (?\e$(7#4\e(B . ?\e$,1G#\e(B)
+        (?\e$(7#5\e(B . ?\e$,1G$\e(B)
+        (?\e$(7#6\e(B . ?\e$,1G%\e(B)
+        (?\e$(7#7\e(B . ?\e$,1G&\e(B)
+        (?\e$(7#8\e(B . ?\e$,1G'\e(B)
+        (?\e$(7#9\e(B . ?\e$,1G(\e(B)
+        (?\e$(7#:\e(B . ?\e$,1G)\e(B)
+        (?\e$(7#;\e(B . ?\e$,1G*\e(B)
+        (?\e$(7#<\e(B . ?\e$,1G+\e(B)
+        (?\e$(7#=\e(B . ?\e$,1G,\e(B)
+        (?\e$(7#>\e(B . ?\e$,1G-\e(B)
+        (?\e$(7#?\e(B . ?\e$,1G.\e(B)
+        (?\e$(7#@\e(B . ?\e$,1G/\e(B)
+        (?\e$(7#A\e(B . ?\e$,1G0\e(B)
+        (?\e$(7#B\e(B . ?\e$,1G1\e(B)
+        (?\e$(7#C\e(B . ?\e$,1G2\e(B)
+        (?\e$(7#D\e(B . ?\e$,1G3\e(B)
+        (?\e$(7#E\e(B . ?\e$,1G4\e(B)
+        (?\e$(7#F\e(B . ?\e$,1G5\e(B)
+        (?\e$(7#G\e(B . ?\e$,1G6\e(B)
+        (?\e$(7#H\e(B . ?\e$,1G7\e(B)
+        (?\e$(7#I\e(B . ?\e$,1G8\e(B)
+        (?\e$(7#J\e(B . ?\e$,1G9\e(B)
+        (?\e$(7#K\e(B . ?\e$,1G:\e(B)
+        (?\e$(7#L\e(B . ?\e$,1G;\e(B)
+        (?\e$(7#M\e(B . ?\e$,1G<\e(B)
+        (?\e$(7#O\e(B . ?\e$,1G>\e(B)
+        (?\e$(7#P\e(B . ?\e$,1G?\e(B)
+        (?\e$(7#Q\e(B . ?\e$,1G@\e(B)
+        (?\e$(7#R\e(B . ?\e$,1GA\e(B)
+        (?\e$(7#S\e(B . ?\e$,1GB\e(B)
+        (?\e$(7#T\e(B . ?\e$,1GC\e(B)
+        (?\e$(7#U\e(B . ?\e$,1GD\e(B)
+        (?\e$(7#V\e(B . ?\e$,1GE\e(B)
+        (?\e$(7#W\e(B . ?\e$,1GF\e(B)
+        (?\e$(7#X\e(B . ?\e$,1GG\e(B)
+        (?\e$(7#Y\e(B . ?\e$,1GH\e(B)
+        (?\e$(7#Z\e(B . ?\e$,1GI\e(B)
+        (?\e$(7#[\e(B . ?\e$,1GJ\e(B)
+        (?\e$(7#\\e(B . ?\e$,1GK\e(B)
+        (?\e$(7#]\e(B . ?\e$,1GL\e(B)
+        (?\e$(7#`\e(B . ?\e$,1GO\e(B)))
+
+      (ipa
+       '((?\e,0 \e(B . ?i)
+        (?\e,0!\e(B . ?\e$,1#j\e(B)
+        (?\e,0"\e(B . ?e)
+        (?\e,0#\e(B . ?\e$,1#[\e(B)
+        (?\e,0$\e(B . ?\e,Af\e(B)
+        (?\e,0%\e(B . ?a)
+        (?\e,0&\e(B . ?\e$,1#h\e(B)
+        (?\e,0'\e(B . ?\e$,1#Y\e(B)
+        (?\e,0(\e(B . ?\e$,1#P\e(B)
+        (?\e,0)\e(B . ?\e$,1#o\e(B)
+        (?\e,0*\e(B . ?\e$,1#d\e(B)
+        (?\e,0+\e(B . ?\e$,1$,\e(B)
+        (?\e,0,\e(B . ?\e$,1#Q\e(B)
+        (?\e,0-\e(B . ?y)
+        (?\e,0.\e(B . ?\e$,1$/\e(B)
+        (?\e,0/\e(B . ?\e,Ax\e(B)
+        (?\e,00\e(B . ?\e$,1 s\e(B)
+        (?\e,01\e(B . ?\e$,1#v\e(B)
+        (?\e,02\e(B . ?\e$,1$)\e(B)
+        (?\e,03\e(B . ?\e$,1#u\e(B)
+        (?\e,04\e(B . ?u)
+        (?\e,05\e(B . ?\e$,1$*\e(B)
+        (?\e,06\e(B . ?o)
+        (?\e,07\e(B . ?\e$,1#T\e(B)
+        (?\e,08\e(B . ?\e$,1#R\e(B)
+        (?\e,0:\e(B . ?\e$,1#Z\e(B)
+        (?\e,0@\e(B . ?p)
+        (?\e,0A\e(B . ?b)
+        (?\e,0B\e(B . ?t)
+        (?\e,0C\e(B . ?d)
+        (?\e,0D\e(B . ?k)
+        (?\e,0E\e(B . ?g)
+        (?\e,0F\e(B . ?f)
+        (?\e,0G\e(B . ?v)
+        (?\e,0H\e(B . ?\e$,1'8\e(B)
+        (?\e,0I\e(B . ?\e,Ap\e(B)
+        (?\e,0J\e(B . ?s)
+        (?\e,0K\e(B . ?z)
+        (?\e,0L\e(B . ?\e$,1$#\e(B)
+        (?\e,0M\e(B . ?\e$,1$2\e(B)
+        (?\e,0N\e(B . ?\e,Ag\e(B)
+        (?\e,0O\e(B . ?x)
+        (?\e,0P\e(B . ?\e$,1$!\e(B)
+        (?\e,0Q\e(B . ?h)
+        (?\e,0R\e(B . ?m)
+        (?\e,0S\e(B . ?n)
+        (?\e,0T\e(B . ?\e$,1#r\e(B)
+        (?\e,0U\e(B . ?\e$,1 k\e(B)
+        (?\e,0V\e(B . ?r)
+        (?\e,0W\e(B . ?\e$,1$ \e(B)
+        (?\e,0X\e(B . ?\e$,1#y\e(B)
+        (?\e,0Y\e(B . ?j)
+        (?\e,0Z\e(B . ?l)
+        (?\e,0[\e(B . ?\e$,1$.\e(B)
+        (?\e,0\\e(B . ?\e$,1$?\e(B)
+        (?\e,0]\e(B . ?\e$,1#e\e(B)
+        (?\e,0^\e(B . ?w)
+        (?\e,0_\e(B . ?\e$,1$-\e(B)
+        (?\e,0p\e(B . ?\e$,1$h\e(B)
+        (?\e,0q\e(B . ?\e$,1$l\e(B)
+        (?\e,0r\e(B . ?\e$,1$p\e(B)))
+
+      (ethiopic
+       '((?\e$(3!!\e(B . ?\e$,1M@\e(B)
+        (?\e$(3!"\e(B . ?\e$,1MA\e(B)
+        (?\e$(3!#\e(B . ?\e$,1MB\e(B)
+        (?\e$(3!$\e(B . ?\e$,1MC\e(B)
+        (?\e$(3!%\e(B . ?\e$,1MD\e(B)
+        (?\e$(3!&\e(B . ?\e$,1ME\e(B)
+        (?\e$(3!'\e(B . ?\e$,1MF\e(B)
+        (?\e$(3!)\e(B . ?\e$,1MH\e(B)
+        (?\e$(3!*\e(B . ?\e$,1MI\e(B)
+        (?\e$(3!+\e(B . ?\e$,1MJ\e(B)
+        (?\e$(3!,\e(B . ?\e$,1MK\e(B)
+        (?\e$(3!-\e(B . ?\e$,1ML\e(B)
+        (?\e$(3!.\e(B . ?\e$,1MM\e(B)
+        (?\e$(3!/\e(B . ?\e$,1MN\e(B)
+        (?\e$(3!0\e(B . ?\e$,1MO\e(B)
+        (?\e$(3!1\e(B . ?\e$,1MP\e(B)
+        (?\e$(3!2\e(B . ?\e$,1MQ\e(B)
+        (?\e$(3!3\e(B . ?\e$,1MR\e(B)
+        (?\e$(3!4\e(B . ?\e$,1MS\e(B)
+        (?\e$(3!5\e(B . ?\e$,1MT\e(B)
+        (?\e$(3!6\e(B . ?\e$,1MU\e(B)
+        (?\e$(3!7\e(B . ?\e$,1MV\e(B)
+        (?\e$(3!8\e(B . ?\e$,1MW\e(B)
+        (?\e$(3!9\e(B . ?\e$,1MX\e(B)
+        (?\e$(3!:\e(B . ?\e$,1MY\e(B)
+        (?\e$(3!;\e(B . ?\e$,1MZ\e(B)
+        (?\e$(3!<\e(B . ?\e$,1M[\e(B)
+        (?\e$(3!=\e(B . ?\e$,1M\\e(B)
+        (?\e$(3!>\e(B . ?\e$,1M]\e(B)
+        (?\e$(3!?\e(B . ?\e$,1M^\e(B)
+        (?\e$(3!@\e(B . ?\e$,1M_\e(B)
+        (?\e$(3!A\e(B . ?\e$,1M`\e(B)
+        (?\e$(3!B\e(B . ?\e$,1Ma\e(B)
+        (?\e$(3!C\e(B . ?\e$,1Mb\e(B)
+        (?\e$(3!D\e(B . ?\e$,1Mc\e(B)
+        (?\e$(3!E\e(B . ?\e$,1Md\e(B)
+        (?\e$(3!F\e(B . ?\e$,1Me\e(B)
+        (?\e$(3!G\e(B . ?\e$,1Mf\e(B)
+        (?\e$(3!H\e(B . ?\e$,1Mg\e(B)
+        (?\e$(3!I\e(B . ?\e$,1Mh\e(B)
+        (?\e$(3!J\e(B . ?\e$,1Mi\e(B)
+        (?\e$(3!K\e(B . ?\e$,1Mj\e(B)
+        (?\e$(3!L\e(B . ?\e$,1Mk\e(B)
+        (?\e$(3!M\e(B . ?\e$,1Ml\e(B)
+        (?\e$(3!N\e(B . ?\e$,1Mm\e(B)
+        (?\e$(3!O\e(B . ?\e$,1Mn\e(B)
+        (?\e$(3!P\e(B . ?\e$,1Mo\e(B)
+        (?\e$(3!Q\e(B . ?\e$,1Mp\e(B)
+        (?\e$(3!R\e(B . ?\e$,1Mq\e(B)
+        (?\e$(3!S\e(B . ?\e$,1Mr\e(B)
+        (?\e$(3!T\e(B . ?\e$,1Ms\e(B)
+        (?\e$(3!U\e(B . ?\e$,1Mt\e(B)
+        (?\e$(3!V\e(B . ?\e$,1Mu\e(B)
+        (?\e$(3!W\e(B . ?\e$,1Mv\e(B)
+        (?\e$(3!X\e(B . ?\e$,1Mw\e(B)
+        (?\e$(3!Y\e(B . ?\e$,1Mx\e(B)
+        (?\e$(3!Z\e(B . ?\e$,1My\e(B)
+        (?\e$(3![\e(B . ?\e$,1Mz\e(B)
+        (?\e$(3!\\e(B . ?\e$,1M{\e(B)
+        (?\e$(3!]\e(B . ?\e$,1M|\e(B)
+        (?\e$(3!^\e(B . ?\e$,1M}\e(B)
+        (?\e$(3!_\e(B . ?\e$,1M~\e(B)
+        (?\e$(3!`\e(B . ?\e$,1M\7f\e(B)
+        (?\e$(3!a\e(B . ?\e$,1N \e(B)
+        (?\e$(3!b\e(B . ?\e$,1N!\e(B)
+        (?\e$(3!c\e(B . ?\e$,1N"\e(B)
+        (?\e$(3!d\e(B . ?\e$,1N#\e(B)
+        (?\e$(3!e\e(B . ?\e$,1N$\e(B)
+        (?\e$(3!f\e(B . ?\e$,1N%\e(B)
+        (?\e$(3!g\e(B . ?\e$,1N&\e(B)
+        (?\e$(3!i\e(B . ?\e$,1N(\e(B)
+        (?\e$(3!k\e(B . ?\e$,1N*\e(B)
+        (?\e$(3!l\e(B . ?\e$,1N+\e(B)
+        (?\e$(3!m\e(B . ?\e$,1N,\e(B)
+        (?\e$(3!n\e(B . ?\e$,1N-\e(B)
+        (?\e$(3!q\e(B . ?\e$,1N0\e(B)
+        (?\e$(3!r\e(B . ?\e$,1N1\e(B)
+        (?\e$(3!s\e(B . ?\e$,1N2\e(B)
+        (?\e$(3!t\e(B . ?\e$,1N3\e(B)
+        (?\e$(3!u\e(B . ?\e$,1N4\e(B)
+        (?\e$(3!v\e(B . ?\e$,1N5\e(B)
+        (?\e$(3!w\e(B . ?\e$,1N6\e(B)
+        (?\e$(3!y\e(B . ?\e$,1N8\e(B)
+        (?\e$(3!{\e(B . ?\e$,1N:\e(B)
+        (?\e$(3!|\e(B . ?\e$,1N;\e(B)
+        (?\e$(3!}\e(B . ?\e$,1N<\e(B)
+        (?\e$(3!~\e(B . ?\e$,1N=\e(B)
+        (?\e$(3"#\e(B . ?\e$,1N@\e(B)
+        (?\e$(3"$\e(B . ?\e$,1NA\e(B)
+        (?\e$(3"%\e(B . ?\e$,1NB\e(B)
+        (?\e$(3"&\e(B . ?\e$,1NC\e(B)
+        (?\e$(3"'\e(B . ?\e$,1ND\e(B)
+        (?\e$(3"(\e(B . ?\e$,1NE\e(B)
+        (?\e$(3")\e(B . ?\e$,1NF\e(B)
+        (?\e$(3"*\e(B . ?\e$,1NG\e(B)
+        (?\e$(3"+\e(B . ?\e$,1NH\e(B)
+        (?\e$(3",\e(B . ?\e$,1NI\e(B)
+        (?\e$(3"-\e(B . ?\e$,1NJ\e(B)
+        (?\e$(3".\e(B . ?\e$,1NK\e(B)
+        (?\e$(3"/\e(B . ?\e$,1NL\e(B)
+        (?\e$(3"0\e(B . ?\e$,1NM\e(B)
+        (?\e$(3"1\e(B . ?\e$,1NN\e(B)
+        (?\e$(3"2\e(B . ?\e$,1NO\e(B)
+        (?\e$(3"3\e(B . ?\e$,1NP\e(B)
+        (?\e$(3"4\e(B . ?\e$,1NQ\e(B)
+        (?\e$(3"5\e(B . ?\e$,1NR\e(B)
+        (?\e$(3"6\e(B . ?\e$,1NS\e(B)
+        (?\e$(3"7\e(B . ?\e$,1NT\e(B)
+        (?\e$(3"8\e(B . ?\e$,1NU\e(B)
+        (?\e$(3"9\e(B . ?\e$,1NV\e(B)
+        (?\e$(3":\e(B . ?\e$,1NW\e(B)
+        (?\e$(3";\e(B . ?\e$,1NX\e(B)
+        (?\e$(3"<\e(B . ?\e$,1NY\e(B)
+        (?\e$(3"=\e(B . ?\e$,1NZ\e(B)
+        (?\e$(3">\e(B . ?\e$,1N[\e(B)
+        (?\e$(3"?\e(B . ?\e$,1N\\e(B)
+        (?\e$(3"@\e(B . ?\e$,1N]\e(B)
+        (?\e$(3"A\e(B . ?\e$,1N^\e(B)
+        (?\e$(3"B\e(B . ?\e$,1N_\e(B)
+        (?\e$(3"C\e(B . ?\e$,1N`\e(B)
+        (?\e$(3"D\e(B . ?\e$,1Na\e(B)
+        (?\e$(3"E\e(B . ?\e$,1Nb\e(B)
+        (?\e$(3"F\e(B . ?\e$,1Nc\e(B)
+        (?\e$(3"G\e(B . ?\e$,1Nd\e(B)
+        (?\e$(3"H\e(B . ?\e$,1Ne\e(B)
+        (?\e$(3"I\e(B . ?\e$,1Nf\e(B)
+        (?\e$(3"K\e(B . ?\e$,1Nh\e(B)
+        (?\e$(3"M\e(B . ?\e$,1Nj\e(B)
+        (?\e$(3"N\e(B . ?\e$,1Nk\e(B)
+        (?\e$(3"O\e(B . ?\e$,1Nl\e(B)
+        (?\e$(3"P\e(B . ?\e$,1Nm\e(B)
+        (?\e$(3"S\e(B . ?\e$,1Np\e(B)
+        (?\e$(3"T\e(B . ?\e$,1Nq\e(B)
+        (?\e$(3"U\e(B . ?\e$,1Nr\e(B)
+        (?\e$(3"V\e(B . ?\e$,1Ns\e(B)
+        (?\e$(3"W\e(B . ?\e$,1Nt\e(B)
+        (?\e$(3"X\e(B . ?\e$,1Nu\e(B)
+        (?\e$(3"Y\e(B . ?\e$,1Nv\e(B)
+        (?\e$(3"Z\e(B . ?\e$,1Nw\e(B)
+        (?\e$(3"[\e(B . ?\e$,1Nx\e(B)
+        (?\e$(3"\\e(B . ?\e$,1Ny\e(B)
+        (?\e$(3"]\e(B . ?\e$,1Nz\e(B)
+        (?\e$(3"^\e(B . ?\e$,1N{\e(B)
+        (?\e$(3"_\e(B . ?\e$,1N|\e(B)
+        (?\e$(3"`\e(B . ?\e$,1N}\e(B)
+        (?\e$(3"a\e(B . ?\e$,1N~\e(B)
+        (?\e$(3"b\e(B . ?\e$,1N\7f\e(B)
+        (?\e$(3"c\e(B . ?\e$,1O \e(B)
+        (?\e$(3"d\e(B . ?\e$,1O!\e(B)
+        (?\e$(3"e\e(B . ?\e$,1O"\e(B)
+        (?\e$(3"f\e(B . ?\e$,1O#\e(B)
+        (?\e$(3"g\e(B . ?\e$,1O$\e(B)
+        (?\e$(3"h\e(B . ?\e$,1O%\e(B)
+        (?\e$(3"i\e(B . ?\e$,1O&\e(B)
+        (?\e$(3"j\e(B . ?\e$,1O'\e(B)
+        (?\e$(3"k\e(B . ?\e$,1O(\e(B)
+        (?\e$(3"l\e(B . ?\e$,1O)\e(B)
+        (?\e$(3"m\e(B . ?\e$,1O*\e(B)
+        (?\e$(3"n\e(B . ?\e$,1O+\e(B)
+        (?\e$(3"o\e(B . ?\e$,1O,\e(B)
+        (?\e$(3"p\e(B . ?\e$,1O-\e(B)
+        (?\e$(3"q\e(B . ?\e$,1O.\e(B)
+        (?\e$(3"s\e(B . ?\e$,1O0\e(B)
+        (?\e$(3"u\e(B . ?\e$,1O2\e(B)
+        (?\e$(3"v\e(B . ?\e$,1O3\e(B)
+        (?\e$(3"w\e(B . ?\e$,1O4\e(B)
+        (?\e$(3"x\e(B . ?\e$,1O5\e(B)
+        (?\e$(3"{\e(B . ?\e$,1O8\e(B)
+        (?\e$(3"|\e(B . ?\e$,1O9\e(B)
+        (?\e$(3"}\e(B . ?\e$,1O:\e(B)
+        (?\e$(3"~\e(B . ?\e$,1O;\e(B)
+        (?\e$(3#!\e(B . ?\e$,1O<\e(B)
+        (?\e$(3#"\e(B . ?\e$,1O=\e(B)
+        (?\e$(3##\e(B . ?\e$,1O>\e(B)
+        (?\e$(3#%\e(B . ?\e$,1O@\e(B)
+        (?\e$(3#'\e(B . ?\e$,1OB\e(B)
+        (?\e$(3#(\e(B . ?\e$,1OC\e(B)
+        (?\e$(3#)\e(B . ?\e$,1OD\e(B)
+        (?\e$(3#*\e(B . ?\e$,1OE\e(B)
+        (?\e$(3#-\e(B . ?\e$,1OH\e(B)
+        (?\e$(3#.\e(B . ?\e$,1OI\e(B)
+        (?\e$(3#/\e(B . ?\e$,1OJ\e(B)
+        (?\e$(3#0\e(B . ?\e$,1OK\e(B)
+        (?\e$(3#1\e(B . ?\e$,1OL\e(B)
+        (?\e$(3#2\e(B . ?\e$,1OM\e(B)
+        (?\e$(3#3\e(B . ?\e$,1ON\e(B)
+        (?\e$(3#5\e(B . ?\e$,1OP\e(B)
+        (?\e$(3#6\e(B . ?\e$,1OQ\e(B)
+        (?\e$(3#7\e(B . ?\e$,1OR\e(B)
+        (?\e$(3#8\e(B . ?\e$,1OS\e(B)
+        (?\e$(3#9\e(B . ?\e$,1OT\e(B)
+        (?\e$(3#:\e(B . ?\e$,1OU\e(B)
+        (?\e$(3#;\e(B . ?\e$,1OV\e(B)
+        (?\e$(3#=\e(B . ?\e$,1OX\e(B)
+        (?\e$(3#>\e(B . ?\e$,1OY\e(B)
+        (?\e$(3#?\e(B . ?\e$,1OZ\e(B)
+        (?\e$(3#@\e(B . ?\e$,1O[\e(B)
+        (?\e$(3#A\e(B . ?\e$,1O\\e(B)
+        (?\e$(3#B\e(B . ?\e$,1O]\e(B)
+        (?\e$(3#C\e(B . ?\e$,1O^\e(B)
+        (?\e$(3#D\e(B . ?\e$,1O_\e(B)
+        (?\e$(3#E\e(B . ?\e$,1O`\e(B)
+        (?\e$(3#F\e(B . ?\e$,1Oa\e(B)
+        (?\e$(3#G\e(B . ?\e$,1Ob\e(B)
+        (?\e$(3#H\e(B . ?\e$,1Oc\e(B)
+        (?\e$(3#I\e(B . ?\e$,1Od\e(B)
+        (?\e$(3#J\e(B . ?\e$,1Oe\e(B)
+        (?\e$(3#K\e(B . ?\e$,1Of\e(B)
+        (?\e$(3#L\e(B . ?\e$,1Og\e(B)
+        (?\e$(3#M\e(B . ?\e$,1Oh\e(B)
+        (?\e$(3#N\e(B . ?\e$,1Oi\e(B)
+        (?\e$(3#O\e(B . ?\e$,1Oj\e(B)
+        (?\e$(3#P\e(B . ?\e$,1Ok\e(B)
+        (?\e$(3#Q\e(B . ?\e$,1Ol\e(B)
+        (?\e$(3#R\e(B . ?\e$,1Om\e(B)
+        (?\e$(3#S\e(B . ?\e$,1On\e(B)
+        (?\e$(3#U\e(B . ?\e$,1Op\e(B)
+        (?\e$(3#V\e(B . ?\e$,1Oq\e(B)
+        (?\e$(3#W\e(B . ?\e$,1Or\e(B)
+        (?\e$(3#X\e(B . ?\e$,1Os\e(B)
+        (?\e$(3#Y\e(B . ?\e$,1Ot\e(B)
+        (?\e$(3#Z\e(B . ?\e$,1Ou\e(B)
+        (?\e$(3#[\e(B . ?\e$,1Ov\e(B)
+        (?\e$(3#\\e(B . ?\e$,1Ow\e(B)
+        (?\e$(3#]\e(B . ?\e$,1Ox\e(B)
+        (?\e$(3#^\e(B . ?\e$,1Oy\e(B)
+        (?\e$(3#_\e(B . ?\e$,1Oz\e(B)
+        (?\e$(3#`\e(B . ?\e$,1O{\e(B)
+        (?\e$(3#a\e(B . ?\e$,1O|\e(B)
+        (?\e$(3#b\e(B . ?\e$,1O}\e(B)
+        (?\e$(3#c\e(B . ?\e$,1O~\e(B)
+        (?\e$(3#d\e(B . ?\e$,1O\7f\e(B)
+        (?\e$(3#e\e(B . ?\e$,1P \e(B)
+        (?\e$(3#f\e(B . ?\e$,1P!\e(B)
+        (?\e$(3#g\e(B . ?\e$,1P"\e(B)
+        (?\e$(3#h\e(B . ?\e$,1P#\e(B)
+        (?\e$(3#i\e(B . ?\e$,1P$\e(B)
+        (?\e$(3#j\e(B . ?\e$,1P%\e(B)
+        (?\e$(3#k\e(B . ?\e$,1P&\e(B)
+        (?\e$(3#l\e(B . ?\e$,1P'\e(B)
+        (?\e$(3#m\e(B . ?\e$,1P(\e(B)
+        (?\e$(3#n\e(B . ?\e$,1P)\e(B)
+        (?\e$(3#o\e(B . ?\e$,1P*\e(B)
+        (?\e$(3#p\e(B . ?\e$,1P+\e(B)
+        (?\e$(3#q\e(B . ?\e$,1P,\e(B)
+        (?\e$(3#r\e(B . ?\e$,1P-\e(B)
+        (?\e$(3#s\e(B . ?\e$,1P.\e(B)
+        (?\e$(3#u\e(B . ?\e$,1P0\e(B)
+        (?\e$(3#w\e(B . ?\e$,1P2\e(B)
+        (?\e$(3#x\e(B . ?\e$,1P3\e(B)
+        (?\e$(3#y\e(B . ?\e$,1P4\e(B)
+        (?\e$(3#z\e(B . ?\e$,1P5\e(B)
+        (?\e$(3#}\e(B . ?\e$,1P8\e(B)
+        (?\e$(3#~\e(B . ?\e$,1P9\e(B)
+        (?\e$(3$!\e(B . ?\e$,1P:\e(B)
+        (?\e$(3$"\e(B . ?\e$,1P;\e(B)
+        (?\e$(3$#\e(B . ?\e$,1P<\e(B)
+        (?\e$(3$$\e(B . ?\e$,1P=\e(B)
+        (?\e$(3$%\e(B . ?\e$,1P>\e(B)
+        (?\e$(3$'\e(B . ?\e$,1P@\e(B)
+        (?\e$(3$(\e(B . ?\e$,1PA\e(B)
+        (?\e$(3$)\e(B . ?\e$,1PB\e(B)
+        (?\e$(3$*\e(B . ?\e$,1PC\e(B)
+        (?\e$(3$+\e(B . ?\e$,1PD\e(B)
+        (?\e$(3$,\e(B . ?\e$,1PE\e(B)
+        (?\e$(3$-\e(B . ?\e$,1PF\e(B)
+        (?\e$(3$.\e(B . ?\e$,1PG\e(B)
+        (?\e$(3$/\e(B . ?\e$,1PH\e(B)
+        (?\e$(3$0\e(B . ?\e$,1PI\e(B)
+        (?\e$(3$1\e(B . ?\e$,1PJ\e(B)
+        (?\e$(3$2\e(B . ?\e$,1PK\e(B)
+        (?\e$(3$3\e(B . ?\e$,1PL\e(B)
+        (?\e$(3$4\e(B . ?\e$,1PM\e(B)
+        (?\e$(3$5\e(B . ?\e$,1PN\e(B)
+        (?\e$(3$6\e(B . ?\e$,1PO\e(B)
+        (?\e$(3$7\e(B . ?\e$,1PP\e(B)
+        (?\e$(3$8\e(B . ?\e$,1PQ\e(B)
+        (?\e$(3$9\e(B . ?\e$,1PR\e(B)
+        (?\e$(3$:\e(B . ?\e$,1PS\e(B)
+        (?\e$(3$;\e(B . ?\e$,1PT\e(B)
+        (?\e$(3$<\e(B . ?\e$,1PU\e(B)
+        (?\e$(3$=\e(B . ?\e$,1PV\e(B)
+        (?\e$(3$>\e(B . ?\e$,1PW\e(B)
+        (?\e$(3$?\e(B . ?\e$,1PX\e(B)
+        (?\e$(3$@\e(B . ?\e$,1PY\e(B)
+        (?\e$(3$A\e(B . ?\e$,1PZ\e(B)
+        (?\e$(3$B\e(B . ?\e$,1P[\e(B)
+        (?\e$(3$C\e(B . ?\e$,1P\\e(B)
+        (?\e$(3$D\e(B . ?\e$,1P]\e(B)
+        (?\e$(3$E\e(B . ?\e$,1P^\e(B)
+        (?\e$(3$F\e(B . ?\e$,1P_\e(B)
+        (?\e$(3$G\e(B . ?\e$,1P`\e(B)
+        (?\e$(3$H\e(B . ?\e$,1Pa\e(B)
+        (?\e$(3$I\e(B . ?\e$,1Pb\e(B)
+        (?\e$(3$J\e(B . ?\e$,1Pc\e(B)
+        (?\e$(3$K\e(B . ?\e$,1Pd\e(B)
+        (?\e$(3$L\e(B . ?\e$,1Pe\e(B)
+        (?\e$(3$M\e(B . ?\e$,1Pf\e(B)
+        (?\e$(3$O\e(B . ?\e$,1Ph\e(B)
+        (?\e$(3$P\e(B . ?\e$,1Pi\e(B)
+        (?\e$(3$Q\e(B . ?\e$,1Pj\e(B)
+        (?\e$(3$R\e(B . ?\e$,1Pk\e(B)
+        (?\e$(3$S\e(B . ?\e$,1Pl\e(B)
+        (?\e$(3$T\e(B . ?\e$,1Pm\e(B)
+        (?\e$(3$U\e(B . ?\e$,1Pn\e(B)
+        (?\e$(3$V\e(B . ?\e$,1Po\e(B)
+        (?\e$(3$W\e(B . ?\e$,1Pp\e(B)
+        (?\e$(3$X\e(B . ?\e$,1Pq\e(B)
+        (?\e$(3$Y\e(B . ?\e$,1Pr\e(B)
+        (?\e$(3$Z\e(B . ?\e$,1Ps\e(B)
+        (?\e$(3$[\e(B . ?\e$,1Pt\e(B)
+        (?\e$(3$\\e(B . ?\e$,1Pu\e(B)
+        (?\e$(3$]\e(B . ?\e$,1Pv\e(B)
+        (?\e$(3$^\e(B . ?\e$,1Pw\e(B)
+        (?\e$(3$_\e(B . ?\e$,1Px\e(B)
+        (?\e$(3$`\e(B . ?\e$,1Py\e(B)
+        (?\e$(3$a\e(B . ?\e$,1Pz\e(B)
+        (?\e$(3$h\e(B . ?\e$,1Q!\e(B)
+        (?\e$(3$i\e(B . ?\e$,1Q"\e(B)
+        (?\e$(3$j\e(B . ?\e$,1Q#\e(B)
+        (?\e$(3$k\e(B . ?\e$,1Q$\e(B)
+        (?\e$(3$l\e(B . ?\e$,1Q%\e(B)
+        (?\e$(3$m\e(B . ?\e$,1Q&\e(B)
+        (?\e$(3$n\e(B . ?\e$,1Q'\e(B)
+        (?\e$(3$o\e(B . ?\e$,1Q(\e(B)
+        (?\e$(3$p\e(B . ?\e$,1Q)\e(B)
+        (?\e$(3$q\e(B . ?\e$,1Q*\e(B)
+        (?\e$(3$r\e(B . ?\e$,1Q+\e(B)
+        (?\e$(3$s\e(B . ?\e$,1Q,\e(B)
+        (?\e$(3$t\e(B . ?\e$,1Q-\e(B)
+        (?\e$(3$u\e(B . ?\e$,1Q.\e(B)
+        (?\e$(3$v\e(B . ?\e$,1Q/\e(B)
+        (?\e$(3$w\e(B . ?\e$,1Q0\e(B)
+        (?\e$(3$x\e(B . ?\e$,1Q1\e(B)
+        (?\e$(3$y\e(B . ?\e$,1Q2\e(B)
+        (?\e$(3$z\e(B . ?\e$,1Q3\e(B)
+        (?\e$(3${\e(B . ?\e$,1Q4\e(B)
+        (?\e$(3$|\e(B . ?\e$,1Q5\e(B)
+        (?\e$(3$}\e(B . ?\e$,1Q6\e(B)
+        (?\e$(3$~\e(B . ?\e$,1Q7\e(B)
+        (?\e$(3%!\e(B . ?\e$,1Q8\e(B)
+        (?\e$(3%"\e(B . ?\e$,1Q9\e(B)
+        (?\e$(3%#\e(B . ?\e$,1Q:\e(B)
+        (?\e$(3%$\e(B . ?\e$,1Q;\e(B)
+        (?\e$(3%%\e(B . ?\e$,1Q<\e(B)))
+
+      (indian-is13194
+       '((?\e(5!\e(B . ?\e$,15A\e(B)
+        (?\e(5"\e(B . ?\e$,15B\e(B)
+        (?\e(5#\e(B . ?\e$,15C\e(B)
+        (?\e(5$\e(B . ?\e$,15E\e(B)
+        (?\e(5%\e(B . ?\e$,15F\e(B)
+        (?\e(5&\e(B . ?\e$,15G\e(B)
+        (?\e(5'\e(B . ?\e$,15H\e(B)
+        (?\e(5(\e(B . ?\e$,15I\e(B)
+        (?\e(5)\e(B . ?\e$,15J\e(B)
+        (?\e(5*\e(B . ?\e$,15K\e(B)
+        (?\e(5+\e(B . ?\e$,15N\e(B)
+        (?\e(5,\e(B . ?\e$,15O\e(B)
+        (?\e(5-\e(B . ?\e$,15P\e(B)
+        (?\e(5.\e(B . ?\e$,15M\e(B)
+        (?\e(5/\e(B . ?\e$,15R\e(B)
+        (?\e(50\e(B . ?\e$,15S\e(B)
+        (?\e(51\e(B . ?\e$,15T\e(B)
+        (?\e(52\e(B . ?\e$,15M\e(B)
+        (?\e(53\e(B . ?\e$,15U\e(B)
+        (?\e(54\e(B . ?\e$,15V\e(B)
+        (?\e(55\e(B . ?\e$,15W\e(B)
+        (?\e(56\e(B . ?\e$,15X\e(B)
+        (?\e(57\e(B . ?\e$,15Y\e(B)
+        (?\e(58\e(B . ?\e$,15Z\e(B)
+        (?\e(59\e(B . ?\e$,15[\e(B)
+        (?\e(5:\e(B . ?\e$,15\\e(B)
+        (?\e(5;\e(B . ?\e$,15]\e(B)
+        (?\e(5<\e(B . ?\e$,15^\e(B)
+        (?\e(5=\e(B . ?\e$,15_\e(B)
+        (?\e(5>\e(B . ?\e$,15`\e(B)
+        (?\e(5?\e(B . ?\e$,15a\e(B)
+        (?\e(5@\e(B . ?\e$,15b\e(B)
+        (?\e(5A\e(B . ?\e$,15c\e(B)
+        (?\e(5B\e(B . ?\e$,15d\e(B)
+        (?\e(5C\e(B . ?\e$,15e\e(B)
+        (?\e(5D\e(B . ?\e$,15f\e(B)
+        (?\e(5E\e(B . ?\e$,15g\e(B)
+        (?\e(5F\e(B . ?\e$,15h\e(B)
+        (?\e(5G\e(B . ?\e$,15i\e(B)
+        (?\e(5H\e(B . ?\e$,15j\e(B)
+        (?\e(5I\e(B . ?\e$,15k\e(B)
+        (?\e(5J\e(B . ?\e$,15l\e(B)
+        (?\e(5K\e(B . ?\e$,15m\e(B)
+        (?\e(5L\e(B . ?\e$,15n\e(B)
+        (?\e(5M\e(B . ?\e$,15o\e(B)
+        (?\e(5N\e(B . ?\e$,16?\e(B)
+        (?\e(5O\e(B . ?\e$,15p\e(B)
+        (?\e(5P\e(B . ?\e$,15q\e(B)
+        (?\e(5Q\e(B . ?\e$,15r\e(B)
+        (?\e(5R\e(B . ?\e$,15s\e(B)
+        (?\e(5S\e(B . ?\e$,15t\e(B)
+        (?\e(5T\e(B . ?\e$,15u\e(B)
+        (?\e(5U\e(B . ?\e$,15v\e(B)
+        (?\e(5V\e(B . ?\e$,15w\e(B)
+        (?\e(5W\e(B . ?\e$,15x\e(B)
+        (?\e(5X\e(B . ?\e$,15y\e(B)
+        (?\e(5Z\e(B . ?\e$,15~\e(B)
+        (?\e(5[\e(B . ?\e$,15\7f\e(B)
+        (?\e(5\\e(B . ?\e$,16 \e(B)
+        (?\e(5]\e(B . ?\e$,16!\e(B)
+        (?\e(5^\e(B . ?\e$,16"\e(B)
+        (?\e(5_\e(B . ?\e$,16#\e(B)
+        (?\e(5`\e(B . ?\e$,16&\e(B)
+        (?\e(5a\e(B . ?\e$,16'\e(B)
+        (?\e(5b\e(B . ?\e$,16(\e(B)
+        (?\e(5c\e(B . ?\e$,16%\e(B)
+        (?\e(5d\e(B . ?\e$,16*\e(B)
+        (?\e(5e\e(B . ?\e$,16+\e(B)
+        (?\e(5f\e(B . ?\e$,16,\e(B)
+        (?\e(5g\e(B . ?\e$,16)\e(B)
+        (?\e(5h\e(B . ?\e$,16-\e(B)
+        (?\e(5i\e(B . ?\e$,15|\e(B)
+        (?\e(5j\e(B . ?\e$,16D\e(B)
+        (?\e(5q\e(B . ?\e$,16F\e(B)
+        (?\e(5r\e(B . ?\e$,16G\e(B)
+        (?\e(5s\e(B . ?\e$,16H\e(B)
+        (?\e(5t\e(B . ?\e$,16I\e(B)
+        (?\e(5u\e(B . ?\e$,16J\e(B)
+        (?\e(5v\e(B . ?\e$,16K\e(B)
+        (?\e(5w\e(B . ?\e$,16L\e(B)
+        (?\e(5x\e(B . ?\e$,16M\e(B)
+        (?\e(5y\e(B . ?\e$,16N\e(B)
+        (?\e(5z\e(B . ?\e$,16O\e(B)))
+
+      (katakana-jisx0201
+       '((?\e(I!\e(B . ?\e$,3sa\e(B)
+        (?\\e(I"\e(B . ?\\e$,3sb\e(B)
+        (?\\e(I#\e(B . ?\\e$,3sc\e(B)
+        (?\e(I$\e(B . ?\e$,3sd\e(B)
+        (?\e(I%\e(B . ?\e$,3se\e(B)
+        (?\e(I&\e(B . ?\e$,3sf\e(B)
+        (?\e(I'\e(B . ?\e$,3sg\e(B)
+        (?\e(I(\e(B . ?\e$,3sh\e(B)
+        (?\e(I)\e(B . ?\e$,3si\e(B)
+        (?\e(I*\e(B . ?\e$,3sj\e(B)
+        (?\e(I+\e(B . ?\e$,3sk\e(B)
+        (?\e(I,\e(B . ?\e$,3sl\e(B)
+        (?\e(I-\e(B . ?\e$,3sm\e(B)
+        (?\e(I.\e(B . ?\e$,3sn\e(B)
+        (?\e(I/\e(B . ?\e$,3so\e(B)
+        (?\e(I0\e(B . ?\e$,3sp\e(B)
+        (?\e(I1\e(B . ?\e$,3sq\e(B)
+        (?\e(I2\e(B . ?\e$,3sr\e(B)
+        (?\e(I3\e(B . ?\e$,3ss\e(B)
+        (?\e(I4\e(B . ?\e$,3st\e(B)
+        (?\e(I5\e(B . ?\e$,3su\e(B)
+        (?\e(I6\e(B . ?\e$,3sv\e(B)
+        (?\e(I7\e(B . ?\e$,3sw\e(B)
+        (?\e(I8\e(B . ?\e$,3sx\e(B)
+        (?\e(I9\e(B . ?\e$,3sy\e(B)
+        (?\e(I:\e(B . ?\e$,3sz\e(B)
+        (?\e(I;\e(B . ?\e$,3s{\e(B)
+        (?\e(I<\e(B . ?\e$,3s|\e(B)
+        (?\e(I=\e(B . ?\e$,3s}\e(B)
+        (?\e(I>\e(B . ?\e$,3s~\e(B)
+        (?\e(I?\e(B . ?\e$,3s\7f\e(B)
+        (?\e(I@\e(B . ?\e$,3t \e(B)
+        (?\e(IA\e(B . ?\e$,3t!\e(B)
+        (?\e(IB\e(B . ?\e$,3t"\e(B)
+        (?\e(IC\e(B . ?\e$,3t#\e(B)
+        (?\e(ID\e(B . ?\e$,3t$\e(B)
+        (?\e(IE\e(B . ?\e$,3t%\e(B)
+        (?\e(IF\e(B . ?\e$,3t&\e(B)
+        (?\e(IG\e(B . ?\e$,3t'\e(B)
+        (?\e(IH\e(B . ?\e$,3t(\e(B)
+        (?\e(II\e(B . ?\e$,3t)\e(B)
+        (?\e(IJ\e(B . ?\e$,3t*\e(B)
+        (?\e(IK\e(B . ?\e$,3t+\e(B)
+        (?\e(IL\e(B . ?\e$,3t,\e(B)
+        (?\e(IM\e(B . ?\e$,3t-\e(B)
+        (?\e(IN\e(B . ?\e$,3t.\e(B)
+        (?\e(IO\e(B . ?\e$,3t/\e(B)
+        (?\e(IP\e(B . ?\e$,3t0\e(B)
+        (?\e(IQ\e(B . ?\e$,3t1\e(B)
+        (?\e(IR\e(B . ?\e$,3t2\e(B)
+        (?\e(IS\e(B . ?\e$,3t3\e(B)
+        (?\e(IT\e(B . ?\e$,3t4\e(B)
+        (?\e(IU\e(B . ?\e$,3t5\e(B)
+        (?\e(IV\e(B . ?\e$,3t6\e(B)
+        (?\e(IW\e(B . ?\e$,3t7\e(B)
+        (?\e(IX\e(B . ?\e$,3t8\e(B)
+        (?\e(IY\e(B . ?\e$,3t9\e(B)
+        (?\e(IZ\e(B . ?\e$,3t:\e(B)
+        (?\e(I[\e(B . ?\e$,3t;\e(B)
+        (?\e(I\\e(B . ?\e$,3t<\e(B)
+        (?\e(I]\e(B . ?\e$,3t=\e(B)
+        (?\e(I^\e(B . ?\e$,3t>\e(B)
+        (?\e(I_\e(B . ?\e$,3t?\e(B)))
+
+      (chinese-sisheng
+       '((?\e(0!\e(B . ?\e$,1 !\e(B)
+        (?\e(0"\e(B . ?\e,Aa\e(B)
+        (?\e(0#\e(B . ?\e$,1".\e(B)
+        (?\e(0$\e(B . ?\e,A`\e(B)
+        (?\e(0%\e(B . ?\e$,1 3\e(B)
+        (?\e(0&\e(B . ?\e,Ai\e(B)
+        (?\e(0'\e(B . ?\e$,1 ;\e(B)
+        (?\e(0(\e(B . ?\e,Ah\e(B)
+        (?\e(0)\e(B . ?\e$,1 K\e(B)
+        (?\e(0*\e(B . ?\e,Am\e(B)
+        (?\e(0+\e(B . ?\e$,1"0\e(B)
+        (?\e(0,\e(B . ?\e,Al\e(B)
+        (?\e(0-\e(B . ?\e$,1 m\e(B)
+        (?\e(0.\e(B . ?\e,As\e(B)
+        (?\e(0/\e(B . ?\e$,1"2\e(B)
+        (?\e(00\e(B . ?\e,Ar\e(B)
+        (?\e(01\e(B . ?\e$,1!+\e(B)
+        (?\e(02\e(B . ?\e,Az\e(B)
+        (?\e(03\e(B . ?\e$,1"4\e(B)
+        (?\e(04\e(B . ?\e,Ay\e(B)
+        (?\e(05\e(B . ?\e$,1"6\e(B)
+        (?\e(06\e(B . ?\e$,1"8\e(B)
+        (?\e(07\e(B . ?\e$,1":\e(B)
+        (?\e(08\e(B . ?\e$,1"<\e(B)
+        (?\e(09\e(B . ?\e,A|\e(B)
+        (?\e(0:\e(B . ?\e,Aj\e(B)
+        (?\e(0<\e(B . ?\e$,1m\7f\e(B)
+        (?\e(0=\e(B . ?\e$,1 d\e(B)
+        (?\e(0>\e(B . ?\e$,1 h\e(B)
+        (?\e(0?\e(B . ?\e$,1"Y\e(B)
+        (?\e(0A\e(B . ?\e$,1$i\e(B)
+        (?\e(0B\e(B . ?\e$,1$j\e(B)
+        (?\e(0C\e(B . ?\e$,1$g\e(B)
+        (?\e(0D\e(B . ?\e$,1$k\e(B)
+        (?\e(0E\e(B . ?\e$,2@%\e(B)
+        (?\e(0F\e(B . ?\e$,2@&\e(B)
+        (?\e(0G\e(B . ?\e$,2@'\e(B)
+        (?\e(0H\e(B . ?\e$,2@(\e(B)
+        (?\e(0I\e(B . ?\e$,2@)\e(B)
+        (?\e(0J\e(B . ?\e$,2@*\e(B)
+        (?\e(0K\e(B . ?\e$,2@+\e(B)
+        (?\e(0L\e(B . ?\e$,2@,\e(B)
+        (?\e(0M\e(B . ?\e$,2@-\e(B)
+        (?\e(0N\e(B . ?\e$,2@.\e(B)
+        (?\e(0O\e(B . ?\e$,2@/\e(B)
+        (?\e(0P\e(B . ?\e$,2@0\e(B)
+        (?\e(0Q\e(B . ?\e$,2@1\e(B)
+        (?\e(0R\e(B . ?\e$,2@2\e(B)
+        (?\e(0S\e(B . ?\e$,2@3\e(B)
+        (?\e(0T\e(B . ?\e$,2@4\e(B)
+        (?\e(0U\e(B . ?\e$,2@5\e(B)
+        (?\e(0V\e(B . ?\e$,2@6\e(B)
+        (?\e(0W\e(B . ?\e$,2@7\e(B)
+        (?\e(0X\e(B . ?\e$,2@8\e(B)
+        (?\e(0Y\e(B . ?\e$,2@9\e(B)
+        (?\e(0Z\e(B . ?\e$,2@:\e(B)
+        (?\e(0[\e(B . ?\e$,2@;\e(B)
+        (?\e(0\\e(B . ?\e$,2@<\e(B)
+        (?\e(0]\e(B . ?\e$,2@=\e(B)
+        (?\e(0^\e(B . ?\e$,2@>\e(B)
+        (?\e(0_\e(B . ?\e$,2@?\e(B)
+        (?\e(0`\e(B . ?\e$,2@@\e(B)
+        (?\e(0a\e(B . ?\e$,2@A\e(B)
+        (?\e(0b\e(B . ?\e$,2@B\e(B)
+        (?\e(0c\e(B . ?\e$,2@C\e(B)
+        (?\e(0d\e(B . ?\e$,2@D\e(B)
+        (?\e(0e\e(B . ?\e$,2@E\e(B)
+        (?\e(0f\e(B . ?\e$,2@F\e(B)
+        (?\e(0g\e(B . ?\e$,2@G\e(B)
+        (?\e(0h\e(B . ?\e$,2@H\e(B)
+        (?\e(0i\e(B . ?\e$,2@I\e(B)))
+
+      (lao
+       '((?\e(1!\e(B . ?\e$,1D!\e(B)
+        (?\e(1"\e(B . ?\e$,1D"\e(B)
+        (?\e(1$\e(B . ?\e$,1D$\e(B)
+        (?\e(1'\e(B . ?\e$,1D'\e(B)
+        (?\e(1(\e(B . ?\e$,1D(\e(B)
+        (?\e(1*\e(B . ?\e$,1D*\e(B)
+        (?\e(1-\e(B . ?\e$,1D-\e(B)
+        (?\e(14\e(B . ?\e$,1D4\e(B)
+        (?\e(15\e(B . ?\e$,1D5\e(B)
+        (?\e(16\e(B . ?\e$,1D6\e(B)
+        (?\e(17\e(B . ?\e$,1D7\e(B)
+        (?\e(19\e(B . ?\e$,1D9\e(B)
+        (?\e(1:\e(B . ?\e$,1D:\e(B)
+        (?\e(1;\e(B . ?\e$,1D;\e(B)
+        (?\e(1<\e(B . ?\e$,1D<\e(B)
+        (?\e(1=\e(B . ?\e$,1D=\e(B)
+        (?\e(1>\e(B . ?\e$,1D>\e(B)
+        (?\e(1?\e(B . ?\e$,1D?\e(B)
+        (?\e(1A\e(B . ?\e$,1DA\e(B)
+        (?\e(1B\e(B . ?\e$,1DB\e(B)
+        (?\e(1C\e(B . ?\e$,1DC\e(B)
+        (?\e(1E\e(B . ?\e$,1DE\e(B)
+        (?\e(1G\e(B . ?\e$,1DG\e(B)
+        (?\e(1J\e(B . ?\e$,1DJ\e(B)
+        (?\e(1K\e(B . ?\e$,1DK\e(B)
+        (?\e(1M\e(B . ?\e$,1DM\e(B)
+        (?\e(1N\e(B . ?\e$,1DN\e(B)
+        (?\e(1O\e(B . ?\e$,1DO\e(B)
+        (?\e(1P\e(B . ?\e$,1DP\e(B)
+        (?\e(1Q\e(B . ?\e$,1DQ\e(B)
+        (?\e(1R\e(B . ?\e$,1DR\e(B)
+        (?\e(1S\e(B . ?\e$,1DS\e(B)
+        (?\e(1T\e(B . ?\e$,1DT\e(B)
+        (?\e(1U\e(B . ?\e$,1DU\e(B)
+        (?\e(1V\e(B . ?\e$,1DV\e(B)
+        (?\e(1W\e(B . ?\e$,1DW\e(B)
+        (?\e(1X\e(B . ?\e$,1DX\e(B)
+        (?\e(1Y\e(B . ?\e$,1DY\e(B)
+        (?\e(1[\e(B . ?\e$,1D[\e(B)
+        (?\e(1\\e(B . ?\e$,1D\\e(B)
+        (?\e(1]\e(B . ?\e$,1D]\e(B)
+        (?\e(1`\e(B . ?\e$,1D`\e(B)
+        (?\e(1a\e(B . ?\e$,1Da\e(B)
+        (?\e(1b\e(B . ?\e$,1Db\e(B)
+        (?\e(1c\e(B . ?\e$,1Dc\e(B)
+        (?\e(1d\e(B . ?\e$,1Dd\e(B)
+        (?\e(1f\e(B . ?\e$,1Df\e(B)
+        (?\e(1h\e(B . ?\e$,1Dh\e(B)
+        (?\e(1i\e(B . ?\e$,1Di\e(B)
+        (?\e(1j\e(B . ?\e$,1Dj\e(B)
+        (?\e(1k\e(B . ?\e$,1Dk\e(B)
+        (?\e(1l\e(B . ?\e$,1Dl\e(B)
+        (?\e(1m\e(B . ?\e$,1Dm\e(B)
+        (?\e(1p\e(B . ?\e$,1Dp\e(B)
+        (?\e(1q\e(B . ?\e$,1Dq\e(B)
+        (?\e(1r\e(B . ?\e$,1Dr\e(B)
+        (?\e(1s\e(B . ?\e$,1Ds\e(B)
+        (?\e(1t\e(B . ?\e$,1Dt\e(B)
+        (?\e(1u\e(B . ?\e$,1Du\e(B)
+        (?\e(1v\e(B . ?\e$,1Dv\e(B)
+        (?\e(1w\e(B . ?\e$,1Dw\e(B)
+        (?\e(1x\e(B . ?\e$,1Dx\e(B)
+        (?\e(1y\e(B . ?\e$,1Dy\e(B)
+        (?\e(1|\e(B . ?\e$,1D|\e(B)
+        (?\e(1}\e(B . ?\e$,1D}\e(B)))
+
+      (other
+       '(
+        ;; latin-jisx0201 is mostly decoded to ascii, with these
+        ;; exceptions, so we don't bother with tables for the whole
+        ;; thing.
+        (?\e(J\\e(B . ?\e,A%\e(B)
+        (?\e(J~\e(B . ?\e$,1s>\e(B))))
+  (let ((table (make-char-table 'safe-chars))
+       safe-charsets)
+    (dolist (cs '(vietnamese-viscii lao chinese-sisheng ipa
+                 katakana-jisx0201 thai-tis620 tibetan-iso-8bit
+                 indian-is13194 ethiopic other))
+      ;; These tables could be used as translation-table-for-encode by
+      ;; the relevant coding systems.
+      (let ((encode-translator
+            (if (coding-system-p cs)
+                (set (intern (format "ucs-%s-encode-table" cs))
+                     (make-translation-table)))))
+       (dolist (pair (symbol-value cs))
+         (aset ucs-mule-to-mule-unicode (car pair) (cdr pair))
+         (if encode-translator
+             (aset encode-translator (cdr pair) (car pair))))
+       (if encode-translator
+           (optimize-char-table encode-translator))
+       (if (charsetp cs)
+           (push cs safe-charsets)
+         (if (coding-system-p cs)
+             (setq safe-charsets
+                   (append (delq 'ascii (coding-system-get cs 'safe-charsets))
+                           safe-charsets))))
+       (cond ((eq cs 'vietnamese-viscii)
+              (coding-system-put 'vietnamese-viscii
+                                 'translation-table-for-input
+                                 encode-translator)
+              (coding-system-put 'vietnamese-viqr
+                                 'translation-table-for-input
+                                 encode-translator))
+             ((memq cs '(lao thai-tis620 tibetan-iso-8bit))
+              (coding-system-put cs 'translation-table-for-input
+                                 encode-translator)))))
+    (dolist (c safe-charsets)
+      (aset table (make-char c) t))))
+
+(define-minor-mode unify-8859-on-encoding-mode
+  "Set up translation-tables for unifying ISO 8859 characters on encoding.
+
+The ISO 8859 characters sets overlap, e.g. 8859-1 (Latin-1) and
+8859-15 (Latin-9) differ only in a few characters.  Emacs normally
+distinguishes equivalent characters from those ISO-8859 character sets
+which are built in to Emacs.  This behavior is essentially inherited
+from the European-originated international standards.  Treating them
+equivalently, by translating to and from a single representation is
+called `unification'.  (The `utf-8' coding system treats the
+characters of European scripts in a unified manner.)
+
+In this mode, on encoding -- i.e. output operations -- non-ASCII
+characters from the built-in ISO 8859 and `mule-unicode-0100-24ff'
+charsets are handled automatically by the coding system used if it can
+represent them.  Thus, say, an e-acute from the Latin-1 charset (the
+unified representation) in a buffer saved as Latin-9 will be encoded
+directly to a byte value 233.  By default, in contrast, you would be
+prompted for a general coding system to use for saving the file, which
+can cope with separate Latin-1 and Latin-9 representations of e-acute.
+
+Also sets hooks that arrange `translation-table-for-input' to be set
+up locally.  This will often allow input generated by Quail input
+methods to conform with what the buffer's file coding system can
+encode.  Thus you could use a Latin-2 input method to search for
+e-acute in a Latin-1 buffer.
+
+See also command `unify-8859-on-decoding-mode'."
+  :group 'mule
+  :global t
+  :init-value t
+  (if unify-8859-on-encoding-mode
+      (ucs-unify-8859 t nil)
+    (ucs-fragment-8859 t nil)))
+
+(custom-add-version 'unify-8859-on-encoding-mode "21.3")
+
+(define-minor-mode unify-8859-on-decoding-mode
+  "Set up translation-tables for unifying ISO 8859 characters on decoding.
+On decoding, i.e. input operations, non-ASCII characters from the
+built-in ISO 8859 charsets are unified by mapping them into the
+`iso-latin-1' and `mule-unicode-0100-24ff' charsets.
+
+Also sets `translation-table-for-input' globally, so that keyboard input
+produces unified characters.
+
+See also command `unify-8859-on-encoding-mode' and the user option
+`utf-fragment-on-decoding'."
+  :group 'mule
+  :global t
+  :init-value nil
+  (if unify-8859-on-decoding-mode
+      (ucs-unify-8859 nil t)
+    (ucs-fragment-8859 nil t)))
+
+(custom-add-version 'unify-8859-on-decoding-mode "21.3")
+
+;; Synchronize the status with the initial value of
+;; unify-8859-on-encoding-mode and unify-8859-on-decoding-mode.
+(ucs-unify-8859 t nil)
+
+;; Arrange to set up the translation-table for keyboard input.  This
+;; is called from get-buffer-create, set-buffer-file-coding-system,
+;; normal-mode and minibuffer-setup-hook.
+(defun ucs-set-table-for-input (&optional buffer)
+  "Set up an appropriate `translation-table-for-input' for BUFFER.
+BUFFER defaults to the current buffer.  This function is
+automatically called directly at the end of `get-buffer-create'."
+  (when (and unify-8859-on-encoding-mode
+             (not unify-8859-on-decoding-mode)
+            (char-table-p translation-table-for-input))
+    (let ((cs (and buffer-file-coding-system
+                  (coding-system-base buffer-file-coding-system)))
+         table)
+      (if (or (null cs)
+             (eq cs 'undecided))
+         (setq cs
+               (and default-buffer-file-coding-system
+                    (coding-system-base default-buffer-file-coding-system))))
+      (when cs
+       (setq table (coding-system-get cs 'translation-table-for-encode))
+       (if (and table (symbolp table))
+           (setq table (get table 'translation-table)))
+       (unless (char-table-p table)
+         (setq table (coding-system-get cs 'translation-table-for-input))
+         (if (and table (symbolp table))
+             (setq table (get table 'translation-table))))
+       (when (char-table-p table)
+         (if buffer
+             (with-current-buffer buffer
+               (set (make-local-variable 'translation-table-for-input)
+                    table))
+           (set (make-local-variable 'translation-table-for-input)
+                table)))))))
+
+;; The minibuffer needs to acquire a `buffer-file-coding-system' for
+;; the above to work in it.
+(defun ucs-minibuffer-setup ()
+  "Set up an appropriate `buffer-file-coding-system' for current buffer.
+Intended to be added to `minibuffer-setup-hook'."
+  (set (make-local-variable 'buffer-file-coding-system)
+       (with-current-buffer (let ((win (minibuffer-selected-window)))
+                             (if (window-live-p win) (window-buffer win)
+                               (cadr (buffer-list))))
+        buffer-file-coding-system))
+  (ucs-set-table-for-input))
 
 (provide 'ucs-tables)
 
+;; arch-tag: b497e22b-7fe1-486a-9352-e2d7f7d76a76
 ;;; ucs-tables.el ends here