(pc-select-selection-keys-only, pc-selection-mode): Fix spellings in docstrings.
[bpt/emacs.git] / lisp / international / iso-cvt.el
index 7b8eab6..f896773 100644 (file)
@@ -1,6 +1,8 @@
-;; iso-cvt.el -- translate to ISO 8859-1 from/to net/TeX conventions
-;; Copyright © 1993 Free Software Foundation, Inc.
-;; Was formerly called gm-lingo.el.
+;;; iso-cvt.el --- translate ISO 8859-1 from/to various encodings -*- coding: iso-latin-1 -*-
+;; This file was formerly called gm-lingo.el.
+
+;; Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2003, 2004
+;;   Free Software Foundation, Inc.
 
 ;; Author: Michael Gschwind <mike@vlsivie.tuwien.ac.at>
 ;; Keywords: tex, iso, latin, i18n
 ;; 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, 675 Mass Ave, Cambridge, MA 02139, USA.
-
-;;; Commentary: 
-;; This lisp code server 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 umlaute 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 certains news groups and translates all articles from 
-; those groups. 
-;
-; Cover more cases for translation (There is an infinite number of ways to 
+;; 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 is a general framework for translating various
+;; representations of the same data.
+;; among other things it can be used to translate TeX, HTML, and compressed
+;; files to ISO 8859-1.  It can also be used to translate different charsets
+;; such as IBM PC, Macintosh or HP Roman8.
+;; Note that many translations use the GNU recode tool to do the actual
+;; conversion.  So you might want to install that tool to get the full
+;; benefit of iso-cvt.el
+
+; TO DO:
+; 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 
+; 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
+; can get the ISO 8859-1 FAQ via anonymous ftp from
+; ftp.vlsivie.tuwien.ac.at in /pub/8bit/FAQ-ISO-8859-1
 
 ;;; Code:
 
-(provide 'iso-cvt)
-
 (defvar iso-spanish-trans-tab
   '(
     ("~n" "ñ")
     )
   "Spanish translation table.")
 
-(defun iso-translate-conventions (trans-tab)
+(defun iso-translate-conventions (from to trans-tab)
   "Use the translation table TRANS-TAB to translate the current buffer."
   (save-excursion
-    (widen)
-    (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))
+    (save-restriction
+      (narrow-to-region from to)
+      (goto-char from)
+      (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)))))
+      (point-max))))
+
+;;;###autoload
+(defun iso-spanish (from to &optional buffer)
+  "Translate net conventions for Spanish to ISO 8859-1.
+The region between FROM and TO is translated using the table TRANS-TAB.
+Optional arg BUFFER is ignored (for use in `format-alist')."
+  (interactive "*r")
+  (iso-translate-conventions from to iso-spanish-trans-tab))
 
 (defvar iso-aggressive-german-trans-tab
   '(
     ("\"s" "ß")
     ("\\\\3" "ß")
     )
-  "German translation table. 
-This table uses an aggressive translation approach and may translate 
-erroneously translate too much.")
+  "German translation table.
+This table uses an aggressive translation approach and may erroneously
+translate too much.")
 
 (defvar iso-conservative-german-trans-tab
   '(
@@ -130,18 +116,20 @@ erroneously translate too much.")
     ("\\([-a-zA-Z\"`]\\)\\\\3" "\\1ß")
     )
   "German translation table.
-This table uses a conservative translation approach and may translate too 
+This table uses a conservative translation approach and may translate too
 little.")
 
