Removed packages that are included with Emacsen we support.
authorLars Magne Ingebrigtsen <larsi@quimbies.gnus.org>
Wed, 29 Sep 2010 19:15:54 +0000 (21:15 +0200)
committerLars Magne Ingebrigtsen <larsi@quimbies.gnus.org>
Wed, 29 Sep 2010 19:15:54 +0000 (21:15 +0200)
contrib/ChangeLog
contrib/sendmail.el [deleted file]
contrib/smtpmail.el [deleted file]
contrib/ucs-tables.el [deleted file]

index af41c6b..077154c 100644 (file)
@@ -1,3 +1,11 @@
+2010-09-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * smtpmail.el: Removed.
+
+       * ucs-tables.el: Removed.
+
+       * sendmail.el: Removed.
+
 2010-09-26 Julien Danjou <julien@danjou.info>
 
        * ssl.el: Removed.
diff --git a/contrib/sendmail.el b/contrib/sendmail.el
deleted file mode 100644 (file)
index 7f377db..0000000
+++ /dev/null
@@ -1,1926 +0,0 @@
-;;; sendmail.el --- mail sending commands for Emacs.  -*- byte-compile-dynamic: t -*-
-
-;; Copyright (C) 1985, 1986, 1992, 1993, 1994, 1995, 1996, 1998, 2000,
-;;   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-;;   Free Software Foundation, Inc.
-
-;; Maintainer: FSF
-;; Keywords: mail
-
-;; 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 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.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This mode provides mail-sending facilities from within Emacs.  It is
-;; documented in the Emacs user's manual.
-
-;;; Code:
-(eval-when-compile
-  ;; Necessary to avoid recursive `require's.
-  (provide 'sendmail)
-  (require 'rmail)
-  (require 'mailalias))
-
-(autoload 'rfc2047-encode-string "rfc2047")
-
-(defgroup sendmail nil
-  "Mail sending commands for Emacs."
-  :prefix "mail-"
-  :group 'mail)
-
-(defcustom mail-setup-with-from t
-  "Non-nil means insert `From:' field when setting up the message."
-  :type 'boolean
-  :group 'sendmail
-  :version "22.1")
-
-(defcustom sendmail-program
-  (cond
-    ((file-exists-p "/usr/sbin/sendmail") "/usr/sbin/sendmail")
-    ((file-exists-p "/usr/lib/sendmail") "/usr/lib/sendmail")
-    ((file-exists-p "/usr/ucblib/sendmail") "/usr/ucblib/sendmail")
-    (t "fakemail"))                    ;In ../etc, to interface to /bin/mail.
-  "Program used to send messages."
-  :group 'mail
-  :type 'file)
-
-;;;###autoload
-(defcustom mail-from-style 'angles
-  "Specifies how \"From:\" fields look.
-
-If `nil', they contain just the return address like:
-       king@grassland.com
-If `parens', they look like:
-       king@grassland.com (Elvis Parsley)
-If `angles', they look like:
-       Elvis Parsley <king@grassland.com>
-If `system-default', allows the mailer to insert its default From field
-derived from the envelope-from address.
-
-In old versions of Emacs, the `system-default' setting also caused
-Emacs to pass the proper email address from `user-mail-address'
-to the mailer to specify the envelope-from address.  But that is now
-controlled by a separate variable, `mail-specify-envelope-from'."
-  :type '(choice (const nil) (const parens) (const angles)
-                (const system-default))
-  :version "20.3"
-  :group 'sendmail)
-
-;;;###autoload
-(defcustom mail-specify-envelope-from nil
-  "If non-nil, specify the envelope-from address when sending mail.
-The value used to specify it is whatever is found in
-the variable `mail-envelope-from', with `user-mail-address' as fallback.
-
-On most systems, specifying the envelope-from address is a
-privileged operation.  This variable affects sendmail and
-smtpmail -- if you use feedmail to send mail, see instead the
-variable `feedmail-deduce-envelope-from'."
-  :version "21.1"
-  :type 'boolean
-  :group 'sendmail)
-
-(defcustom mail-envelope-from nil
-  "If non-nil, designate the envelope-from address when sending mail.
-This only has an effect if `mail-specify-envelope-from' is non-nil.
-The value should be either a string, or the symbol `header' (in
-which case the contents of the \"From\" header of the message
-being sent is used), or nil (in which case the value of
-`user-mail-address' is used)."
-  :version "21.1"
-  :type '(choice (string :tag "From-name")
-                (const :tag "Use From: header from message" header)
-                (const :tag "Use `user-mail-address'" nil))
-  :group 'sendmail)
-
-;;;###autoload
-(defcustom mail-self-blind nil
-  "Non-nil means insert BCC to self in messages to be sent.
-This is done when the message is initialized,
-so you can remove or alter the BCC field to override the default."
-  :type 'boolean
-  :group 'sendmail)
-
-;;;###autoload
-(defcustom mail-interactive t
-  ;; We used to use a default of nil rather than t, but nowadays it is very
-  ;; common for sendmail to be misconfigured, so one cannot rely on the
-  ;; bounce message to be delivered anywhere, least of all to the
-  ;; user's mailbox.
-  "Non-nil means when sending a message wait for and display errors.
-Otherwise, let mailer send back a message to report errors."
-  :type 'boolean
-  :group 'sendmail)
-
-(defcustom mail-yank-ignored-headers
-  (concat "^"
-          (regexp-opt '("via" "mail-from" "origin" "status" "remailed"
-                        "received" "message-id" "summary-line" "to" "subject"
-                        "in-reply-to" "return-path" "mail-reply-to"
-                        ;; Should really be rmail-attribute-header and
-                        ;; rmail-keyword-header, but this file does not
-                        ;; require rmail (at run time).
-                        "x-rmail-attributes" "x-rmail-keywords"
-                        "mail-followup-to") "\\(?:")
-          ":")
-  "Delete these headers from old message when it's inserted in a reply."
-  :type 'regexp
-  :group 'sendmail
-  :version "23.1")
-
-;; Prevent problems with `window-system' not having the correct value
-;; when loaddefs.el is loaded. `custom-reevaluate-setting' needs the
-;; standard value.
-;;;###autoload
-(put 'send-mail-function 'standard-value
-     '((if (and window-system (memq system-type '(darwin windows-nt)))
-          'mailclient-send-it
-        'sendmail-send-it)))
-
-;; Useful to set in site-init.el
-;;;###autoload
-(defcustom send-mail-function
-  (if (and window-system (memq system-type '(darwin windows-nt)))
-      'mailclient-send-it
-    'sendmail-send-it)
-  "Function to call to send the current buffer as mail.
-The headers should be delimited by a line which is
-not a valid RFC822 header or continuation line,
-that matches the variable `mail-header-separator'.
-This is used by the default mail-sending commands.  See also
-`message-send-mail-function' for use with the Message package."
-  :type '(radio (function-item sendmail-send-it :tag "Use Sendmail package")
-               (function-item smtpmail-send-it :tag "Use SMTPmail package")
-               (function-item feedmail-send-it :tag "Use Feedmail package")
-               (function-item mailclient-send-it :tag "Use Mailclient package")
-               function)
-  :group 'sendmail)
-
-;;;###autoload
-(defcustom mail-header-separator "--text follows this line--"
-  "Line used to separate headers from text in messages being composed."
-  :type 'string
-  :group 'sendmail)
-
-;; Set up mail-header-separator for use as a category text property.
-(put 'mail-header-separator 'rear-nonsticky '(category))
-;; This was a nice idea, for preventing accidental modification of
-;; the separator.   But I found it also prevented or obstructed
-;; certain deliberate operations, such as copying the separator line
-;; up to the top to send myself a copy of an already sent outgoing message
-;; and other things.  So I turned it off.  --rms.
-;;(put 'mail-header-separator 'read-only t)
-
-;;;###autoload
-(defcustom mail-archive-file-name nil
-  "Name of file to write all outgoing messages in, or nil for none.
-This is normally an mbox file, but for backwards compatibility may also
-be a Babyl file."
-  :type '(choice file (const nil))
-  :group 'sendmail)
-
-;;;###autoload
-(defcustom mail-default-reply-to nil
-  "Address to insert as default Reply-to field of outgoing messages.
-If nil, it will be initialized from the REPLYTO environment variable
-when you first send mail."
-  :type '(choice (const nil) string)
-  :group 'sendmail)
-
-;;;###autoload
-(defcustom mail-alias-file nil
-  "If non-nil, the name of a file to use instead of `/usr/lib/aliases'.
-This file defines aliases to be expanded by the mailer; this is a different
-feature from that of defining aliases in `.mailrc' to be expanded in Emacs.
-This variable has no effect unless your system uses sendmail as its mailer."
-  :type '(choice (const nil) file)
-  :group 'sendmail)
-
-;;;###autoload
-(defcustom mail-personal-alias-file "~/.mailrc"
-  "If non-nil, the name of the user's personal mail alias file.
-This file typically should be in same format as the `.mailrc' file used by
-the `Mail' or `mailx' program.
-This file need not actually exist."
-  :type '(choice (const nil) file)
-  :group 'sendmail)
-
-;;;###autoload
-(defcustom mail-setup-hook nil
-  "Normal hook, run each time a new outgoing mail message is initialized.
-The function `mail-setup' runs this hook."
-  :type 'hook
-  :options '(fortune-to-signature spook mail-abbrevs-setup)
-  :group 'sendmail)
-
-;;;###autoload
-(defvar mail-aliases t
-  "Alist of mail address aliases,
-or t meaning should be initialized from your mail aliases file.
-\(The file's name is normally `~/.mailrc', but `mail-personal-alias-file'
-can specify a different file name.)
-The alias definitions in the file have this form:
-    alias ALIAS MEANING")
-
-(defvar mail-alias-modtime nil
-  "The modification time of your mail alias file when it was last examined.")
-
-;;;###autoload
-(defcustom mail-yank-prefix nil
-  "Prefix insert on lines of yanked message being replied to.
-If this is nil, use indentation, as specified by `mail-indentation-spaces'."
-  :type '(choice (const nil) string)
-  :group 'sendmail)
-
-;;;###autoload
-(defcustom mail-indentation-spaces 3
-  "Number of spaces to insert at the beginning of each cited line.
-Used by `mail-yank-original' via `mail-indent-citation'."
-  :type 'integer
-  :group 'sendmail)
-
-;; FIXME make it really obsolete.
-(defvar mail-yank-hooks nil
-  "Obsolete hook for modifying a citation just inserted in the mail buffer.
-Each hook function can find the citation between (point) and (mark t).
-And each hook function should leave point and mark around the citation
-text as modified.
-
-This is a normal hook, misnamed for historical reasons.
-It is semi-obsolete and mail agents should no longer use it.")
-
-;;;###autoload
-(defcustom mail-citation-hook nil
-  "Hook for modifying a citation just inserted in the mail buffer.
-Each hook function can find the citation between (point) and (mark t),
-and should leave point and mark around the citation text as modified.
-The hook functions can find the header of the cited message
-in the variable `mail-citation-header', whether or not this is included
-in the cited portion of the message.
-
-If this hook is entirely empty (nil), a default action is taken
-instead of no action."
-  :type 'hook
-  :group 'sendmail)
-
-(defvar mail-citation-header nil
-  "While running `mail-citation-hook', this variable holds the message header.
-This enables the hook functions to see the whole message header
-regardless of what part of it (if any) is included in the cited text.")
-
-;;;###autoload
-(defcustom mail-citation-prefix-regexp "[ \t]*[-a-z0-9A-Z]*>+[ \t]*\\|[ \t]*"
-  "Regular expression to match a citation prefix plus whitespace.
-It should match whatever sort of citation prefixes you want to handle,
-with whitespace before and after; it should also match just whitespace.
-The default value matches citations like `foo-bar>' plus whitespace."
-  :type 'regexp
-  :group 'sendmail
-  :version "20.3")
-
-(defvar mail-abbrevs-loaded nil)
-(defvar mail-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\M-\t" 'mail-complete)
-    (define-key map "\C-c?" 'describe-mode)
-    (define-key map "\C-c\C-f\C-t" 'mail-to)
-    (define-key map "\C-c\C-f\C-b" 'mail-bcc)
-    (define-key map "\C-c\C-f\C-f" 'mail-fcc)
-    (define-key map "\C-c\C-f\C-c" 'mail-cc)
-    (define-key map "\C-c\C-f\C-s" 'mail-subject)
-    (define-key map "\C-c\C-f\C-r" 'mail-reply-to)
-    (define-key map "\C-c\C-f\C-a" 'mail-mail-reply-to)    ; author
-    (define-key map "\C-c\C-f\C-l" 'mail-mail-followup-to) ; list
-    (define-key map "\C-c\C-t" 'mail-text)
-    (define-key map "\C-c\C-y" 'mail-yank-original)
-    (define-key map "\C-c\C-r" 'mail-yank-region)
-    (define-key map [remap split-line] 'mail-split-line)
-    (define-key map "\C-c\C-q" 'mail-fill-yanked-message)
-    (define-key map "\C-c\C-w" 'mail-signature)
-    (define-key map "\C-c\C-v" 'mail-sent-via)
-    (define-key map "\C-c\C-c" 'mail-send-and-exit)
-    (define-key map "\C-c\C-s" 'mail-send)
-    (define-key map "\C-c\C-i" 'mail-attach-file)
-    ;; FIXME add this? "b" = bury buffer.  It's in the menu-bar.
-;;;    (define-key map "\C-c\C-b" 'mail-dont-send)
-
-    (define-key map [menu-bar mail]
-      (cons "Mail" (make-sparse-keymap "Mail")))
-
-    (define-key map [menu-bar mail fill]
-      '("Fill Citation" . mail-fill-yanked-message))
-
-    (define-key map [menu-bar mail yank]
-      '(menu-item "Cite Original" mail-yank-original :enable mail-reply-action))
-
-    (define-key map [menu-bar mail signature]
-      '("Insert Signature" . mail-signature))
-
-    (define-key map [menu-bar mail mail-sep]
-      '("--"))
-
-    (define-key map [menu-bar mail cancel]
-      '("Cancel" . mail-dont-send))
-
-    (define-key map [menu-bar mail send-stay]
-      '("Send, Keep Editing" . mail-send))
-
-    (define-key map [menu-bar mail send]
-      '("Send Message" . mail-send-and-exit))
-
-    (define-key map [menu-bar headers]
-      (cons "Headers" (make-sparse-keymap "Move to Header")))
-
-    (define-key map [menu-bar headers text]
-      '("Text" . mail-text))
-
-    (define-key map [menu-bar headers expand-aliases]
-      '("Expand Aliases" . expand-mail-aliases))
-
-    (define-key map [menu-bar headers sent-via]
-      '("Sent-Via" . mail-sent-via))
-
-    (define-key map [menu-bar headers mail-reply-to]
-      '("Mail-Reply-To" . mail-mail-reply-to))
-
-    (define-key map [menu-bar headers mail-followup-to]
-      '("Mail-Followup-To" . mail-mail-followup-to))
-
-    (define-key map [menu-bar headers reply-to]
-      '("Reply-To" . mail-reply-to))
-
-    (define-key map [menu-bar headers bcc]
-      '("Bcc" . mail-bcc))
-
-    (define-key map [menu-bar headers fcc]
-      '("Fcc" . mail-fcc))
-
-    (define-key map [menu-bar headers cc]
-      '("Cc" . mail-cc))
-
-    (define-key map [menu-bar headers subject]
-      '("Subject" . mail-subject))
-
-    (define-key map [menu-bar headers to]
-      '("To" . mail-to))
-
-    map))
-
-(autoload 'build-mail-aliases "mailalias"
-  "Read mail aliases from user's personal aliases file and set `mail-aliases'."
-  nil)
-
-(autoload 'expand-mail-aliases "mailalias"
-  "Expand all mail aliases in suitable header fields found between BEG and END.
-Suitable header fields are `To', `Cc' and `Bcc' and their `Resent-' variants.
-Optional second arg EXCLUDE may be a regular expression defining text to be
-removed from alias expansions."
-  nil)
-
-;;;###autoload
-(defcustom mail-signature nil
-  "Text inserted at end of mail buffer when a message is initialized.
-If t, it means to insert the contents of the file `mail-signature-file'.
-If a string, that string is inserted.
- (To make a proper signature, the string should begin with \\n\\n-- \\n,
-  which is the standard way to delimit a signature in a message.)
-Otherwise, it should be an expression; it is evaluated
-and should insert whatever you want to insert."
-  :type '(choice (const :tag "None" nil)
-                (const :tag "Use `.signature' file" t)
-                (string :tag "String to insert")
-                (sexp :tag "Expression to evaluate"))
-  :group 'sendmail)
-(put 'mail-signature 'risky-local-variable t)
-
-;;;###autoload
-(defcustom mail-signature-file "~/.signature"
-  "File containing the text inserted at end of mail buffer."
-  :type 'file
-  :group 'sendmail)
-
-;;;###autoload
-(defcustom mail-default-directory "~/"
-  "Directory for mail buffers.
-Value of `default-directory' for mail buffers.
-This directory is used for auto-save files of mail buffers."
-  :type '(directory :tag "Directory")
-  :group 'sendmail
-  :version "22.1")
-
-(defvar mail-reply-action nil)
-(defvar mail-send-actions nil
-  "A list of actions to be performed upon successful sending of a message.")
-(put 'mail-reply-action 'permanent-local t)
-(put 'mail-send-actions 'permanent-local t)
-
-;;;###autoload
-(defcustom mail-default-headers nil
-  "A string containing header lines, to be inserted in outgoing messages.
-It can contain newlines, and should end in one.  It is inserted
-before you edit the message, so you can edit or delete the lines."
-  :type '(choice (const nil) string)
-  :group 'sendmail)
-
-;; FIXME no need for autoload
-;;;###autoload
-(defcustom mail-bury-selects-summary t
-  "If non-nil, try to show Rmail summary buffer after returning from mail.
-The functions \\[mail-send-on-exit] or \\[mail-dont-send] select
-the Rmail summary buffer before returning, if it exists and this variable
-is non-nil."
-  :type 'boolean
-  :group 'sendmail)
-
-;; FIXME no need for autoload
-;;;###autoload
-(defcustom mail-send-nonascii 'mime
-  "Specify whether to allow sending non-ASCII characters in mail.
-If t, that means do allow it.  nil means don't allow it.
-`query' means ask the user each time.
-`mime' means add an appropriate MIME header if none already present.
-The default is `mime'.
-Including non-ASCII characters in a mail message can be problematical
-for the recipient, who may not know how to decode them properly."
-  :type '(choice (const t) (const nil) (const query) (const mime))
-  :group 'sendmail)
-
-(defcustom mail-use-dsn nil
-  "Ask MTA for notification of failed, delayed or successful delivery.
-Note that only some MTAs (currently only recent versions of Sendmail)
-support Delivery Status Notification."
-  :group 'sendmail
-  :type '(repeat (radio (const :tag "Failure" failure)
-                       (const :tag "Delay" delay)
-                       (const :tag "Success" success)))
-  :version "22.1")
-
-;; Note: could use /usr/ucb/mail instead of sendmail;
-;; options -t, and -v if not interactive.
-(defvar mail-mailer-swallows-blank-line
-  (if (and (string-match "sparc-sun-sunos\\(\\'\\|[^5]\\)" system-configuration)
-          (file-readable-p "/etc/sendmail.cf")
-           (with-temp-buffer
-             (insert-file-contents "/etc/sendmail.cf")
-             (goto-char (point-min))
-             (let ((case-fold-search nil))
-               (re-search-forward "^OR\\>" nil t))))
-      ;; According to RFC822, "The field-name must be composed of printable
-      ;; ASCII characters (i.e. characters that have decimal values between
-      ;; 33 and 126, except colon)", i.e. any chars except ctl chars,
-      ;; space, or colon.
-      '(looking-at "[ \t]\\|[][!\"#$%&'()*+,-./0-9;<=>?@A-Z\\\\^_`a-z{|}~]+:"))
-  "Set this non-nil if the system's mailer runs the header and body together.
-\(This problem exists on Sunos 4 when sendmail is run in remote mode.)
-The value should be an expression to test whether the problem will
-actually occur.")
-
-(defvar mail-mode-syntax-table
-  ;; define-derived-mode will make it inherit from text-mode-syntax-table.
-  (let ((st (make-syntax-table)))
-    ;; FIXME this is probably very obsolete now ("percent hack").
-    ;; sending.texi used to say:
-    ;;   Mail mode defines the character `%' as a word separator; this
-    ;;   is helpful for using the word commands to edit mail addresses.
-    (modify-syntax-entry ?% ". " st)
-    st)
-  "Syntax table used while in `mail-mode'.")
-
-(defvar mail-font-lock-keywords
-  (eval-when-compile
-    (let* ((cite-chars "[>|}]")
-          (cite-prefix "[:alpha:]")
-          (cite-suffix (concat cite-prefix "0-9_.@-`'\"")))
-      (list '("^\\(To\\|Newsgroups\\):" . font-lock-function-name-face)
-           '("^\\(B?CC\\|Reply-to\\|Mail-\\(reply\\|followup\\)-to\\):" . font-lock-keyword-face)
-           '("^\\(Subject:\\)[ \t]*\\(.+\\)?"
-             (1 font-lock-comment-face)
-;;           (2 font-lock-type-face nil t)
-             )
-           ;; Use EVAL to delay in case `mail-header-separator' gets changed.
-           '(eval .
-             (let ((separator (if (zerop (length mail-header-separator))
-                                  " \\`\\' "
-                                (regexp-quote mail-header-separator))))
-               (cons (concat "^" separator "$") 'font-lock-warning-face)))
-           ;; Use MATCH-ANCHORED to effectively anchor the regexp left side.
-           `(,cite-chars
-             (,(concat "\\=[ \t]*"
-                       "\\(\\(\\([" cite-prefix "]+[" cite-suffix "]*\\)?"
-                       "\\(" cite-chars "[ \t]*\\)\\)+\\)"
-                       "\\(.*\\)")
-              (beginning-of-line) (end-of-line)
-              (1 font-lock-comment-delimiter-face nil t)
-              (5 font-lock-comment-face nil t)))
-           '("^\\(X-[A-Za-z0-9-]+\\|In-reply-to\\):.*\\(\n[ \t]+.*\\)*$"
-             . font-lock-string-face))))
-  "Additional expressions to highlight in Mail mode.")
-
-\f
-(defun sendmail-sync-aliases ()
-  (when mail-personal-alias-file
-    (let ((modtime (nth 5 (file-attributes mail-personal-alias-file))))
-      (or (equal mail-alias-modtime modtime)
-         (setq mail-alias-modtime modtime
-               mail-aliases t)))))
-
-(defun mail-setup (to subject in-reply-to cc replybuffer actions)
-  (or mail-default-reply-to
-      (setq mail-default-reply-to (getenv "REPLYTO")))
-  (sendmail-sync-aliases)
-  (if (eq mail-aliases t)
-      (progn
-       (setq mail-aliases nil)
-       (when mail-personal-alias-file
-         (if (file-exists-p mail-personal-alias-file)
-             (build-mail-aliases)))))
-  ;; Don't leave this around from a previous message.
-  (kill-local-variable 'buffer-file-coding-system)
-  ;; This doesn't work for enable-multibyte-characters.
-  ;; (kill-local-variable 'enable-multibyte-characters)
-  (set-buffer-multibyte default-enable-multibyte-characters)
-  (if current-input-method
-      (inactivate-input-method))
-  (setq mail-send-actions actions)
-  (setq mail-reply-action replybuffer)
-  (goto-char (point-min))
-  (if mail-setup-with-from
-      (mail-insert-from-field))
-  (insert "To: ")
-  (save-excursion
-    (if to
-       ;; Here removed code to extract names from within <...>
-       ;; on the assumption that mail-strip-quoted-names
-       ;; has been called and has done so.
-       (let ((fill-prefix "\t")
-             (address-start (point)))
-         (insert to "\n")
-         (fill-region-as-paragraph address-start (point-max))
-         (goto-char (point-max))
-         (unless (bolp)
-           (newline)))
-      (newline))
-    (if cc
-       (let ((fill-prefix "\t")
-             (address-start (progn (insert "CC: ") (point))))
-         (insert cc "\n")
-         (fill-region-as-paragraph address-start (point-max))
-         (goto-char (point-max))
-         (unless (bolp)
-           (newline))))
-    (if in-reply-to
-       (let ((fill-prefix "\t")
-             (fill-column 78)
-             (address-start (point)))
-         (insert "In-reply-to: " in-reply-to "\n")
-         (fill-region-as-paragraph address-start (point-max))
-         (goto-char (point-max))
-         (unless (bolp)
-           (newline))))
-    (insert "Subject: " (or subject "") "\n")
-    (if mail-default-headers
-       (insert mail-default-headers))
-    (if mail-default-reply-to
-       (insert "Reply-to: " mail-default-reply-to "\n"))
-    (if mail-self-blind
-       (insert "BCC: " user-mail-address "\n"))
-    (if mail-archive-file-name
-       (insert "FCC: " mail-archive-file-name "\n"))
-    (put-text-property (point)
-                      (progn
-                        (insert mail-header-separator "\n")
-                        (1- (point)))
-                      'category 'mail-header-separator)
-    ;; Insert the signature.  But remember the beginning of the message.
-    (if to (setq to (point)))
-    (if mail-signature (mail-signature t))
-    (goto-char (point-max))
-    (or (bolp) (newline)))
-  (if to (goto-char to))
-  (or to subject in-reply-to
-      (set-buffer-modified-p nil))
-  (run-hooks 'mail-setup-hook))
-\f
-(defcustom mail-mode-hook nil
-  "Hook run by Mail mode.
-When composing a mail, this runs immediately after creating, or
-switching to, the `*mail*' buffer.  See also `mail-setup-hook'."
-  :group 'sendmail
-  :type 'hook
-  :options '(footnote-mode))
-
-(defvar mail-mode-abbrev-table text-mode-abbrev-table)
-;;;###autoload
-(define-derived-mode mail-mode text-mode "Mail"
-  "Major mode for editing mail to be sent.
-Like Text Mode but with these additional commands:
-
-\\[mail-send]  mail-send (send the message)
-\\[mail-send-and-exit]  mail-send-and-exit (send the message and exit)
-
-Here are commands that move to a header field (and create it if there isn't):
-        \\[mail-to]  move to To:       \\[mail-subject]  move to Subj:
-        \\[mail-bcc]  move to BCC:     \\[mail-cc]  move to CC:
-        \\[mail-fcc]  move to FCC:     \\[mail-reply-to] move to Reply-To:
-         \\[mail-mail-reply-to]  move to Mail-Reply-To:
-         \\[mail-mail-followup-to] move to Mail-Followup-To:
-\\[mail-text]  move to message text.
-\\[mail-signature]  mail-signature (insert `mail-signature-file' file).
-\\[mail-yank-original]  mail-yank-original (insert current message, in Rmail).
-\\[mail-fill-yanked-message]  mail-fill-yanked-message (fill what was yanked).
-\\[mail-sent-via]  mail-sent-via (add a sent-via field for each To or CC).
-Turning on Mail mode runs the normal hooks `text-mode-hook' and
-`mail-mode-hook' (in that order)."
-  (make-local-variable 'mail-reply-action)
-  (make-local-variable 'mail-send-actions)
-  (setq buffer-offer-save t)
-  (make-local-variable 'font-lock-defaults)
-  (setq font-lock-defaults '(mail-font-lock-keywords t t))
-  (make-local-variable 'paragraph-separate)
-  (make-local-variable 'normal-auto-fill-function)
-  (setq normal-auto-fill-function 'mail-mode-auto-fill)
-  (make-local-variable 'fill-paragraph-function)
-  (setq fill-paragraph-function 'mail-mode-fill-paragraph)
-  ;; Allow using comment commands to add/remove quoting (this only does
-  ;; anything if mail-yank-prefix is set to a non-nil value).
-  (set (make-local-variable 'comment-start) mail-yank-prefix)
-  (if mail-yank-prefix
-      (set (make-local-variable 'comment-start-skip)
-          (concat "^" (regexp-quote mail-yank-prefix) "[ \t]*")))
-  (make-local-variable 'adaptive-fill-regexp)
-  (setq adaptive-fill-regexp
-       (concat "[ \t]*[-[:alnum:]]+>+[ \t]*\\|"
-               adaptive-fill-regexp))
-  (make-local-variable 'adaptive-fill-first-line-regexp)
-  (setq adaptive-fill-first-line-regexp
-       (concat "[ \t]*[-[:alnum:]]*>+[ \t]*\\|"
-               adaptive-fill-first-line-regexp))
-  ;; `-- ' precedes the signature.  `-----' appears at the start of the
-  ;; lines that delimit forwarded messages.
-  ;; Lines containing just >= 3 dashes, perhaps after whitespace,
-  ;; are also sometimes used and should be separators.
-  (setq paragraph-separate (concat (regexp-quote mail-header-separator)
-                               "$\\|\t*\\([-|#;>* ]\\|(?[0-9]+[.)]\\)+$"
-                               "\\|[ \t]*[[:alnum:]]*>+[ \t]*$\\|[ \t]*$\\|"
-                               "--\\( \\|-+\\)$\\|"
-                               page-delimiter)))
-
-
-(defun mail-header-end ()
-  "Return the buffer location of the end of headers, as a number."
-  (save-restriction
-    (widen)
-    (save-excursion
-      (rfc822-goto-eoh)
-      (point))))
-
-(defun mail-text-start ()
-  "Return the buffer location of the start of text, as a number."
-  (save-restriction
-    (widen)
-    (save-excursion
-      (rfc822-goto-eoh)
-      (forward-line 1)
-      (point))))
-
-(defun mail-sendmail-delimit-header ()
-  "Set up whatever header delimiter convention sendmail will use.
-Concretely: replace the first blank line in the header with the separator."
-  (rfc822-goto-eoh)
-  (insert mail-header-separator)
-  (point))
-
-(defun mail-sendmail-undelimit-header ()
-  "Remove header separator to put the message in correct form for sendmail.
-Leave point at the start of the delimiter line."
-  (rfc822-goto-eoh)
-  (delete-region (point) (progn (end-of-line) (point))))
-
-(defun mail-mode-auto-fill ()
-  "Carry out Auto Fill for Mail mode.
-If within the headers, this makes the new lines into continuation lines."
-  (if (< (point) (mail-header-end))
-      (let ((old-line-start (save-excursion (beginning-of-line) (point))))
-       (if (do-auto-fill)
-           (save-excursion
-             (beginning-of-line)
-             (while (not (eq (point) old-line-start))
-               ;; Use insert-before-markers in case we're inserting
-               ;; before the saved value of point (which is common).
-               (insert-before-markers "   ")
-               (forward-line -1))
-             t)))
-    (do-auto-fill)))
-
-(defun mail-mode-fill-paragraph (arg)
-  ;; Do something special only if within the headers.
-  (if (< (point) (mail-header-end))
-      (let (beg end fieldname)
-       (when (prog1 (re-search-backward "^[-a-zA-Z]+:" nil 'yes)
-               (setq beg (point)))
-       (setq fieldname
-               (downcase (buffer-substring beg (1- (match-end 0))))))
-       (forward-line 1)
-       ;; Find continuation lines and get rid of their continuation markers.
-       (while (looking-at "[ \t]")
-         (delete-horizontal-space)
-         (forward-line 1))
-       (setq end (point-marker))
-       (goto-char beg)
-       ;; If this field contains addresses,
-       ;; make sure we can fill after each address.
-       (if (member fieldname
-                   '("to" "cc" "bcc" "from" "reply-to"
-                     "mail-reply-to" "mail-followup-to"
-                     "resent-to" "resent-cc" "resent-bcc"
-                     "resent-from" "resent-reply-to"))
-           (while (search-forward "," end t)
-             (or (looking-at "[ \t]")
-                 (insert " "))))
-       (fill-region-as-paragraph beg end arg)
-       ;; Mark all lines except the first as continuations.
-       (goto-char beg)
-       (forward-line 1)
-       (while (< (point) end)
-         (insert "  ")
-         (forward-line 1))
-       (move-marker end nil)
-       t)))
-\f
-;; User-level commands for sending.
-
-(defun mail-send-and-exit (&optional arg)
-  "Send message like `mail-send', then, if no errors, exit from mail buffer.
-Prefix arg means don't delete this window."
-  (interactive "P")
-  (mail-send)
-  (mail-bury arg))
-
-(defun mail-dont-send (&optional arg)
-  "Don't send the message you have been editing.
-Prefix arg means don't delete this window."
-  (interactive "P")
-  (mail-bury arg))
-
-(defun mail-bury (&optional arg)
-  "Bury this mail buffer."
-  (let ((newbuf (other-buffer (current-buffer))))
-    (bury-buffer (current-buffer))
-    (if (and (or nil
-                ;; In this case, we need to go to a different frame.
-                (window-dedicated-p (frame-selected-window))
-                ;; In this mode of operation, the frame was probably
-                ;; made for this buffer, so the user probably wants
-                ;; to delete it now.
-                (and pop-up-frames (one-window-p))
-                (cdr (assq 'mail-dedicated-frame (frame-parameters))))
-            (not (null (delq (selected-frame) (visible-frame-list)))))
-       (progn
-         (if (display-multi-frame-p)
-             (delete-frame (selected-frame))
-           ;; The previous frame is where normally they have the
-           ;; Rmail buffer displayed.
-           (other-frame -1)))
-      (let (rmail-flag summary-buffer)
-       (and (not arg)
-            (not (one-window-p))
-            (with-current-buffer
-                 (window-buffer (next-window (selected-window) 'not))
-              (setq rmail-flag (eq major-mode 'rmail-mode))
-              (setq summary-buffer
-                    (and mail-bury-selects-summary
-                         (boundp 'rmail-summary-buffer)
-                         rmail-summary-buffer
-                         (buffer-name rmail-summary-buffer)
-                         (not (get-buffer-window rmail-summary-buffer))
-                         rmail-summary-buffer))))
-       (if rmail-flag
-           ;; If the Rmail buffer has a summary, show that.
-           (if summary-buffer (switch-to-buffer summary-buffer)
-             (delete-window))
-         (switch-to-buffer newbuf))))))
-
-(defcustom mail-send-hook nil
-  "Hook run just before sending mail with `mail-send'."
-  :type 'hook
-  :options '(flyspell-mode-off)
-  :group 'sendmail)
-
-;;;###autoload
-(defcustom mail-mailing-lists nil
-"List of mailing list addresses the user is subscribed to.
-The variable is used to trigger insertion of the \"Mail-Followup-To\"
-header when sending a message to a mailing list."
-  :type '(repeat string)
-  :group 'sendmail)
-
-
-(defun mail-send ()
-  "Send the message in the current buffer.
-If `mail-interactive' is non-nil, wait for success indication
-or error messages, and inform user.
-Otherwise any failure is reported in a message back to
-the user from the mailer."
-  (interactive)
-  (if (if buffer-file-name
-         (y-or-n-p "Send buffer contents as mail message? ")
-       (or (buffer-modified-p)
-           (y-or-n-p "Message already sent; resend? ")))
-      (let ((inhibit-read-only t)
-           (opoint (point))
-           (ml (when mail-mailing-lists
-                ;; The surrounding regexp assumes the use of
-                ;; `mail-strip-quoted-names' on addresses before matching
-                ;; Cannot deal with full RFC 822 freedom, but that is
-                ;; unlikely to be problematic.
-                (concat "\\(?:[[:space:];,]\\|\\`\\)"
-                        (regexp-opt mail-mailing-lists t)
-                        "\\(?:[[:space:];,]\\|\\'\\)"))))
-       ;; If there are mailing lists defined
-       (when ml
-         (save-excursion
-           (let* ((to (mail-fetch-field "to" nil t))
-                  (cc (mail-fetch-field "cc" nil t))
-                  (new-header-values   ; To: and Cc:
-                   (mail-strip-quoted-names
-                    (concat to (when cc (concat ", " cc))))))
-             ;; If message goes to known mailing list ...
-             (when (string-match ml new-header-values)
-               ;; Add Mail-Followup-To if none yet
-               (unless (mail-fetch-field "mail-followup-to")
-                 (goto-char (mail-header-end))
-                 (insert "Mail-Followup-To: "
-                         (let ((l))
-                           (mapc
-                            ;; remove duplicates
-                            '(lambda (e)
-                               (unless (member e l)
-                                 (push e l)))
-                            (split-string new-header-values
-                                          ",[[:space:]]+" t))
-                           (mapconcat 'identity l ", "))
-                         "\n"))
-               ;; Add Mail-Reply-To if none yet
-               (unless (mail-fetch-field "mail-reply-to")
-                 (goto-char (mail-header-end))
-                 (insert "Mail-Reply-To: "
-                         (or (mail-fetch-field "reply-to")
-                             user-mail-address)
-                         "\n"))))))
-       (unless (memq mail-send-nonascii '(t mime))
-         (goto-char (point-min))
-         (skip-chars-forward "\0-\177")
-         (or (= (point) (point-max))
-             (if (eq mail-send-nonascii 'query)
-                 (or (y-or-n-p "Message contains non-ASCII characters; send anyway? ")
-                     (error "Aborted"))
-               (error "Message contains non-ASCII characters"))))
-       ;; Complain about any invalid line.
-       (goto-char (point-min))
-       (re-search-forward (regexp-quote mail-header-separator) (point-max) t)
-       (let ((header-end (or (match-beginning 0) (point-max))))
-         (goto-char (point-min))
-         (while (< (point) header-end)
-           (unless (looking-at "[ \t]\\|.*:\\|$")
-             (push-mark opoint)
-             (error "Invalid header line (maybe a continuation line lacks initial whitespace)"))
-           (forward-line 1)))
-       (goto-char opoint)
-       (run-hooks 'mail-send-hook)
-       (message "Sending...")
-       (funcall send-mail-function)
-       ;; Now perform actions on successful sending.
-       (while mail-send-actions
-         (condition-case nil
-             (apply (car (car mail-send-actions))
-                    (cdr (car mail-send-actions)))
-           (error))
-         (setq mail-send-actions (cdr mail-send-actions)))
-       (message "Sending...done")
-       ;; If buffer has no file, mark it as unmodified and delete auto-save.
-       (if (not buffer-file-name)
-           (progn
-             (set-buffer-modified-p nil)
-             (delete-auto-save-file-if-necessary t))))))
-
-(defun mail-envelope-from ()
-  "Return the envelope mail address to use when sending mail.
-This function uses `mail-envelope-from'."
-  (if (eq mail-envelope-from 'header)
-      (nth 1 (mail-extract-address-components
-             (mail-fetch-field "From")))
-    mail-envelope-from))
-\f
-;; This does the real work of sending a message via sendmail.
-;; It is called via the variable send-mail-function.
-
-;;;###autoload
-(defvar sendmail-coding-system nil
-  "*Coding system for encoding the outgoing mail.
-This has higher priority than `default-buffer-file-coding-system'
-and `default-sendmail-coding-system',
-but lower priority than the local value of `buffer-file-coding-system'.
-See also the function `select-message-coding-system'.")
-
-;;;###autoload
-(defvar default-sendmail-coding-system 'iso-latin-1
-  "Default coding system for encoding the outgoing mail.
-This variable is used only when `sendmail-coding-system' is nil.
-
-This variable is set/changed by the command `set-language-environment'.
-User should not set this variable manually,
-instead use `sendmail-coding-system' to get a constant encoding
-of outgoing mails regardless of the current language environment.
-See also the function `select-message-coding-system'.")
-
-(defun mail-insert-from-field ()
-  (let* ((login user-mail-address)
-        (fullname (user-full-name))
-        (quote-fullname nil))
-    (if (string-match "[^\0-\177]" fullname)
-       (setq fullname (rfc2047-encode-string fullname)
-             quote-fullname t))
-    (cond ((eq mail-from-style 'angles)
-          (insert "From: " fullname)
-          (let ((fullname-start (+ (point-min) 6))
-                (fullname-end (point-marker)))
-            (goto-char fullname-start)
-            ;; Look for a character that cannot appear unquoted
-            ;; according to RFC 822.
-            (if (or (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]"
-                                       fullname-end 1)
-                    quote-fullname)
-                (progn
-                  ;; Quote fullname, escaping specials.
-                  (goto-char fullname-start)
-                  (insert "\"")
-                  (while (re-search-forward "[\"\\]"
-                                            fullname-end 1)
-                    (replace-match "\\\\\\&" t))
-                  (insert "\""))))
-          (insert " <" login ">\n"))
-         ((eq mail-from-style 'parens)
-          (insert "From: " login " (")
-          (let ((fullname-start (point)))
-            (if quote-fullname
-                (insert "\""))
-            (insert fullname)
-            (if quote-fullname
-                (insert "\""))
-            (let ((fullname-end (point-marker)))
-              (goto-char fullname-start)
-              ;; RFC 822 says \ and nonmatching parentheses
-              ;; must be escaped in comments.
-              ;; Escape every instance of ()\ ...
-              (while (re-search-forward "[()\\]" fullname-end 1)
-                (replace-match "\\\\\\&" t))
-              ;; ... then undo escaping of matching parentheses,
-              ;; including matching nested parentheses.
-              (goto-char fullname-start)
-              (while (re-search-forward
-                      "\\(\\=\\|[^\\]\\(\\\\\\\\\\)*\\)\\\\(\\(\\([^\\]\\|\\\\\\\\\\)*\\)\\\\)"
-                      fullname-end 1)
-                (replace-match "\\1(\\3)" t)
-                (goto-char fullname-start))))
-          (insert ")\n"))
-         ((null mail-from-style)
-          (insert "From: " login "\n"))
-         ((eq mail-from-style 'system-default)
-          nil)
-         (t (error "Invalid value for `mail-from-style'")))))
-
-;; Normally you will not need to modify these options unless you are
-;; using some non-genuine substitute for sendmail which does not
-;; implement each and every option that the original supports.
-;; E.g., ssmtp does not support "-odb", so, if your site uses it,
-;; you will need to modify `sendmail-error-reporting-non-interactive'
-;; in your site-init.el.
-(defvar sendmail-error-reporting-interactive
-  ;; These mean "report errors to terminal" and "deliver interactively"
-  '("-oep" "-odi"))
-(defvar sendmail-error-reporting-non-interactive
-  ;; These mean "report errors by mail" and "deliver in background".
-  '("-oem" "-odb"))
-
-(defun sendmail-send-it ()
-  "Send the current mail buffer using the Sendmail package.
-This is a suitable value for `send-mail-function'.  It sends using the
-external program defined by `sendmail-program'."
-  (require 'mail-utils)
-  (let ((errbuf (if mail-interactive
-                   (generate-new-buffer " sendmail errors")
-                 0))
-       (tembuf (generate-new-buffer " sendmail temp"))
-       (multibyte enable-multibyte-characters)
-       (case-fold-search nil)
-       (selected-coding (select-message-coding-system))
-       resend-to-addresses
-       delimline
-       fcc-was-found
-       (mailbuf (current-buffer))
-       (program (if (boundp 'sendmail-program)
-                    sendmail-program
-                  "/usr/lib/sendmail"))
-       ;; Examine these variables now, so that
-       ;; local binding in the mail buffer will take effect.
-       (envelope-from
-        (and mail-specify-envelope-from
-             (or (mail-envelope-from) user-mail-address))))
-    (unwind-protect
-       (with-current-buffer tembuf
-         (erase-buffer)
-         (unless multibyte
-           (set-buffer-multibyte nil))
-         (insert-buffer-substring mailbuf)
-         (goto-char (point-max))
-         ;; require one newline at the end.
-         (or (= (preceding-char) ?\n)
-             (insert ?\n))
-         ;; Change header-delimiter to be what sendmail expects.
-         (goto-char (mail-header-end))
-         (delete-region (point) (progn (end-of-line) (point)))
-         (setq delimline (point-marker))
-         (sendmail-sync-aliases)
-         (if mail-aliases
-             (expand-mail-aliases (point-min) delimline))
-         (goto-char (point-min))
-         ;; Ignore any blank lines in the header
-         (while (and (re-search-forward "\n\n\n*" delimline t)
-                     (< (point) delimline))
-           (replace-match "\n"))
-         (goto-char (point-min))
-         ;; Look for Resent- headers.  They require sending
-         ;; the message specially.
-         (let ((case-fold-search t))
-           (goto-char (point-min))
-           (while (re-search-forward "^Resent-\\(to\\|cc\\|bcc\\):" delimline t)
-             ;; Put a list of such addresses in resend-to-addresses.
-             (setq resend-to-addresses
-                   (save-restriction
-                     (narrow-to-region (point)
-                                       (save-excursion
-                                         (forward-line 1)
-                                         (while (looking-at "^[ \t]")
-                                           (forward-line 1))
-                                         (point)))
-                     (append (mail-parse-comma-list)
-                             resend-to-addresses)))
-             ;; Delete Resent-BCC ourselves
-             (if (save-excursion (beginning-of-line)
-                                 (looking-at "resent-bcc"))
-                 (delete-region (save-excursion (beginning-of-line) (point))
-                                (save-excursion (end-of-line) (1+ (point))))))
-;;;  Apparently this causes a duplicate Sender.
-;;;        ;; If the From is different than current user, insert Sender.
-;;;        (goto-char (point-min))
-;;;        (and (re-search-forward "^From:"  delimline t)
-;;;             (progn
-;;;               (require 'mail-utils)
-;;;               (not (string-equal
-;;;                     (mail-strip-quoted-names
-;;;                      (save-restriction
-;;;                        (narrow-to-region (point-min) delimline)
-;;;                        (mail-fetch-field "From")))
-;;;                     (user-login-name))))
-;;;             (progn
-;;;               (forward-line 1)
-;;;               (insert "Sender: " (user-login-name) "\n")))
-           ;; Don't send out a blank subject line
-           (goto-char (point-min))
-           (if (re-search-forward "^Subject:\\([ \t]*\n\\)+\\b" delimline t)
-               (replace-match "")
-             ;; This one matches a Subject just before the header delimiter.
-             (if (and (re-search-forward "^Subject:\\([ \t]*\n\\)+" delimline t)
-                      (= (match-end 0) delimline))
-                 (replace-match "")))
-           ;; Put the "From:" field in unless for some odd reason
-           ;; they put one in themselves.
-           (goto-char (point-min))
-           (if (not (re-search-forward "^From:" delimline t))
-               (mail-insert-from-field))
-           ;; Possibly add a MIME header for the current coding system
-           (let (charset where-content-type)
-             (goto-char (point-min))
-             (setq where-content-type
-                   (re-search-forward "^Content-type:" delimline t))
-             (goto-char (point-min))
-             (and (eq mail-send-nonascii 'mime)
-                  (not (re-search-forward "^MIME-version:" delimline t))
-                  (progn (skip-chars-forward "\0-\177")
-                         (/= (point) (point-max)))
-                  selected-coding
-                  (setq charset
-                        (coding-system-get selected-coding 'mime-charset))
-                  (progn
-                    (goto-char delimline)
-                    (insert "MIME-version: 1.0\n"
-                            "Content-type: text/plain; charset="
-                            (symbol-name charset)
-                            "\nContent-Transfer-Encoding: 8bit\n")
-                    ;; The character set we will actually use
-                    ;; should override any specified in the message itself.
-                    (when where-content-type
-                      (goto-char where-content-type)
-                      (beginning-of-line)
-                      (delete-region (point)
-                                     (progn (forward-line 1) (point)))))))
-           ;; Insert an extra newline if we need it to work around
-           ;; Sun's bug that swallows newlines.
-           (goto-char (1+ delimline))
-           (if (eval mail-mailer-swallows-blank-line)
-               (newline))
-           ;; Find and handle any FCC fields.
-           (goto-char (point-min))
-           (if (re-search-forward "^FCC:" delimline t)
-               (progn
-                 (setq fcc-was-found t)
-                 (mail-do-fcc delimline)))
-           (if mail-interactive
-               (with-current-buffer errbuf
-                 (erase-buffer))))
-         (goto-char (point-min))
-         (if (let ((case-fold-search t))
-               (or resend-to-addresses
-                   (re-search-forward "^To:\\|^cc:\\|^bcc:"
-                                      delimline t)))
-             (let* ((default-directory "/")
-                    (coding-system-for-write selected-coding)
-                    (args
-                     (append (list (point-min) (point-max)
-                                   program
-                                   nil errbuf nil "-oi")
-                             (and envelope-from
-                                  (list "-f" envelope-from))
-;;;                          ;; Don't say "from root" if running under su.
-;;;                          (and (equal (user-real-login-name) "root")
-;;;                               (list "-f" (user-login-name)))
-                             (and mail-alias-file
-                                  (list (concat "-oA" mail-alias-file)))
-                             (if mail-interactive
-                                  sendmail-error-reporting-interactive
-                                  sendmail-error-reporting-non-interactive)
-                             ;; Get the addresses from the message
-                             ;; unless this is a resend.
-                             ;; We must not do that for a resend
-                             ;; because we would find the original addresses.
-                             ;; For a resend, include the specific addresses.
-                             (or resend-to-addresses
-                                 '("-t")
-                                 )
-                             (if mail-use-dsn
-                                 (list "-N" (mapconcat 'symbol-name
-                                                       mail-use-dsn ",")))
-                             )
-                     )
-                    (exit-value (apply 'call-process-region args)))
-               (cond ((or (null exit-value) (eq 0 exit-value)))
-                     ((numberp exit-value)
-                      (error "Sending...failed with exit value %d" exit-value))
-                     ((stringp exit-value)
-                      (error "Sending...terminated by signal: %s" exit-value))
-                     (t
-                      (error "SENDMAIL-SEND-IT -- fall through: %S" exit-value))))
-           (or fcc-was-found
-               (error "No recipients")))
-         (if mail-interactive
-             (with-current-buffer errbuf
-               (goto-char (point-min))
-               (while (re-search-forward "\n\n* *" nil t)
-                 (replace-match "; "))
-               (if (not (zerop (buffer-size)))
-                   (error "Sending...failed to %s"
-                          (buffer-substring (point-min) (point-max)))))))
-      (kill-buffer tembuf)
-      (if (bufferp errbuf)
-         (kill-buffer errbuf)))))
-
-(autoload 'rmail-output-to-rmail-buffer "rmailout")
-
-(defun mail-do-fcc (header-end)
-  "Find and act on any FCC: headers in the current message before HEADER-END.
-If a buffer is visiting the FCC file, append to it before
-offering to save it, if it was modified initially.  If this is an
-Rmail buffer, update Rmail as needed.  If there is no buffer,
-just append to the file, in Babyl format if necessary."
-  (unless (markerp header-end)
-    (error "Value of `header-end' must be a marker"))
-  (let (fcc-list
-       (mailbuf (current-buffer))
-       (time (current-time)))
-    (save-excursion
-      (goto-char (point-min))
-      (let ((case-fold-search t))
-       (while (re-search-forward "^FCC:[ \t]*" header-end t)
-         (push (buffer-substring (point)
-                                 (progn
-                                   (end-of-line)
-                                   (skip-chars-backward " \t")
-                                   (point)))
-               fcc-list)
-         (delete-region (match-beginning 0)
-                        (progn (forward-line 1) (point)))))
-      (with-temp-buffer
-       ;; This initial newline is not written out if we create a new
-       ;; file (see below).
-       (insert "\nFrom " (user-login-name) " " (current-time-string time) "\n")
-       ;; Insert the time zone before the year.
-       (forward-char -1)
-       (forward-word -1)
-       (require 'mail-utils)
-       (insert (mail-rfc822-time-zone time) " ")
-       (goto-char (point-max))
-       (insert-buffer-substring mailbuf)
-       ;; Make sure messages are separated.
-       (goto-char (point-max))
-       (insert ?\n)
-       (goto-char 2)
-       ;; ``Quote'' "^From " as ">From "
-       ;;  (note that this isn't really quoting, as there is no requirement
-       ;;   that "^[>]+From " be quoted in the same transparent way.)
-       (let ((case-fold-search nil))
-         (while (search-forward "\nFrom " nil t)
-           (forward-char -5)
-           (insert ?>)))
-       (dolist (fcc fcc-list)
-         (let* ((buffer (find-buffer-visiting fcc))
-                (curbuf (current-buffer))
-                dont-write-the-file
-                buffer-matches-file
-                (beg (point-min))      ; the initial blank line
-                (end (point-max))
-                ;; After the ^From line.
-                (beg2 (save-excursion (goto-char (point-min))
-                                      (forward-line 2) (point))))
-           (if buffer
-               ;; File is present in a buffer => append to that buffer.
-               (with-current-buffer buffer
-                 (setq buffer-matches-file
-                       (and (not (buffer-modified-p))
-                            (verify-visited-file-modtime buffer)))
-                 (let ((msg (bound-and-true-p rmail-current-message))
-                       (buffer-read-only nil))
-                   ;; If MSG is non-nil, buffer is in Rmail mode.
-                   (if msg
-                       (let ((buff (generate-new-buffer " *mail-do-fcc")))
-                         (unwind-protect
-                             (progn
-                               (with-current-buffer buff
-                                 (insert-buffer-substring curbuf (1+ beg) end))
-                               (rmail-output-to-rmail-buffer buff msg))
-                           (kill-buffer buff)))
-                     ;; Output file not in Rmail mode => just insert
-                     ;; at the end.
-                     (save-restriction
-                       (widen)
-                       (goto-char (point-max))
-                       (insert-buffer-substring curbuf beg end)))
-                   ;; Offer to save the buffer if it was modified
-                   ;; before we started.
-                   (unless buffer-matches-file
-                     (if (y-or-n-p (format "Save file %s? " fcc))
-                         (save-buffer))
-                     (setq dont-write-the-file t)))))
-           ;; Append to the file directly, unless we've already taken
-           ;; care of it.
-           (unless dont-write-the-file
-             (if (and (file-exists-p fcc)
-                      (mail-file-babyl-p fcc))
-                 ;; If the file is a Babyl file, convert the message to
-                 ;; Babyl format.  Even though Rmail no longer uses
-                 ;; Babyl, this code can remain for the time being, on
-                 ;; the off-chance one FCCs to a Babyl file that has
-                 ;; not yet been converted to mbox.
-                 (let ((coding-system-for-write
-                        (or rmail-file-coding-system 'emacs-mule)))
-                   (with-temp-buffer
-                     (insert "\C-l\n0, unseen,,\n*** EOOH ***\nDate: "
-                             (mail-rfc822-date) "\n")
-                     (insert-buffer-substring curbuf beg2 end)
-                     (insert "\n\C-_")
-                     (write-region (point-min) (point-max) fcc t)))
-               ;; Ensure there is a blank line between messages, but
-               ;; not at the very start of the file.
-               (write-region (if (file-exists-p fcc)
-                                 (point-min)
-                               (1+ (point-min)))
-                             (point-max) fcc t)))
-           (and buffer (not dont-write-the-file)
-                (with-current-buffer buffer
-                  (set-visited-file-modtime)))))))))
-
-(defun mail-sent-via ()
-  "Make a Sent-via header line from each To or CC header line."
-  (interactive)
-  (save-excursion
-    ;; put a marker at the end of the header
-    (let ((end (copy-marker (mail-header-end)))
-         (case-fold-search t))
-      (goto-char (point-min))
-      ;; search for the To: lines and make Sent-via: lines from them
-      ;; search for the next To: line
-      (while (re-search-forward "^\\(to\\|cc\\):" end t)
-       ;; Grab this line plus all its continuations, sans the `to:'.
-       (let ((to-line
-              (buffer-substring (point)
-                                (progn
-                                  (if (re-search-forward "^[^ \t\n]" end t)
-                                      (backward-char 1)
-                                    (goto-char end))
-                                  (point)))))
-         ;; Insert a copy, with altered header field name.
-         (insert-before-markers "Sent-via:" to-line))))))
-\f
-(defun mail-to ()
-  "Move point to end of To field, creating it if necessary."
-  (interactive)
-  (expand-abbrev)
-  (mail-position-on-field "To"))
-
-(defun mail-subject ()
-  "Move point to end of Subject field, creating it if necessary."
-  (interactive)
-  (expand-abbrev)
-  (mail-position-on-field "Subject"))
-
-(defun mail-cc ()
-  "Move point to end of CC field, creating it if necessary."
-  (interactive)
-  (expand-abbrev)
-  (or (mail-position-on-field "cc" t)
-      (progn (mail-position-on-field "to")
-            (insert "\nCC: "))))
-
-(defun mail-bcc ()
-  "Move point to end of BCC field, creating it if necessary."
-  (interactive)
-  (expand-abbrev)
-  (or (mail-position-on-field "bcc" t)
-      (progn (mail-position-on-field "to")
-            (insert "\nBCC: "))))
-
-(defun mail-fcc (folder)
-  "Add a new FCC field, with file name completion."
-  (interactive "FFolder carbon copy: ")
-  (expand-abbrev)
-  (or (mail-position-on-field "fcc" t) ;Put new field after exiting FCC.
-      (mail-position-on-field "to"))
-  (insert "\nFCC: " folder))
-
-(defun mail-reply-to ()
-  "Move point to end of Reply-To field, creating it if necessary."
-  (interactive)
-  (expand-abbrev)
-  (mail-position-on-field "Reply-To"))
-
-(defun mail-mail-reply-to ()
-  "Move point to end of Mail-Reply-To field, creating it if necessary."
-  (interactive)
-  (expand-abbrev)
-  (or (mail-position-on-field "mail-reply-to" t)
-      (progn (mail-position-on-field "to")
-           (insert "\nMail-Reply-To: "))))
-
-(defun mail-mail-followup-to ()
-  "Move point to end of Mail-Followup-To field, creating it if necessary."
-  (interactive)
-  (expand-abbrev)
-  (or (mail-position-on-field "mail-followup-to" t)
-      (progn (mail-position-on-field "to")
-           (insert "\nMail-Followup-To: "))))
-
-(defun mail-position-on-field (field &optional soft)
-  (let (end
-       (case-fold-search t))
-    (setq end (mail-header-end))
-    (goto-char (point-min))
-    (if (re-search-forward (concat "^" (regexp-quote field) ":") end t)
-       (progn
-         (re-search-forward "^[^ \t]" nil 'move)
-         (beginning-of-line)
-         (skip-chars-backward "\n")
-         t)
-      (or soft
-         (progn (goto-char end)
-                (insert field ": \n")
-                (skip-chars-backward "\n")))
-      nil)))
-
-(defun mail-text ()
-  "Move point to beginning of text field."
-  (interactive)
-  (expand-abbrev)
-  (goto-char (mail-text-start)))
-\f
-(defun mail-signature (&optional atpoint)
-  "Sign letter with signature.
-If the variable `mail-signature' is a string, inserts it.
-If it is t or nil, inserts the contents of the file `mail-signature-file'.
-Otherwise, evals `mail-signature'.
-Prefix argument ATPOINT means insert at point rather than the end."
-  (interactive "*P")
-  ;; Test for an unreadable file here, before we delete trailing
-  ;; whitespace, so that we don't modify the buffer needlessly.
-  (if (and (memq mail-signature '(t nil))
-          (not (file-readable-p mail-signature-file)))
-      (if (interactive-p)
-         (message "The signature file `%s' could not be read"
-                  mail-signature-file))
-    (save-excursion
-      (unless atpoint
-       (goto-char (point-max))
-       ;; Delete trailing whitespace and blank lines.
-       (skip-chars-backward " \t\n")
-       (end-of-line)
-       (delete-region (point) (point-max)))
-      (cond ((stringp mail-signature)
-            (insert mail-signature))
-           ((memq mail-signature '(t nil))
-            (insert "\n\n-- \n")
-            (insert-file-contents (expand-file-name mail-signature-file)))
-           (t
-            ;; FIXME add condition-case error handling?
-            (eval mail-signature))))))
-
-(defun mail-fill-yanked-message (&optional justifyp)
-  "Fill the paragraphs of a message yanked into this one.
-Numeric argument means justify as well."
-  (interactive "P")
-  (save-excursion
-    (goto-char (mail-text-start))
-    (fill-individual-paragraphs (point)
-                               (point-max)
-                               justifyp
-                               mail-citation-prefix-regexp)))
-
-(defun mail-indent-citation ()
-  "Modify text just inserted from a message to be cited.
-The inserted text should be the region.
-When this function returns, the region is again around the modified text.
-
-Normally, indent each nonblank line `mail-indentation-spaces' spaces.
-However, if `mail-yank-prefix' is non-nil, insert that prefix on each line."
-  (mail-yank-clear-headers (region-beginning) (region-end))
-  (if (null mail-yank-prefix)
-      (indent-rigidly (region-beginning) (region-end)
-                     mail-indentation-spaces)
-    (save-excursion
-      (let ((end (set-marker (make-marker) (region-end))))
-       (goto-char (region-beginning))
-       (while (< (point) end)
-         (insert mail-yank-prefix)
-         (forward-line 1))))))
-
-(defun mail-yank-original (arg)
-  "Insert the message being replied to, if any (in Rmail).
-Puts point after the text and mark before.
-Normally, indents each nonblank line ARG spaces (default 3).
-However, if `mail-yank-prefix' is non-nil, insert that prefix on each line.
-
-Just \\[universal-argument] as argument means don't indent, insert no prefix,
-and don't delete any header fields."
-  (interactive "P")
-  (if mail-reply-action
-      (let ((start (point))
-           (original mail-reply-action))
-       (and (consp original) (eq (car original) 'insert-buffer)
-            (setq original (nth 1 original)))
-       (if (consp original)
-           (apply (car original) (cdr original))
-         ;; If the original message is in another window in the same frame,
-         ;; delete that window to save screen space.
-         ;; t means don't alter other frames.
-         (delete-windows-on original t)
-         (with-no-warnings
-           ;; We really want this to set mark.
-           (insert-buffer original))
-         (set-text-properties (point) (mark t) nil))
-       (if (consp arg)
-           nil
-         (goto-char start)
-         (let ((mail-indentation-spaces (if arg (prefix-numeric-value arg)
-                                          mail-indentation-spaces))
-               ;; Avoid error in Transient Mark mode
-               ;; on account of mark's being inactive.
-               (mark-even-if-inactive t))
-           (cond (mail-citation-hook
-                  ;; Bind mail-citation-header to the inserted
-                  ;; message's header.
-                  (let ((mail-citation-header
-                         (buffer-substring-no-properties
-                          start
-                          (save-excursion
-                            (save-restriction
-                              (narrow-to-region start (point-max))
-                              (goto-char start)
-                              (rfc822-goto-eoh)
-                              (point))))))
-                    (run-hooks 'mail-citation-hook)))
-                 (mail-yank-hooks
-                  (run-hooks 'mail-yank-hooks))
-                 (t
-                  (mail-indent-citation)))))
-       ;; This is like exchange-point-and-mark, but doesn't activate the mark.
-       ;; It is cleaner to avoid activation, even though the command
-       ;; loop would deactivate the mark because we inserted text.
-       (goto-char (prog1 (mark t)
-                    (set-marker (mark-marker) (point) (current-buffer))))
-       (if (not (eolp)) (insert ?\n)))))
-
-(defun mail-yank-clear-headers (start end)
-  (if (< end start)
-      (let (temp)
-       (setq temp start start end end temp)))
-  (if mail-yank-ignored-headers
-      (save-excursion
-       (goto-char start)
-       (if (search-forward "\n\n" end t)
-           (save-restriction
-             (narrow-to-region start (point))
-             (goto-char start)
-             (while (let ((case-fold-search t))
-                      (re-search-forward mail-yank-ignored-headers nil t))
-               (beginning-of-line)
-               (delete-region (point)
-                              (progn (re-search-forward "\n[^ \t]")
-                                     (forward-char -1)
-                                     (point)))))))))
-
-(defun mail-yank-region (arg)
-  "Insert the selected region from the message being replied to.
-Puts point after the text and mark before.
-Normally, indents each nonblank line ARG spaces (default 3).
-However, if `mail-yank-prefix' is non-nil, insert that prefix on each line.
-
-Just \\[universal-argument] as argument means don't indent, insert no prefix,
-and don't delete any header fields."
-  (interactive "P")
-  (and (consp mail-reply-action)
-       (eq (car mail-reply-action) 'insert-buffer)
-       (with-current-buffer (nth 1 mail-reply-action)
-        (or (mark t)
-            (error "No mark set: %S" (current-buffer))))
-       (let ((buffer (nth 1 mail-reply-action))
-            (start (point))
-            ;; Avoid error in Transient Mark mode
-            ;; on account of mark's being inactive.
-            (mark-even-if-inactive t))
-        ;; Insert the citation text.
-        (insert (with-current-buffer buffer
-                  (buffer-substring-no-properties (point) (mark))))
-        (push-mark start)
-        ;; Indent or otherwise annotate the citation text.
-        (if (consp arg)
-            nil
-          (let ((mail-indentation-spaces (if arg (prefix-numeric-value arg)
-                                           mail-indentation-spaces)))
-            (if mail-citation-hook
-                ;; Bind mail-citation-header to the original message's header.
-                (let ((mail-citation-header
-                       (with-current-buffer buffer
-                         (buffer-substring-no-properties
-                          (point-min)
-                          (save-excursion
-                            (goto-char (point-min))
-                            (rfc822-goto-eoh)
-                            (point))))))
-                  (run-hooks 'mail-citation-hook))
-              (if mail-yank-hooks
-                  (run-hooks 'mail-yank-hooks)
-                (mail-indent-citation))))))))
-
-(defun mail-split-line ()
-  "Split current line, moving portion beyond point vertically down.
-If the current line has `mail-yank-prefix', insert it on the new line."
-  (interactive "*")
-  (split-line mail-yank-prefix))
-
-\f
-(defun mail-attach-file (&optional file)
-  "Insert a file at the end of the buffer, with separator lines around it."
-  (interactive "fAttach file: ")
-  (save-excursion
-    (goto-char (point-max))
-    (or (bolp) (newline))
-    (newline)
-    (let ((start (point))
-         middle)
-      (insert (format "===File %s===" file))
-      (insert-char ?= (max 0 (- 60 (current-column))))
-      (newline)
-      (setq middle (point))
-      (insert "============================================================\n")
-      (push-mark)
-      (goto-char middle)
-      (insert-file-contents file)
-      (or (bolp) (newline))
-      (goto-char start))))
-\f
-;; Put these commands last, to reduce chance of lossage from quitting
-;; in middle of loading the file.
-
-;;;###autoload (add-hook 'same-window-buffer-names "*mail*")
-
-;;;###autoload
-(defun mail (&optional noerase to subject in-reply-to cc replybuffer actions)
-  "Edit a message to be sent.  Prefix arg means resume editing (don't erase).
-When this function returns, the buffer `*mail*' is selected.
-The value is t if the message was newly initialized; otherwise, nil.
-
-Optionally, the signature file `mail-signature-file' can be inserted at the
-end; see the variable `mail-signature'.
-
-\\<mail-mode-map>
-While editing message, type \\[mail-send-and-exit] to send the message and exit.
-
-Various special commands starting with C-c are available in sendmail mode
-to move to message header fields:
-\\{mail-mode-map}
-
-If `mail-self-blind' is non-nil, a BCC to yourself is inserted
-when the message is initialized.
-
-If `mail-default-reply-to' is non-nil, it should be an address (a string);
-a Reply-to: field with that address is inserted.
-
-If `mail-archive-file-name' is non-nil, an FCC field with that file name
-is inserted.
-
-The normal hook `mail-setup-hook' is run after the message is
-initialized.  It can add more default fields to the message.
-
-The first argument, NOERASE, determines what to do when there is
-an existing modified `*mail*' buffer.  If NOERASE is nil, the
-existing mail buffer is used, and the user is prompted whether to
-keep the old contents or to erase them.  If NOERASE has the value
-`new', a new mail buffer will be created instead of using the old
-one.  Any other non-nil value means to always select the old
-buffer without erasing the contents.
-
-The second through fifth arguments,
- TO, SUBJECT, IN-REPLY-TO and CC, specify if non-nil
- the initial contents of those header fields.
- These arguments should not have final newlines.
-The sixth argument REPLYBUFFER is a buffer which contains an
- original message being replied to, or else an action
- of the form (FUNCTION . ARGS) which says how to insert the original.
- Or it can be nil, if not replying to anything.
-The seventh argument ACTIONS is a list of actions to take
- if/when the message is sent.  Each action looks like (FUNCTION . ARGS);
- when the message is sent, we apply FUNCTION to ARGS.
- This is how Rmail arranges to mark messages `answered'."
-  (interactive "P")
-;;;  This is commented out because I found it was confusing in practice.
-;;;  It is easy enough to rename *mail* by hand with rename-buffer
-;;;  if you want to have multiple mail buffers.
-;;;  And then you can control which messages to save. --rms.
-;;;  (let ((index 1)
-;;;    buffer)
-;;;    ;; If requested, look for a mail buffer that is modified and go to it.
-;;;    (if noerase
-;;;    (progn
-;;;      (while (and (setq buffer
-;;;                        (get-buffer (if (= 1 index) "*mail*"
-;;;                                      (format "*mail*<%d>" index))))
-;;;                  (not (buffer-modified-p buffer)))
-;;;        (setq index (1+ index)))
-;;;      (if buffer (switch-to-buffer buffer)
-;;;        ;; If none exists, start a new message.
-;;;        ;; This will never re-use an existing unmodified mail buffer
-;;;        ;; (since index is not 1 anymore).  Perhaps it should.
-;;;        (setq noerase nil))))
-;;;    ;; Unless we found a modified message and are happy, start a new message.
-;;;    (if (not noerase)
-;;;    (progn
-;;;      ;; Look for existing unmodified mail buffer.
-;;;      (while (and (setq buffer
-;;;                        (get-buffer (if (= 1 index) "*mail*"
-;;;                                      (format "*mail*<%d>" index))))
-;;;                  (buffer-modified-p buffer))
-;;;        (setq index (1+ index)))
-;;;      ;; If none, make a new one.
-;;;      (or buffer
-;;;          (setq buffer (generate-new-buffer "*mail*")))
-;;;      ;; Go there and initialize it.
-;;;      (switch-to-buffer buffer)
-;;;      (erase-buffer)
-;;;          (setq default-directory (expand-file-name "~/"))
-;;;          (auto-save-mode auto-save-default)
-;;;          (mail-mode)
-;;;          (mail-setup to subject in-reply-to cc replybuffer actions)
-;;;      (if (and buffer-auto-save-file-name
-;;;               (file-exists-p buffer-auto-save-file-name))
-;;;          (message "Auto save file for draft message exists; consider M-x mail-recover"))
-;;;          t))
-
-  (if (eq noerase 'new)
-      (pop-to-buffer (generate-new-buffer "*mail*"))
-    (and noerase
-        (not (get-buffer "*mail*"))
-        (setq noerase nil))
-    (pop-to-buffer "*mail*"))
-
-  ;; Avoid danger that the auto-save file can't be written.
-  (let ((dir (expand-file-name
-             (file-name-as-directory mail-default-directory))))
-    (if (file-exists-p dir)
-       (setq default-directory dir)))
-  ;; Only call auto-save-mode if necessary, to avoid changing auto-save file.
-  (if (or (and auto-save-default (not buffer-auto-save-file-name))
-          (and (not auto-save-default) buffer-auto-save-file-name))
-      (auto-save-mode auto-save-default))
-  (mail-mode)
-  ;; Disconnect the buffer from its visited file
-  ;; (in case the user has actually visited a file *mail*).
-;;;  (set-visited-file-name nil)
-  (let (initialized)
-    (and (not (and noerase
-                  (not (eq noerase 'new))))
-        (if buffer-file-name
-            (if (buffer-modified-p)
-                (when (y-or-n-p "Buffer has unsaved changes; reinitialize it and discard them? ")
-                  (if (y-or-n-p "Disconnect buffer from visited file? ")
-                      (set-visited-file-name nil))
-                  t)
-              (when (y-or-n-p "Reinitialize buffer, and disconnect it from the visited file? ")
-                (set-visited-file-name nil)
-                t))
-          ;; A non-file-visiting buffer.
-          (if (buffer-modified-p)
-              (y-or-n-p "Unsent message being composed; erase it? ")
-            t))
-        (let ((inhibit-read-only t))
-          (erase-buffer)
-          (mail-setup to subject in-reply-to cc replybuffer actions)
-          (setq initialized t)))
-    (if (and buffer-auto-save-file-name
-            (file-exists-p buffer-auto-save-file-name))
-       (message "Auto save file for draft message exists; consider M-x mail-recover"))
-    initialized))
-
-(declare-function dired-view-file "dired" ())
-(declare-function dired-get-filename "dired" (&optional localp no-error-if-not-filep))
-
-(defun mail-recover-1 ()
-  "Pop up a list of auto-saved draft messages so you can recover one of them."
-  (interactive)
-  (let ((file-name (make-auto-save-file-name))
-       (ls-lisp-support-shell-wildcards t)
-       non-random-len wildcard)
-    ;; Remove the random part from the auto-save-file-name, and
-    ;; create a wildcard which matches possible candidates.
-    ;; Note: this knows that make-auto-save-file-name appends
-    ;; "#<RANDOM-STUFF>#" to the buffer name, where RANDOM-STUFF
-    ;; is the result of (make-temp-name "").
-    (setq non-random-len
-         (- (length file-name) (length (make-temp-name "")) 1))
-    (setq wildcard (concat (substring file-name 0 non-random-len) "*"))
-    (if (null (file-expand-wildcards wildcard))
-       (message "There are no auto-saved drafts to recover")
-      ;; Bind dired-trivial-filenames to t because all auto-save file
-      ;; names are normally ``trivial'', so Dired will set point after
-      ;; all the files, at buffer bottom.  We want it on the first
-      ;; file instead.
-      (let ((dired-trivial-filenames t))
-       (dired-other-window wildcard (concat dired-listing-switches "t")))
-      (rename-buffer "*Auto-saved Drafts*" t)
-      (save-excursion
-       (goto-char (point-min))
-       (or (looking-at " Move to the draft file you want to recover,")
-           (let ((inhibit-read-only t))
-             ;; Each line starts with a space so that Font Lock mode
-             ;; won't highlight the first character.
-             (insert "\
- Move to the draft file you want to recover, then type C-c C-c
- to recover text of message whose composition was interrupted.
- To browse text of a draft, type v on the draft file's line.
-
- You can also delete some of these files;
- type d on a line to mark that file for deletion.
-
- List of possible auto-save files for recovery:
-
-"))))
-      (use-local-map
-       (let ((map (make-sparse-keymap)))
-        (set-keymap-parent map (current-local-map))
-        map))
-      (define-key (current-local-map) "v"
-       (lambda ()
-         (interactive)
-         (let ((coding-system-for-read 'emacs-mule-unix))
-           (dired-view-file))))
-      (define-key (current-local-map) "\C-c\C-c"
-       (lambda ()
-         (interactive)
-         (let ((fname (dired-get-filename))
-               ;; Auto-saved files are written in the internal
-               ;; representation, so they should be read accordingly.
-               (coding-system-for-read 'emacs-mule-unix))
-           (switch-to-buffer-other-window "*mail*")
-           (let ((buffer-read-only nil))
-             (erase-buffer)
-             (insert-file-contents fname nil)
-             ;; insert-file-contents will set buffer-file-coding-system
-             ;; to emacs-mule, which is probably not what they want to
-             ;; use for sending the message.  But we don't know what
-             ;; was its value before the buffer was killed or Emacs
-             ;; crashed.  We therefore reset buffer-file-coding-system
-             ;; to the default value, so that either the default does
-             ;; TRT, or the user will get prompted for the right
-             ;; encoding when they send the message.
-             (setq buffer-file-coding-system
-                   default-buffer-file-coding-system))))))))
-
-(declare-function dired-move-to-filename "dired" (&optional raise-error eol))
-(declare-function dired-get-filename "dired" (&optional localp no-error-if-not-filep))
-(declare-function dired-view-file "dired" ())
-
-(defun mail-recover ()
-  "Recover interrupted mail composition from auto-save files.
-
-If the mail buffer has a current valid auto-save file,
-the command recovers that file.  Otherwise, it displays a
-buffer showing the existing auto-saved draft messages;
-you can move to one of them and type C-c C-c to recover that one."
-  (interactive)
-  ;; In case they invoke us from some random buffer...
-  (switch-to-buffer "*mail*")
-  ;; If *mail* didn't exist, set its directory, so that auto-saved
-  ;; drafts will be found.
-  (let ((dir (expand-file-name
-             (file-name-as-directory mail-default-directory))))
-    (if (file-exists-p dir)
-       (setq default-directory dir)))
-  (or (eq major-mode 'mail-mode)
-      (mail-mode))
-  (let ((file-name buffer-auto-save-file-name))
-    (cond ((and file-name (file-exists-p file-name))
-          (let ((dispbuf
-                 ;; This used to invoke `ls' via call-process, but
-                 ;; dired-noselect is more portable to systems where
-                 ;; `ls' is not a standard program (it will use
-                 ;; ls-lisp instead).
-                 (dired-noselect file-name
-                                 (concat dired-listing-switches "t"))))
-            (save-selected-window
-              (select-window (display-buffer dispbuf t))
-              (goto-char (point-min))
-              (forward-line 2)
-              (dired-move-to-filename)
-              (setq dispbuf (rename-buffer "*Directory*" t)))
-            (if (not (yes-or-no-p
-                      (format "Recover mail draft from auto save file %s? "
-                              file-name)))
-                (error "mail-recover cancelled")
-              (let ((buffer-read-only nil)
-                    (buffer-coding buffer-file-coding-system)
-                    ;; Auto-save files are written in internal
-                    ;; representation of non-ASCII characters.
-                    (coding-system-for-read 'emacs-mule-unix))
-                (erase-buffer)
-                (insert-file-contents file-name nil)
-                (setq buffer-file-coding-system buffer-coding)))))
-         (t (mail-recover-1)))))
-
-;;;###autoload
-(defun mail-other-window (&optional noerase to subject in-reply-to cc replybuffer sendactions)
-  "Like `mail' command, but display mail buffer in another window."
-  (interactive "P")
-  (let ((pop-up-windows t)
-       (special-display-buffer-names nil)
-       (special-display-regexps nil)
-       (same-window-buffer-names nil)
-       (same-window-regexps nil))
-    (pop-to-buffer "*mail*"))
-  (mail noerase to subject in-reply-to cc replybuffer sendactions))
-
-;;;###autoload
-(defun mail-other-frame (&optional noerase to subject in-reply-to cc replybuffer sendactions)
-  "Like `mail' command, but display mail buffer in another frame."
-  (interactive "P")
-  (let ((pop-up-frames t)
-       (special-display-buffer-names nil)
-       (special-display-regexps nil)
-       (same-window-buffer-names nil)
-       (same-window-regexps nil))
-    (pop-to-buffer "*mail*"))
-  (mail noerase to subject in-reply-to cc replybuffer sendactions))
-
-;; Do not add anything but external entries on this page.
-
-(provide 'sendmail)
-
-;;; sendmail.el ends here
diff --git a/contrib/smtpmail.el b/contrib/smtpmail.el
deleted file mode 100644 (file)
index 43e8405..0000000
+++ /dev/null
@@ -1,1040 +0,0 @@
-;;; smtpmail.el --- simple SMTP protocol (RFC 821) for sending mail
-
-;; Copyright (C) 1995, 1996, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-;;   2008, 2009  Free Software Foundation, Inc.
-
-;; Author: Tomoji Kagatani <kagatani@rbc.ncl.omron.co.jp>
-;; Maintainer: Simon Josefsson <simon@josefsson.org>
-;; w32 Maintainer: Brian D. Carlstrom <bdc@ai.mit.edu>
-;; ESMTP support: Simon Leinen <simon@switch.ch>
-;; Hacked by Mike Taylor, 11th October 1999 to add support for
-;; automatically appending a domain to RCPT TO: addresses.
-;; AUTH=LOGIN support: Stephen Cranefield <scranefield@infoscience.otago.ac.nz>
-;; Keywords: mail
-
-;; 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 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.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Send Mail to smtp host from smtpmail temp buffer.
-
-;; Please add these lines in your .emacs(_emacs) or use customize.
-;;
-;;(setq send-mail-function 'smtpmail-send-it) ; if you use `mail'
-;;(setq message-send-mail-function 'smtpmail-send-it) ; if you use message/Gnus
-;;(setq smtpmail-default-smtp-server "YOUR SMTP HOST")
-;;(setq smtpmail-local-domain "YOUR DOMAIN NAME")
-;;(setq smtpmail-sendto-domain "YOUR DOMAIN NAME")
-;;(setq smtpmail-debug-info t) ; only to debug problems
-;;(setq smtpmail-auth-credentials  ; or use ~/.authinfo
-;;      '(("YOUR SMTP HOST" 25 "username" "password")))
-;;(setq smtpmail-starttls-credentials
-;;      '(("YOUR SMTP HOST" 25 "~/.my_smtp_tls.key" "~/.my_smtp_tls.cert")))
-;; Where the 25 equals the value of `smtpmail-smtp-service', it can be an
-;; integer or a string, just as long as they match (eq).
-
-;; To queue mail, set smtpmail-queue-mail to t and use
-;; smtpmail-send-queued-mail to send.
-
-;; Modified by Stephen Cranefield <scranefield@infoscience.otago.ac.nz>,
-;; 22/6/99, to support SMTP Authentication by the AUTH=LOGIN mechanism.
-;; See http://help.netscape.com/products/server/messaging/3x/info/smtpauth.html
-;; Rewritten by Simon Josefsson to use same credential variable as AUTH
-;; support below.
-
-;; Modified by Simon Josefsson <jas@pdc.kth.se>, 22/2/99, to support SMTP
-;; Authentication by the AUTH mechanism.
-;; See http://www.ietf.org/rfc/rfc2554.txt
-
-;; Modified by Simon Josefsson <simon@josefsson.org>, 2000-10-07, to support
-;; STARTTLS.  Requires external program
-;; ftp://ftp.opaopa.org/pub/elisp/starttls-*.tar.gz.
-;; See http://www.ietf.org/rfc/rfc2246.txt, http://www.ietf.org/rfc/rfc2487.txt
-
-;;; Code:
-
-;; This version of `smtpmail.el' should only be used with Emacs 21.
-(if (featurep 'xemacs)
-    (error "Please use `smtpmail.el' from the mail-lib package.")
-  (when (>= emacs-major-version 22)
-    (error "Please use `smtpmail.el' bundled with Emacs.")))
-
-(require 'sendmail)
-(autoload 'starttls-any-program-available "starttls")
-(autoload 'starttls-open-stream "starttls")
-(autoload 'starttls-negotiate "starttls")
-(autoload 'mail-strip-quoted-names "mail-utils")
-(autoload 'message-make-date "message")
-(autoload 'message-make-message-id "message")
-(autoload 'rfc2104-hash "rfc2104")
-(autoload 'netrc-parse "netrc")
-(autoload 'netrc-machine "netrc")
-(autoload 'netrc-get "netrc")
-(autoload 'auth-source-user-or-password "auth-source")
-
-;;;
-(defgroup smtpmail nil
-  "SMTP protocol for sending mail."
-  :group 'mail)
-
-
-(defcustom smtpmail-default-smtp-server nil
-  "*Specify default SMTP server.
-This only has effect if you specify it before loading the smtpmail library."
-  :type '(choice (const nil) string)
-  :group 'smtpmail)
-
-(defcustom smtpmail-smtp-server
-  (or (getenv "SMTPSERVER") smtpmail-default-smtp-server)
-  "*The name of the host running SMTP server."
-  :type '(choice (const nil) string)
-  :group 'smtpmail)
-
-(defcustom smtpmail-smtp-service 25
-  "*SMTP service port number.
-The default value would be \"smtp\" or 25."
-  :type '(choice (integer :tag "Port") (string :tag "Service"))
-  :group 'smtpmail)
-
-(defcustom smtpmail-local-domain nil
-  "*Local domain name without a host name.
-If the function `system-name' returns the full internet address,
-don't define this value."
-  :type '(choice (const nil) string)
-  :group 'smtpmail)
-
-(defcustom smtpmail-sendto-domain nil
-  "*Local domain name without a host name.
-This is appended (with an @-sign) to any specified recipients which do
-not include an @-sign, so that each RCPT TO address is fully qualified.
-\(Some configurations of sendmail require this.)
-
-Don't bother to set this unless you have get an error like:
-       Sending failed; SMTP protocol error
-when sending mail, and the *trace of SMTP session to <somewhere>*
-buffer includes an exchange like:
-       RCPT TO: <someone>
-       501 <someone>: recipient address must contain a domain
-"
-  :type '(choice (const nil) string)
-  :group 'smtpmail)
-
-(defcustom smtpmail-debug-info nil
-  "Whether to print info in buffer *trace of SMTP session to <somewhere>*.
-See also `smtpmail-debug-verb' which determines if the SMTP protocol should
-be verbose as well."
-  :type 'boolean
-  :group 'smtpmail)
-
-(defcustom smtpmail-debug-verb nil
-  "Whether this library sends the SMTP VERB command or not.
-The commands enables verbose information from the SMTP server."
-  :type 'boolean
-  :group 'smtpmail)
-
-(defcustom smtpmail-code-conv-from nil ;; *junet*
-  "*smtpmail code convert from this code to *internal*..for tiny-mime.."
-  :type 'boolean
-  :group 'smtpmail)
-
-(defcustom smtpmail-queue-mail nil
-  "*If set, mail is queued; otherwise it is sent immediately.
-If queued, it is stored in the directory `smtpmail-queue-dir'
-and sent with `smtpmail-send-queued-mail'."
-  :type 'boolean
-  :group 'smtpmail)
-
-(defcustom smtpmail-queue-dir "~/Mail/queued-mail/"
-  "*Directory where `smtpmail.el' stores queued mail."
-  :type 'directory
-  :group 'smtpmail)
-
-(defcustom smtpmail-auth-credentials "~/.authinfo"
-  "Specify username and password for servers, directly or via .netrc file.
-This variable can either be a filename pointing to a file in netrc(5)
-format, or list of four-element lists that contain, in order,
-`servername' (a string), `port' (an integer), `user' (a string) and
-`password' (a string, or nil to query the user when needed).  If you
-need to enter a `realm' too, add it to the user string, so that it
-looks like `user@realm'."
-  :type '(choice file
-                (repeat (list (string  :tag "Server")
-                      (integer :tag "Port")
-                      (string  :tag "Username")
-                      (choice (const :tag "Query when needed" nil)
-                                      (string  :tag "Password")))))
-  :version "22.1"
-  :group 'smtpmail)
-
-(defcustom smtpmail-starttls-credentials '(("" 25 "" ""))
-  "Specify STARTTLS keys and certificates for servers.
-This is a list of four-element list with `servername' (a string),
-`port' (an integer), `key' (a filename) and `certificate' (a
-filename).
-If you do not have a certificate/key pair, leave the `key' and
-`certificate' fields as `nil'.  A key/certificate pair is only
-needed if you want to use X.509 client authenticated
-connections."
-  :type '(repeat (list (string  :tag "Server")
-                      (integer :tag "Port")
-                      (file    :tag "Key")
-                      (file    :tag "Certificate")))
-  :version "21.1"
-  :group 'smtpmail)
-
-(defcustom smtpmail-warn-about-unknown-extensions nil
-  "*If set, print warnings about unknown SMTP extensions.
-This is mainly useful for development purposes, to learn about
-new SMTP extensions that might be useful to support."
-  :type 'boolean
-  :version "21.1"
-  :group 'smtpmail)
-
-(defvar smtpmail-queue-index-file "index"
-  "File name of queued mail index.
-This is relative to `smtpmail-queue-dir'.")
-
-(defvar smtpmail-address-buffer)
-(defvar smtpmail-recipient-address-list)
-
-(defvar smtpmail-queue-counter 0)
-
-;; Buffer-local variable.
-(defvar smtpmail-read-point)
-
-(defvar smtpmail-queue-index (concat smtpmail-queue-dir
-                                    smtpmail-queue-index-file))
-
-(defconst smtpmail-auth-supported '(cram-md5 plain login)
-  "List of supported SMTP AUTH mechanisms.
-The list is in preference order.")
-
-;;;
-;;;
-;;;
-
-(defvar smtpmail-mail-address nil
-  "Value to use for envelope-from address for mail from ambient buffer.")
-
-;;;###autoload
-(defun smtpmail-send-it ()
-  (let ((errbuf (if mail-interactive
-                   (generate-new-buffer " smtpmail errors")
-                 0))
-       (tembuf (generate-new-buffer " smtpmail temp"))
-       (case-fold-search nil)
-       delimline
-       (mailbuf (current-buffer))
-        ;; Examine this variable now, so that
-       ;; local binding in the mail buffer will take effect.
-       (smtpmail-mail-address
-         (or (and mail-specify-envelope-from (mail-envelope-from))
-             user-mail-address))
-       (smtpmail-code-conv-from
-        (if enable-multibyte-characters
-            (let ((sendmail-coding-system smtpmail-code-conv-from))
-              (select-message-coding-system)))))
-    (unwind-protect
-       (save-excursion
-         (set-buffer tembuf)
-         (erase-buffer)
-         ;; Use the same buffer-file-coding-system as in the mail
-         ;; buffer, otherwise any write-region invocations (e.g., in
-         ;; mail-do-fcc below) will annoy with asking for a suitable
-         ;; encoding.
-         ;;
-         ;; This file (`gnus/contrib/smtpmail.el') is only useful for Emacs
-         ;; which doesn't support the third argument (NOMODIFY) of
-         ;; `set-buffer-file-coding-system'.
-         (set-buffer-file-coding-system smtpmail-code-conv-from nil)
-         (set-buffer-modified-p nil)
-         (force-mode-line-update)
-         (insert-buffer-substring mailbuf)
-         (goto-char (point-max))
-         ;; require one newline at the end.
-         (or (= (preceding-char) ?\n)
-             (insert ?\n))
-         ;; Change header-delimiter to be what sendmail expects.
-         (mail-sendmail-undelimit-header)
-         (setq delimline (point-marker))
-;;       (sendmail-synch-aliases)
-         (if mail-aliases
-             (expand-mail-aliases (point-min) delimline))
-         (goto-char (point-min))
-         ;; ignore any blank lines in the header
-         (while (and (re-search-forward "\n\n\n*" delimline t)
-                     (< (point) delimline))
-           (replace-match "\n"))
-         (let ((case-fold-search t))
-           ;; We used to process Resent-... headers here,
-           ;; but it was not done properly, and the job
-           ;; is done correctly in smtpmail-deduce-address-list.
-           ;; Don't send out a blank subject line
-           (goto-char (point-min))
-           (if (re-search-forward "^Subject:\\([ \t]*\n\\)+\\b" delimline t)
-               (replace-match "")
-             ;; This one matches a Subject just before the header delimiter.
-             (if (and (re-search-forward "^Subject:\\([ \t]*\n\\)+" delimline t)
-                      (= (match-end 0) delimline))
-                 (replace-match "")))
-           ;; Put the "From:" field in unless for some odd reason
-           ;; they put one in themselves.
-           (goto-char (point-min))
-           (if (not (re-search-forward "^From:" delimline t))
-               (let* ((login smtpmail-mail-address)
-                      (fullname (user-full-name)))
-                 (cond ((eq mail-from-style 'angles)
-                        (insert "From: " fullname)
-                        (let ((fullname-start (+ (point-min) 6))
-                              (fullname-end (point-marker)))
-                          (goto-char fullname-start)
-                          ;; Look for a character that cannot appear unquoted
-                          ;; according to RFC 822.
-                          (if (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]"
-                                                 fullname-end 1)
-                              (progn
-                                ;; Quote fullname, escaping specials.
-                                (goto-char fullname-start)
-                                (insert "\"")
-                                (while (re-search-forward "[\"\\]"
-                                                          fullname-end 1)
-                                  (replace-match "\\\\\\&" t))
-                                (insert "\""))))
-                        (insert " <" login ">\n"))
-                       ((eq mail-from-style 'parens)
-                        (insert "From: " login " (")
-                        (let ((fullname-start (point)))
-                          (insert fullname)
-                          (let ((fullname-end (point-marker)))
-                            (goto-char fullname-start)
-                            ;; RFC 822 says \ and nonmatching parentheses
-                            ;; must be escaped in comments.
-                            ;; Escape every instance of ()\ ...
-                            (while (re-search-forward "[()\\]" fullname-end 1)
-                              (replace-match "\\\\\\&" t))
-                            ;; ... then undo escaping of matching parentheses,
-                            ;; including matching nested parentheses.
-                            (goto-char fullname-start)
-                            (while (re-search-forward
-                                    "\\(\\=\\|[^\\]\\(\\\\\\\\\\)*\\)\\\\(\\(\\([^\\]\\|\\\\\\\\\\)*\\)\\\\)"
-                                    fullname-end 1)
-                              (replace-match "\\1(\\3)" t)
-                              (goto-char fullname-start))))
-                        (insert ")\n"))
-                       ((null mail-from-style)
-                        (insert "From: " login "\n")))))
-           ;; Insert a `Message-Id:' field if there isn't one yet.
-           (goto-char (point-min))
-           (unless (re-search-forward "^Message-Id:" delimline t)
-             (insert "Message-Id: " (message-make-message-id) "\n"))
-           ;; Insert a `Date:' field if there isn't one yet.
-           (goto-char (point-min))
-           (unless (re-search-forward "^Date:" delimline t)
-             (insert "Date: " (message-make-date) "\n"))
-           ;; Possibly add a MIME header for the current coding system
-           (let (charset)
-             (goto-char (point-min))
-             (and (eq mail-send-nonascii 'mime)
-                  (not (re-search-forward "^MIME-version:" delimline t))
-                  (progn (skip-chars-forward "\0-\177")
-                         (/= (point) (point-max)))
-                  smtpmail-code-conv-from
-                  (setq charset
-                        (coding-system-get smtpmail-code-conv-from
-                                           'mime-charset))
-                  (goto-char delimline)
-                  (insert "MIME-version: 1.0\n"
-                          "Content-type: text/plain; charset="
-                          (symbol-name charset)
-                          "\nContent-Transfer-Encoding: 8bit\n")))
-           ;; Insert an extra newline if we need it to work around
-           ;; Sun's bug that swallows newlines.
-           (goto-char (1+ delimline))
-           (if (eval mail-mailer-swallows-blank-line)
-               (newline))
-           ;; Find and handle any FCC fields.
-           (goto-char (point-min))
-           (if (re-search-forward "^FCC:" delimline t)
-               ;; Force mail-do-fcc to use the encoding of the mail
-               ;; buffer to encode outgoing messages on FCC files.
-               (let ((coding-system-for-write smtpmail-code-conv-from))
-                 (mail-do-fcc delimline)))
-           (if mail-interactive
-               (with-current-buffer errbuf
-                 (erase-buffer))))
-         ;;
-         ;;
-         ;;
-         (setq smtpmail-address-buffer (generate-new-buffer "*smtp-mail*"))
-         (setq smtpmail-recipient-address-list
-                   (smtpmail-deduce-address-list tembuf (point-min) delimline))
-         (kill-buffer smtpmail-address-buffer)
-
-         (smtpmail-do-bcc delimline)
-         ; Send or queue
-         (if (not smtpmail-queue-mail)
-             (if (not (null smtpmail-recipient-address-list))
-                 (if (not (smtpmail-via-smtp
-                           smtpmail-recipient-address-list tembuf))
-                     (error "Sending failed; SMTP protocol error"))
-               (error "Sending failed; no recipients"))
-           (let* ((file-data
-                   (expand-file-name
-                    (format "%s_%i"
-                            (format-time-string "%Y-%m-%d_%H:%M:%S")
-                            (setq smtpmail-queue-counter
-                                  (1+ smtpmail-queue-counter)))
-                    smtpmail-queue-dir))
-                  (file-data (convert-standard-filename file-data))
-                  (file-elisp (concat file-data ".el"))
-                  (buffer-data (create-file-buffer file-data))
-                  (buffer-elisp (create-file-buffer file-elisp))
-                  (buffer-scratch "*queue-mail*"))
-             (unless (file-exists-p smtpmail-queue-dir)
-               (make-directory smtpmail-queue-dir t))
-             (with-current-buffer buffer-data
-               (erase-buffer)
-               (set-buffer-file-coding-system smtpmail-code-conv-from nil)
-               (insert-buffer-substring tembuf)
-               (write-file file-data)
-               (set-buffer buffer-elisp)
-               (erase-buffer)
-               (insert (concat
-                        "(setq smtpmail-recipient-address-list '"
-                        (prin1-to-string smtpmail-recipient-address-list)
-                        ")\n"))
-               (write-file file-elisp)
-               (set-buffer (generate-new-buffer buffer-scratch))
-               (insert (concat file-data "\n"))
-               (append-to-file (point-min)
-                               (point-max)
-                               smtpmail-queue-index)
-               )
-             (kill-buffer buffer-scratch)
-             (kill-buffer buffer-data)
-             (kill-buffer buffer-elisp))))
-      (kill-buffer tembuf)
-      (if (bufferp errbuf)
-         (kill-buffer errbuf)))))
-
-;;;###autoload
-(defun smtpmail-send-queued-mail ()
-  "Send mail that was queued as a result of setting `smtpmail-queue-mail'."
-  (interactive)
-  (with-temp-buffer
-    ;;; Get index, get first mail, send it, update index, get second
-    ;;; mail, send it, etc...
-    (let ((file-msg ""))
-      (insert-file-contents smtpmail-queue-index)
-      (goto-char (point-min))
-      (while (not (eobp))
-       (setq file-msg (buffer-substring (point) (line-end-position)))
-       (load file-msg)
-       ;; Insert the message literally: it is already encoded as per
-       ;; the MIME headers, and code conversions might guess the
-       ;; encoding wrongly.
-       (with-temp-buffer
-         (let ((coding-system-for-read 'no-conversion))
-           (insert-file-contents file-msg))
-          (let ((smtpmail-mail-address
-                 (or (and mail-specify-envelope-from (mail-envelope-from))
-                     user-mail-address)))
-            (if (not (null smtpmail-recipient-address-list))
-                (if (not (smtpmail-via-smtp smtpmail-recipient-address-list
-                                            (current-buffer)))
-                    (error "Sending failed; SMTP protocol error"))
-              (error "Sending failed; no recipients"))))
-       (delete-file file-msg)
-       (delete-file (concat file-msg ".el"))
-       (delete-region (point-at-bol) (point-at-bol 2)))
-      (write-region (point-min) (point-max) smtpmail-queue-index))))
-
-;(defun smtpmail-via-smtp (host,port,sender,destination,smtpmail-text-buffer)
-
-(defun smtpmail-fqdn ()
-  (if smtpmail-local-domain
-      (concat (system-name) "." smtpmail-local-domain)
-    (system-name)))
-
-(defsubst smtpmail-cred-server (cred)
-  (nth 0 cred))
-
-(defsubst smtpmail-cred-port (cred)
-  (nth 1 cred))
-
-(defsubst smtpmail-cred-key (cred)
-  (nth 2 cred))
-
-(defsubst smtpmail-cred-user (cred)
-  (nth 2 cred))
-
-(defsubst smtpmail-cred-cert (cred)
-  (nth 3 cred))
-
-(defsubst smtpmail-cred-passwd (cred)
-  (nth 3 cred))
-
-(defun smtpmail-find-credentials (cred server port)
-  (catch 'done
-    (let ((l cred) el)
-      (while (setq el (pop l))
-       (when (and (equal server (smtpmail-cred-server el))
-                  (equal port (smtpmail-cred-port el)))
-         (throw 'done el))))))
-
-(defun smtpmail-maybe-append-domain (recipient)
-  (if (or (not smtpmail-sendto-domain)
-         (string-match "@" recipient))
-      recipient
-    (concat recipient "@" smtpmail-sendto-domain)))
-
-(defun smtpmail-intersection (list1 list2)
-  (let ((result nil))
-    (dolist (el2 list2)
-      (when (memq el2 list1)
-       (push el2 result)))
-    (nreverse result)))
-
-(defvar starttls-extra-args)
-(defvar starttls-extra-arguments)
-
-(defun smtpmail-open-stream (process-buffer host port)
-  (let ((cred (smtpmail-find-credentials
-              smtpmail-starttls-credentials host port)))
-    (if (null (and cred (starttls-any-program-available)))
-       ;; The normal case.
-       (open-network-stream "SMTP" process-buffer host port)
-      (let* ((cred-key (smtpmail-cred-key cred))
-            (cred-cert (smtpmail-cred-cert cred))
-            (starttls-extra-args
-             (append
-              starttls-extra-args
-              (when (and (stringp cred-key) (stringp cred-cert)
-                         (file-regular-p
-                          (setq cred-key (expand-file-name cred-key)))
-                         (file-regular-p
-                          (setq cred-cert (expand-file-name cred-cert))))
-                (list "--key-file" cred-key "--cert-file" cred-cert))))
-            (starttls-extra-arguments
-             (append
-              starttls-extra-arguments
-              (when (and (stringp cred-key) (stringp cred-cert)
-                         (file-regular-p
-                          (setq cred-key (expand-file-name cred-key)))
-                         (file-regular-p
-                          (setq cred-cert (expand-file-name cred-cert))))
-                (list "--x509keyfile" cred-key "--x509certfile" cred-cert)))))
-       (starttls-open-stream "SMTP" process-buffer host port)))))
-
-(defun smtpmail-try-auth-methods (process supported-extensions host port)
-  (let* ((mechs (cdr-safe (assoc 'auth supported-extensions)))
-        (mech (car (smtpmail-intersection mechs smtpmail-auth-supported)))
-        (auth-user (auth-source-user-or-password
-                    "login" host (or port "smtp")))
-        (auth-pass (auth-source-user-or-password
-                    "password" host (or port "smtp")))
-        (cred (if (and auth-user auth-pass) ; try user-auth-* before netrc-*
-                  (list host port auth-user auth-pass)
-                ;; else, if auth-source didn't return them...
-                (if (stringp smtpmail-auth-credentials)
-                    (let* ((netrc (netrc-parse smtpmail-auth-credentials))
-                           (port-name (format "%s" (or port "smtp")))
-                           (hostentry (netrc-machine netrc host port-name
-                                                     port-name)))
-                      (when hostentry
-                        (list host port
-                              (netrc-get hostentry "login")
-                              (netrc-get hostentry "password"))))
-                  ;; else, try smtpmail-find-credentials since
-                  ;; smtpmail-auth-credentials is not a string
-                  (smtpmail-find-credentials
-                   smtpmail-auth-credentials host port))))
-        (prompt (when cred (format "SMTP password for %s:%s: "
-                                   (smtpmail-cred-server cred)
-                                   (smtpmail-cred-port cred))))
-        (passwd (when cred
-                  (or (smtpmail-cred-passwd cred)
-                      (read-passwd
-                       (format "SMTP password for %s:%s: "
-                               (smtpmail-cred-server cred)
-                               (smtpmail-cred-port cred))))))
-        ret)
-    (when (and cred mech)
-      (cond
-       ((eq mech 'cram-md5)
-       (smtpmail-send-command process (upcase (format "AUTH %s" mech)))
-       (if (or (null (car (setq ret (smtpmail-read-response process))))
-               (not (integerp (car ret)))
-               (>= (car ret) 400))
-           (throw 'done nil))
-       (when (eq (car ret) 334)
-         (let* ((challenge (substring (cadr ret) 4))
-                (decoded (base64-decode-string challenge))
-                (hash (rfc2104-hash 'md5 64 16 passwd decoded))
-                (response (concat (smtpmail-cred-user cred) " " hash))
-                ;; Osamu Yamane <yamane@green.ocn.ne.jp>:
-                ;; SMTP auth fails because the SMTP server identifies
-                ;; only the first part of the string (delimited by
-                ;; new line characters) as a response from the
-                ;; client, and the rest as distinct commands.
-
-                ;; In my case, the response string is 80 characters
-                ;; long.  Without the no-line-break option for
-                ;; base64-encode-sting, only the first 76 characters
-                ;; are taken as a response to the server, and the
-                ;; authentication fails.
-                (encoded (base64-encode-string response t)))
-           (smtpmail-send-command process (format "%s" encoded))
-           (if (or (null (car (setq ret (smtpmail-read-response process))))
-                   (not (integerp (car ret)))
-                   (>= (car ret) 400))
-               (throw 'done nil)))))
-       ((eq mech 'login)
-       (smtpmail-send-command process "AUTH LOGIN")
-       (if (or (null (car (setq ret (smtpmail-read-response process))))
-               (not (integerp (car ret)))
-               (>= (car ret) 400))
-           (throw 'done nil))
-       (smtpmail-send-command
-        process (base64-encode-string (smtpmail-cred-user cred) t))
-       (if (or (null (car (setq ret (smtpmail-read-response process))))
-               (not (integerp (car ret)))
-               (>= (car ret) 400))
-           (throw 'done nil))
-       (smtpmail-send-command process (base64-encode-string passwd t))
-       (if (or (null (car (setq ret (smtpmail-read-response process))))
-               (not (integerp (car ret)))
-               (>= (car ret) 400))
-           (throw 'done nil)))
-       ((eq mech 'plain)
-       ;; We used to send an empty initial request, and wait for an
-       ;; empty response, and then send the password, but this
-       ;; violate a SHOULD in RFC 2222 paragraph 5.1.  Note that this
-       ;; is not sent if the server did not advertise AUTH PLAIN in
-       ;; the EHLO response.  See RFC 2554 for more info.
-       (smtpmail-send-command process
-                              (concat "AUTH PLAIN "
-                                      (base64-encode-string
-                                       (concat "\0"
-                                               (smtpmail-cred-user cred)
-                                               "\0"
-                                               passwd) t)))
-       (if (or (null (car (setq ret (smtpmail-read-response process))))
-               (not (integerp (car ret)))
-               (not (equal (car ret) 235)))
-           (throw 'done nil)))
-
-       (t
-       (error "Mechanism %s not implemented" mech)))
-      ;; Remember the password.
-      (when (and (not (stringp smtpmail-auth-credentials))
-                (null (smtpmail-cred-passwd cred)))
-       (setcar (cdr (cdr (cdr cred))) passwd)))))
-
-(defun smtpmail-via-smtp (recipient smtpmail-text-buffer)
-  (let ((process nil)
-       (host (or smtpmail-smtp-server
-                 (error "`smtpmail-smtp-server' not defined")))
-       (port smtpmail-smtp-service)
-        ;; smtpmail-mail-address should be set to the appropriate
-        ;; buffer-local value by the caller, but in case not:
-        (envelope-from (or smtpmail-mail-address
-                           (and mail-specify-envelope-from
-                                (mail-envelope-from))
-                           user-mail-address))
-       response-code
-       greeting
-       process-buffer
-       (supported-extensions '()))
-    (unwind-protect
-       (catch 'done
-         ;; get or create the trace buffer
-         (setq process-buffer
-               (get-buffer-create (format "*trace of SMTP session to %s*" host)))
-
-         ;; clear the trace buffer of old output
-         (with-current-buffer process-buffer
-           (setq buffer-undo-list t)
-           (erase-buffer))
-
-         ;; open the connection to the server
-         (setq process (smtpmail-open-stream process-buffer host port))
-         (and (null process) (throw 'done nil))
-
-         ;; set the send-filter
-         (set-process-filter process 'smtpmail-process-filter)
-
-         (with-current-buffer process-buffer
-           (set-buffer-process-coding-system 'raw-text-unix 'raw-text-unix)
-           (make-local-variable 'smtpmail-read-point)
-           (setq smtpmail-read-point (point-min))
-
-
-           (if (or (null (car (setq greeting (smtpmail-read-response process))))
-                   (not (integerp (car greeting)))
-                   (>= (car greeting) 400))
-               (throw 'done nil)
-             )
-
-           (let ((do-ehlo t)
-                 (do-starttls t))
-             (while do-ehlo
-           ;; EHLO
-           (smtpmail-send-command process (format "EHLO %s" (smtpmail-fqdn)))
-
-           (if (or (null (car (setq response-code
-                                    (smtpmail-read-response process))))
-                   (not (integerp (car response-code)))
-                   (>= (car response-code) 400))
-               (progn
-                 ;; HELO
-                 (smtpmail-send-command
-                  process (format "HELO %s" (smtpmail-fqdn)))
-
-                 (if (or (null (car (setq response-code
-                                          (smtpmail-read-response process))))
-                         (not (integerp (car response-code)))
-                         (>= (car response-code) 400))
-                     (throw 'done nil)))
-             (dolist (line (cdr (cdr response-code)))
-               (let ((name (mapcar (lambda (s) (intern (downcase s)))
-                                   (split-string (substring line 4) "[ ]"))))
-                 (and (eq (length name) 1)
-                      (setq name (car name)))
-                   (and name
-                      (cond ((memq (if (consp name) (car name) name)
-                                   '(verb xvrb 8bitmime onex xone
-                                                 expn size dsn etrn
-                                     enhancedstatuscodes
-                                     help xusr
-                                     auth=login auth starttls))
-                               (setq supported-extensions
-                                     (cons name supported-extensions)))
-                              (smtpmail-warn-about-unknown-extensions
-                             (message "Unknown extension %s" name)))))))
-
-           (if (and do-starttls
-                    (smtpmail-find-credentials smtpmail-starttls-credentials host port)
-                    (member 'starttls supported-extensions)
-                    (numberp (process-id process)))
-               (progn
-                 (smtpmail-send-command process (format "STARTTLS"))
-                 (if (or (null (car (setq response-code (smtpmail-read-response process))))
-                         (not (integerp (car response-code)))
-                         (>= (car response-code) 400))
-                     (throw 'done nil))
-                 (starttls-negotiate process)
-                 (setq do-starttls nil))
-             (setq do-ehlo nil))))
-
-           (smtpmail-try-auth-methods process supported-extensions host port)
-
-           (if (or (member 'onex supported-extensions)
-                   (member 'xone supported-extensions))
-               (progn
-                 (smtpmail-send-command process (format "ONEX"))
-                 (if (or (null (car (setq response-code (smtpmail-read-response process))))
-                         (not (integerp (car response-code)))
-                         (>= (car response-code) 400))
-                     (throw 'done nil))))
-
-           (if (and smtpmail-debug-verb
-                    (or (member 'verb supported-extensions)
-                        (member 'xvrb supported-extensions)))
-               (progn
-                 (smtpmail-send-command process (format "VERB"))
-                 (if (or (null (car (setq response-code (smtpmail-read-response process))))
-                         (not (integerp (car response-code)))
-                         (>= (car response-code) 400))
-                     (throw 'done nil))))
-
-           (if (member 'xusr supported-extensions)
-               (progn
-                 (smtpmail-send-command process (format "XUSR"))
-                 (if (or (null (car (setq response-code (smtpmail-read-response process))))
-                         (not (integerp (car response-code)))
-                         (>= (car response-code) 400))
-                     (throw 'done nil))))
-
-           ;; MAIL FROM:<sender>
-           (let ((size-part
-                  (if (or (member 'size supported-extensions)
-                          (assoc 'size supported-extensions))
-                      (format " SIZE=%d"
-                              (with-current-buffer smtpmail-text-buffer
-                                ;; size estimate:
-                                (+ (- (point-max) (point-min))
-                                   ;; Add one byte for each change-of-line
-                                   ;; because of CR-LF representation:
-                                   (count-lines (point-min) (point-max)))))
-                    ""))
-                 (body-part
-                  (if (member '8bitmime supported-extensions)
-                      ;; FIXME:
-                      ;; Code should be added here that transforms
-                      ;; the contents of the message buffer into
-                      ;; something the receiving SMTP can handle.
-                      ;; For a receiver that supports 8BITMIME, this
-                      ;; may mean converting BINARY to BASE64, or
-                      ;; adding Content-Transfer-Encoding and the
-                      ;; other MIME headers.  The code should also
-                      ;; return an indication of what encoding the
-                      ;; message buffer is now, i.e. ASCII or
-                      ;; 8BITMIME.
-                      (if nil
-                          " BODY=8BITMIME"
-                        "")
-                    "")))
-;            (smtpmail-send-command process (format "MAIL FROM:%s@%s" (user-login-name) (smtpmail-fqdn)))
-             (smtpmail-send-command process (format "MAIL FROM:<%s>%s%s"
-                                                     envelope-from
-                                                    size-part
-                                                    body-part))
-
-             (if (or (null (car (setq response-code (smtpmail-read-response process))))
-                     (not (integerp (car response-code)))
-                     (>= (car response-code) 400))
-                 (throw 'done nil)
-               ))
-
-           ;; RCPT TO:<recipient>
-           (let ((n 0))
-             (while (not (null (nth n recipient)))
-               (smtpmail-send-command process (format "RCPT TO:<%s>" (smtpmail-maybe-append-domain (nth n recipient))))
-               (setq n (1+ n))
-
-               (setq response-code (smtpmail-read-response process))
-               (if (or (null (car response-code))
-                       (not (integerp (car response-code)))
-                       (>= (car response-code) 400))
-                   (throw 'done nil)
-                 )
-               ))
-
-           ;; DATA
-           (smtpmail-send-command process "DATA")
-
-           (if (or (null (car (setq response-code (smtpmail-read-response process))))
-                   (not (integerp (car response-code)))
-                   (>= (car response-code) 400))
-               (throw 'done nil)
-             )
-
-           ;; Mail contents
-           (smtpmail-send-data process smtpmail-text-buffer)
-
-           ;;DATA end "."
-           (smtpmail-send-command process ".")
-
-           (if (or (null (car (setq response-code (smtpmail-read-response process))))
-                   (not (integerp (car response-code)))
-                   (>= (car response-code) 400))
-               (throw 'done nil)
-             )
-
-           ;;QUIT
-;          (smtpmail-send-command process "QUIT")
-;          (and (null (car (smtpmail-read-response process)))
-;               (throw 'done nil))
-           t ))
-      (if process
-         (with-current-buffer (process-buffer process)
-           (smtpmail-send-command process "QUIT")
-           (smtpmail-read-response process)
-
-;          (if (or (null (car (setq response-code (smtpmail-read-response process))))
-;                  (not (integerp (car response-code)))
-;                  (>= (car response-code) 400))
-;              (throw 'done nil)
-;            )
-           (delete-process process)
-           (unless smtpmail-debug-info
-             (kill-buffer process-buffer)))))))
-
-
-(defun smtpmail-process-filter (process output)
-  (with-current-buffer (process-buffer process)
-    (goto-char (point-max))
-    (insert output)))
-
-(defun smtpmail-read-response (process)
-  (let ((case-fold-search nil)
-       (response-strings nil)
-       (response-continue t)
-       (return-value '(nil ()))
-       match-end)
-    (catch 'done
-      (while response-continue
-       (goto-char smtpmail-read-point)
-       (while (not (search-forward "\r\n" nil t))
-         (unless (memq (process-status process) '(open run))
-           (throw 'done nil))
-         (accept-process-output process)
-         (goto-char smtpmail-read-point))
-
-       (setq match-end (point))
-       (setq response-strings
-             (cons (buffer-substring smtpmail-read-point (- match-end 2))
-                   response-strings))
-
-       (goto-char smtpmail-read-point)
-       (if (looking-at "[0-9]+ ")
-           (let ((begin (match-beginning 0))
-                 (end (match-end 0)))
-             (if smtpmail-debug-info
-                 (message "%s" (car response-strings)))
-
-             (setq smtpmail-read-point match-end)
-
-             ;; ignore lines that start with "0"
-             (if (looking-at "0[0-9]+ ")
-                 nil
-               (setq response-continue nil)
-               (setq return-value
-                     (cons (string-to-number
-                            (buffer-substring begin end))
-                           (nreverse response-strings)))))
-
-         (if (looking-at "[0-9]+-")
-             (progn (if smtpmail-debug-info
-                        (message "%s" (car response-strings)))
-                    (setq smtpmail-read-point match-end)
-                    (setq response-continue t))
-           (progn
-             (setq smtpmail-read-point match-end)
-             (setq response-continue nil)
-             (setq return-value
-                   (cons nil (nreverse response-strings)))))))
-      (setq smtpmail-read-point match-end))
-    return-value))
-
-
-(defun smtpmail-send-command (process command)
-  (goto-char (point-max))
-  (if (= (aref command 0) ?P)
-      (insert "PASS <omitted>\r\n")
-    (insert command "\r\n"))
-  (setq smtpmail-read-point (point))
-  (process-send-string process command)
-  (process-send-string process "\r\n"))
-
-(defun smtpmail-send-data-1 (process data)
-  (goto-char (point-max))
-
-  (if (and (multibyte-string-p data)
-          smtpmail-code-conv-from)
-      (setq data (string-as-multibyte
-                 (encode-coding-string data smtpmail-code-conv-from))))
-
-  (if smtpmail-debug-info
-      (insert data "\r\n"))
-
-  (setq smtpmail-read-point (point))
-  ;; Escape "." at start of a line
-  (if (eq (string-to-char data) ?.)
-      (process-send-string process "."))
-  (process-send-string process data)
-  (process-send-string process "\r\n")
-  )
-
-(defun smtpmail-send-data (process buffer)
-  (let ((data-continue t) sending-data)
-    (with-current-buffer buffer
-      (goto-char (point-min)))
-    (while data-continue
-      (with-current-buffer buffer
-        (setq sending-data (buffer-substring (point-at-bol) (point-at-eol)))
-       (end-of-line 2)
-        (setq data-continue (not (eobp))))
-      (smtpmail-send-data-1 process sending-data))))
-
-(defun smtpmail-deduce-address-list (smtpmail-text-buffer header-start header-end)
-  "Get address list suitable for smtp RCPT TO: <address>."
-  (unwind-protect
-      (with-current-buffer smtpmail-address-buffer
-       (erase-buffer)
-       (let
-           ((case-fold-search t)
-            (simple-address-list "")
-            this-line
-            this-line-end
-            addr-regexp)
-         (insert-buffer-substring smtpmail-text-buffer header-start header-end)
-         (goto-char (point-min))
-         ;; RESENT-* fields should stop processing of regular fields.
-         (save-excursion
-           (setq addr-regexp
-                 (if (re-search-forward "^Resent-\\(to\\|cc\\|bcc\\):"
-                                        header-end t)
-                     "^Resent-\\(to\\|cc\\|bcc\\):"
-                   "^\\(To:\\|Cc:\\|Bcc:\\)")))
-
-         (while (re-search-forward addr-regexp header-end t)
-           (replace-match "")
-           (setq this-line (match-beginning 0))
-           (forward-line 1)
-           ;; get any continuation lines
-           (while (and (looking-at "^[ \t]+") (< (point) header-end))
-             (forward-line 1))
-           (setq this-line-end (point-marker))
-           (setq simple-address-list
-                 (concat simple-address-list " "
-                         (mail-strip-quoted-names (buffer-substring this-line this-line-end))))
-           )
-         (erase-buffer)
-         (insert " " simple-address-list "\n")
-         (subst-char-in-region (point-min) (point-max) 10 ?  t);; newline --> blank
-         (subst-char-in-region (point-min) (point-max) ?, ?  t);; comma   --> blank
-         (subst-char-in-region (point-min) (point-max)  9 ?  t);; tab     --> blank
-
-         (goto-char (point-min))
-         ;; tidyness in case hook is not robust when it looks at this
-         (while (re-search-forward "[ \t]+" header-end t) (replace-match " "))
-
-         (goto-char (point-min))
-         (let (recipient-address-list)
-           (while (re-search-forward " \\([^ ]+\\) " (point-max) t)
-             (backward-char 1)
-             (setq recipient-address-list (cons (buffer-substring (match-beginning 1) (match-end 1))
-                                                recipient-address-list))
-             )
-           (setq smtpmail-recipient-address-list recipient-address-list))
-
-         )
-       )
-    )
-  )
-
-
-(defun smtpmail-do-bcc (header-end)
-  "Delete [Resent-]BCC: and their continuation lines from the header area.
-There may be multiple BCC: lines, and each may have arbitrarily
-many continuation lines."
-  (let ((case-fold-search t))
-    (save-excursion
-      (goto-char (point-min))
-      ;; iterate over all BCC: lines
-      (while (re-search-forward "^\\(RESENT-\\)?BCC:" header-end t)
-       (delete-region (match-beginning 0)
-                      (progn (forward-line 1) (point)))
-       ;; get rid of any continuation lines
-       (while (and (looking-at "^[ \t].*\n") (< (point) header-end))
-         (replace-match ""))))))
-
-
-(provide 'smtpmail)
-
-;;; smtpmail.el ends here
diff --git a/contrib/ucs-tables.el b/contrib/ucs-tables.el
deleted file mode 100644 (file)
index 13ee7e0..0000000
+++ /dev/null
@@ -1,2482 +0,0 @@
-;;; ucs-tables.el --- translation to, from and via Unicode  -*- coding: iso-2022-7bit -*-
-
-;; Copyright (C) 2001  Free Software Foundation, Inc.
-
-;; Author: Dave Love <fx@gnu.org>
-;; Keywords: i18n
-
-;; This file is part of GNU Emacs.
-
-;; This file 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.
-
-;; This file 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.
-
-;;; Commentary:
-
-;; This file provides tables mapping between Unicode numbers and
-;; 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 iso8859 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.
-
-;; The translation table `ucs-mule-to-mule-unicode' is populated.
-;; This is used by the `mule-utf-8' coding system to encode extra
-;; characters.
-
-;; Command `ucs-insert' is convenient for inserting a given Unicode.
-;; (See also the `ucs' input method.)
-
-;;; Code:
-
-(when (featurep 'xemacs)
-  (error "This file cannot be used with XEmacs.  For XEmacs, use latin-unity instead"))
-
-;;; 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.
-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-mule-8859-to-mule-unicode (make-translation-table)
-  "Translation 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-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-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'.")
-
-;; Probably defined by utf-8.el.
-(defvar ucs-mule-to-mule-unicode (make-translation-table))
-(unless (get 'ucs-mule-to-mule-unicode 'translation-table)
-  (define-translation-table 'ucs-mule-to-mule-unicode ucs-mule-to-mule-unicode))
-;;; 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.
-(let ((ucs-8859-2-alist
-       '((?\\e,B \e(B . ?\x00A0) ;; NO-BREAK SPACE
-        (?\\e,B!\e(B . ?\x0104) ;; LATIN CAPITAL LETTER A WITH OGONEK
-        (?\\e,B"\e(B . ?\x02D8) ;; BREVE
-        (?\\e,B#\e(B . ?\x0141) ;; LATIN CAPITAL LETTER L WITH STROKE
-        (?\\e,B$\e(B . ?\x00A4) ;; CURRENCY SIGN
-        (?\\e,B%\e(B . ?\x013D) ;; LATIN CAPITAL LETTER L WITH CARON
-        (?\\e,B&\e(B . ?\x015A) ;; LATIN CAPITAL LETTER S WITH ACUTE
-        (?\\e,B'\e(B . ?\x00A7) ;; SECTION SIGN
-        (?\\e,B(\e(B . ?\x00A8) ;; DIAERESIS
-        (?\\e,B)\e(B . ?\x0160) ;; LATIN CAPITAL LETTER S WITH CARON
-        (?\\e,B*\e(B . ?\x015E) ;; LATIN CAPITAL LETTER S WITH CEDILLA
-        (?\\e,B+\e(B . ?\x0164) ;; LATIN CAPITAL LETTER T WITH CARON
-        (?\\e,B,\e(B . ?\x0179) ;; LATIN CAPITAL LETTER Z WITH ACUTE
-        (?\\e,B-\e(B . ?\x00AD) ;; SOFT HYPHEN
-        (?\\e,B.\e(B . ?\x017D) ;; LATIN CAPITAL LETTER Z WITH CARON
-        (?\\e,B/\e(B . ?\x017B) ;; LATIN CAPITAL LETTER Z WITH DOT ABOVE
-        (?\\e,B0\e(B . ?\x00B0) ;; DEGREE SIGN
-        (?\\e,B1\e(B . ?\x0105) ;; LATIN SMALL LETTER A WITH OGONEK
-        (?\\e,B2\e(B . ?\x02DB) ;; OGONEK
-        (?\\e,B3\e(B . ?\x0142) ;; LATIN SMALL LETTER L WITH STROKE
-        (?\\e,B4\e(B . ?\x00B4) ;; ACUTE ACCENT
-        (?\\e,B5\e(B . ?\x013E) ;; LATIN SMALL LETTER L WITH CARON
-        (?\\e,B6\e(B . ?\x015B) ;; LATIN SMALL LETTER S WITH ACUTE
-        (?\\e,B7\e(B . ?\x02C7) ;; CARON
-        (?\\e,B8\e(B . ?\x00B8) ;; CEDILLA
-        (?\\e,B9\e(B . ?\x0161) ;; LATIN SMALL LETTER S WITH CARON
-        (?\\e,B:\e(B . ?\x015F) ;; LATIN SMALL LETTER S WITH CEDILLA
-        (?\\e,B;\e(B . ?\x0165) ;; LATIN SMALL LETTER T WITH CARON
-        (?\\e,B<\e(B . ?\x017A) ;; LATIN SMALL LETTER Z WITH ACUTE
-        (?\\e,B=\e(B . ?\x02DD) ;; DOUBLE ACUTE ACCENT
-        (?\\e,B>\e(B . ?\x017E) ;; LATIN SMALL LETTER Z WITH CARON
-        (?\\e,B?\e(B . ?\x017C) ;; LATIN SMALL LETTER Z WITH DOT ABOVE
-        (?\\e,B@\e(B . ?\x0154) ;; LATIN CAPITAL LETTER R WITH ACUTE
-        (?\\e,BA\e(B . ?\x00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-        (?\\e,BB\e(B . ?\x00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-        (?\\e,BC\e(B . ?\x0102) ;; LATIN CAPITAL LETTER A WITH BREVE
-        (?\\e,BD\e(B . ?\x00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-        (?\\e,BE\e(B . ?\x0139) ;; LATIN CAPITAL LETTER L WITH ACUTE
-        (?\\e,BF\e(B . ?\x0106) ;; LATIN CAPITAL LETTER C WITH ACUTE
-        (?\\e,BG\e(B . ?\x00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
-        (?\\e,BH\e(B . ?\x010C) ;; LATIN CAPITAL LETTER C WITH CARON
-        (?\\e,BI\e(B . ?\x00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-        (?\\e,BJ\e(B . ?\x0118) ;; LATIN CAPITAL LETTER E WITH OGONEK
-        (?\\e,BK\e(B . ?\x00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-        (?\\e,BL\e(B . ?\x011A) ;; LATIN CAPITAL LETTER E WITH CARON
-        (?\\e,BM\e(B . ?\x00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-        (?\\e,BN\e(B . ?\x00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-        (?\\e,BO\e(B . ?\x010E) ;; LATIN CAPITAL LETTER D WITH CARON
-        (?\\e,BP\e(B . ?\x0110) ;; LATIN CAPITAL LETTER D WITH STROKE
-        (?\\e,BQ\e(B . ?\x0143) ;; LATIN CAPITAL LETTER N WITH ACUTE
-        (?\\e,BR\e(B . ?\x0147) ;; LATIN CAPITAL LETTER N WITH CARON
-        (?\\e,BS\e(B . ?\x00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
-        (?\\e,BT\e(B . ?\x00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-        (?\\e,BU\e(B . ?\x0150) ;; LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-        (?\\e,BV\e(B . ?\x00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-        (?\\e,BW\e(B . ?\x00D7) ;; MULTIPLICATION SIGN
-        (?\\e,BX\e(B . ?\x0158) ;; LATIN CAPITAL LETTER R WITH CARON
-        (?\\e,BY\e(B . ?\x016E) ;; LATIN CAPITAL LETTER U WITH RING ABOVE
-        (?\\e,BZ\e(B . ?\x00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-        (?\\e,B[\e(B . ?\x0170) ;; LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-        (?\\e,B\\e(B . ?\x00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-        (?\\e,B]\e(B . ?\x00DD) ;; LATIN CAPITAL LETTER Y WITH ACUTE
-        (?\\e,B^\e(B . ?\x0162) ;; LATIN CAPITAL LETTER T WITH CEDILLA
-        (?\\e,B_\e(B . ?\x00DF) ;; LATIN SMALL LETTER SHARP S
-        (?\\e,B`\e(B . ?\x0155) ;; LATIN SMALL LETTER R WITH ACUTE
-        (?\\e,Ba\e(B . ?\x00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-        (?\\e,Bb\e(B . ?\x00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-        (?\\e,Bc\e(B . ?\x0103) ;; LATIN SMALL LETTER A WITH BREVE
-        (?\\e,Bd\e(B . ?\x00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-        (?\\e,Be\e(B . ?\x013A) ;; LATIN SMALL LETTER L WITH ACUTE
-        (?\\e,Bf\e(B . ?\x0107) ;; LATIN SMALL LETTER C WITH ACUTE
-        (?\\e,Bg\e(B . ?\x00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-        (?\\e,Bh\e(B . ?\x010D) ;; LATIN SMALL LETTER C WITH CARON
-        (?\\e,Bi\e(B . ?\x00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-        (?\\e,Bj\e(B . ?\x0119) ;; LATIN SMALL LETTER E WITH OGONEK
-        (?\\e,Bk\e(B . ?\x00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-        (?\\e,Bl\e(B . ?\x011B) ;; LATIN SMALL LETTER E WITH CARON
-        (?\\e,Bm\e(B . ?\x00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-        (?\\e,Bn\e(B . ?\x00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-        (?\\e,Bo\e(B . ?\x010F) ;; LATIN SMALL LETTER D WITH CARON
-        (?\\e,Bp\e(B . ?\x0111) ;; LATIN SMALL LETTER D WITH STROKE
-        (?\\e,Bq\e(B . ?\x0144) ;; LATIN SMALL LETTER N WITH ACUTE
-        (?\\e,Br\e(B . ?\x0148) ;; LATIN SMALL LETTER N WITH CARON
-        (?\\e,Bs\e(B . ?\x00F3) ;; LATIN SMALL LETTER O WITH ACUTE
-        (?\\e,Bt\e(B . ?\x00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-        (?\\e,Bu\e(B . ?\x0151) ;; LATIN SMALL LETTER O WITH DOUBLE ACUTE
-        (?\\e,Bv\e(B . ?\x00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-        (?\\e,Bw\e(B . ?\x00F7) ;; DIVISION SIGN
-        (?\\e,Bx\e(B . ?\x0159) ;; LATIN SMALL LETTER R WITH CARON
-        (?\\e,By\e(B . ?\x016F) ;; LATIN SMALL LETTER U WITH RING ABOVE
-        (?\\e,Bz\e(B . ?\x00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-        (?\\e,B{\e(B . ?\x0171) ;; LATIN SMALL LETTER U WITH DOUBLE ACUTE
-        (?\\e,B|\e(B . ?\x00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-        (?\\e,B}\e(B . ?\x00FD) ;; LATIN SMALL LETTER Y WITH ACUTE
-        (?\\e,B~\e(B . ?\x0163) ;; LATIN SMALL LETTER T WITH CEDILLA
-        (?\\e,B\7f\e(B . ?\x02D9) ;; DOT ABOVE
-        ))
-
-      (ucs-8859-3-alist
-       '((?\\e,C \e(B . ?\x00A0) ;; NO-BREAK SPACE
-        (?\\e,C!\e(B . ?\x0126) ;; LATIN CAPITAL LETTER H WITH STROKE
-        (?\\e,C"\e(B . ?\x02D8) ;; BREVE
-        (?\\e,C#\e(B . ?\x00A3) ;; POUND SIGN
-        (?\\e,C$\e(B . ?\x00A4) ;; CURRENCY SIGN
-        (?\\e,C&\e(B . ?\x0124) ;; LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-        (?\\e,C'\e(B . ?\x00A7) ;; SECTION SIGN
-        (?\\e,C(\e(B . ?\x00A8) ;; DIAERESIS
-        (?\\e,C)\e(B . ?\x0130) ;; LATIN CAPITAL LETTER I WITH DOT ABOVE
-        (?\\e,C*\e(B . ?\x015E) ;; LATIN CAPITAL LETTER S WITH CEDILLA
-        (?\\e,C+\e(B . ?\x011E) ;; LATIN CAPITAL LETTER G WITH BREVE
-        (?\\e,C,\e(B . ?\x0134) ;; LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-        (?\\e,C-\e(B . ?\x00AD) ;; SOFT HYPHEN
-        (?\\e,C/\e(B . ?\x017B) ;; LATIN CAPITAL LETTER Z WITH DOT ABOVE
-        (?\\e,C0\e(B . ?\x00B0) ;; DEGREE SIGN
-        (?\\e,C1\e(B . ?\x0127) ;; LATIN SMALL LETTER H WITH STROKE
-        (?\\e,C2\e(B . ?\x00B2) ;; SUPERSCRIPT TWO
-        (?\\e,C3\e(B . ?\x00B3) ;; SUPERSCRIPT THREE
-        (?\\e,C4\e(B . ?\x00B4) ;; ACUTE ACCENT
-        (?\\e,C5\e(B . ?\x00B5) ;; MICRO SIGN
-        (?\\e,C6\e(B . ?\x0125) ;; LATIN SMALL LETTER H WITH CIRCUMFLEX
-        (?\\e,C7\e(B . ?\x00B7) ;; MIDDLE DOT
-        (?\\e,C8\e(B . ?\x00B8) ;; CEDILLA
-        (?\\e,C9\e(B . ?\x0131) ;; LATIN SMALL LETTER DOTLESS I
-        (?\\e,C:\e(B . ?\x015F) ;; LATIN SMALL LETTER S WITH CEDILLA
-        (?\\e,C;\e(B . ?\x011F) ;; LATIN SMALL LETTER G WITH BREVE
-        (?\\e,C<\e(B . ?\x0135) ;; LATIN SMALL LETTER J WITH CIRCUMFLEX
-        (?\\e,C=\e(B . ?\x00BD) ;; VULGAR FRACTION ONE HALF
-        (?\\e,C?\e(B . ?\x017C) ;; LATIN SMALL LETTER Z WITH DOT ABOVE
-        (?\\e,C@\e(B . ?\x00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
-        (?\\e,CA\e(B . ?\x00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-        (?\\e,CB\e(B . ?\x00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-        (?\\e,CD\e(B . ?\x00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-        (?\\e,CE\e(B . ?\x010A) ;; LATIN CAPITAL LETTER C WITH DOT ABOVE
-        (?\\e,CF\e(B . ?\x0108) ;; LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-        (?\\e,CG\e(B . ?\x00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
-        (?\\e,CH\e(B . ?\x00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
-        (?\\e,CI\e(B . ?\x00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-        (?\\e,CJ\e(B . ?\x00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-        (?\\e,CK\e(B . ?\x00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-        (?\\e,CL\e(B . ?\x00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
-        (?\\e,CM\e(B . ?\x00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-        (?\\e,CN\e(B . ?\x00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-        (?\\e,CO\e(B . ?\x00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
-        (?\\e,CQ\e(B . ?\x00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
-        (?\\e,CR\e(B . ?\x00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
-        (?\\e,CS\e(B . ?\x00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
-        (?\\e,CT\e(B . ?\x00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-        (?\\e,CU\e(B . ?\x0120) ;; LATIN CAPITAL LETTER G WITH DOT ABOVE
-        (?\\e,CV\e(B . ?\x00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-        (?\\e,CW\e(B . ?\x00D7) ;; MULTIPLICATION SIGN
-        (?\\e,CX\e(B . ?\x011C) ;; LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-        (?\\e,CY\e(B . ?\x00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
-        (?\\e,CZ\e(B . ?\x00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-        (?\\e,C[\e(B . ?\x00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-        (?\\e,C\\e(B . ?\x00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-        (?\\e,C]\e(B . ?\x016C) ;; LATIN CAPITAL LETTER U WITH BREVE
-        (?\\e,C^\e(B . ?\x015C) ;; LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-        (?\\e,C_\e(B . ?\x00DF) ;; LATIN SMALL LETTER SHARP S
-        (?\\e,C`\e(B . ?\x00E0) ;; LATIN SMALL LETTER A WITH GRAVE
-        (?\\e,Ca\e(B . ?\x00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-        (?\\e,Cb\e(B . ?\x00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-        (?\\e,Cd\e(B . ?\x00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-        (?\\e,Ce\e(B . ?\x010B) ;; LATIN SMALL LETTER C WITH DOT ABOVE
-        (?\\e,Cf\e(B . ?\x0109) ;; LATIN SMALL LETTER C WITH CIRCUMFLEX
-        (?\\e,Cg\e(B . ?\x00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-        (?\\e,Ch\e(B . ?\x00E8) ;; LATIN SMALL LETTER E WITH GRAVE
-        (?\\e,Ci\e(B . ?\x00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-        (?\\e,Cj\e(B . ?\x00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
-        (?\\e,Ck\e(B . ?\x00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-        (?\\e,Cl\e(B . ?\x00EC) ;; LATIN SMALL LETTER I WITH GRAVE
-        (?\\e,Cm\e(B . ?\x00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-        (?\\e,Cn\e(B . ?\x00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-        (?\\e,Co\e(B . ?\x00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
-        (?\\e,Cq\e(B . ?\x00F1) ;; LATIN SMALL LETTER N WITH TILDE
-        (?\\e,Cr\e(B . ?\x00F2) ;; LATIN SMALL LETTER O WITH GRAVE
-        (?\\e,Cs\e(B . ?\x00F3) ;; LATIN SMALL LETTER O WITH ACUTE
-        (?\\e,Ct\e(B . ?\x00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-        (?\\e,Cu\e(B . ?\x0121) ;; LATIN SMALL LETTER G WITH DOT ABOVE
-        (?\\e,Cv\e(B . ?\x00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-        (?\\e,Cw\e(B . ?\x00F7) ;; DIVISION SIGN
-        (?\\e,Cx\e(B . ?\x011D) ;; LATIN SMALL LETTER G WITH CIRCUMFLEX
-        (?\\e,Cy\e(B . ?\x00F9) ;; LATIN SMALL LETTER U WITH GRAVE
-        (?\\e,Cz\e(B . ?\x00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-        (?\\e,C{\e(B . ?\x00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
-        (?\\e,C|\e(B . ?\x00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-        (?\\e,C}\e(B . ?\x016D) ;; LATIN SMALL LETTER U WITH BREVE
-        (?\\e,C~\e(B . ?\x015D) ;; LATIN SMALL LETTER S WITH CIRCUMFLEX
-        (?\\e,C\7f\e(B . ?\x02D9) ;; DOT ABOVE
-        ))
-
-      (ucs-8859-4-alist
-       '((?\\e,D \e(B . ?\x00A0) ;; NO-BREAK SPACE
-        (?\\e,D!\e(B . ?\x0104) ;; LATIN CAPITAL LETTER A WITH OGONEK
-        (?\\e,D"\e(B . ?\x0138) ;; LATIN SMALL LETTER KRA
-        (?\\e,D#\e(B . ?\x0156) ;; LATIN CAPITAL LETTER R WITH CEDILLA
-        (?\\e,D$\e(B . ?\x00A4) ;; CURRENCY SIGN
-        (?\\e,D%\e(B . ?\x0128) ;; LATIN CAPITAL LETTER I WITH TILDE
-        (?\\e,D&\e(B . ?\x013B) ;; LATIN CAPITAL LETTER L WITH CEDILLA
-        (?\\e,D'\e(B . ?\x00A7) ;; SECTION SIGN
-        (?\\e,D(\e(B . ?\x00A8) ;; DIAERESIS
-        (?\\e,D)\e(B . ?\x0160) ;; LATIN CAPITAL LETTER S WITH CARON
-        (?\\e,D*\e(B . ?\x0112) ;; LATIN CAPITAL LETTER E WITH MACRON
-        (?\\e,D+\e(B . ?\x0122) ;; LATIN CAPITAL LETTER G WITH CEDILLA
-        (?\\e,D,\e(B . ?\x0166) ;; LATIN CAPITAL LETTER T WITH STROKE
-        (?\\e,D-\e(B . ?\x00AD) ;; SOFT HYPHEN
-        (?\\e,D.\e(B . ?\x017D) ;; LATIN CAPITAL LETTER Z WITH CARON
-        (?\\e,D/\e(B . ?\x00AF) ;; MACRON
-        (?\\e,D0\e(B . ?\x00B0) ;; DEGREE SIGN
-        (?\\e,D1\e(B . ?\x0105) ;; LATIN SMALL LETTER A WITH OGONEK
-        (?\\e,D2\e(B . ?\x02DB) ;; OGONEK
-        (?\\e,D3\e(B . ?\x0157) ;; LATIN SMALL LETTER R WITH CEDILLA
-        (?\\e,D4\e(B . ?\x00B4) ;; ACUTE ACCENT
-        (?\\e,D5\e(B . ?\x0129) ;; LATIN SMALL LETTER I WITH TILDE
-        (?\\e,D6\e(B . ?\x013C) ;; LATIN SMALL LETTER L WITH CEDILLA
-        (?\\e,D7\e(B . ?\x02C7) ;; CARON
-        (?\\e,D8\e(B . ?\x00B8) ;; CEDILLA
-        (?\\e,D9\e(B . ?\x0161) ;; LATIN SMALL LETTER S WITH CARON
-        (?\\e,D:\e(B . ?\x0113) ;; LATIN SMALL LETTER E WITH MACRON
-        (?\\e,D;\e(B . ?\x0123) ;; LATIN SMALL LETTER G WITH CEDILLA
-        (?\\e,D<\e(B . ?\x0167) ;; LATIN SMALL LETTER T WITH STROKE
-        (?\\e,D=\e(B . ?\x014A) ;; LATIN CAPITAL LETTER ENG
-        (?\\e,D>\e(B . ?\x017E) ;; LATIN SMALL LETTER Z WITH CARON
-        (?\\e,D?\e(B . ?\x014B) ;; LATIN SMALL LETTER ENG
-        (?\\e,D@\e(B . ?\x0100) ;; LATIN CAPITAL LETTER A WITH MACRON
-        (?\\e,DA\e(B . ?\x00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-        (?\\e,DB\e(B . ?\x00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-        (?\\e,DC\e(B . ?\x00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
-        (?\\e,DD\e(B . ?\x00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-        (?\\e,DE\e(B . ?\x00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
-        (?\\e,DF\e(B . ?\x00C6) ;; LATIN CAPITAL LETTER AE
-        (?\\e,DG\e(B . ?\x012E) ;; LATIN CAPITAL LETTER I WITH OGONEK
-        (?\\e,DH\e(B . ?\x010C) ;; LATIN CAPITAL LETTER C WITH CARON
-        (?\\e,DI\e(B . ?\x00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-        (?\\e,DJ\e(B . ?\x0118) ;; LATIN CAPITAL LETTER E WITH OGONEK
-        (?\\e,DK\e(B . ?\x00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-        (?\\e,DL\e(B . ?\x0116) ;; LATIN CAPITAL LETTER E WITH DOT ABOVE
-        (?\\e,DM\e(B . ?\x00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-        (?\\e,DN\e(B . ?\x00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-        (?\\e,DO\e(B . ?\x012A) ;; LATIN CAPITAL LETTER I WITH MACRON
-        (?\\e,DP\e(B . ?\x0110) ;; LATIN CAPITAL LETTER D WITH STROKE
-        (?\\e,DQ\e(B . ?\x0145) ;; LATIN CAPITAL LETTER N WITH CEDILLA
-        (?\\e,DR\e(B . ?\x014C) ;; LATIN CAPITAL LETTER O WITH MACRON
-        (?\\e,DS\e(B . ?\x0136) ;; LATIN CAPITAL LETTER K WITH CEDILLA
-        (?\\e,DT\e(B . ?\x00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-        (?\\e,DU\e(B . ?\x00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
-        (?\\e,DV\e(B . ?\x00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-        (?\\e,DW\e(B . ?\x00D7) ;; MULTIPLICATION SIGN
-        (?\\e,DX\e(B . ?\x00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
-        (?\\e,DY\e(B . ?\x0172) ;; LATIN CAPITAL LETTER U WITH OGONEK
-        (?\\e,DZ\e(B . ?\x00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-        (?\\e,D[\e(B . ?\x00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-        (?\\e,D\\e(B . ?\x00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-        (?\\e,D]\e(B . ?\x0168) ;; LATIN CAPITAL LETTER U WITH TILDE
-        (?\\e,D^\e(B . ?\x016A) ;; LATIN CAPITAL LETTER U WITH MACRON
-        (?\\e,D_\e(B . ?\x00DF) ;; LATIN SMALL LETTER SHARP S
-        (?\\e,D`\e(B . ?\x0101) ;; LATIN SMALL LETTER A WITH MACRON
-        (?\\e,Da\e(B . ?\x00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-        (?\\e,Db\e(B . ?\x00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-        (?\\e,Dc\e(B . ?\x00E3) ;; LATIN SMALL LETTER A WITH TILDE
-        (?\\e,Dd\e(B . ?\x00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-        (?\\e,De\e(B . ?\x00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
-        (?\\e,Df\e(B . ?\x00E6) ;; LATIN SMALL LETTER AE
-        (?\\e,Dg\e(B . ?\x012F) ;; LATIN SMALL LETTER I WITH OGONEK
-        (?\\e,Dh\e(B . ?\x010D) ;; LATIN SMALL LETTER C WITH CARON
-        (?\\e,Di\e(B . ?\x00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-        (?\\e,Dj\e(B . ?\x0119) ;; LATIN SMALL LETTER E WITH OGONEK
-        (?\\e,Dk\e(B . ?\x00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-        (?\\e,Dl\e(B . ?\x0117) ;; LATIN SMALL LETTER E WITH DOT ABOVE
-        (?\\e,Dm\e(B . ?\x00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-        (?\\e,Dn\e(B . ?\x00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-        (?\\e,Do\e(B . ?\x012B) ;; LATIN SMALL LETTER I WITH MACRON
-        (?\\e,Dp\e(B . ?\x0111) ;; LATIN SMALL LETTER D WITH STROKE
-        (?\\e,Dq\e(B . ?\x0146) ;; LATIN SMALL LETTER N WITH CEDILLA
-        (?\\e,Dr\e(B . ?\x014D) ;; LATIN SMALL LETTER O WITH MACRON
-        (?\\e,Ds\e(B . ?\x0137) ;; LATIN SMALL LETTER K WITH CEDILLA
-        (?\\e,Dt\e(B . ?\x00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-        (?\\e,Du\e(B . ?\x00F5) ;; LATIN SMALL LETTER O WITH TILDE
-        (?\\e,Dv\e(B . ?\x00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-        (?\\e,Dw\e(B . ?\x00F7) ;; DIVISION SIGN
-        (?\\e,Dx\e(B . ?\x00F8) ;; LATIN SMALL LETTER O WITH STROKE
-        (?\\e,Dy\e(B . ?\x0173) ;; LATIN SMALL LETTER U WITH OGONEK
-        (?\\e,Dz\e(B . ?\x00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-        (?\\e,D{\e(B . ?\x00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
-        (?\\e,D|\e(B . ?\x00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-        (?\\e,D}\e(B . ?\x0169) ;; LATIN SMALL LETTER U WITH TILDE
-        (?\\e,D~\e(B . ?\x016B) ;; LATIN SMALL LETTER U WITH MACRON
-        (?\\e,D\7f\e(B . ?\x02D9) ;; DOT ABOVE
-        ))
-
-      (ucs-8859-5-alist
-       '((?\\e,L \e(B . ?\x00A0) ;; NO-BREAK SPACE
-        (?\\e,L!\e(B . ?\x0401) ;; CYRILLIC CAPITAL LETTER IO
-        (?\\e,L"\e(B . ?\x0402) ;; CYRILLIC CAPITAL LETTER DJE
-        (?\\e,L#\e(B . ?\x0403) ;; CYRILLIC CAPITAL LETTER GJE
-        (?\\e,L$\e(B . ?\x0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
-        (?\\e,L%\e(B . ?\x0405) ;; CYRILLIC CAPITAL LETTER DZE
-        (?\\e,L&\e(B . ?\x0406) ;; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-        (?\\e,L'\e(B . ?\x0407) ;; CYRILLIC CAPITAL LETTER YI
-        (?\\e,L(\e(B . ?\x0408) ;; CYRILLIC CAPITAL LETTER JE
-        (?\\e,L)\e(B . ?\x0409) ;; CYRILLIC CAPITAL LETTER LJE
-        (?\\e,L*\e(B . ?\x040A) ;; CYRILLIC CAPITAL LETTER NJE
-        (?\\e,L+\e(B . ?\x040B) ;; CYRILLIC CAPITAL LETTER TSHE
-        (?\\e,L,\e(B . ?\x040C) ;; CYRILLIC CAPITAL LETTER KJE
-        (?\\e,L-\e(B . ?\x00AD) ;; SOFT HYPHEN
-        (?\\e,L.\e(B . ?\x040E) ;; CYRILLIC CAPITAL LETTER SHORT U
-        (?\\e,L/\e(B . ?\x040F) ;; CYRILLIC CAPITAL LETTER DZHE
-        (?\\e,L0\e(B . ?\x0410) ;; CYRILLIC CAPITAL LETTER A
-        (?\\e,L1\e(B . ?\x0411) ;; CYRILLIC CAPITAL LETTER BE
-        (?\\e,L2\e(B . ?\x0412) ;; CYRILLIC CAPITAL LETTER VE
-        (?\\e,L3\e(B . ?\x0413) ;; CYRILLIC CAPITAL LETTER GHE
-        (?\\e,L4\e(B . ?\x0414) ;; CYRILLIC CAPITAL LETTER DE
-        (?\\e,L5\e(B . ?\x0415) ;; CYRILLIC CAPITAL LETTER IE
-        (?\\e,L6\e(B . ?\x0416) ;; CYRILLIC CAPITAL LETTER ZHE
-        (?\\e,L7\e(B . ?\x0417) ;; CYRILLIC CAPITAL LETTER ZE
-        (?\\e,L8\e(B . ?\x0418) ;; CYRILLIC CAPITAL LETTER I
-        (?\\e,L9\e(B . ?\x0419) ;; CYRILLIC CAPITAL LETTER SHORT I
-        (?\\e,L:\e(B . ?\x041A) ;; CYRILLIC CAPITAL LETTER KA
-        (?\\e,L;\e(B . ?\x041B) ;; CYRILLIC CAPITAL LETTER EL
-        (?\\e,L<\e(B . ?\x041C) ;; CYRILLIC CAPITAL LETTER EM
-        (?\\e,L=\e(B . ?\x041D) ;; CYRILLIC CAPITAL LETTER EN
-        (?\\e,L>\e(B . ?\x041E) ;; CYRILLIC CAPITAL LETTER O
-        (?\\e,L?\e(B . ?\x041F) ;; CYRILLIC CAPITAL LETTER PE
-        (?\\e,L@\e(B . ?\x0420) ;; CYRILLIC CAPITAL LETTER ER
-        (?\\e,LA\e(B . ?\x0421) ;; CYRILLIC CAPITAL LETTER ES
-        (?\\e,LB\e(B . ?\x0422) ;; CYRILLIC CAPITAL LETTER TE
-        (?\\e,LC\e(B . ?\x0423) ;; CYRILLIC CAPITAL LETTER U
-        (?\\e,LD\e(B . ?\x0424) ;; CYRILLIC CAPITAL LETTER EF
-        (?\\e,LE\e(B . ?\x0425) ;; CYRILLIC CAPITAL LETTER HA
-        (?\\e,LF\e(B . ?\x0426) ;; CYRILLIC CAPITAL LETTER TSE
-        (?\\e,LG\e(B . ?\x0427) ;; CYRILLIC CAPITAL LETTER CHE
-        (?\\e,LH\e(B . ?\x0428) ;; CYRILLIC CAPITAL LETTER SHA
-        (?\\e,LI\e(B . ?\x0429) ;; CYRILLIC CAPITAL LETTER SHCHA
-        (?\\e,LJ\e(B . ?\x042A) ;; CYRILLIC CAPITAL LETTER HARD SIGN
-        (?\\e,LK\e(B . ?\x042B) ;; CYRILLIC CAPITAL LETTER YERU
-        (?\\e,LL\e(B . ?\x042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
-        (?\\e,LM\e(B . ?\x042D) ;; CYRILLIC CAPITAL LETTER E
-        (?\\e,LN\e(B . ?\x042E) ;; CYRILLIC CAPITAL LETTER YU
-        (?\\e,LO\e(B . ?\x042F) ;; CYRILLIC CAPITAL LETTER YA
-        (?\\e,LP\e(B . ?\x0430) ;; CYRILLIC SMALL LETTER A
-        (?\\e,LQ\e(B . ?\x0431) ;; CYRILLIC SMALL LETTER BE
-        (?\\e,LR\e(B . ?\x0432) ;; CYRILLIC SMALL LETTER VE
-        (?\\e,LS\e(B . ?\x0433) ;; CYRILLIC SMALL LETTER GHE
-        (?\\e,LT\e(B . ?\x0434) ;; CYRILLIC SMALL LETTER DE
-        (?\\e,LU\e(B . ?\x0435) ;; CYRILLIC SMALL LETTER IE
-        (?\\e,LV\e(B . ?\x0436) ;; CYRILLIC SMALL LETTER ZHE
-        (?\\e,LW\e(B . ?\x0437) ;; CYRILLIC SMALL LETTER ZE
-        (?\\e,LX\e(B . ?\x0438) ;; CYRILLIC SMALL LETTER I
-        (?\\e,LY\e(B . ?\x0439) ;; CYRILLIC SMALL LETTER SHORT I
-        (?\\e,LZ\e(B . ?\x043A) ;; CYRILLIC SMALL LETTER KA
-        (?\\e,L[\e(B . ?\x043B) ;; CYRILLIC SMALL LETTER EL
-        (?\\e,L\\e(B . ?\x043C) ;; CYRILLIC SMALL LETTER EM
-        (?\\e,L]\e(B . ?\x043D) ;; CYRILLIC SMALL LETTER EN
-        (?\\e,L^\e(B . ?\x043E) ;; CYRILLIC SMALL LETTER O
-        (?\\e,L_\e(B . ?\x043F) ;; CYRILLIC SMALL LETTER PE
-        (?\\e,L`\e(B . ?\x0440) ;; CYRILLIC SMALL LETTER ER
-        (?\\e,La\e(B . ?\x0441) ;; CYRILLIC SMALL LETTER ES
-        (?\\e,Lb\e(B . ?\x0442) ;; CYRILLIC SMALL LETTER TE
-        (?\\e,Lc\e(B . ?\x0443) ;; CYRILLIC SMALL LETTER U
-        (?\\e,Ld\e(B . ?\x0444) ;; CYRILLIC SMALL LETTER EF
-        (?\\e,Le\e(B . ?\x0445) ;; CYRILLIC SMALL LETTER HA
-        (?\\e,Lf\e(B . ?\x0446) ;; CYRILLIC SMALL LETTER TSE
-        (?\\e,Lg\e(B . ?\x0447) ;; CYRILLIC SMALL LETTER CHE
-        (?\\e,Lh\e(B . ?\x0448) ;; CYRILLIC SMALL LETTER SHA
-        (?\\e,Li\e(B . ?\x0449) ;; CYRILLIC SMALL LETTER SHCHA
-        (?\\e,Lj\e(B . ?\x044A) ;; CYRILLIC SMALL LETTER HARD SIGN
-        (?\\e,Lk\e(B . ?\x044B) ;; CYRILLIC SMALL LETTER YERU
-        (?\\e,Ll\e(B . ?\x044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
-        (?\\e,Lm\e(B . ?\x044D) ;; CYRILLIC SMALL LETTER E
-        (?\\e,Ln\e(B . ?\x044E) ;; CYRILLIC SMALL LETTER YU
-        (?\\e,Lo\e(B . ?\x044F) ;; CYRILLIC SMALL LETTER YA
-        (?\\e,Lp\e(B . ?\x2116) ;; NUMERO SIGN
-        (?\\e,Lq\e(B . ?\x0451) ;; CYRILLIC SMALL LETTER IO
-        (?\\e,Lr\e(B . ?\x0452) ;; CYRILLIC SMALL LETTER DJE
-        (?\\e,Ls\e(B . ?\x0453) ;; CYRILLIC SMALL LETTER GJE
-        (?\\e,Lt\e(B . ?\x0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
-        (?\\e,Lu\e(B . ?\x0455) ;; CYRILLIC SMALL LETTER DZE
-        (?\\e,Lv\e(B . ?\x0456) ;; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-        (?\\e,Lw\e(B . ?\x0457) ;; CYRILLIC SMALL LETTER YI
-        (?\\e,Lx\e(B . ?\x0458) ;; CYRILLIC SMALL LETTER JE
-        (?\\e,Ly\e(B . ?\x0459) ;; CYRILLIC SMALL LETTER LJE
-        (?\\e,Lz\e(B . ?\x045A) ;; CYRILLIC SMALL LETTER NJE
-        (?\\e,L{\e(B . ?\x045B) ;; CYRILLIC SMALL LETTER TSHE
-        (?\\e,L|\e(B . ?\x045C) ;; CYRILLIC SMALL LETTER KJE
-        (?\\e,L}\e(B . ?\x00A7) ;; SECTION SIGN
-        (?\\e,L~\e(B . ?\x045E) ;; CYRILLIC SMALL LETTER SHORT U
-        (?\\e,L\7f\e(B . ?\x045F) ;; CYRILLIC SMALL LETTER DZHE
-        ))
-
-      ;; Arabic probably isn't so useful in the absence of Arabic
-      ;; language support.
-      (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 . ?\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
-        ))
-
-      (ucs-8859-7-alist
-       '((?\\e,F \e(B . ?\x00A0) ;; NO-BREAK SPACE
-        (?\\e,F!\e(B . ?\x2018) ;; LEFT SINGLE QUOTATION MARK
-        (?\\e,F"\e(B . ?\x2019) ;; RIGHT SINGLE QUOTATION MARK
-        (?\\e,F#\e(B . ?\x00A3) ;; POUND SIGN
-        (?\$ . ?\x20AC) ;; EURO SIGN
-        (?\% . ?\x20AF) ;; DRACHMA SIGN
-        (?\\e,F&\e(B . ?\x00A6) ;; BROKEN BAR
-        (?\\e,F'\e(B . ?\x00A7) ;; SECTION SIGN
-        (?\\e,F(\e(B . ?\x00A8) ;; DIAERESIS
-        (?\\e,F)\e(B . ?\x00A9) ;; COPYRIGHT SIGN
-        (?\* . ?\x037A) ;; GREEK YPOGEGRAMMENI
-        (?\\e,F+\e(B . ?\x00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-        (?\\e,F,\e(B . ?\x00AC) ;; NOT SIGN
-        (?\\e,F-\e(B . ?\x00AD) ;; SOFT HYPHEN
-        (?\\e,F/\e(B . ?\x2015) ;; HORIZONTAL BAR
-        (?\\e,F0\e(B . ?\x00B0) ;; DEGREE SIGN
-        (?\\e,F1\e(B . ?\x00B1) ;; PLUS-MINUS SIGN
-        (?\\e,F2\e(B . ?\x00B2) ;; SUPERSCRIPT TWO
-        (?\\e,F3\e(B . ?\x00B3) ;; SUPERSCRIPT THREE
-        (?\\e,F4\e(B . ?\x0384) ;; GREEK TONOS
-        (?\\e,F5\e(B . ?\x0385) ;; GREEK DIALYTIKA TONOS
-        (?\\e,F6\e(B . ?\x0386) ;; GREEK CAPITAL LETTER ALPHA WITH TONOS
-        (?\\e,F7\e(B . ?\x00B7) ;; MIDDLE DOT
-        (?\\e,F8\e(B . ?\x0388) ;; GREEK CAPITAL LETTER EPSILON WITH TONOS
-        (?\\e,F9\e(B . ?\x0389) ;; GREEK CAPITAL LETTER ETA WITH TONOS
-        (?\\e,F:\e(B . ?\x038A) ;; GREEK CAPITAL LETTER IOTA WITH TONOS
-        (?\\e,F;\e(B . ?\x00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-        (?\\e,F<\e(B . ?\x038C) ;; GREEK CAPITAL LETTER OMICRON WITH TONOS
-        (?\\e,F=\e(B . ?\x00BD) ;; VULGAR FRACTION ONE HALF
-        (?\\e,F>\e(B . ?\x038E) ;; GREEK CAPITAL LETTER UPSILON WITH TONOS
-        (?\\e,F?\e(B . ?\x038F) ;; GREEK CAPITAL LETTER OMEGA WITH TONOS
-        (?\\e,F@\e(B . ?\x0390) ;; GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-        (?\\e,FA\e(B . ?\x0391) ;; GREEK CAPITAL LETTER ALPHA
-        (?\\e,FB\e(B . ?\x0392) ;; GREEK CAPITAL LETTER BETA
-        (?\\e,FC\e(B . ?\x0393) ;; GREEK CAPITAL LETTER GAMMA
-        (?\\e,FD\e(B . ?\x0394) ;; GREEK CAPITAL LETTER DELTA
-        (?\\e,FE\e(B . ?\x0395) ;; GREEK CAPITAL LETTER EPSILON
-        (?\\e,FF\e(B . ?\x0396) ;; GREEK CAPITAL LETTER ZETA
-        (?\\e,FG\e(B . ?\x0397) ;; GREEK CAPITAL LETTER ETA
-        (?\\e,FH\e(B . ?\x0398) ;; GREEK CAPITAL LETTER THETA
-        (?\\e,FI\e(B . ?\x0399) ;; GREEK CAPITAL LETTER IOTA
-        (?\\e,FJ\e(B . ?\x039A) ;; GREEK CAPITAL LETTER KAPPA
-        (?\\e,FK\e(B . ?\x039B) ;; GREEK CAPITAL LETTER LAMDA
-        (?\\e,FL\e(B . ?\x039C) ;; GREEK CAPITAL LETTER MU
-        (?\\e,FM\e(B . ?\x039D) ;; GREEK CAPITAL LETTER NU
-        (?\\e,FN\e(B . ?\x039E) ;; GREEK CAPITAL LETTER XI
-        (?\\e,FO\e(B . ?\x039F) ;; GREEK CAPITAL LETTER OMICRON
-        (?\\e,FP\e(B . ?\x03A0) ;; GREEK CAPITAL LETTER PI
-        (?\\e,FQ\e(B . ?\x03A1) ;; GREEK CAPITAL LETTER RHO
-        (?\\e,FS\e(B . ?\x03A3) ;; GREEK CAPITAL LETTER SIGMA
-        (?\\e,FT\e(B . ?\x03A4) ;; GREEK CAPITAL LETTER TAU
-        (?\\e,FU\e(B . ?\x03A5) ;; GREEK CAPITAL LETTER UPSILON
-        (?\\e,FV\e(B . ?\x03A6) ;; GREEK CAPITAL LETTER PHI
-        (?\\e,FW\e(B . ?\x03A7) ;; GREEK CAPITAL LETTER CHI
-        (?\\e,FX\e(B . ?\x03A8) ;; GREEK CAPITAL LETTER PSI
-        (?\\e,FY\e(B . ?\x03A9) ;; GREEK CAPITAL LETTER OMEGA
-        (?\\e,FZ\e(B . ?\x03AA) ;; GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-        (?\\e,F[\e(B . ?\x03AB) ;; GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-        (?\\e,F\\e(B . ?\x03AC) ;; GREEK SMALL LETTER ALPHA WITH TONOS
-        (?\\e,F]\e(B . ?\x03AD) ;; GREEK SMALL LETTER EPSILON WITH TONOS
-        (?\\e,F^\e(B . ?\x03AE) ;; GREEK SMALL LETTER ETA WITH TONOS
-        (?\\e,F_\e(B . ?\x03AF) ;; GREEK SMALL LETTER IOTA WITH TONOS
-        (?\\e,F`\e(B . ?\x03B0) ;; GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-        (?\\e,Fa\e(B . ?\x03B1) ;; GREEK SMALL LETTER ALPHA
-        (?\\e,Fb\e(B . ?\x03B2) ;; GREEK SMALL LETTER BETA
-        (?\\e,Fc\e(B . ?\x03B3) ;; GREEK SMALL LETTER GAMMA
-        (?\\e,Fd\e(B . ?\x03B4) ;; GREEK SMALL LETTER DELTA
-        (?\\e,Fe\e(B . ?\x03B5) ;; GREEK SMALL LETTER EPSILON
-        (?\\e,Ff\e(B . ?\x03B6) ;; GREEK SMALL LETTER ZETA
-        (?\\e,Fg\e(B . ?\x03B7) ;; GREEK SMALL LETTER ETA
-        (?\\e,Fh\e(B . ?\x03B8) ;; GREEK SMALL LETTER THETA
-        (?\\e,Fi\e(B . ?\x03B9) ;; GREEK SMALL LETTER IOTA
-        (?\\e,Fj\e(B . ?\x03BA) ;; GREEK SMALL LETTER KAPPA
-        (?\\e,Fk\e(B . ?\x03BB) ;; GREEK SMALL LETTER LAMDA
-        (?\\e,Fl\e(B . ?\x03BC) ;; GREEK SMALL LETTER MU
-        (?\\e,Fm\e(B . ?\x03BD) ;; GREEK SMALL LETTER NU
-        (?\\e,Fn\e(B . ?\x03BE) ;; GREEK SMALL LETTER XI
-        (?\\e,Fo\e(B . ?\x03BF) ;; GREEK SMALL LETTER OMICRON
-        (?\\e,Fp\e(B . ?\x03C0) ;; GREEK SMALL LETTER PI
-        (?\\e,Fq\e(B . ?\x03C1) ;; GREEK SMALL LETTER RHO
-        (?\\e,Fr\e(B . ?\x03C2) ;; GREEK SMALL LETTER FINAL SIGMA
-        (?\\e,Fs\e(B . ?\x03C3) ;; GREEK SMALL LETTER SIGMA
-        (?\\e,Ft\e(B . ?\x03C4) ;; GREEK SMALL LETTER TAU
-        (?\\e,Fu\e(B . ?\x03C5) ;; GREEK SMALL LETTER UPSILON
-        (?\\e,Fv\e(B . ?\x03C6) ;; GREEK SMALL LETTER PHI
-        (?\\e,Fw\e(B . ?\x03C7) ;; GREEK SMALL LETTER CHI
-        (?\\e,Fx\e(B . ?\x03C8) ;; GREEK SMALL LETTER PSI
-        (?\\e,Fy\e(B . ?\x03C9) ;; GREEK SMALL LETTER OMEGA
-        (?\\e,Fz\e(B . ?\x03CA) ;; GREEK SMALL LETTER IOTA WITH DIALYTIKA
-        (?\\e,F{\e(B . ?\x03CB) ;; GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-        (?\\e,F|\e(B . ?\x03CC) ;; GREEK SMALL LETTER OMICRON WITH TONOS
-        (?\\e,F}\e(B . ?\x03CD) ;; GREEK SMALL LETTER UPSILON WITH TONOS
-        (?\\e,F~\e(B . ?\x03CE) ;; GREEK SMALL LETTER OMEGA WITH TONOS
-        ))
-
-      (ucs-8859-8-alist
-       '((?\\e,H \e(B . ?\x00A0) ;; NO-BREAK SPACE
-        (?\\e,H"\e(B . ?\x00A2) ;; CENT SIGN
-        (?\\e,H#\e(B . ?\x00A3) ;; POUND SIGN
-        (?\\e,H$\e(B . ?\x00A4) ;; CURRENCY SIGN
-        (?\\e,H%\e(B . ?\x00A5) ;; YEN SIGN
-        (?\\e,H&\e(B . ?\x00A6) ;; BROKEN BAR
-        (?\\e,H'\e(B . ?\x00A7) ;; SECTION SIGN
-        (?\\e,H(\e(B . ?\x00A8) ;; DIAERESIS
-        (?\\e,H)\e(B . ?\x00A9) ;; COPYRIGHT SIGN
-        (?\\e,H*\e(B . ?\x00D7) ;; MULTIPLICATION SIGN
-        (?\\e,H+\e(B . ?\x00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-        (?\\e,H,\e(B . ?\x00AC) ;; NOT SIGN
-        (?\\e,H-\e(B . ?\x00AD) ;; SOFT HYPHEN
-        (?\\e,H.\e(B . ?\x00AE) ;; REGISTERED SIGN
-        (?\\e,H/\e(B . ?\x00AF) ;; MACRON
-        (?\\e,H0\e(B . ?\x00B0) ;; DEGREE SIGN
-        (?\\e,H1\e(B . ?\x00B1) ;; PLUS-MINUS SIGN
-        (?\\e,H2\e(B . ?\x00B2) ;; SUPERSCRIPT TWO
-        (?\\e,H3\e(B . ?\x00B3) ;; SUPERSCRIPT THREE
-        (?\\e,H4\e(B . ?\x00B4) ;; ACUTE ACCENT
-        (?\\e,H5\e(B . ?\x00B5) ;; MICRO SIGN
-        (?\\e,H6\e(B . ?\x00B6) ;; PILCROW SIGN
-        (?\\e,H7\e(B . ?\x00B7) ;; MIDDLE DOT
-        (?\\e,H8\e(B . ?\x00B8) ;; CEDILLA
-        (?\\e,H9\e(B . ?\x00B9) ;; SUPERSCRIPT ONE
-        (?\\e,H:\e(B . ?\x00F7) ;; DIVISION SIGN
-        (?\\e,H;\e(B . ?\x00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-        (?\\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).
-;       (?\@ . ?\x05B0) ;; HEBREW POINT SHEVA
-;       (?\A . ?\x05B1) ;; HEBREW POINT HATAF SEGOL
-;       (?\B . ?\x05B2) ;; HEBREW POINT HATAF PATAH
-;       (?\C . ?\x05B3) ;; HEBREW POINT HATAF QAMATS
-;       (?\D . ?\x05B4) ;; HEBREW POINT HIRIQ
-;       (?\E . ?\x05B5) ;; HEBREW POINT TSERE
-;       (?\F . ?\x05B6) ;; HEBREW POINT SEGOL
-;       (?\G . ?\x05B7) ;; HEBREW POINT PATAH
-;       (?\H . ?\x05B8) ;; HEBREW POINT QAMATS
-;       (?\I . ?\x05B9) ;; HEBREW POINT HOLAM
-;       (?\K . ?\x05BB) ;; HEBREW POINT QUBUTS
-;       (?\L . ?\x05BC) ;; HEBREW POINT DAGESH
-;       (?\M . ?\x05BD) ;; HEBREW POINT METEG
-;       (?\N . ?\x05BE) ;; HEBREW POINT MAQAF
-;       (?\O . ?\x05BF) ;; HEBREW POINT RAFE
-;       (?\P . ?\x05C0) ;; HEBREW PUNCTUATION PASEQ
-;       (?\Q . ?\x05C1) ;; HEBREW POINT SHIN DOT
-;       (?\R . ?\x05C2) ;; HEBREW POINT SIN DOT
-;       (?\S . ?\x05C3) ;; HEBREW PUNCTUATION SOF PASUQ
-        (?\[ . ?\x202D) ;; LEFT-TO-RIGHT OVERRIDE
-        (?\\ . ?\x202E) ;; RIGHT-TO-LEFT OVERRIDE
-        (?\] . ?\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
-        (?\\e,Hb\e(B . ?\x05D2) ;; HEBREW LETTER GIMEL
-        (?\\e,Hc\e(B . ?\x05D3) ;; HEBREW LETTER DALET
-        (?\\e,Hd\e(B . ?\x05D4) ;; HEBREW LETTER HE
-        (?\\e,He\e(B . ?\x05D5) ;; HEBREW LETTER VAV
-        (?\\e,Hf\e(B . ?\x05D6) ;; HEBREW LETTER ZAYIN
-        (?\\e,Hg\e(B . ?\x05D7) ;; HEBREW LETTER HET
-        (?\\e,Hh\e(B . ?\x05D8) ;; HEBREW LETTER TET
-        (?\\e,Hi\e(B . ?\x05D9) ;; HEBREW LETTER YOD
-        (?\\e,Hj\e(B . ?\x05DA) ;; HEBREW LETTER FINAL KAF
-        (?\\e,Hk\e(B . ?\x05DB) ;; HEBREW LETTER KAF
-        (?\\e,Hl\e(B . ?\x05DC) ;; HEBREW LETTER LAMED
-        (?\\e,Hm\e(B . ?\x05DD) ;; HEBREW LETTER FINAL MEM
-        (?\\e,Hn\e(B . ?\x05DE) ;; HEBREW LETTER MEM
-        (?\\e,Ho\e(B . ?\x05DF) ;; HEBREW LETTER FINAL NUN
-        (?\\e,Hp\e(B . ?\x05E0) ;; HEBREW LETTER NUN
-        (?\\e,Hq\e(B . ?\x05E1) ;; HEBREW LETTER SAMEKH
-        (?\\e,Hr\e(B . ?\x05E2) ;; HEBREW LETTER AYIN
-        (?\\e,Hs\e(B . ?\x05E3) ;; HEBREW LETTER FINAL PE
-        (?\\e,Ht\e(B . ?\x05E4) ;; HEBREW LETTER PE
-        (?\\e,Hu\e(B . ?\x05E5) ;; HEBREW LETTER FINAL TSADI
-        (?\\e,Hv\e(B . ?\x05E6) ;; HEBREW LETTER TSADI
-        (?\\e,Hw\e(B . ?\x05E7) ;; HEBREW LETTER QOF
-        (?\\e,Hx\e(B . ?\x05E8) ;; HEBREW LETTER RESH
-        (?\\e,Hy\e(B . ?\x05E9) ;; HEBREW LETTER SHIN
-        (?\\e,Hz\e(B . ?\x05EA) ;; HEBREW LETTER TAV
-        (?\{ . ?\x202A) ;; LEFT-TO-RIGHT EMBEDDING
-        (?\| . ?\x202B) ;; RIGHT-TO-LEFT EMBEDDING
-        (?\\e,H}\e(B . ?\x200E) ;; LEFT-TO-RIGHT MARK
-        (?\\e,H~\e(B . ?\x200F) ;; RIGHT-TO-LEFT MARK
-        ))
-
-      (ucs-8859-9-alist
-       '((?\\e,M \e(B . ?\x00A0) ;; NO-BREAK SPACE
-        (?\\e,M!\e(B . ?\x00A1) ;; INVERTED EXCLAMATION MARK
-        (?\\e,M"\e(B . ?\x00A2) ;; CENT SIGN
-        (?\\e,M#\e(B . ?\x00A3) ;; POUND SIGN
-        (?\\e,M$\e(B . ?\x00A4) ;; CURRENCY SIGN
-        (?\\e,M%\e(B . ?\x00A5) ;; YEN SIGN
-        (?\\e,M&\e(B . ?\x00A6) ;; BROKEN BAR
-        (?\\e,M'\e(B . ?\x00A7) ;; SECTION SIGN
-        (?\\e,M(\e(B . ?\x00A8) ;; DIAERESIS
-        (?\\e,M)\e(B . ?\x00A9) ;; COPYRIGHT SIGN
-        (?\\e,M*\e(B . ?\x00AA) ;; FEMININE ORDINAL INDICATOR
-        (?\\e,M+\e(B . ?\x00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-        (?\\e,M,\e(B . ?\x00AC) ;; NOT SIGN
-        (?\\e,M-\e(B . ?\x00AD) ;; SOFT HYPHEN
-        (?\\e,M.\e(B . ?\x00AE) ;; REGISTERED SIGN
-        (?\\e,M/\e(B . ?\x00AF) ;; MACRON
-        (?\\e,M0\e(B . ?\x00B0) ;; DEGREE SIGN
-        (?\\e,M1\e(B . ?\x00B1) ;; PLUS-MINUS SIGN
-        (?\\e,M2\e(B . ?\x00B2) ;; SUPERSCRIPT TWO
-        (?\\e,M3\e(B . ?\x00B3) ;; SUPERSCRIPT THREE
-        (?\\e,M4\e(B . ?\x00B4) ;; ACUTE ACCENT
-        (?\\e,M5\e(B . ?\x00B5) ;; MICRO SIGN
-        (?\\e,M6\e(B . ?\x00B6) ;; PILCROW SIGN
-        (?\\e,M7\e(B . ?\x00B7) ;; MIDDLE DOT
-        (?\\e,M8\e(B . ?\x00B8) ;; CEDILLA
-        (?\\e,M9\e(B . ?\x00B9) ;; SUPERSCRIPT ONE
-        (?\\e,M:\e(B . ?\x00BA) ;; MASCULINE ORDINAL INDICATOR
-        (?\\e,M;\e(B . ?\x00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-        (?\\e,M<\e(B . ?\x00BC) ;; VULGAR FRACTION ONE QUARTER
-        (?\\e,M=\e(B . ?\x00BD) ;; VULGAR FRACTION ONE HALF
-        (?\\e,M>\e(B . ?\x00BE) ;; VULGAR FRACTION THREE QUARTERS
-        (?\\e,M?\e(B . ?\x00BF) ;; INVERTED QUESTION MARK
-        (?\\e,M@\e(B . ?\x00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
-        (?\\e,MA\e(B . ?\x00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-        (?\\e,MB\e(B . ?\x00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-        (?\\e,MC\e(B . ?\x00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
-        (?\\e,MD\e(B . ?\x00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-        (?\\e,ME\e(B . ?\x00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
-        (?\\e,MF\e(B . ?\x00C6) ;; LATIN CAPITAL LETTER AE
-        (?\\e,MG\e(B . ?\x00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
-        (?\\e,MH\e(B . ?\x00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
-        (?\\e,MI\e(B . ?\x00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-        (?\\e,MJ\e(B . ?\x00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-        (?\\e,MK\e(B . ?\x00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-        (?\\e,ML\e(B . ?\x00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
-        (?\\e,MM\e(B . ?\x00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-        (?\\e,MN\e(B . ?\x00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-        (?\\e,MO\e(B . ?\x00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
-        (?\\e,MP\e(B . ?\x011E) ;; LATIN CAPITAL LETTER G WITH BREVE
-        (?\\e,MQ\e(B . ?\x00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
-        (?\\e,MR\e(B . ?\x00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
-        (?\\e,MS\e(B . ?\x00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
-        (?\\e,MT\e(B . ?\x00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-        (?\\e,MU\e(B . ?\x00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
-        (?\\e,MV\e(B . ?\x00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-        (?\\e,MW\e(B . ?\x00D7) ;; MULTIPLICATION SIGN
-        (?\\e,MX\e(B . ?\x00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
-        (?\\e,MY\e(B . ?\x00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
-        (?\\e,MZ\e(B . ?\x00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-        (?\\e,M[\e(B . ?\x00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-        (?\\e,M\\e(B . ?\x00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-        (?\\e,M]\e(B . ?\x0130) ;; LATIN CAPITAL LETTER I WITH DOT ABOVE
-        (?\\e,M^\e(B . ?\x015E) ;; LATIN CAPITAL LETTER S WITH CEDILLA
-        (?\\e,M_\e(B . ?\x00DF) ;; LATIN SMALL LETTER SHARP S
-        (?\\e,M`\e(B . ?\x00E0) ;; LATIN SMALL LETTER A WITH GRAVE
-        (?\\e,Ma\e(B . ?\x00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-        (?\\e,Mb\e(B . ?\x00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-        (?\\e,Mc\e(B . ?\x00E3) ;; LATIN SMALL LETTER A WITH TILDE
-        (?\\e,Md\e(B . ?\x00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-        (?\\e,Me\e(B . ?\x00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
-        (?\\e,Mf\e(B . ?\x00E6) ;; LATIN SMALL LETTER AE
-        (?\\e,Mg\e(B . ?\x00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-        (?\\e,Mh\e(B . ?\x00E8) ;; LATIN SMALL LETTER E WITH GRAVE
-        (?\\e,Mi\e(B . ?\x00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-        (?\\e,Mj\e(B . ?\x00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
-        (?\\e,Mk\e(B . ?\x00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-        (?\\e,Ml\e(B . ?\x00EC) ;; LATIN SMALL LETTER I WITH GRAVE
-        (?\\e,Mm\e(B . ?\x00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-        (?\\e,Mn\e(B . ?\x00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-        (?\\e,Mo\e(B . ?\x00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
-        (?\\e,Mp\e(B . ?\x011F) ;; LATIN SMALL LETTER G WITH BREVE
-        (?\\e,Mq\e(B . ?\x00F1) ;; LATIN SMALL LETTER N WITH TILDE
-        (?\\e,Mr\e(B . ?\x00F2) ;; LATIN SMALL LETTER O WITH GRAVE
-        (?\\e,Ms\e(B . ?\x00F3) ;; LATIN SMALL LETTER O WITH ACUTE
-        (?\\e,Mt\e(B . ?\x00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-        (?\\e,Mu\e(B . ?\x00F5) ;; LATIN SMALL LETTER O WITH TILDE
-        (?\\e,Mv\e(B . ?\x00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-        (?\\e,Mw\e(B . ?\x00F7) ;; DIVISION SIGN
-        (?\\e,Mx\e(B . ?\x00F8) ;; LATIN SMALL LETTER O WITH STROKE
-        (?\\e,My\e(B . ?\x00F9) ;; LATIN SMALL LETTER U WITH GRAVE
-        (?\\e,Mz\e(B . ?\x00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-        (?\\e,M{\e(B . ?\x00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
-        (?\\e,M|\e(B . ?\x00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-        (?\\e,M}\e(B . ?\x0131) ;; LATIN SMALL LETTER DOTLESS I
-        (?\\e,M~\e(B . ?\x015F) ;; LATIN SMALL LETTER S WITH CEDILLA
-        (?\\e,M\7f\e(B . ?\x00FF) ;; LATIN SMALL LETTER Y WITH DIAERESIS
-        ))
-
-      (ucs-8859-14-alist
-       '((?\\e,_ \e(B . ?\x00A0) ;; NO-BREAK SPACE
-        (?\\e,_!\e(B . ?\x1E02) ;; LATIN CAPITAL LETTER B WITH DOT ABOVE
-        (?\\e,_"\e(B . ?\x1E03) ;; LATIN SMALL LETTER B WITH DOT ABOVE
-        (?\\e,_#\e(B . ?\x00A3) ;; POUND SIGN
-        (?\\e,_$\e(B . ?\x010A) ;; LATIN CAPITAL LETTER C WITH DOT ABOVE
-        (?\\e,_%\e(B . ?\x010B) ;; LATIN SMALL LETTER C WITH DOT ABOVE
-        (?\\e,_&\e(B . ?\x1E0A) ;; LATIN CAPITAL LETTER D WITH DOT ABOVE
-        (?\\e,_'\e(B . ?\x00A7) ;; SECTION SIGN
-        (?\\e,_(\e(B . ?\x1E80) ;; LATIN CAPITAL LETTER W WITH GRAVE
-        (?\\e,_)\e(B . ?\x00A9) ;; COPYRIGHT SIGN
-        (?\\e,_*\e(B . ?\x1E82) ;; LATIN CAPITAL LETTER W WITH ACUTE
-        (?\\e,_+\e(B . ?\x1E0B) ;; LATIN SMALL LETTER D WITH DOT ABOVE
-        (?\\e,_,\e(B . ?\x1EF2) ;; LATIN CAPITAL LETTER Y WITH GRAVE
-        (?\\e,_-\e(B . ?\x00AD) ;; SOFT HYPHEN
-        (?\\e,_.\e(B . ?\x00AE) ;; REGISTERED SIGN
-        (?\\e,_/\e(B . ?\x0178) ;; LATIN CAPITAL LETTER Y WITH DIAERESIS
-        (?\\e,_0\e(B . ?\x1E1E) ;; LATIN CAPITAL LETTER F WITH DOT ABOVE
-        (?\\e,_1\e(B . ?\x1E1F) ;; LATIN SMALL LETTER F WITH DOT ABOVE
-        (?\\e,_2\e(B . ?\x0120) ;; LATIN CAPITAL LETTER G WITH DOT ABOVE
-        (?\\e,_3\e(B . ?\x0121) ;; LATIN SMALL LETTER G WITH DOT ABOVE
-        (?\\e,_4\e(B . ?\x1E40) ;; LATIN CAPITAL LETTER M WITH DOT ABOVE
-        (?\\e,_5\e(B . ?\x1E41) ;; LATIN SMALL LETTER M WITH DOT ABOVE
-        (?\\e,_6\e(B . ?\x00B6) ;; PILCROW SIGN
-        (?\\e,_7\e(B . ?\x1E56) ;; LATIN CAPITAL LETTER P WITH DOT ABOVE
-        (?\\e,_8\e(B . ?\x1E81) ;; LATIN SMALL LETTER W WITH GRAVE
-        (?\\e,_9\e(B . ?\x1E57) ;; LATIN SMALL LETTER P WITH DOT ABOVE
-        (?\\e,_:\e(B . ?\x1E83) ;; LATIN SMALL LETTER W WITH ACUTE
-        (?\\e,_;\e(B . ?\x1E60) ;; LATIN CAPITAL LETTER S WITH DOT ABOVE
-        (?\\e,_<\e(B . ?\x1EF3) ;; LATIN SMALL LETTER Y WITH GRAVE
-        (?\\e,_=\e(B . ?\x1E84) ;; LATIN CAPITAL LETTER W WITH DIAERESIS
-        (?\\e,_>\e(B . ?\x1E85) ;; LATIN SMALL LETTER W WITH DIAERESIS
-        (?\\e,_?\e(B . ?\x1E61) ;; LATIN SMALL LETTER S WITH DOT ABOVE
-        (?\\e,_@\e(B . ?\x00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
-        (?\\e,_A\e(B . ?\x00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-        (?\\e,_B\e(B . ?\x00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-        (?\\e,_C\e(B . ?\x00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
-        (?\\e,_D\e(B . ?\x00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-        (?\\e,_E\e(B . ?\x00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
-        (?\\e,_F\e(B . ?\x00C6) ;; LATIN CAPITAL LETTER AE
-        (?\\e,_G\e(B . ?\x00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
-        (?\\e,_H\e(B . ?\x00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
-        (?\\e,_I\e(B . ?\x00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-        (?\\e,_J\e(B . ?\x00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-        (?\\e,_K\e(B . ?\x00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-        (?\\e,_L\e(B . ?\x00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
-        (?\\e,_M\e(B . ?\x00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-        (?\\e,_N\e(B . ?\x00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-        (?\\e,_O\e(B . ?\x00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
-        (?\\e,_P\e(B . ?\x0174) ;; LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-        (?\\e,_Q\e(B . ?\x00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
-        (?\\e,_R\e(B . ?\x00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
-        (?\\e,_S\e(B . ?\x00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
-        (?\\e,_T\e(B . ?\x00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-        (?\\e,_U\e(B . ?\x00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
-        (?\\e,_V\e(B . ?\x00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-        (?\\e,_W\e(B . ?\x1E6A) ;; LATIN CAPITAL LETTER T WITH DOT ABOVE
-        (?\\e,_X\e(B . ?\x00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
-        (?\\e,_Y\e(B . ?\x00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
-        (?\\e,_Z\e(B . ?\x00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-        (?\\e,_[\e(B . ?\x00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-        (?\\e,_\\e(B . ?\x00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-        (?\\e,_]\e(B . ?\x00DD) ;; LATIN CAPITAL LETTER Y WITH ACUTE
-        (?\\e,_^\e(B . ?\x0176) ;; LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-        (?\\e,__\e(B . ?\x00DF) ;; LATIN SMALL LETTER SHARP S
-        (?\\e,_`\e(B . ?\x00E0) ;; LATIN SMALL LETTER A WITH GRAVE
-        (?\\e,_a\e(B . ?\x00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-        (?\\e,_b\e(B . ?\x00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-        (?\\e,_c\e(B . ?\x00E3) ;; LATIN SMALL LETTER A WITH TILDE
-        (?\\e,_d\e(B . ?\x00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-        (?\\e,_e\e(B . ?\x00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
-        (?\\e,_f\e(B . ?\x00E6) ;; LATIN SMALL LETTER AE
-        (?\\e,_g\e(B . ?\x00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-        (?\\e,_h\e(B . ?\x00E8) ;; LATIN SMALL LETTER E WITH GRAVE
-        (?\\e,_i\e(B . ?\x00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-        (?\\e,_j\e(B . ?\x00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
-        (?\\e,_k\e(B . ?\x00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-        (?\\e,_l\e(B . ?\x00EC) ;; LATIN SMALL LETTER I WITH GRAVE
-        (?\\e,_m\e(B . ?\x00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-        (?\\e,_n\e(B . ?\x00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-        (?\\e,_o\e(B . ?\x00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
-        (?\\e,_p\e(B . ?\x0175) ;; LATIN SMALL LETTER W WITH CIRCUMFLEX
-        (?\\e,_q\e(B . ?\x00F1) ;; LATIN SMALL LETTER N WITH TILDE
-        (?\\e,_r\e(B . ?\x00F2) ;; LATIN SMALL LETTER O WITH GRAVE
-        (?\\e,_s\e(B . ?\x00F3) ;; LATIN SMALL LETTER O WITH ACUTE
-        (?\\e,_t\e(B . ?\x00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-        (?\\e,_u\e(B . ?\x00F5) ;; LATIN SMALL LETTER O WITH TILDE
-        (?\\e,_v\e(B . ?\x00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-        (?\\e,_w\e(B . ?\x1E6B) ;; LATIN SMALL LETTER T WITH DOT ABOVE
-        (?\\e,_x\e(B . ?\x00F8) ;; LATIN SMALL LETTER O WITH STROKE
-        (?\\e,_y\e(B . ?\x00F9) ;; LATIN SMALL LETTER U WITH GRAVE
-        (?\\e,_z\e(B . ?\x00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-        (?\\e,_{\e(B . ?\x00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
-        (?\\e,_|\e(B . ?\x00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-        (?\\e,_}\e(B . ?\x00FD) ;; LATIN SMALL LETTER Y WITH ACUTE
-        (?\\e,_~\e(B . ?\x0177) ;; LATIN SMALL LETTER Y WITH CIRCUMFLEX
-        (?\\e,_\7f\e(B . ?\x00FF) ;; LATIN SMALL LETTER Y WITH DIAERESIS
-        ))
-
-      (ucs-8859-15-alist
-       '((?\\e,b \e(B . ?\x00A0) ;; NO-BREAK SPACE
-        (?\\e,b!\e(B . ?\x00A1) ;; INVERTED EXCLAMATION MARK
-        (?\\e,b"\e(B . ?\x00A2) ;; CENT SIGN
-        (?\\e,b#\e(B . ?\x00A3) ;; POUND SIGN
-        (?\\e,b$\e(B . ?\x20AC) ;; EURO SIGN
-        (?\\e,b%\e(B . ?\x00A5) ;; YEN SIGN
-        (?\\e,b&\e(B . ?\x0160) ;; LATIN CAPITAL LETTER S WITH CARON
-        (?\\e,b'\e(B . ?\x00A7) ;; SECTION SIGN
-        (?\\e,b(\e(B . ?\x0161) ;; LATIN SMALL LETTER S WITH CARON
-        (?\\e,b)\e(B . ?\x00A9) ;; COPYRIGHT SIGN
-        (?\\e,b*\e(B . ?\x00AA) ;; FEMININE ORDINAL INDICATOR
-        (?\\e,b+\e(B . ?\x00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-        (?\\e,b,\e(B . ?\x00AC) ;; NOT SIGN
-        (?\\e,b-\e(B . ?\x00AD) ;; SOFT HYPHEN
-        (?\\e,b.\e(B . ?\x00AE) ;; REGISTERED SIGN
-        (?\\e,b/\e(B . ?\x00AF) ;; MACRON
-        (?\\e,b0\e(B . ?\x00B0) ;; DEGREE SIGN
-        (?\\e,b1\e(B . ?\x00B1) ;; PLUS-MINUS SIGN
-        (?\\e,b2\e(B . ?\x00B2) ;; SUPERSCRIPT TWO
-        (?\\e,b3\e(B . ?\x00B3) ;; SUPERSCRIPT THREE
-        (?\\e,b4\e(B . ?\x017D) ;; LATIN CAPITAL LETTER Z WITH CARON
-        (?\\e,b5\e(B . ?\x00B5) ;; MICRO SIGN
-        (?\\e,b6\e(B . ?\x00B6) ;; PILCROW SIGN
-        (?\\e,b7\e(B . ?\x00B7) ;; MIDDLE DOT
-        (?\\e,b8\e(B . ?\x017E) ;; LATIN SMALL LETTER Z WITH CARON
-        (?\\e,b9\e(B . ?\x00B9) ;; SUPERSCRIPT ONE
-        (?\\e,b:\e(B . ?\x00BA) ;; MASCULINE ORDINAL INDICATOR
-        (?\\e,b;\e(B . ?\x00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-        (?\\e,b<\e(B . ?\x0152) ;; LATIN CAPITAL LIGATURE OE
-        (?\\e,b=\e(B . ?\x0153) ;; LATIN SMALL LIGATURE OE
-        (?\\e,b>\e(B . ?\x0178) ;; LATIN CAPITAL LETTER Y WITH DIAERESIS
-        (?\\e,b?\e(B . ?\x00BF) ;; INVERTED QUESTION MARK
-        (?\\e,b@\e(B . ?\x00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
-        (?\\e,bA\e(B . ?\x00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-        (?\\e,bB\e(B . ?\x00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-        (?\\e,bC\e(B . ?\x00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
-        (?\\e,bD\e(B . ?\x00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-        (?\\e,bE\e(B . ?\x00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
-        (?\\e,bF\e(B . ?\x00C6) ;; LATIN CAPITAL LETTER AE
-        (?\\e,bG\e(B . ?\x00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
-        (?\\e,bH\e(B . ?\x00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
-        (?\\e,bI\e(B . ?\x00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-        (?\\e,bJ\e(B . ?\x00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-        (?\\e,bK\e(B . ?\x00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-        (?\\e,bL\e(B . ?\x00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
-        (?\\e,bM\e(B . ?\x00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-        (?\\e,bN\e(B . ?\x00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-        (?\\e,bO\e(B . ?\x00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
-        (?\\e,bP\e(B . ?\x00D0) ;; LATIN CAPITAL LETTER ETH
-        (?\\e,bQ\e(B . ?\x00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
-        (?\\e,bR\e(B . ?\x00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
-        (?\\e,bS\e(B . ?\x00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
-        (?\\e,bT\e(B . ?\x00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-        (?\\e,bU\e(B . ?\x00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
-        (?\\e,bV\e(B . ?\x00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-        (?\\e,bW\e(B . ?\x00D7) ;; MULTIPLICATION SIGN
-        (?\\e,bX\e(B . ?\x00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
-        (?\\e,bY\e(B . ?\x00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
-        (?\\e,bZ\e(B . ?\x00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-        (?\\e,b[\e(B . ?\x00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-        (?\\e,b\\e(B . ?\x00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-        (?\\e,b]\e(B . ?\x00DD) ;; LATIN CAPITAL LETTER Y WITH ACUTE
-        (?\\e,b^\e(B . ?\x00DE) ;; LATIN CAPITAL LETTER THORN
-        (?\\e,b_\e(B . ?\x00DF) ;; LATIN SMALL LETTER SHARP S
-        (?\\e,b`\e(B . ?\x00E0) ;; LATIN SMALL LETTER A WITH GRAVE
-        (?\\e,ba\e(B . ?\x00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-        (?\\e,bb\e(B . ?\x00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-        (?\\e,bc\e(B . ?\x00E3) ;; LATIN SMALL LETTER A WITH TILDE
-        (?\\e,bd\e(B . ?\x00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-        (?\\e,be\e(B . ?\x00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
-        (?\\e,bf\e(B . ?\x00E6) ;; LATIN SMALL LETTER AE
-        (?\\e,bg\e(B . ?\x00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-        (?\\e,bh\e(B . ?\x00E8) ;; LATIN SMALL LETTER E WITH GRAVE
-        (?\\e,bi\e(B . ?\x00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-        (?\\e,bj\e(B . ?\x00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
-        (?\\e,bk\e(B . ?\x00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-        (?\\e,bl\e(B . ?\x00EC) ;; LATIN SMALL LETTER I WITH GRAVE
-        (?\\e,bm\e(B . ?\x00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-        (?\\e,bn\e(B . ?\x00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-        (?\\e,bo\e(B . ?\x00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
-        (?\\e,bp\e(B . ?\x00F0) ;; LATIN SMALL LETTER ETH
-        (?\\e,bq\e(B . ?\x00F1) ;; LATIN SMALL LETTER N WITH TILDE
-        (?\\e,br\e(B . ?\x00F2) ;; LATIN SMALL LETTER O WITH GRAVE
-        (?\\e,bs\e(B . ?\x00F3) ;; LATIN SMALL LETTER O WITH ACUTE
-        (?\\e,bt\e(B . ?\x00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-        (?\\e,bu\e(B . ?\x00F5) ;; LATIN SMALL LETTER O WITH TILDE
-        (?\\e,bv\e(B . ?\x00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-        (?\\e,bw\e(B . ?\x00F7) ;; DIVISION SIGN
-        (?\\e,bx\e(B . ?\x00F8) ;; LATIN SMALL LETTER O WITH STROKE
-        (?\\e,by\e(B . ?\x00F9) ;; LATIN SMALL LETTER U WITH GRAVE
-        (?\\e,bz\e(B . ?\x00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-        (?\\e,b{\e(B . ?\x00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
-        (?\\e,b|\e(B . ?\x00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-        (?\\e,b}\e(B . ?\x00FD) ;; LATIN SMALL LETTER Y WITH ACUTE
-        (?\\e,b~\e(B . ?\x00FE) ;; LATIN SMALL LETTER THORN
-        (?\\e,b\7f\e(B . ?\x00FF) ;; LATIN SMALL LETTER Y WITH DIAERESIS
-        ))
-
-      (ucs-8859-1-alist
-       (let ((i 160)
-            l)
-        (while (< i 256)
-          (push (cons (make-char 'latin-iso8859-1 (- i 128)) i)
-                l)
-          (setq i (1+ i)))
-        (nreverse l)))
-      
-;;       (case-table (standard-case-table))
-;;       (syntax-table (standard-syntax-table))
-      )
-
-  ;; Convert the lists to the basic char tables.
-  (dolist (n (list 15 14 9 8 7 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)))
-;; I think this is actually done OK in characters.el.
-;; Probably things like accents shouldn't have word syntax, but the
-;; Latin-N syntax tables currently aren't consistent for such
-;; characters anyhow.
-;;      ;; Make the mule-unicode characters inherit syntax and case info
-;;      ;; if they don't already have it.
-;;      (dolist (pair alist)
-;;     (let ((mule (car pair))
-;;           (uc (cdr pair))
-;;           (mu (decode-char 'ucs (cdr pair))))
-;;       (let ((syntax (aref syntax-table mule)))
-;;         (if (eq mule (downcase mule))
-;;             (if (eq mule (upcase mule)) ; non-letter or uncased letter
-;;                 (progn
-;;                   (if (= 4 (car syntax)) ; left delim
-;;                       (progn
-;;                         (aset syntax-table
-;;                               mu
-;;                               (cons 4 (aref ucs-mule-8859-to-mule-unicode
-;;                                             (cdr syntax))))
-;;                         (aset syntax-table
-;;                               (aref ucs-mule-8859-to-mule-unicode
-;;                                     (cdr syntax))
-;;                               (cons 5 mu)))
-;;                     (aset syntax-table mu syntax))
-;;                   (aset case-table mu mu)))
-;;           ;; Upper case letter
-;;           (let ((lower (aref ucs-mule-8859-to-mule-unicode
-;;                              (aref case-table mule))))
-;;             (aset case-table mu lower)
-;;             (aset case-table lower lower)
-;;             (modify-syntax-entry lower "w   " syntax-table)
-;;             (modify-syntax-entry mu "w   " syntax-table))))))
-      ))
-  ;; Derive tables that can be used as per-coding-system
-  ;; `translation-table-for-encode's.
-  (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)))
-          elt)
-      ;; Start with the mule-unicode component.
-      (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))))
-
-;; Register for use in CCL.
-(define-translation-table 'ucs-mule-8859-to-mule-unicode
-  ucs-mule-8859-to-mule-unicode)
-
-;; Fixme: Make this reversible, which means frobbing
-;; `char-coding-system-table' directly to remove what we added -- see
-;; codepages.el.  Also make it a user option.
-(defun ucs-unify-8859 (&optional encode-only)
-  "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."
-  (interactive "P")
-  (unless encode-only
-    ;; Unify 8859 on decoding.  (Non-CCL coding systems only.)
-    (set-char-table-parent standard-translation-table-for-decode
-                          ucs-mule-8859-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)
-      ;; Update the table of what encodes to what.
-      (register-char-codings coding-system table)
-      (coding-system-put coding-system 'translation-table-for-encode table)))
-
-;;; The following works for the bundled coding systems, but it's
-;;; better to use the Unicode-based ones and make it irrelevant.
-
-;;;   ;; Update the Cyrillic special cases.
-;;;   ;; `translation-table-for-encode' doesn't work for CCL coding
-;;;   ;; systems, and `standard-translation-table-for-decode' isn't
-;;;   ;; applied.
-;;;   (let ((table (get 'cyrillic-koi8-r-encode-table 'translation-table)))
-;;;     (map-char-table
-;;;      (lambda (k v)
-;;;        (aset table
-;;;         (or (aref ucs-8859-5-encode-table k)
-;;;             k)
-;;;         v))
-;;;      table)
-;;;     (register-char-codings 'cyrillic-koi8 table))
-;;;   (let ((table (get 'cyrillic-koi8-r-nonascii-translation-table
-;;;                'translation-table)))
-;;;     (map-char-table
-;;;      (lambda (k v)
-;;;        (if v (aset table k (or (aref ucs-mule-8859-to-mule-unicode v)
-;;;                           v))))
-;;;      table))
-;;;   ;; Redefine this, since the orginal only translated 8859-5.
-;;;   (define-ccl-program ccl-encode-koi8
-;;;     `(1
-;;;       ((loop
-;;;    (read-multibyte-character r0 r1)
-;;;    (translate-character cyrillic-koi8-r-encode-table r0 r1)
-;;;    (write-repeat r1))))
-;;;     "CCL program to encode KOI8.")
-;;;   (let ((table (get 'cyrillic-alternativnyj-encode-table 'translation-table)))
-;;;     (map-char-table
-;;;      (lambda (k v)
-;;;        (aset table
-;;;         (or (aref ucs-8859-5-encode-table k)
-;;;             k)
-;;;         v))
-;;;      table)
-;;;     (register-char-codings 'cyrillic-alternativnyj table))
-;;;   (let ((table (get 'cyrillic-alternativnyj-nonascii-translation-table
-;;;                'translation-table)))
-;;;     (map-char-table
-;;;      (lambda (k v)
-;;;        (if v (aset table
-;;;               k
-;;;               (or (aref ucs-mule-8859-to-mule-unicode v)
-;;;                   v))))
-;;;      table))
-  )
-
-(defun ucs-fragment-8859 (&optional encode-only)
-  "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."
-  (interactive "P")
-  ;; Maybe fix decoding.
-  (unless encode-only
-    ;; Unify 8859 on decoding.  (Non-CCL coding systems only.)
-    (set-char-table-parent standard-translation-table-for-decode nil))
-  ;; Fix encoding.  For each charset, remove the entries in
-  ;; `char-coding-system-table' added to its safe-chars table (as its
-  ;; parent).
-  (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)))
-      (map-char-table
-       (lambda (key val)
-        (if (and (>= key 128) val)
-            (let ((codings (aref char-coding-system-table key)))
-              (aset char-coding-system-table key
-                    (delq coding-system codings)))))
-       (char-table-parent safe))
-      (set-char-table-parent safe nil)
-      (coding-system-put coding-system 'translation-table-for-encode nil))))
-
-;;;###autoload
-(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 behaviour 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.
-
-See also command `unify-8859-on-decoding-mode'."
-  :group 'mule
-  :global t
-  :version 21.3                                ; who knows...?
-  :init-value nil
-  (if unify-8859-on-encoding-mode
-      (ucs-unify-8859 t)
-    (ucs-fragment-8859 t)))
-
-;;;###autoload
-(define-minor-mode unify-8859-on-decoding-mode
-  "Set up translation table 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.
-
-This sets the parent of `standard-translation-table-for-decode'.
-
-See also command `unify-8859-on-encoding-mode'."
-  :group 'mule
-  :global t
-  :version 21.3                                ; who knows...?
-  :init-value nil
-  (if unify-8859-on-decoding-mode
-      (set-char-table-parent standard-translation-table-for-decode
-                            ucs-mule-8859-to-mule-unicode)
-    (set-char-table-parent standard-translation-table-for-decode nil)))
-
-(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): ")
-  (insert (decode-char 'ucs (if (integerp arg)
-                               arg
-                             (string-to-number arg 16)))))
-
-;;; 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
-       '((?i . ?i)
-        (?\e,0!\e(B . ?\e$,1#j\e(B)
-        (?e . ?e)
-        (?\e,0#\e(B . ?\e$,1#[\e(B)
-        (?\e,0$\e(B . ?\e,Af\e(B)
-        (?a . ?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)
-        (?y . ?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)
-        (?u . ?u)
-        (?\e,05\e(B . ?\e$,1$*\e(B)
-        (?o . ?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)
-        (?p . ?p)
-        (?b . ?b)
-        (?t . ?t)
-        (?d . ?d)
-        (?k . ?k)
-        (?g . ?g)
-        (?f . ?f)
-        (?v . ?v)
-        (?\e,0H\e(B . ?\e$,1'8\e(B)
-        (?\e,0I\e(B . ?\e,Ap\e(B)
-        (?s . ?s)
-        (?z . ?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)
-        (?x . ?x)
-        (?\e,0P\e(B . ?\e$,1$!\e(B)
-        (?h . ?h)
-        (?m . ?m)
-        (?n . ?n)
-        (?\e,0T\e(B . ?\e$,1#r\e(B)
-        (?\e,0U\e(B . ?\e$,1 k\e(B)
-        (?r . ?r)
-        (?\e,0W\e(B . ?\e$,1$ \e(B)
-        (?\e,0X\e(B . ?\e$,1#y\e(B)
-        (?j . ?j)
-        (?l . ?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)
-        (?w . ?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))))
-  (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))
-      ;; 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 (charsetp cs)
-           (push cs safe-charsets)
-         (setq safe-charsets
-               (append (delq 'ascii (coding-system-get cs 'safe-charsets))
-                       safe-charsets)))))
-    (dolist (c safe-charsets)
-      (aset table (make-char c) t))
-    (coding-system-put 'mule-utf-8 'safe-charsets
-                      (append (coding-system-get 'mule-utf-8 'safe-charsets)
-                              safe-charsets))
-    (register-char-codings 'mule-utf-8 table)))
-
-(provide 'ucs-tables)
-
-;;; ucs-tables.el ends here