view lisp/international/iso-cvt.el @ 18092:8428d56cd207

(smtpmail-via-smtp): Recognize XVRB as a synonym for VERB and XONE as a synonym for ONEX. (smtpmail-read-response): Add "%s" to `message' calls to avoid problems with percent signs in strings. (smtpmail-read-response): Return all lines of the response text as a list of strings. Formerly only the first line was returned. This is insufficient when one wants to parse e.g. an EHLO response. Ignore responses starting with "0". This is necessary to support the VERB SMTP extension. (smtpmail-via-smtp): Try EHLO and find out which SMTP service extensions the receiving mailer supports. Issue the ONEX and XUSR commands if the corresponding extensions are supported. Issue VERB if supported and `smtpmail-debug-info' is non-nil. Add SIZE attribute to MAIL FROM: command if SIZE extension is supported. Add code that could set the BODY= attribute to MAIL FROM: if the receiving mailer supports 8BITMIME. This is currently disabled, since doing it right might involve adding MIME headers to, and in some cases reencoding, the message.
author Richard M. Stallman <rms@gnu.org>
date Sun, 01 Jun 1997 22:24:22 +0000
parents bd56cdc4d07b
children 81fa1f5547eb
line wrap: on
line source

;;; iso-cvt.el --- translate to ISO 8859-1 from/to net/TeX conventions
;; This file was formerly called gm-lingo.el.

;; Copyright (C) 1993, 1994 Free Software Foundation, Inc.

;; Author: Michael Gschwind <mike@vlsivie.tuwien.ac.at>
;; Keywords: tex, iso, latin, i18n

;; This file is part of GNU Emacs.

;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING.  If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.

;;; Commentary: 

;; This lisp code serves two purposes, both of which involve 
;; the translation of various conventions for representing European 
;; character sets to ISO 8859-1.

;; Net support: 
;; Various conventions exist in Newsgroups on how to represent national 
;; characters. The functions provided here translate these net conventions 
;; to ISO.
;;
;; Calling `iso-german' will turn the net convention for umlauts ("a etc.) 
;; into ISO latin1 umlauts for easy reading.
;; 'iso-spanish' will turn net conventions for representing spanish 
;; to ISO latin1. (Note that accents are omitted in news posts most 
;; of the time, only enye is escaped.)

;; TeX support
;; This mode installs hooks which change TeX files to ISO Latin-1 for 
;; simplified editing. When the TeX file is saved, ISO latin1 characters are
;; translated back to escape sequences.
;;
;; An alternative is a TeX style that handles 8 bit ISO files 
;; (available on ftp.vlsivie.tuwien.ac.at in /pub/8bit)  
;; - but these files are difficult to transmit ... so while the net is  
;; still @ 7 bit this may be useful

;;; TO DO:
;; The net support should install hooks (like TeX support does) 
;; which recognizes certain news groups and translates all articles from 
;; those groups. 
;;
;; Cover more cases for translation (There is an infinite number of ways to 
;; represent accented characters in TeX)

;;; SEE ALSO:
;; If you are interested in questions related to using the ISO 8859-1 
;; characters set (configuring emacs, Unix, etc. to use ISO), then you
;; can get the ISO 8859-1 FAQ via anonymous ftp from 
;; ftp.vlsivie.tuwien.ac.at in /pub/bit/FAQ-ISO-8859-1

;;; Code:

(provide 'iso-cvt)

(defvar iso-spanish-trans-tab
  '(
    ("~n" "ñ")
    ("\([a-zA-Z]\)#" "\\1ñ")
    ("~N" "Ñ")
    ("\\([-a-zA-Z\"`]\\)\"u" "\\1ü")
    ("\\([-a-zA-Z\"`]\\)\"U" "\\1Ü")
    ("\\([-a-zA-Z]\\)'o" "\\1ó")
    ("\\([-a-zA-Z]\\)'O" "\\Ó")
    ("\\([-a-zA-Z]\\)'e" "\\1é")
    ("\\([-a-zA-Z]\\)'E" "\\1É")
    ("\\([-a-zA-Z]\\)'a" "\\1á")
    ("\\([-a-zA-Z]\\)'A" "\\1A")
    ("\\([-a-zA-Z]\\)'i" "\\1í")
    ("\\([-a-zA-Z]\\)'I" "\\1Í")
    )
  "Spanish translation table.")

