;;; iso-cvt.-el -- translate ISO 8859-1 from/to various encodings ;; This file was formerly called gm-lingo.el. ;; Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc. ;; Author: Michael Gschwind ;; 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 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 ; 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) (require 'format) (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 (from to trans-tab) "Use the translation table TRANS-TAB to translate the current buffer." (save-excursion (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)))) (defun iso-spanish (from to) "Translate net conventions for Spanish to ISO 8859-1." (interactive) (iso-translate-conventions from to 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 (from to) "Translate net conventions for German to ISO 8859-1." (interactive) (iso-translate-conventions from to 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 (from to) "Translate ISO 8859-1 characters to TeX sequences." (interactive) (iso-translate-conventions from to 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 (from to) "Translate TeX sequences to ISO 8859-1 characters." (interactive) (iso-translate-conventions from to 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 (from to) "Translate German TeX sequences to ISO 8859-1 characters." (interactive) (iso-translate-conventions from to iso-gtex2iso-trans-tab)) (defun iso-iso2gtex (from to) "Translate ISO 8859-1 characters to German TeX sequences." (interactive) (iso-translate-conventions from to iso-iso2gtex-trans-tab)) (defvar iso-iso2duden-trans-tab '(("ä" "ae") ("Ä" "Ae") ("ö" "oe") ("Ö" "Oe") ("ü" "ue") ("Ü" "Ue") ("ß" "ss"))) (defun iso-iso2duden (from to) "Translate ISO 8859-1 characters to German TeX sequences." (interactive) (iso-translate-conventions from to iso-iso2duden-trans-tab)) (defun iso-cvt-read-only () (interactive) (error "This format is read-only; specify another format for writing")) (defun iso-cvt-write-only () (interactive) (error "This format is write-only")) (defun iso-cvt-define-menu () "Add submenus to the Files menu, to convert to and from various formats." (interactive) (define-key menu-bar-files-menu [load-as-separator] '("--")) (define-key menu-bar-files-menu [load-as] '("Load As..." . load-as)) (defvar load-as-menu-map (make-sparse-keymap "Load As...")) (fset 'load-as load-as-menu-map) ;;(define-key menu-bar-files-menu [insert-as] '("Insert As..." . insert-as)) (defvar insert-as-menu-map (make-sparse-keymap "Insert As...")) (fset 'insert-as insert-as-menu-map) (define-key menu-bar-files-menu [write-as] '("Write As..." . write-as)) (defvar write-as-menu-map (make-sparse-keymap "Write As...")) (fset 'write-as write-as-menu-map) (define-key menu-bar-files-menu [translate-separator] '("--")) (define-key menu-bar-files-menu [translate-to] '("Translate to..." . translate-to)) (defvar translate-to-menu-map (make-sparse-keymap "Translate to...")) (fset 'translate-to translate-to-menu-map) (define-key menu-bar-files-menu [translate-from] '("Translate from..." . translate-from)) (defvar translate-from-menu-map (make-sparse-keymap "Translate from...")) (fset 'translate-from translate-from-menu-map) (let ((file-types (reverse format-alist)) name str-name) (while file-types (setq name (car (car file-types)) str-name (car (cdr (car file-types))) file-types (cdr file-types)) (if (stringp str-name) (progn (define-key load-as-menu-map (vector name) (cons str-name (list 'lambda '(file) (list 'interactive (format "FFind file (as %s): " name)) (list 'format-find-file 'file (list 'quote name))))) (define-key insert-as-menu-map (vector name) (cons str-name (list 'lambda '(file) (list 'interactive (format "FInsert file (as %s): " name)) (list 'format-insert-file 'file (list 'quote name))))) (define-key write-as-menu-map (vector name) (cons str-name (list 'lambda '(file) (list 'interactive (format "FWrite file (as %s): " name)) (list 'format-write-file 'file (list 'quote (list name)))))) (define-key translate-to-menu-map (vector name) (cons str-name (list 'lambda '() '(interactive) (list 'format-encode-buffer (list 'quote name))))) (define-key translate-from-menu-map (vector name) (cons str-name (list 'lambda '() '(interactive) (list 'format-decode-buffer (list 'quote (list name)))))) ))))) ;;; iso-cvt.el ends here