-
-(defvar iso-german-trans-tab iso-aggressive-german-trans-tab 
+(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))
+;;;###autoload
+(defun iso-german (from to &optional buffer)
+ "Translate net conventions for German to ISO 8859-1.
+The region between FROM and TO is translated using the table TRANS-TAB.
+Optional arg BUFFER is ignored (for use in `format-alist')."
+ (interactive "*r")
+ (iso-translate-conventions from to iso-german-trans-tab))
+
 (defvar iso-iso2tex-trans-tab
   '(
     ("ä" "{\\\\\"a}")
@@ -193,19 +181,26 @@ little.")
     ("ç" "{\\\\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))
-
+;;;###autoload
+(defun iso-iso2tex (from to &optional buffer)
+ "Translate ISO 8859-1 characters to TeX sequences.
+The region between FROM and TO is translated using the table TRANS-TAB.
+Optional arg BUFFER is ignored (for use in `format-alist')."
+ (interactive "*r")
+ (iso-translate-conventions from to iso-iso2tex-trans-tab))
 
 (defvar iso-tex2iso-trans-tab
   '(
@@ -261,6 +256,62 @@ little.")
     ("{\\\\~N}" "Ñ")
     ("{\\\\c c}" "ç")
     ("{\\\\c C}" "Ç")
+    ("\\\\\"a" "ä")
+    ("\\\\`a" "à")
+    ("\\\\'a" "á")
+    ("\\\\~a" "ã")
+    ("\\\\^a" "â")
+    ("\\\\\"e" "ë")
+    ("\\\\`e" "è")
+    ("\\\\'e" "é")
+    ("\\\\^e" "ê")
+    ;; Discard spaces and/or one EOF after macro \i.
+    ;; Converting it back will use braces.
+    ("\\\\\"\\\\i *\n\n" "ï\n\n")
+    ("\\\\\"\\\\i *\n?" "ï")
+    ("\\\\`\\\\i *\n\n" "ì\n\n")
+    ("\\\\`\\\\i *\n?" "ì")
+    ("\\\\'\\\\i *\n\n" "í\n\n")
+    ("\\\\'\\\\i *\n?" "í")
+    ("\\\\^\\\\i *\n\n" "î\n\n")
+    ("\\\\^\\\\i *\n?" "î")
+    ("\\\\\"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}" "á")
@@ -314,19 +365,34 @@ little.")
     ("\\\\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
+  "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))
+;;;###autoload
+(defun iso-tex2iso (from to &optional buffer)
+ "Translate TeX sequences to ISO 8859-1 characters.
+The region between FROM and TO is translated using the table TRANS-TAB.
+Optional arg BUFFER is ignored (for use in `format-alist')."
+ (interactive "*r")
+ (iso-translate-conventions from to iso-tex2iso-trans-tab))
 
 (defvar iso-gtex2iso-trans-tab
   '(
@@ -382,6 +448,56 @@ contains commonly used sequences.")
     ("{\\\\~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}" "á")
@@ -435,6 +551,18 @@ contains commonly used sequences.")
     ("\\\\c{c}" "ç")
     ("\\\\c{C}" "Ç")
     ("{\\\\ss}" "ß")
+    ("{\\\\AE}" "\306")
+    ("{\\\\ae}" "\346")
+    ("{\\\\AA}" "\305")
+    ("{\\\\aa}" "\345")
+    ("{\\\\copyright}" "\251")
+    ("\\\\copyright{}" "\251")
+    ("{\\\\pounds}" "£" )
+    ("{\\\\P}" "¶" )
+    ("{\\\\S}" "§" )
+    ("\\\\pounds{}" "£" )
+    ("\\\\P{}" "¶" )
+    ("\\\\S{}" "§" )
     ("?`" "¿")
     ("!`" "¡")
     ("{?`}" "¿")
@@ -503,70 +631,272 @@ contains commonly used sequences.")
     ("ç" "{\\\\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
-   (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
-      (iso-iso2tex)))
-
-(defun iso-fix-tex2iso ()
-  "Turn TeX sequences into ISO 8859-1 (aka. ISO Latin-1) characters.
-This function recognices 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
-      (iso-tex2iso)))
-
-(defun iso-cvt-ffh ()
-  "find-file-hook for iso-cvt-cvt.el."
-  (iso-fix-tex2iso)
-  (set-buffer-modified-p nil))
-
-(defun iso-cvt-wfh ()
-  "write file hook for iso-cvt-cvt.el."
-  (iso-fix-iso2tex))
-
-(defun iso-cvt-ash ()
-  "after save hook for iso-cvt-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)
+;;;###autoload
+(defun iso-gtex2iso (from to &optional buffer)
+ "Translate German TeX sequences to ISO 8859-1 characters.
+The region between FROM and TO is translated using the table TRANS-TAB.
+Optional arg BUFFER is ignored (for use in `format-alist')."
+ (interactive "*r")
+ (iso-translate-conventions from to iso-gtex2iso-trans-tab))
+
+;;;###autoload
+(defun iso-iso2gtex (from to &optional buffer)
+ "Translate ISO 8859-1 characters to German TeX sequences.
+The region between FROM and TO is translated using the table TRANS-TAB.
+Optional arg BUFFER is ignored (for use in `format-alist')."
+ (interactive "*r")
+ (iso-translate-conventions from to iso-iso2gtex-trans-tab))
+
+(defvar iso-iso2duden-trans-tab
+  '(("ä" "ae")
+    ("Ä" "Ae")
+    ("ö" "oe")
+    ("Ö" "Oe")
+    ("ü" "ue")
+    ("Ü" "Ue")
+    ("ß" "ss")))
+
+;;;###autoload
+(defun iso-iso2duden (from to &optional buffer)
+ "Translate ISO 8859-1 characters to German TeX sequences.
+The region between FROM and TO is translated using the table TRANS-TAB.
+Optional arg BUFFER is ignored (for use in `format-alist')."
+ (interactive "*r")
+ (iso-translate-conventions from to iso-iso2duden-trans-tab))
+
+(defvar iso-iso2sgml-trans-tab
+  '(("À" "&Agrave;")
+    ("Á" "&Aacute;")
+    ("Â" "&Acirc;")
+    ("Ã" "&Atilde;")
+    ("Ä" "&Auml;")
+    ("Å" "&Aring;")
+    ("Æ" "&AElig;")
+    ("Ç" "&Ccedil;")
+    ("È" "&Egrave;")
+    ("É" "&Eacute;")
+    ("Ê" "&Ecirc;")
+    ("Ë" "&Euml;")
+    ("Ì" "&Igrave;")
+    ("Í" "&Iacute;")
+    ("Î" "&Icirc;")
+    ("Ï" "&Iuml;")
+    ("Ð" "&ETH;")
+    ("Ñ" "&Ntilde;")
+    ("Ò" "&Ograve;")
+    ("Ó" "&Oacute;")
+    ("Ô" "&Ocirc;")
+    ("Õ" "&Otilde;")
+    ("Ö" "&Ouml;")
+    ("Ø" "&Oslash;")
+    ("Ù" "&Ugrave;")
+    ("Ú" "&Uacute;")
+    ("Û" "&Ucirc;")
+    ("Ü" "&Uuml;")
+    ("Ý" "&Yacute;")
+    ("Þ" "&THORN;")
+    ("ß" "&szlig;")
+    ("à" "&agrave;")
+    ("á" "&aacute;")
+    ("â" "&acirc;")
+    ("ã" "&atilde;")
+    ("ä" "&auml;")
+    ("å" "&aring;")
+    ("æ" "&aelig;")
+    ("ç" "&ccedil;")
+    ("è" "&egrave;")
+    ("é" "&eacute;")
+    ("ê" "&ecirc;")
+    ("ë" "&euml;")
+    ("ì" "&igrave;")
+    ("í" "&iacute;")
+    ("î" "&icirc;")
+    ("ï" "&iuml;")
+    ("ð" "&eth;")
+    ("ñ" "&ntilde;")
+    ("ò" "&ograve;")
+    ("ó" "&oacute;")
+    ("ô" "&ocirc;")
+    ("õ" "&otilde;")
+    ("ö" "&ouml;")
+    ("ø" "&oslash;")
+    ("ù" "&ugrave;")
+    ("ú" "&uacute;")
+    ("û" "&ucirc;")
+    ("ü" "&uuml;")
+    ("ý" "&yacute;")
+    ("þ" "&thorn;")
+    ("ÿ" "&yuml;")))
+
+(defvar iso-sgml2iso-trans-tab
+  '(("&Agrave;" "À")
+    ("&Aacute;" "Á")
+    ("&Acirc;" "Â")
+    ("&Atilde;" "Ã")
+    ("&Auml;" "Ä")
+    ("&Aring;" "Å")
+    ("&AElig;" "Æ")
+    ("&Ccedil;" "Ç")
+    ("&Egrave;" "È")
+    ("&Eacute;" "É")
+    ("&Ecirc;" "Ê")
+    ("&Euml;" "Ë")
+    ("&Igrave;" "Ì")
+    ("&Iacute;" "Í")
+    ("&Icirc;" "Î")
+    ("&Iuml;" "Ï")
+    ("&ETH;" "Ð")
+    ("&Ntilde;" "Ñ")
+    ("&Ograve;" "Ò")
+    ("&Oacute;" "Ó")
+    ("&Ocirc;" "Ô")
+    ("&Otilde;" "Õ")
+    ("&Ouml;" "Ö")
+    ("&Oslash;" "Ø")
+    ("&Ugrave;" "Ù")
+    ("&Uacute;" "Ú")
+    ("&Ucirc;" "Û")
+    ("&Uuml;" "Ü")
+    ("&Yacute;" "Ý")
+    ("&THORN;" "Þ")
+    ("&szlig;" "ß")
+    ("&agrave;" "à")
+    ("&aacute;" "á")
+    ("&acirc;" "â")
+    ("&atilde;" "ã")
+    ("&auml;" "ä")
+    ("&aring;" "å")
+    ("&aelig;" "æ")
+    ("&ccedil;" "ç")
+    ("&egrave;" "è")
+    ("&eacute;" "é")
+    ("&ecirc;" "ê")
+    ("&euml;" "ë")
+    ("&igrave;" "ì")
+    ("&iacute;" "í")
+    ("&icirc;" "î")
+    ("&iuml;" "ï")
+    ("&eth;" "ð")
+    ("&ntilde;" "ñ")
+    ("&nbsp;" " ")
+    ("&ograve;" "ò")
+    ("&oacute;" "ó")
+    ("&ocirc;" "ô")
+    ("&otilde;" "õ")
+    ("&ouml;" "ö")
+    ("&oslash;" "ø")
+    ("&ugrave;" "ù")
+    ("&uacute;" "ú")
+    ("&ucirc;" "û")
+    ("&uuml;" "ü")
+    ("&yacute;" "ý")
+    ("&thorn;" "þ")
+    ("&yuml;" "ÿ")))
+
+;;;###autoload
+(defun iso-iso2sgml (from to &optional buffer)
+ "Translate ISO 8859-1 characters in the region to SGML entities.
+The entities used are from \"ISO 8879:1986//ENTITIES Added Latin 1//EN\".
+Optional arg BUFFER is ignored (for use in `format-alist')."
+ (interactive "*r")
+ (iso-translate-conventions from to iso-iso2sgml-trans-tab))
+
+;;;###autoload
+(defun iso-sgml2iso (from to &optional buffer)
+ "Translate SGML entities in the region to ISO 8859-1 characters.
+The entities used are from \"ISO 8879:1986//ENTITIES Added Latin 1//EN\".
+Optional arg BUFFER is ignored (for use in `format-alist')."
+ (interactive "*r")
+ (iso-translate-conventions from to iso-sgml2iso-trans-tab))
+
+;;;###autoload
+(defun iso-cvt-read-only ()
+  "Warn that format is read-only."
+  (interactive)
+  (error "This format is read-only; specify another format for writing"))
+
+;;;###autoload
+(defun iso-cvt-write-only ()
+  "Warn that format is write-only."
+  (interactive)
+  (error "This format is write-only"))
+
+;;;###autoload
+(defun iso-cvt-define-menu ()
+  "Add submenus to the File menu, to convert to and from various formats."
+  (interactive)
+
+  (let ((load-as-menu-map (make-sparse-keymap "Load As..."))
+       (insert-as-menu-map (make-sparse-keymap "Insert As..."))
+       (write-as-menu-map (make-sparse-keymap "Write As..."))
+       (translate-to-menu-map (make-sparse-keymap "Translate to..."))
+       (translate-from-menu-map (make-sparse-keymap "Translate from..."))
+       (menu menu-bar-file-menu))
+       
+    (define-key menu [load-as-separator] '("--"))
+
+    (define-key menu [load-as] '("Load As..." . iso-cvt-load-as))
+    (fset 'iso-cvt-load-as load-as-menu-map)
+
+    ;;(define-key menu [insert-as] '("Insert As..." . iso-cvt-insert-as))
+    (fset 'iso-cvt-insert-as insert-as-menu-map)
+
+    (define-key menu [write-as] '("Write As..." . iso-cvt-write-as))
+    (fset 'iso-cvt-write-as write-as-menu-map)
+
+    (define-key menu [translate-separator] '("--"))
+
+    (define-key menu [translate-to] '("Translate to..." . iso-cvt-translate-to))
+    (fset 'iso-cvt-translate-to translate-to-menu-map)
+
+    (define-key menu [translate-from] '("Translate from..." . iso-cvt-translate-from))
+    (fset 'iso-cvt-translate-from translate-from-menu-map)
+
+    (dolist (file-type (reverse format-alist))
+      (let ((name (car file-type))
+           (str-name (cadr file-type)))
+       (if (stringp str-name)
+           (progn
+             (define-key load-as-menu-map (vector name)
+               (cons str-name
+                     `(lambda (file)
+                        (interactive ,(format "FFind file (as %s): " name))
+                        (format-find-file file ',name))))
+             (define-key insert-as-menu-map (vector name)
+               (cons str-name
+                     `(lambda (file)
+                        (interactive (format "FInsert file (as %s): " ,name))
+                        (format-insert-file file ',name))))
+             (define-key write-as-menu-map (vector name)
+               (cons str-name
+                     `(lambda (file)
+                        (interactive (format "FWrite file (as %s): " ,name))
+                        (format-write-file file ',name))))
+             (define-key translate-to-menu-map (vector name)
+               (cons str-name
+                     `(lambda ()
+                        (interactive)
+                        (format-encode-buffer ',name))))
+             (define-key translate-from-menu-map (vector name)
+               (cons str-name
+                     `(lambda ()
+                        (interactive)
+                        (format-decode-buffer ',name))))))))))
+
+(provide 'iso-cvt)
 
+;; arch-tag: 64ae843f-ed0e-43e1-ba50-ffd581b90840
 ;;; iso-cvt.el ends here