(defun iso-translate-conventions (trans-tab)
  "Use the translation table TRANS-TAB to translate the current buffer."
  (save-excursion
    (goto-char (point-min))
    (let ((work-tab trans-tab)
	  (buffer-read-only nil)
	  (case-fold-search nil))
      (while work-tab
	(save-excursion
	  (let ((trans-this (car work-tab)))
	    (while (re-search-forward (car trans-this) nil t)
	      (replace-match (car (cdr trans-this)) t nil)))
	  (setq work-tab (cdr work-tab)))))))

(defun iso-spanish ()
  "Translate net conventions for Spanish to ISO 8859-1."
  (interactive)
  (iso-translate-conventions iso-spanish-trans-tab))

(defvar iso-aggressive-german-trans-tab
  '(
    ("\"a" "ä")
    ("\"A" "Ä")
    ("\"o" "ö")
    ("\"O" "Ö")
    ("\"u" "ü")
    ("\"U" "Ü")
    ("\"s" "ß")
    ("\\\\3" "ß")
    )
  "German translation table. 
This table uses an aggressive translation approach and may erroneously
translate too much.")

(defvar iso-conservative-german-trans-tab
  '(
    ("\\([-a-zA-Z\"`]\\)\"a" "\\1ä")
    ("\\([-a-zA-Z\"`]\\)\"A" "\\1Ä")
    ("\\([-a-zA-Z\"`]\\)\"o" "\\1ö")
    ("\\([-a-zA-Z\"`]\\)\"O" "\\1Ö")
    ("\\([-a-zA-Z\"`]\\)\"u" "\\1ü")
    ("\\([-a-zA-Z\"`]\\)\"U" "\\1Ü")
    ("\\([-a-zA-Z\"`]\\)\"s" "\\1ß")
    ("\\([-a-zA-Z\"`]\\)\\\\3" "\\1ß")
    )
  "German translation table.
This table uses a conservative translation approach and may translate too 
little.")


(defvar iso-german-trans-tab iso-aggressive-german-trans-tab 
  "Currently active translation table for German.")

(defun iso-german ()
 "Translate net conventions for German to ISO 8859-1."
 (interactive)
 (iso-translate-conventions iso-german-trans-tab))
 
(defvar iso-iso2tex-trans-tab
  '(
    ("ä" "{\\\\\"a}")
    ("à" "{\\\\`a}")
    ("á" "{\\\\'a}")
    ("ã" "{\\\\~a}")
    ("â" "{\\\\^a}")
    ("ë" "{\\\\\"e}")
    ("è" "{\\\\`e}")
    ("é" "{\\\\'e}")
    ("ê" "{\\\\^e}")
    ("ï" "{\\\\\"\\\\i}")
    ("ì" "{\\\\`\\\\i}")
    ("í" "{\\\\'\\\\i}")
    ("î" "{\\\\^\\\\i}")
    ("ö" "{\\\\\"o}")
    ("ò" "{\\\\`o}")
    ("ó" "{\\\\'o}")
    ("õ" "{\\\\~o}")
    ("ô" "{\\\\^o}")
    ("ü" "{\\\\\"u}")
    ("ù" "{\\\\`u}")
    ("ú" "{\\\\'u}")
    ("û" "{\\\\^u}")
    ("Ä" "{\\\\\"A}")
    ("À" "{\\\\`A}")
    ("Á" "{\\\\'A}")
    ("Ã" "{\\\\~A}")
    ("Â" "{\\\\^A}")
    ("Ë" "{\\\\\"E}")
    ("È" "{\\\\`E}")
    ("É" "{\\\\'E}")
    ("Ê" "{\\\\^E}")
    ("Ï" "{\\\\\"I}")
    ("Ì" "{\\\\`I}")
    ("Í" "{\\\\'I}")
    ("Î" "{\\\\^I}")
    ("Ö" "{\\\\\"O}")
    ("Ò" "{\\\\`O}")
    ("Ó" "{\\\\'O}")
    ("Õ" "{\\\\~O}")
    ("Ô" "{\\\\^O}")
    ("Ü" "{\\\\\"U}")
    ("Ù" "{\\\\`U}")
    ("Ú" "{\\\\'U}")
    ("Û" "{\\\\^U}")
    ("ñ" "{\\\\~n}")
    ("Ñ" "{\\\\~N}")
    ("ç" "{\\\\c c}")
    ("Ç" "{\\\\c C}")
    ("ß" "{\\\\ss}")
    ("\306" "{\\\\AE}")
    ("\346" "{\\\\ae}")
    ("\305" "{\\\\AA}")
    ("\345" "{\\\\aa}")
    ("\251" "{\\\\copyright}")
    ("£" "{\\\\pounds}")
    ("¶" "{\\\\P}")
    ("§" "{\\\\S}")
    ("¿" "{?`}")
    ("¡" "{!`}")
    )
  "Translation table for translating ISO 8859-1 characters to TeX sequences.")




