view lisp/packages/tex-latin1.el @ 147:e186c2b7192d xemacs-20-2

Added tag r20-2p1 for changeset 2af401a6ecca
author cvs
date Mon, 13 Aug 2007 09:34:48 +0200
parents 376386a54a3c
children
line wrap: on
line source

;; 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)