home *** CD-ROM | disk | FTP | other *** search
- ;; 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
-
- (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))
- (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)))))))
-
- (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)
-