(defun iso-iso2tex ()
 "Translate ISO 8859-1 characters to TeX sequences."
 (interactive)
 (iso-translate-conventions iso-iso2tex-trans-tab))


(defvar iso-tex2iso-trans-tab
  '(
    ("{\\\\\"a}" "ä")
    ("{\\\\`a}" "à")
    ("{\\\\'a}" "á")
    ("{\\\\~a}" "ã")
    ("{\\\\^a}" "â")
    ("{\\\\\"e}" "ë")
    ("{\\\\`e}" "è")
    ("{\\\\'e}" "é")
    ("{\\\\^e}" "ê")
    ("{\\\\\"\\\\i}" "ï")
    ("{\\\\`\\\\i}" "ì")
    ("{\\\\'\\\\i}" "í")
    ("{\\\\^\\\\i}" "î")
    ("{\\\\\"i}" "ï")
    ("{\\\\`i}" "ì")
    ("{\\\\'i}" "í")
    ("{\\\\^i}" "î")
    ("{\\\\\"o}" "ö")
    ("{\\\\`o}" "ò")
    ("{\\\\'o}" "ó")
    ("{\\\\~o}" "õ")
    ("{\\\\^o}" "ô")
    ("{\\\\\"u}" "ü")
    ("{\\\\`u}" "ù")
    ("{\\\\'u}" "ú")
    ("{\\\\^u}" "û")
    ("{\\\\\"A}" "Ä")
    ("{\\\\`A}" "À")
    ("{\\\\'A}" "Á")
    ("{\\\\~A}" "Ã")
    ("{\\\\^A}" "Â")
    ("{\\\\\"E}" "Ë")
    ("{\\\\`E}" "È")
    ("{\\\\'E}" "É")
    ("{\\\\^E}" "Ê")
    ("{\\\\\"I}" "Ï")
    ("{\\\\`I}" "Ì")
    ("{\\\\'I}" "Í")
    ("{\\\\^I}" "Î")
    ("{\\\\\"O}" "Ö")
    ("{\\\\`O}" "Ò")
    ("{\\\\'O}" "Ó")
    ("{\\\\~O}" "Õ")
    ("{\\\\^O}" "Ô")
    ("{\\\\\"U}" "Ü")
    ("{\\\\`U}" "Ù")
    ("{\\\\'U}" "Ú")
    ("{\\\\^U}" "Û")
    ("{\\\\~n}" "ñ")
    ("{\\\\~N}" "Ñ")
    ("{\\\\c c}" "ç")
    ("{\\\\c C}" "Ç")
    ("\\\\\"a" "ä")
    ("\\\\`a" "à")
    ("\\\\'a" "á")
    ("\\\\~a" "ã")
    ("\\\\^a" "â")
    ("\\\\\"e" "ë")
    ("\\\\`e" "è")
    ("\\\\'e" "é")
    ("\\\\^e" "ê")
    ("\\\\\"\\\\i" "ï")
    ("\\\\`\\\\i" "ì")
    ("\\\\'\\\\i" "í")
    ("\\\\^\\\\i" "î")
    ("\\\\\"i" "ï")
    ("\\\\`i" "ì")
    ("\\\\'i" "í")
    ("\\\\^i" "î")
    ("\\\\\"o" "ö")
    ("\\\\`o" "ò")
    ("\\\\'o" "ó")
    ("\\\\~o" "õ")
    ("\\\\^o" "ô")
    ("\\\\\"u" "ü")
    ("\\\\`u" "ù")
    ("\\\\'u" "ú")
    ("\\\\^u" "û")
    ("\\\\\"A" "Ä")
    ("\\\\`A" "À")
    ("\\\\'A" "Á")
    ("\\\\~A" "Ã")
    ("\\\\^A" "Â")
    ("\\\\\"E" "Ë")
    ("\\\\`E" "È")
    ("\\\\'E" "É")
    ("\\\\^E" "Ê")
    ("\\\\\"I" "Ï")
    ("\\\\`I" "Ì")
    ("\\\\'I" "Í")
    ("\\\\^I" "Î")
    ("\\\\\"O" "Ö")
    ("\\\\`O" "Ò")
    ("\\\\'O" "Ó")
    ("\\\\~O" "Õ")
    ("\\\\^O" "Ô")
    ("\\\\\"U" "Ü")
    ("\\\\`U" "Ù")
    ("\\\\'U" "Ú")
    ("\\\\^U" "Û")
    ("\\\\~n" "ñ")
    ("\\\\~N" "Ñ")
    ("\\\\\"{a}" "ä")
    ("\\\\`{a}" "à")
    ("\\\\'{a}" "á")
    ("\\\\~{a}" "ã")
    ("\\\\^{a}" "â")
    ("\\\\\"{e}" "ë")
    ("\\\\`{e}" "è")
    ("\\\\'{e}" "é")
    ("\\\\^{e}" "ê")
    ("\\\\\"{\\\\i}" "ï")
    ("\\\\`{\\\\i}" "ì")
    ("\\\\'{\\\\i}" "í")
    ("\\\\^{\\\\i}" "î")
    ("\\\\\"{i}" "ï")
    ("\\\\`{i}" "ì")
    ("\\\\'{i}" "í")
    ("\\\\^{i}" "î")
    ("\\\\\"{o}" "ö")
    ("\\\\`{o}" "ò")
    ("\\\\'{o}" "ó")
    ("\\\\~{o}" "õ")
    ("\\\\^{o}" "ô")
    ("\\\\\"{u}" "ü")
    ("\\\\`{u}" "ù")
    ("\\\\'{u}" "ú")
    ("\\\\^{u}" "û")
    ("\\\\\"{A}" "Ä")
    ("\\\\`{A}" "À")
    ("\\\\'{A}" "Á")
    ("\\\\~{A}" "Ã")
    ("\\\\^{A}" "Â")
    ("\\\\\"{E}" "Ë")
    ("\\\\`{E}" "È")
    ("\\\\'{E}" "É")
    ("\\\\^{E}" "Ê")
    ("\\\\\"{I}" "Ï")
    ("\\\\`{I}" "Ì")
    ("\\\\'{I}" "Í")
    ("\\\\^{I}" "Î")
    ("\\\\\"{O}" "Ö")
    ("\\\\`{O}" "Ò")
    ("\\\\'{O}" "Ó")
    ("\\\\~{O}" "Õ")
    ("\\\\^{O}" "Ô")
    ("\\\\\"{U}" "Ü")
    ("\\\\`{U}" "Ù")
    ("\\\\'{U}" "Ú")
    ("\\\\^{U}" "Û")
    ("\\\\~{n}" "ñ")
    ("\\\\~{N}" "Ñ")
    ("\\\\c{c}" "ç")
    ("\\\\c{C}" "Ç")
    ("{\\\\ss}" "ß")
    ("{\\\\AE}" "\306")
    ("{\\\\ae}" "\346")
    ("{\\\\AA}" "\305")
    ("{\\\\aa}" "\345")
    ("{\\\\copyright}" "\251")
    ("\\\\copyright{}" "\251")
    ("{\\\\pounds}" "£" )
    ("{\\\\P}" "¶" )
    ("{\\\\S}" "§" )
    ("\\\\pounds{}" "£" )
    ("\\\\P{}" "¶" )
    ("\\\\S{}" "§" )
    ("{\\?`}" "¿")
    ("{!`}" "¡")
    ("\\?`" "¿")
    ("!`" "¡")
    )
  "Translation table for translating TeX sequences to ISO 8859-1 characters. 
