1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-07 15:21:46 +00:00
emacs/lisp/international/iso-cvt.el
2008-01-07 01:26:07 +00:00

911 lines
23 KiB
EmacsLisp
Raw Blame History

;;; 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, 2001,
;; 2002, 2003, 2004, 2005, 2006, 2007, 2008 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 3, 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., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, 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/8bit/FAQ-ISO-8859-1
;;; Code:
(defvar iso-spanish-trans-tab
'(
("~n" "<EFBFBD>")
("\([a-zA-Z]\)#" "\\1<EFBFBD>")
("~N" "<EFBFBD>")
("\\([-a-zA-Z\"`]\\)\"u" "\\1<EFBFBD>")
("\\([-a-zA-Z\"`]\\)\"U" "\\1<EFBFBD>")
("\\([-a-zA-Z]\\)'o" "\\1<EFBFBD>")
("\\([-a-zA-Z]\\)'O" "\\<EFBFBD>")
("\\([-a-zA-Z]\\)'e" "\\1<EFBFBD>")
("\\([-a-zA-Z]\\)'E" "\\1<EFBFBD>")
("\\([-a-zA-Z]\\)'a" "\\1<EFBFBD>")
("\\([-a-zA-Z]\\)'A" "\\1A")
("\\([-a-zA-Z]\\)'i" "\\1<EFBFBD>")
("\\([-a-zA-Z]\\)'I" "\\1<EFBFBD>")
)
"Spanish translation table.")
(defun iso-translate-conventions (from to trans-tab)
"Translate between FROM and TO using the translation table TRANS-TAB."
(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))))
;;;###autoload
(defun iso-spanish (from to &optional buffer)
"Translate net conventions for Spanish to ISO 8859-1.
Translate the region between FROM and TO using the table
`iso-spanish-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
'(
("\"a" "<EFBFBD>")
("\"A" "<EFBFBD>")
("\"o" "<EFBFBD>")
("\"O" "<EFBFBD>")
("\"u" "<EFBFBD>")
("\"U" "<EFBFBD>")
("\"s" "<EFBFBD>")
("\\\\3" "<EFBFBD>")
)
"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<EFBFBD>")
("\\([-a-zA-Z\"`]\\)\"A" "\\1<EFBFBD>")
("\\([-a-zA-Z\"`]\\)\"o" "\\1<EFBFBD>")
("\\([-a-zA-Z\"`]\\)\"O" "\\1<EFBFBD>")
("\\([-a-zA-Z\"`]\\)\"u" "\\1<EFBFBD>")
("\\([-a-zA-Z\"`]\\)\"U" "\\1<EFBFBD>")
("\\([-a-zA-Z\"`]\\)\"s" "\\1<EFBFBD>")
("\\([-a-zA-Z\"`]\\)\\\\3" "\\1<EFBFBD>")
)
"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.")
;;;###autoload
(defun iso-german (from to &optional buffer)
"Translate net conventions for German to ISO 8859-1.
Translate the region FROM and TO using the table
`iso-german-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
'(
("<EFBFBD>" "{\\\\\"a}")
("<EFBFBD>" "{\\\\`a}")
("<EFBFBD>" "{\\\\'a}")
("<EFBFBD>" "{\\\\~a}")
("<EFBFBD>" "{\\\\^a}")
("<EFBFBD>" "{\\\\\"e}")
("<EFBFBD>" "{\\\\`e}")
("<EFBFBD>" "{\\\\'e}")
("<EFBFBD>" "{\\\\^e}")
("<EFBFBD>" "{\\\\\"\\\\i}")
("<EFBFBD>" "{\\\\`\\\\i}")
("<EFBFBD>" "{\\\\'\\\\i}")
("<EFBFBD>" "{\\\\^\\\\i}")
("<EFBFBD>" "{\\\\\"o}")
("<EFBFBD>" "{\\\\`o}")
("<EFBFBD>" "{\\\\'o}")
("<EFBFBD>" "{\\\\~o}")
("<EFBFBD>" "{\\\\^o}")
("<EFBFBD>" "{\\\\\"u}")
("<EFBFBD>" "{\\\\`u}")
("<EFBFBD>" "{\\\\'u}")
("<EFBFBD>" "{\\\\^u}")
("<EFBFBD>" "{\\\\\"A}")
("<EFBFBD>" "{\\\\`A}")
("<EFBFBD>" "{\\\\'A}")
("<EFBFBD>" "{\\\\~A}")
("<EFBFBD>" "{\\\\^A}")
("<EFBFBD>" "{\\\\\"E}")
("<EFBFBD>" "{\\\\`E}")
("<EFBFBD>" "{\\\\'E}")
("<EFBFBD>" "{\\\\^E}")
("<EFBFBD>" "{\\\\\"I}")
("<EFBFBD>" "{\\\\`I}")
("<EFBFBD>" "{\\\\'I}")
("<EFBFBD>" "{\\\\^I}")
("<EFBFBD>" "{\\\\\"O}")
("<EFBFBD>" "{\\\\`O}")
("<EFBFBD>" "{\\\\'O}")
("<EFBFBD>" "{\\\\~O}")
("<EFBFBD>" "{\\\\^O}")
("<EFBFBD>" "{\\\\\"U}")
("<EFBFBD>" "{\\\\`U}")
("<EFBFBD>" "{\\\\'U}")
("<EFBFBD>" "{\\\\^U}")
("<EFBFBD>" "{\\\\~n}")
("<EFBFBD>" "{\\\\~N}")
("<EFBFBD>" "{\\\\c c}")
("<EFBFBD>" "{\\\\c C}")
("<EFBFBD>" "{\\\\ss}")
("\306" "{\\\\AE}")
("\346" "{\\\\ae}")
("\305" "{\\\\AA}")
("\345" "{\\\\aa}")
("\251" "{\\\\copyright}")
("<EFBFBD>" "{\\\\pounds}")
("<EFBFBD>" "{\\\\P}")
("<EFBFBD>" "{\\\\S}")
("<EFBFBD>" "{?`}")
("<EFBFBD>" "{!`}")
)
"Translation table for translating ISO 8859-1 characters to TeX sequences.")
;;;###autoload
(defun iso-iso2tex (from to &optional buffer)
"Translate ISO 8859-1 characters to TeX sequences.
Translate the region between FROM and TO using the table
`iso-iso2tex-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
'(
("{\\\\\"a}" "<EFBFBD>")
("{\\\\`a}" "<EFBFBD>")
("{\\\\'a}" "<EFBFBD>")
("{\\\\~a}" "<EFBFBD>")
("{\\\\^a}" "<EFBFBD>")
("{\\\\\"e}" "<EFBFBD>")
("{\\\\`e}" "<EFBFBD>")
("{\\\\'e}" "<EFBFBD>")
("{\\\\^e}" "<EFBFBD>")
("{\\\\\"\\\\i}" "<EFBFBD>")
("{\\\\`\\\\i}" "<EFBFBD>")
("{\\\\'\\\\i}" "<EFBFBD>")
("{\\\\^\\\\i}" "<EFBFBD>")
("{\\\\\"i}" "<EFBFBD>")
("{\\\\`i}" "<EFBFBD>")
("{\\\\'i}" "<EFBFBD>")
("{\\\\^i}" "<EFBFBD>")
("{\\\\\"o}" "<EFBFBD>")
("{\\\\`o}" "<EFBFBD>")
("{\\\\'o}" "<EFBFBD>")
("{\\\\~o}" "<EFBFBD>")
("{\\\\^o}" "<EFBFBD>")
("{\\\\\"u}" "<EFBFBD>")
("{\\\\`u}" "<EFBFBD>")
("{\\\\'u}" "<EFBFBD>")
("{\\\\^u}" "<EFBFBD>")
("{\\\\\"A}" "<EFBFBD>")
("{\\\\`A}" "<EFBFBD>")
("{\\\\'A}" "<EFBFBD>")
("{\\\\~A}" "<EFBFBD>")
("{\\\\^A}" "<EFBFBD>")
("{\\\\\"E}" "<EFBFBD>")
("{\\\\`E}" "<EFBFBD>")
("{\\\\'E}" "<EFBFBD>")
("{\\\\^E}" "<EFBFBD>")
("{\\\\\"I}" "<EFBFBD>")
("{\\\\`I}" "<EFBFBD>")
("{\\\\'I}" "<EFBFBD>")
("{\\\\^I}" "<EFBFBD>")
("{\\\\\"O}" "<EFBFBD>")
("{\\\\`O}" "<EFBFBD>")
("{\\\\'O}" "<EFBFBD>")
("{\\\\~O}" "<EFBFBD>")
("{\\\\^O}" "<EFBFBD>")
("{\\\\\"U}" "<EFBFBD>")
("{\\\\`U}" "<EFBFBD>")
("{\\\\'U}" "<EFBFBD>")
("{\\\\^U}" "<EFBFBD>")
("{\\\\~n}" "<EFBFBD>")
("{\\\\~N}" "<EFBFBD>")
("{\\\\c c}" "<EFBFBD>")
("{\\\\c C}" "<EFBFBD>")
("\\\\\"a" "<EFBFBD>")
("\\\\`a" "<EFBFBD>")
("\\\\'a" "<EFBFBD>")
("\\\\~a" "<EFBFBD>")
("\\\\^a" "<EFBFBD>")
("\\\\\"e" "<EFBFBD>")
("\\\\`e" "<EFBFBD>")
("\\\\'e" "<EFBFBD>")
("\\\\^e" "<EFBFBD>")
;; Discard spaces and/or one EOF after macro \i.
;; Converting it back will use braces.
("\\\\\"\\\\i *\n\n" "<EFBFBD>\n\n")
("\\\\\"\\\\i *\n?" "<EFBFBD>")
("\\\\`\\\\i *\n\n" "<EFBFBD>\n\n")
("\\\\`\\\\i *\n?" "<EFBFBD>")
("\\\\'\\\\i *\n\n" "<EFBFBD>\n\n")
("\\\\'\\\\i *\n?" "<EFBFBD>")
("\\\\^\\\\i *\n\n" "<EFBFBD>\n\n")
("\\\\^\\\\i *\n?" "<EFBFBD>")
("\\\\\"i" "<EFBFBD>")
("\\\\`i" "<EFBFBD>")
("\\\\'i" "<EFBFBD>")
("\\\\^i" "<EFBFBD>")
("\\\\\"o" "<EFBFBD>")
("\\\\`o" "<EFBFBD>")
("\\\\'o" "<EFBFBD>")
("\\\\~o" "<EFBFBD>")
("\\\\^o" "<EFBFBD>")
("\\\\\"u" "<EFBFBD>")
("\\\\`u" "<EFBFBD>")
("\\\\'u" "<EFBFBD>")
("\\\\^u" "<EFBFBD>")
("\\\\\"A" "<EFBFBD>")
("\\\\`A" "<EFBFBD>")
("\\\\'A" "<EFBFBD>")
("\\\\~A" "<EFBFBD>")
("\\\\^A" "<EFBFBD>")
("\\\\\"E" "<EFBFBD>")
("\\\\`E" "<EFBFBD>")
("\\\\'E" "<EFBFBD>")
("\\\\^E" "<EFBFBD>")
("\\\\\"I" "<EFBFBD>")
("\\\\`I" "<EFBFBD>")
("\\\\'I" "<EFBFBD>")
("\\\\^I" "<EFBFBD>")
("\\\\\"O" "<EFBFBD>")
("\\\\`O" "<EFBFBD>")
("\\\\'O" "<EFBFBD>")
("\\\\~O" "<EFBFBD>")
("\\\\^O" "<EFBFBD>")
("\\\\\"U" "<EFBFBD>")
("\\\\`U" "<EFBFBD>")
("\\\\'U" "<EFBFBD>")
("\\\\^U" "<EFBFBD>")
("\\\\~n" "<EFBFBD>")
("\\\\~N" "<EFBFBD>")
("\\\\\"{a}" "<EFBFBD>")
("\\\\`{a}" "<EFBFBD>")
("\\\\'{a}" "<EFBFBD>")
("\\\\~{a}" "<EFBFBD>")
("\\\\^{a}" "<EFBFBD>")
("\\\\\"{e}" "<EFBFBD>")
("\\\\`{e}" "<EFBFBD>")
("\\\\'{e}" "<EFBFBD>")
("\\\\^{e}" "<EFBFBD>")
("\\\\\"{\\\\i}" "<EFBFBD>")
("\\\\`{\\\\i}" "<EFBFBD>")
("\\\\'{\\\\i}" "<EFBFBD>")
("\\\\^{\\\\i}" "<EFBFBD>")
("\\\\\"{i}" "<EFBFBD>")
("\\\\`{i}" "<EFBFBD>")
("\\\\'{i}" "<EFBFBD>")
("\\\\^{i}" "<EFBFBD>")
("\\\\\"{o}" "<EFBFBD>")
("\\\\`{o}" "<EFBFBD>")
("\\\\'{o}" "<EFBFBD>")
("\\\\~{o}" "<EFBFBD>")
("\\\\^{o}" "<EFBFBD>")
("\\\\\"{u}" "<EFBFBD>")
("\\\\`{u}" "<EFBFBD>")
("\\\\'{u}" "<EFBFBD>")
("\\\\^{u}" "<EFBFBD>")
("\\\\\"{A}" "<EFBFBD>")
("\\\\`{A}" "<EFBFBD>")
("\\\\'{A}" "<EFBFBD>")
("\\\\~{A}" "<EFBFBD>")
("\\\\^{A}" "<EFBFBD>")
("\\\\\"{E}" "<EFBFBD>")
("\\\\`{E}" "<EFBFBD>")
("\\\\'{E}" "<EFBFBD>")
("\\\\^{E}" "<EFBFBD>")
("\\\\\"{I}" "<EFBFBD>")
("\\\\`{I}" "<EFBFBD>")
("\\\\'{I}" "<EFBFBD>")
("\\\\^{I}" "<EFBFBD>")
("\\\\\"{O}" "<EFBFBD>")
("\\\\`{O}" "<EFBFBD>")
("\\\\'{O}" "<EFBFBD>")
("\\\\~{O}" "<EFBFBD>")
("\\\\^{O}" "<EFBFBD>")
("\\\\\"{U}" "<EFBFBD>")
("\\\\`{U}" "<EFBFBD>")
("\\\\'{U}" "<EFBFBD>")
("\\\\^{U}" "<EFBFBD>")
("\\\\~{n}" "<EFBFBD>")
("\\\\~{N}" "<EFBFBD>")
("\\\\c{c}" "<EFBFBD>")
("\\\\c{C}" "<EFBFBD>")
("{\\\\ss}" "<EFBFBD>")
("{\\\\AE}" "\306")
("{\\\\ae}" "\346")
("{\\\\AA}" "\305")
("{\\\\aa}" "\345")
("{\\\\copyright}" "\251")
("\\\\copyright{}" "\251")
("{\\\\pounds}" "<EFBFBD>" )
("{\\\\P}" "<EFBFBD>" )
("{\\\\S}" "<EFBFBD>" )
("\\\\pounds{}" "<EFBFBD>" )
("\\\\P{}" "<EFBFBD>" )
("\\\\S{}" "<EFBFBD>" )
("{\\?`}" "<EFBFBD>")
("{!`}" "<EFBFBD>")
("\\?`" "<EFBFBD>")
("!`" "<EFBFBD>")
)
"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.")
;;;###autoload
(defun iso-tex2iso (from to &optional buffer)
"Translate TeX sequences to ISO 8859-1 characters.
Translate the region between FROM and TO using the table
`iso-tex2iso-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
'(
("{\\\\\"a}" "<EFBFBD>")
("{\\\\`a}" "<EFBFBD>")
("{\\\\'a}" "<EFBFBD>")
("{\\\\~a}" "<EFBFBD>")
("{\\\\^a}" "<EFBFBD>")
("{\\\\\"e}" "<EFBFBD>")
("{\\\\`e}" "<EFBFBD>")
("{\\\\'e}" "<EFBFBD>")
("{\\\\^e}" "<EFBFBD>")
("{\\\\\"\\\\i}" "<EFBFBD>")
("{\\\\`\\\\i}" "<EFBFBD>")
("{\\\\'\\\\i}" "<EFBFBD>")
("{\\\\^\\\\i}" "<EFBFBD>")
("{\\\\\"i}" "<EFBFBD>")
("{\\\\`i}" "<EFBFBD>")
("{\\\\'i}" "<EFBFBD>")
("{\\\\^i}" "<EFBFBD>")
("{\\\\\"o}" "<EFBFBD>")
("{\\\\`o}" "<EFBFBD>")
("{\\\\'o}" "<EFBFBD>")
("{\\\\~o}" "<EFBFBD>")
("{\\\\^o}" "<EFBFBD>")
("{\\\\\"u}" "<EFBFBD>")
("{\\\\`u}" "<EFBFBD>")
("{\\\\'u}" "<EFBFBD>")
("{\\\\^u}" "<EFBFBD>")
("{\\\\\"A}" "<EFBFBD>")
("{\\\\`A}" "<EFBFBD>")
("{\\\\'A}" "<EFBFBD>")
("{\\\\~A}" "<EFBFBD>")
("{\\\\^A}" "<EFBFBD>")
("{\\\\\"E}" "<EFBFBD>")
("{\\\\`E}" "<EFBFBD>")
("{\\\\'E}" "<EFBFBD>")
("{\\\\^E}" "<EFBFBD>")
("{\\\\\"I}" "<EFBFBD>")
("{\\\\`I}" "<EFBFBD>")
("{\\\\'I}" "<EFBFBD>")
("{\\\\^I}" "<EFBFBD>")
("{\\\\\"O}" "<EFBFBD>")
("{\\\\`O}" "<EFBFBD>")
("{\\\\'O}" "<EFBFBD>")
("{\\\\~O}" "<EFBFBD>")
("{\\\\^O}" "<EFBFBD>")
("{\\\\\"U}" "<EFBFBD>")
("{\\\\`U}" "<EFBFBD>")
("{\\\\'U}" "<EFBFBD>")
("{\\\\^U}" "<EFBFBD>")
("{\\\\~n}" "<EFBFBD>")
("{\\\\~N}" "<EFBFBD>")
("{\\\\c c}" "<EFBFBD>")
("{\\\\c C}" "<EFBFBD>")
("\\\\\"a" "<EFBFBD>")
("\\\\`a" "<EFBFBD>")
("\\\\'a" "<EFBFBD>")
("\\\\~a" "<EFBFBD>")
("\\\\^a" "<EFBFBD>")
("\\\\\"e" "<EFBFBD>")
("\\\\`e" "<EFBFBD>")
("\\\\'e" "<EFBFBD>")
("\\\\^e" "<EFBFBD>")
("\\\\\"\\\\i" "<EFBFBD>")
("\\\\`\\\\i" "<EFBFBD>")
("\\\\'\\\\i" "<EFBFBD>")
("\\\\^\\\\i" "<EFBFBD>")
("\\\\\"i" "<EFBFBD>")
("\\\\`i" "<EFBFBD>")
("\\\\'i" "<EFBFBD>")
("\\\\^i" "<EFBFBD>")
("\\\\\"o" "<EFBFBD>")
("\\\\`o" "<EFBFBD>")
("\\\\'o" "<EFBFBD>")
("\\\\~o" "<EFBFBD>")
("\\\\^o" "<EFBFBD>")
("\\\\\"u" "<EFBFBD>")
("\\\\`u" "<EFBFBD>")
("\\\\'u" "<EFBFBD>")
("\\\\^u" "<EFBFBD>")
("\\\\\"A" "<EFBFBD>")
("\\\\`A" "<EFBFBD>")
("\\\\'A" "<EFBFBD>")
("\\\\~A" "<EFBFBD>")
("\\\\^A" "<EFBFBD>")
("\\\\\"E" "<EFBFBD>")
("\\\\`E" "<EFBFBD>")
("\\\\'E" "<EFBFBD>")
("\\\\^E" "<EFBFBD>")
("\\\\\"I" "<EFBFBD>")
("\\\\`I" "<EFBFBD>")
("\\\\'I" "<EFBFBD>")
("\\\\^I" "<EFBFBD>")
("\\\\\"O" "<EFBFBD>")
("\\\\`O" "<EFBFBD>")
("\\\\'O" "<EFBFBD>")
("\\\\~O" "<EFBFBD>")
("\\\\^O" "<EFBFBD>")
("\\\\\"U" "<EFBFBD>")
("\\\\`U" "<EFBFBD>")
("\\\\'U" "<EFBFBD>")
("\\\\^U" "<EFBFBD>")
("\\\\~n" "<EFBFBD>")
("\\\\~N" "<EFBFBD>")
("\\\\\"{a}" "<EFBFBD>")
("\\\\`{a}" "<EFBFBD>")
("\\\\'{a}" "<EFBFBD>")
("\\\\~{a}" "<EFBFBD>")
("\\\\^{a}" "<EFBFBD>")
("\\\\\"{e}" "<EFBFBD>")
("\\\\`{e}" "<EFBFBD>")
("\\\\'{e}" "<EFBFBD>")
("\\\\^{e}" "<EFBFBD>")
("\\\\\"{\\\\i}" "<EFBFBD>")
("\\\\`{\\\\i}" "<EFBFBD>")
("\\\\'{\\\\i}" "<EFBFBD>")
("\\\\^{\\\\i}" "<EFBFBD>")
("\\\\\"{i}" "<EFBFBD>")
("\\\\`{i}" "<EFBFBD>")
("\\\\'{i}" "<EFBFBD>")
("\\\\^{i}" "<EFBFBD>")
("\\\\\"{o}" "<EFBFBD>")
("\\\\`{o}" "<EFBFBD>")
("\\\\'{o}" "<EFBFBD>")
("\\\\~{o}" "<EFBFBD>")
("\\\\^{o}" "<EFBFBD>")
("\\\\\"{u}" "<EFBFBD>")
("\\\\`{u}" "<EFBFBD>")
("\\\\'{u}" "<EFBFBD>")
("\\\\^{u}" "<EFBFBD>")
("\\\\\"{A}" "<EFBFBD>")
("\\\\`{A}" "<EFBFBD>")
("\\\\'{A}" "<EFBFBD>")
("\\\\~{A}" "<EFBFBD>")
("\\\\^{A}" "<EFBFBD>")
("\\\\\"{E}" "<EFBFBD>")
("\\\\`{E}" "<EFBFBD>")
("\\\\'{E}" "<EFBFBD>")
("\\\\^{E}" "<EFBFBD>")
("\\\\\"{I}" "<EFBFBD>")
("\\\\`{I}" "<EFBFBD>")
("\\\\'{I}" "<EFBFBD>")
("\\\\^{I}" "<EFBFBD>")
("\\\\\"{O}" "<EFBFBD>")
("\\\\`{O}" "<EFBFBD>")
("\\\\'{O}" "<EFBFBD>")
("\\\\~{O}" "<EFBFBD>")
("\\\\^{O}" "<EFBFBD>")
("\\\\\"{U}" "<EFBFBD>")
("\\\\`{U}" "<EFBFBD>")
("\\\\'{U}" "<EFBFBD>")
("\\\\^{U}" "<EFBFBD>")
("\\\\~{n}" "<EFBFBD>")
("\\\\~{N}" "<EFBFBD>")
("\\\\c{c}" "<EFBFBD>")
("\\\\c{C}" "<EFBFBD>")
("{\\\\ss}" "<EFBFBD>")
("{\\\\AE}" "\306")
("{\\\\ae}" "\346")
("{\\\\AA}" "\305")
("{\\\\aa}" "\345")
("{\\\\copyright}" "\251")
("\\\\copyright{}" "\251")
("{\\\\pounds}" "<EFBFBD>" )
("{\\\\P}" "<EFBFBD>" )
("{\\\\S}" "<EFBFBD>" )
("\\\\pounds{}" "<EFBFBD>" )
("\\\\P{}" "<EFBFBD>" )
("\\\\S{}" "<EFBFBD>" )
("?`" "<EFBFBD>")
("!`" "<EFBFBD>")
("{?`}" "<EFBFBD>")
("{!`}" "<EFBFBD>")
("\"a" "<EFBFBD>")
("\"A" "<EFBFBD>")
("\"o" "<EFBFBD>")
("\"O" "<EFBFBD>")
("\"u" "<EFBFBD>")
("\"U" "<EFBFBD>")
("\"s" "<EFBFBD>")
("\\\\3" "<EFBFBD>")
)
"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
'(
("<EFBFBD>" "\"a")
("<EFBFBD>" "{\\\\`a}")
("<EFBFBD>" "{\\\\'a}")
("<EFBFBD>" "{\\\\~a}")
("<EFBFBD>" "{\\\\^a}")
("<EFBFBD>" "{\\\\\"e}")
("<EFBFBD>" "{\\\\`e}")
("<EFBFBD>" "{\\\\'e}")
("<EFBFBD>" "{\\\\^e}")
("<EFBFBD>" "{\\\\\"\\\\i}")
("<EFBFBD>" "{\\\\`\\\\i}")
("<EFBFBD>" "{\\\\'\\\\i}")
("<EFBFBD>" "{\\\\^\\\\i}")
("<EFBFBD>" "\"o")
("<EFBFBD>" "{\\\\`o}")
("<EFBFBD>" "{\\\\'o}")
("<EFBFBD>" "{\\\\~o}")
("<EFBFBD>" "{\\\\^o}")
("<EFBFBD>" "\"u")
("<EFBFBD>" "{\\\\`u}")
("<EFBFBD>" "{\\\\'u}")
("<EFBFBD>" "{\\\\^u}")
("<EFBFBD>" "\"A")
("<EFBFBD>" "{\\\\`A}")
("<EFBFBD>" "{\\\\'A}")
("<EFBFBD>" "{\\\\~A}")
("<EFBFBD>" "{\\\\^A}")
("<EFBFBD>" "{\\\\\"E}")
("<EFBFBD>" "{\\\\`E}")
("<EFBFBD>" "{\\\\'E}")
("<EFBFBD>" "{\\\\^E}")
("<EFBFBD>" "{\\\\\"I}")
("<EFBFBD>" "{\\\\`I}")
("<EFBFBD>" "{\\\\'I}")
("<EFBFBD>" "{\\\\^I}")
("<EFBFBD>" "\"O")
("<EFBFBD>" "{\\\\`O}")
("<EFBFBD>" "{\\\\'O}")
("<EFBFBD>" "{\\\\~O}")
("<EFBFBD>" "{\\\\^O}")
("<EFBFBD>" "\"U")
("<EFBFBD>" "{\\\\`U}")
("<EFBFBD>" "{\\\\'U}")
("<EFBFBD>" "{\\\\^U}")
("<EFBFBD>" "{\\\\~n}")
("<EFBFBD>" "{\\\\~N}")
("<EFBFBD>" "{\\\\c c}")
("<EFBFBD>" "{\\\\c C}")
("<EFBFBD>" "\"s")
("\306" "{\\\\AE}")
("\346" "{\\\\ae}")
("\305" "{\\\\AA}")
("\345" "{\\\\aa}")
("\251" "{\\\\copyright}")
("<EFBFBD>" "{\\\\pounds}")
("<EFBFBD>" "{\\\\P}")
("<EFBFBD>" "{\\\\S}")
("<EFBFBD>" "{?`}")
("<EFBFBD>" "{!`}")
)
"Translation table for translating ISO 8859-1 characters to German TeX.")
;;;###autoload
(defun iso-gtex2iso (from to &optional buffer)
"Translate German TeX sequences to ISO 8859-1 characters.
Translate the region between FROM and TO using the table
`iso-gtex2iso-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.
Translate the region between FROM and TO using the table
`iso-iso2gtex-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
'(("<EFBFBD>" "ae")
("<EFBFBD>" "Ae")
("<EFBFBD>" "oe")
("<EFBFBD>" "Oe")
("<EFBFBD>" "ue")
("<EFBFBD>" "Ue")
("<EFBFBD>" "ss"))
"Translation table for translating ISO 8859-1 characters to Duden sequences.")
;;;###autoload
(defun iso-iso2duden (from to &optional buffer)
"Translate ISO 8859-1 characters to Duden sequences.
Translate the region between FROM and TO using the table
`iso-iso2duden-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
'(("<EFBFBD>" "&Agrave;")
("<EFBFBD>" "&Aacute;")
("<EFBFBD>" "&Acirc;")
("<EFBFBD>" "&Atilde;")
("<EFBFBD>" "&Auml;")
("<EFBFBD>" "&Aring;")
("<EFBFBD>" "&AElig;")
("<EFBFBD>" "&Ccedil;")
("<EFBFBD>" "&Egrave;")
("<EFBFBD>" "&Eacute;")
("<EFBFBD>" "&Ecirc;")
("<EFBFBD>" "&Euml;")
("<EFBFBD>" "&Igrave;")
("<EFBFBD>" "&Iacute;")
("<EFBFBD>" "&Icirc;")
("<EFBFBD>" "&Iuml;")
("<EFBFBD>" "&ETH;")
("<EFBFBD>" "&Ntilde;")
("<EFBFBD>" "&Ograve;")
("<EFBFBD>" "&Oacute;")
("<EFBFBD>" "&Ocirc;")
("<EFBFBD>" "&Otilde;")
("<EFBFBD>" "&Ouml;")
("<EFBFBD>" "&Oslash;")
("<EFBFBD>" "&Ugrave;")
("<EFBFBD>" "&Uacute;")
("<EFBFBD>" "&Ucirc;")
("<EFBFBD>" "&Uuml;")
("<EFBFBD>" "&Yacute;")
("<EFBFBD>" "&THORN;")
("<EFBFBD>" "&szlig;")
("<EFBFBD>" "&agrave;")
("<EFBFBD>" "&aacute;")
("<EFBFBD>" "&acirc;")
("<EFBFBD>" "&atilde;")
("<EFBFBD>" "&auml;")
("<EFBFBD>" "&aring;")
("<EFBFBD>" "&aelig;")
("<EFBFBD>" "&ccedil;")
("<EFBFBD>" "&egrave;")
("<EFBFBD>" "&eacute;")
("<EFBFBD>" "&ecirc;")
("<EFBFBD>" "&euml;")
("<EFBFBD>" "&igrave;")
("<EFBFBD>" "&iacute;")
("<EFBFBD>" "&icirc;")
("<EFBFBD>" "&iuml;")
("<EFBFBD>" "&eth;")
("<EFBFBD>" "&ntilde;")
("<EFBFBD>" "&ograve;")
("<EFBFBD>" "&oacute;")
("<EFBFBD>" "&ocirc;")
("<EFBFBD>" "&otilde;")
("<EFBFBD>" "&ouml;")
("<EFBFBD>" "&oslash;")
("<EFBFBD>" "&ugrave;")
("<EFBFBD>" "&uacute;")
("<EFBFBD>" "&ucirc;")
("<EFBFBD>" "&uuml;")
("<EFBFBD>" "&yacute;")
("<EFBFBD>" "&thorn;")
("<EFBFBD>" "&yuml;")))
(defvar iso-sgml2iso-trans-tab
'(("&Agrave;" "<EFBFBD>")
("&Aacute;" "<EFBFBD>")
("&Acirc;" "<EFBFBD>")
("&Atilde;" "<EFBFBD>")
("&Auml;" "<EFBFBD>")
("&Aring;" "<EFBFBD>")
("&AElig;" "<EFBFBD>")
("&Ccedil;" "<EFBFBD>")
("&Egrave;" "<EFBFBD>")
("&Eacute;" "<EFBFBD>")
("&Ecirc;" "<EFBFBD>")
("&Euml;" "<EFBFBD>")
("&Igrave;" "<EFBFBD>")
("&Iacute;" "<EFBFBD>")
("&Icirc;" "<EFBFBD>")
("&Iuml;" "<EFBFBD>")
("&ETH;" "<EFBFBD>")
("&Ntilde;" "<EFBFBD>")
("&Ograve;" "<EFBFBD>")
("&Oacute;" "<EFBFBD>")
("&Ocirc;" "<EFBFBD>")
("&Otilde;" "<EFBFBD>")
("&Ouml;" "<EFBFBD>")
("&Oslash;" "<EFBFBD>")
("&Ugrave;" "<EFBFBD>")
("&Uacute;" "<EFBFBD>")
("&Ucirc;" "<EFBFBD>")
("&Uuml;" "<EFBFBD>")
("&Yacute;" "<EFBFBD>")
("&THORN;" "<EFBFBD>")
("&szlig;" "<EFBFBD>")
("&agrave;" "<EFBFBD>")
("&aacute;" "<EFBFBD>")
("&acirc;" "<EFBFBD>")
("&atilde;" "<EFBFBD>")
("&auml;" "<EFBFBD>")
("&aring;" "<EFBFBD>")
("&aelig;" "<EFBFBD>")
("&ccedil;" "<EFBFBD>")
("&egrave;" "<EFBFBD>")
("&eacute;" "<EFBFBD>")
("&ecirc;" "<EFBFBD>")
("&euml;" "<EFBFBD>")
("&igrave;" "<EFBFBD>")
("&iacute;" "<EFBFBD>")
("&icirc;" "<EFBFBD>")
("&iuml;" "<EFBFBD>")
("&eth;" "<EFBFBD>")
("&ntilde;" "<EFBFBD>")
("&nbsp;" "<EFBFBD>")
("&ograve;" "<EFBFBD>")
("&oacute;" "<EFBFBD>")
("&ocirc;" "<EFBFBD>")
("&otilde;" "<EFBFBD>")
("&ouml;" "<EFBFBD>")
("&oslash;" "<EFBFBD>")
("&ugrave;" "<EFBFBD>")
("&uacute;" "<EFBFBD>")
("&ucirc;" "<EFBFBD>")
("&uuml;" "<EFBFBD>")
("&yacute;" "<EFBFBD>")
("&thorn;" "<EFBFBD>")
("&yuml;" "<EFBFBD>")))
;;;###autoload
(defun iso-iso2sgml (from to &optional buffer)
"Translate ISO 8859-1 characters in the region to SGML entities.
Use entities 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.
Use entities 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 (&rest ignore)
"Warn that format is read-only."
(interactive)
(error "This format is read-only; specify another format for writing"))
;;;###autoload
(defun iso-cvt-write-only (&rest ignore)
"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