+++ /dev/null
-;;; 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
+++ /dev/null
-;;; 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
+++ /dev/null
-;;; 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