This table is not exhaustive (and due to TeX's power can never be). It only
contains commonly used sequences.")

(defun iso-tex2iso ()
 "Translate TeX sequences to ISO 8859-1 characters."
 (interactive)
 (iso-translate-conventions iso-tex2iso-trans-tab))

(defvar iso-gtex2iso-trans-tab
  '(
    ("{\\\\\"a}" "ä")
    ("{\\\\`a}" "à")
    ("{\\\\'a}" "á")
    ("{\\\\~a}" "ã")
    ("{\\\\^a}" "â")
    ("{\\\\\"e}" "ë")
    ("{\\\\`e}" "è")
    ("{\\\\'e}" "é")
    ("{\\\\^e}" "ê")
    ("{\\\\\"\\\\i}" "ï")
    ("{\\\\`\\\\i}" "ì")
    ("{\\\\'\\\\i}" "í")
    ("{\\\\^\\\\i}" "î")
    ("{\\\\\"i}" "ï")
    ("{\\\\`i}" "ì")
    ("{\\\\'i}" "í")
    ("{\\\\^i}" "î")
    ("{\\\\\"o}" "ö")
    ("{\\\\`o}" "ò")
    ("{\\\\'o}" "ó")
    ("{\\\\~o}" "õ")
    ("{\\\\^o}" "ô")
    ("{\\\\\"u}" "ü")
    ("{\\\\`u}" "ù")
    ("{\\\\'u}" "ú")
    ("{\\\\^u}" "û")
    ("{\\\\\"A}" "Ä")
    ("{\\\\`A}" "À")
    ("{\\\\'A}" "Á")
    ("{\\\\~A}" "Ã")
    ("{\\\\^A}" "Â")
    ("{\\\\\"E}" "Ë")
    ("{\\\\`E}" "È")
    ("{\\\\'E}" "É")
    ("{\\\\^E}" "Ê")
    ("{\\\\\"I}" "Ï")
    ("{\\\\`I}" "Ì")
    ("{\\\\'I}" "Í")
    ("{\\\\^I}" "Î")
    ("{\\\\\"O}" "Ö")
    ("{\\\\`O}" "Ò")
    ("{\\\\'O}" "Ó")
    ("{\\\\~O}" "Õ")
    ("{\\\\^O}" "Ô")
    ("{\\\\\"U}" "Ü")
    ("{\\\\`U}" "Ù")
    ("{\\\\'U}" "Ú")
    ("{\\\\^U}" "Û")
    ("{\\\\~n}" "ñ")
    ("{\\\\~N}" "Ñ")
    ("{\\\\c c}" "ç")
    ("{\\\\c C}" "Ç")
    ("\\\\\"a" "ä")
    ("\\\\`a" "à")
    ("\\\\'a" "á")
    ("\\\\~a" "ã")
    ("\\\\^a" "â")
    ("\\\\\"e" "ë")
    ("\\\\`e" "è")
    ("\\\\'e" "é")
    ("\\\\^e" "ê")
    ("\\\\\"\\\\i" "ï")
    ("\\\\`\\\\i" "ì")
    ("\\\\'\\\\i" "í")
    ("\\\\^\\\\i" "î")
    ("\\\\\"i" "ï")
    ("\\\\`i" "ì")
    ("\\\\'i" "í")
    ("\\\\^i" "î")
    ("\\\\\"o" "ö")
    ("\\\\`o" "ò")
    ("\\\\'o" "ó")
    ("\\\\~o" "õ")
    ("\\\\^o" "ô")
    ("\\\\\"u" "ü")
    ("\\\\`u" "ù")
    ("\\\\'u" "ú")
    ("\\\\^u" "û")
    ("\\\\\"A" "Ä")
    ("\\\\`A" "À")
    ("\\\\'A" "Á")
    ("\\\\~A" "Ã")
    ("\\\\^A" "Â")
    ("\\\\\"E" "Ë")
    ("\\\\`E" "È")
    ("\\\\'E" "É")
    ("\\\\^E" "Ê")
    ("\\\\\"I" "Ï")
    ("\\\\`I" "Ì")
    ("\\\\'I" "Í")
    ("\\\\^I" "Î")
    ("\\\\\"O" "Ö")
    ("\\\\`O" "Ò")
    ("\\\\'O" "Ó")
    ("\\\\~O" "Õ")
    ("\\\\^O" "Ô")
    ("\\\\\"U" "Ü")
    ("\\\\`U" "Ù")
    ("\\\\'U" "Ú")
    ("\\\\^U" "Û")
    ("\\\\~n" "ñ")
    ("\\\\~N" "Ñ")
    ("\\\\\"{a}" "ä")
    ("\\\\`{a}" "à")
    ("\\\\'{a}" "á")
    ("\\\\~{a}" "ã")
    ("\\\\^{a}" "â")
    ("\\\\\"{e}" "ë")
    ("\\\\`{e}" "è")
    ("\\\\'{e}" "é")
    ("\\\\^{e}" "ê")
    ("\\\\\"{\\\\i}" "ï")
    ("\\\\`{\\\\i}" "ì")
    ("\\\\'{\\\\i}" "í")
    ("\\\\^{\\\\i}" "î")
    ("\\\\\"{i}" "ï")
    ("\\\\`{i}" "ì")
    ("\\\\'{i}" "í")
    ("\\\\^{i}" "î")
    ("\\\\\"{o}" "ö")
    ("\\\\`{o}" "ò")
    ("\\\\'{o}" "ó")
    ("\\\\~{o}" "õ")
    ("\\\\^{o}" "ô")
    ("\\\\\"{u}" "ü")
    ("\\\\`{u}" "ù")
    ("\\\\'{u}" "ú")
    ("\\\\^{u}" "û")
    ("\\\\\"{A}" "Ä")
    ("\\\\`{A}" "À")
    ("\\\\'{A}" "Á")
    ("\\\\~{A}" "Ã")
    ("\\\\^{A}" "Â")
    ("\\\\\"{E}" "Ë")
    ("\\\\`{E}" "È")
    ("\\\\'{E}" "É")
    ("\\\\^{E}" "Ê")
    ("\\\\\"{I}" "Ï")
    ("\\\\`{I}" "Ì")
    ("\\\\'{I}" "Í")
    ("\\\\^{I}" "Î")
    ("\\\\\"{O}" "Ö")
    ("\\\\`{O}" "Ò")
    ("\\\\'{O}" "Ó")
    ("\\\\~{O}" "Õ")
    ("\\\\^{O}" "Ô")
    ("\\\\\"{U}" "Ü")
    ("\\\\`{U}" "Ù")
    ("\\\\'{U}" "Ú")
    ("\\\\^{U}" "Û")
    ("\\\\~{n}" "ñ")
    ("\\\\~{N}" "Ñ")
    ("\\\\c{c}" "ç")
    ("\\\\c{C}" "Ç")
    ("{\\\\ss}" "ß")
    ("{\\\\AE}" "\306")
    ("{\\\\ae}" "\346")
    ("{\\\\AA}" "\305")
    ("{\\\\aa}" "\345")
    ("{\\\\copyright}" "\251")
    ("\\\\copyright{}" "\251")
    ("{\\\\pounds}" "£" )
    ("{\\\\P}" "¶" )
    ("{\\\\S}" "§" )
    ("\\\\pounds{}" "£" )
    ("\\\\P{}" "¶" )
    ("\\\\S{}" "§" )
    ("?`" "¿")
    ("!`" "¡")
    ("{?`}" "¿")
    ("{!`}" "¡")
    ("\"a" "ä")
    ("\"A" "Ä")
    ("\"o" "ö")
    ("\"O" "Ö")
    ("\"u" "ü")
    ("\"U" "Ü")
    ("\"s" "ß")
    ("\\\\3" "ß")
    )
  "Translation table for translating German TeX sequences to ISO 8859-1.
This table is not exhaustive (and due to TeX's power can never be).  It only
contains commonly used sequences.")

(defvar iso-iso2gtex-trans-tab
  '(
    ("ä" "\"a")
    ("à" "{\\\\`a}")
    ("á" "{\\\\'a}")
    ("ã" "{\\\\~a}")
    ("â" "{\\\\^a}")
    ("ë" "{\\\\\"e}")
    ("è" "{\\\\`e}")
    ("é" "{\\\\'e}")
    ("ê" "{\\\\^e}")
    ("ï" "{\\\\\"\\\\i}")
    ("ì" "{\\\\`\\\\i}")
    ("í" "{\\\\'\\\\i}")
    ("î" "{\\\\^\\\\i}")
    ("ö" "\"o")
    ("ò" "{\\\\`o}")
    ("ó" "{\\\\'o}")
    ("õ" "{\\\\~o}")
    ("ô" "{\\\\^o}")
    ("ü" "\"u")
    ("ù" "{\\\\`u}")
    ("ú" "{\\\\'u}")
    ("û" "{\\\\^u}")
    ("Ä" "\"A")
    ("À" "{\\\\`A}")
    ("Á" "{\\\\'A}")
    ("Ã" "{\\\\~A}")
    ("Â" "{\\\\^A}")
    ("Ë" "{\\\\\"E}")
    ("È" "{\\\\`E}")
    ("É" "{\\\\'E}")
    ("Ê" "{\\\\^E}")
    ("Ï" "{\\\\\"I}")
    ("Ì" "{\\\\`I}")
    ("Í" "{\\\\'I}")
    ("Î" "{\\\\^I}")
    ("Ö" "\"O")
    ("Ò" "{\\\\`O}")
    ("Ó" "{\\\\'O}")
    ("Õ" "{\\\\~O}")
    ("Ô" "{\\\\^O}")
    ("Ü" "\"U")
    ("Ù" "{\\\\`U}")
    ("Ú" "{\\\\'U}")
    ("Û" "{\\\\^U}")
    ("ñ" "{\\\\~n}")
    ("Ñ" "{\\\\~N}")
    ("ç" "{\\\\c c}")
    ("Ç" "{\\\\c C}")
    ("ß" "\"s")
    ("\306" "{\\\\AE}")
    ("\346" "{\\\\ae}")
    ("\305" "{\\\\AA}")
    ("\345" "{\\\\aa}")
    ("\251" "{\\\\copyright}")
    ("£" "{\\\\pounds}")
    ("¶" "{\\\\P}")
    ("§" "{\\\\S}")
    ("¿" "{?`}")
    ("¡" "{!`}")
    )
  "Translation table for translating ISO 8859-1 characters to German TeX.")

(defun iso-gtex2iso ()
 "Translate German TeX sequences to ISO 8859-1 characters."
 (interactive)
 (iso-translate-conventions iso-gtex2iso-trans-tab))


(defun iso-iso2gtex ()
 "Translate ISO 8859-1 characters to German TeX sequences."
 (interactive)
 (iso-translate-conventions iso-iso2gtex-trans-tab))


(defun iso-german-tex-p ()
 "Check if tex buffer is German LaTeX."
 (save-excursion
   (save-restriction
     (widen)
     (goto-char (point-min))
     (re-search-forward "\\\\documentstyle\\[.*german.*\\]" nil t))))

(defun iso-fix-iso2tex ()
  "Turn ISO 8859-1 (aka. ISO Latin-1) buffer into TeX sequences.
If German TeX is used, German TeX sequences are generated."
  (if (or (equal major-mode 'latex-mode)
	  (equal major-mode 'LaTeX-mode)) ; AucTeX wants this
      (if (iso-german-tex-p)
	  (iso-iso2gtex)
	(iso-iso2tex)))
  (if (or (equal major-mode 'tex-mode)
	  (equal major-mode 'TeX-mode) ; AucTeX wants this
	  (equal major-mode 'plain-tex-mode))
      (iso-iso2tex)))

(defun iso-fix-tex2iso ()
  "Turn TeX sequences into ISO 8859-1 (aka. ISO Latin-1) characters.
This function recognizes German TeX buffers."
  (if (or (equal major-mode 'latex-mode)
	  (equal major-mode 'Latex-mode)) ; AucTeX wants this
      (if (iso-german-tex-p)
	  (iso-gtex2iso)
	(iso-tex2iso)))
  (if (or (equal major-mode 'tex-mode)
	  (equal major-mode 'TeX-mode)  ; AucTeX wants this
	  (equal major-mode 'plain-tex-mode))
      (iso-tex2iso)))

(defun iso-cvt-ffh ()
  "find-file-hook for iso-cvt.el."
  (iso-fix-tex2iso)
  (set-buffer-modified-p nil))

(defun iso-cvt-wfh ()
  "write file hook for iso-cvt.el."
  (iso-fix-iso2tex))

(defun iso-cvt-ash ()
  "after save hook for iso-cvt.el."
  (iso-fix-tex2iso)
  (set-buffer-modified-p nil))

(add-hook 'find-file-hooks 'iso-cvt-ffh)
(add-hook 'write-file-hooks 'iso-cvt-wfh)
(add-hook 'after-save-hook 'iso-cvt-ash)

;;; iso-cvt.el ends here