Mercurial > hg > xemacs-beta
diff lisp/packages/tex-latin1.el @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/packages/tex-latin1.el Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,530 @@ +;; gm-lingo.el +;; Translate to ISO from/to net/TeX conventions ... +;; Copyright 1993 Michael Gschwind (mike@vlsivie.tuwien.ac.at) + +;; Keywords: tex, iso, latin, 8bit + +;; From: mike@vlsivie.tuwien.ac.at (Michael Gschwind) +;; Newsgroups: gnu.emacs.sources +;; Subject: tex sequence to ISO latin conversions (and back) +;; Date: 13 Oct 1993 12:12:35 GMT +;; +;; The enclosed elisp file installs hooks which automatically translate +;; TeX sequences to ISO latin1 upon loading of a TeX file in emacs. This +;; allows editing of TeX documents without having to type escape +;; sequences. Upon saving a file, ISO latin1 characters are converted +;; back to TeX sequences. (If you have a tex style which can handle 8 bit +;; characters, this part is not necessary, but the loading half is still +;; neat to convert old files to 8 bit - also, 8 bit are less portable +;; than 7...) +;; +;; It also contains a function 'german which translates net conventions +;; for typing german characters into the real thing - if you install this +;; in news-reader/mail/whatever hooks, you'll never again be bothered +;; with having to read characters like "s or \3 or "a etc. +;; +;; mike +;; + +;; This file works with GNU Emacs19 or higher, but is not part of GNU Emacs. + +;; This program 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 of the License, or +;; (at your option) any later version. +;; +;; This program 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 this program; if not, write to the Free Software +;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +; it's the author's first lisp program in a long time, so don't judge +; him by it :( + +; to do: translate buffer when displaying from GNUS, +; use function 'german which does the Right Thing +; upon saving, the buffer reverts to TeX format... + +; Description: +; calling 'german will turn the net convention f. umlauts ("a etc.) +; into ISO latin umlaute for easy reading. +; hooks change TeX files to latin1 for editing and back to TeX sequences +; for calling TeX. 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 +; +; fixed bug that causes uppercase umlauts to become lower case by +; conversion -- msz 960429 + +(defvar 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") + +(defun translate-conventions (trans-tab) + (interactive) + (save-excursion + (widen) + (goto-char (point-min)) + (setq save-case-fold-search case-fold-search) ;; msz 960429 + (setq case-fold-search nil) ;; + (let ((work-tab trans-tab) + (buffer-read-only 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)) nil nil))) + (setq work-tab (cdr work-tab))))) + (setq case-fold-serch save-case-fold-search))) + +(defun spanish () + "Translate net conventions for Spanish to ISO" + (interactive) + (translate-conventions spanish-trans-tab)) + +(defvar aggressive-german-trans-tab '( + ( "\"a" "ä") + ( "\"A" "Ä") + ( "\"o" "ö") + ( "\"O" "Ö") + ( "\"u" "ü") + ( "\"U" "Ü") + ( "\"s" "ß") + ( "\\\\3" "ß") + ) + "German - may do too much") + +(defvar 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ß") + ) + "conservative German - may do too little") + + +(defvar german-trans-tab aggressive-german-trans-tab "used for char translation") + +(defun german () + "Translate net conventions for German to ISO" + (interactive) + (translate-conventions german-trans-tab)) + +(defvar 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}") + ("¿" "{?`}") + ("¡" "{!`}") + ) + ) + + + + +(defun iso2tex () + "Translate ISO to TeX" + (interactive) + (translate-conventions iso2tex-trans-tab)) + + +(defvar 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}" "Ñ") + ( "\\\\c{c}" "ç") + ( "\\\\c{C}" "Ç") + ( "{\\\\ss}" "ß") + ( "{?`}" "¿") + ( "{!`}" "¡") + ) + ) + +(defun tex2iso () + "Translate TeX to ISO" + (interactive) + (translate-conventions tex2iso-trans-tab)) + +(defvar gtex2iso-trans-tab '( + ( "\"a" "ä") + ( "\"A" "Ä") + ( "\"o" "ö") + ( "\"O" "Ö") + ( "\"u" "ü") + ( "\"U" "Ü") + ( "\"s" "ß") + ( "\\\\3" "ß") + ( "{\\\\\"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}" "Ñ") + ( "\\\\c{c}" "ç") + ( "\\\\c{C}" "Ç") + ( "{\\\\ss}" "ß") + ( "{?`}" "¿") + ( "{!`}" "¡") + ) + ) + +(defvar 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}") + ("ß" "\\\\3") + ("¿" "{?`}") + ("¡" "{!`}") + ) + ) + + + +(defun gtex2iso () + "Translate german TeX to ISO" + (interactive) + (translate-conventions gtex2iso-trans-tab)) + + +(defun iso2gtex () + "Translate ISO to german TeX" + (interactive) + (translate-conventions iso2gtex-trans-tab)) + + +(defun german-texP () + "Check if tex buffer is german LaTeX" + (save-excursion + (widen) + (goto-char (point-min)) + (re-search-forward "\\\\documentstyle\\[.*german.*\\]" nil t))) + + +(defun fix-iso2tex () + "Turn ISO latin1 into TeX sequences" + (if (equal major-mode 'latex-mode) + (if (german-texP) + (iso2gtex) + (iso2tex))) + (if (equal major-mode 'tex-mode) + (iso2tex))) + +(defun fix-tex2iso () + "Turn TeX sequences into ISO latin1" + (if (equal major-mode 'latex-mode) + (if (german-texP) + (gtex2iso) + (tex2iso))) + (if (equal major-mode 'tex-mode) + (tex2iso))) + +(add-hook 'find-file-hooks 'fix-tex2iso) +(add-hook 'write-file-hooks 'fix-iso2tex)