Annotation of 43BSD/contrib/emacs/lisp/tex-mode.el, revision 1.1

1.1     ! root        1: ;; Copyright (C) 1985 Richard M. Stallman
        !             2: ;; Rewritten following contributions by William F. Schelter
        !             3: ;; and Dick King (king@kestrel).
        !             4: 
        !             5: ;; This file is part of GNU Emacs.
        !             6: 
        !             7: ;; GNU Emacs is distributed in the hope that it will be useful,
        !             8: ;; but WITHOUT ANY WARRANTY.  No author or distributor
        !             9: ;; accepts responsibility to anyone for the consequences of using it
        !            10: ;; or for whether it serves any particular purpose or works at all,
        !            11: ;; unless he says so in writing.  Refer to the GNU Emacs General Public
        !            12: ;; License for full details.
        !            13: 
        !            14: ;; Everyone is granted permission to copy, modify and redistribute
        !            15: ;; GNU Emacs, but only under the conditions described in the
        !            16: ;; GNU Emacs General Public License.   A copy of this license is
        !            17: ;; supposed to have been given to you along with GNU Emacs so you
        !            18: ;; can know your rights and responsibilities.  It should be in a
        !            19: ;; file named COPYING.  Among other things, the copyright notice
        !            20: ;; and this notice must be preserved on all copies.
        !            21: 
        !            22: 
        !            23: (defvar TeX-mode-syntax-table nil
        !            24:   "Syntax table used while in TeX mode.")
        !            25: 
        !            26: (defvar TeX-zap-file nil
        !            27:   "Temporary file name used for text being sent as input to TeX.")
        !            28: (defvar TeX-command "cd /tmp; tex"
        !            29:   "The command to run TeX on a file in /tmp, to make output in /tmp.")
        !            30: (defvar TeX-dvi-print-command "lpr -d"
        !            31:   "Command string used to print a .dvi file.")
        !            32: (defvar TeX-trailer "\\bye\n"
        !            33:   "TeX input supplied after the end of a region sent to TeX by M-x TeX-region.")
        !            34: 
        !            35: (defvar TeX-mode-map nil)
        !            36: (if TeX-mode-map 
        !            37:     nil
        !            38:   (setq TeX-mode-map (make-sparse-keymap))
        !            39:   (define-key TeX-mode-map "\C-j" 'TeX-terminate-paragraph)
        !            40:   (define-key TeX-mode-map "\e{" 'TeX-insert-braces)
        !            41:   (define-key TeX-mode-map "\e}" 'up-list)
        !            42:   (define-key TeX-mode-map "\"" 'TeX-insert-quote)
        !            43:   (define-key TeX-mode-map "\C-c\C-r" 'TeX-region)
        !            44:   (define-key TeX-mode-map "\C-c\C-b" 'TeX-buffer)
        !            45:   (define-key TeX-mode-map "\C-c\C-p" 'TeX-print))
        !            46: 
        !            47: (defun TeX-insert-quote (count)
        !            48:   "Insert ``, '' or \" according to preceding character.
        !            49: With numeric arg N, always insert N \" characters."
        !            50:   (interactive "P")
        !            51:   (if count
        !            52:       (self-insert-command count)
        !            53:     (insert
        !            54:      (cond
        !            55:       ((or (bobp)
        !            56:           (save-excursion
        !            57:             (forward-char -1)
        !            58:             (looking-at "[ \t\n]\\|\\s(")))
        !            59:        "``")
        !            60:       ((= (preceding-char) ?\\)
        !            61:        ?\")
        !            62:       (t "''")))))
        !            63: 
        !            64: (defun validate-TeX-buffer ()
        !            65:   "Check current buffer for paragraphs containing mismatched $'s.
        !            66: As each such paragraph is found, a mark is pushed at its beginning,
        !            67: and the location is displayed for a few seconds."
        !            68:   (interactive)
        !            69:   (let ((opoint (point)))
        !            70:     (goto-char (point-max))
        !            71:     ;; Does not use save-excursion
        !            72:     ;; because we do not want to save the mark.
        !            73:     (unwind-protect
        !            74:        (while (and (not (input-pending-p)) (not (bobp)))
        !            75:          (let ((end (point)))
        !            76:            (search-backward "\n\n" nil 'move)
        !            77:            (or (TeX-validate-paragraph (point) end)
        !            78:                (progn
        !            79:                  (push-mark (point))
        !            80:                  (message "Mismatch found in pararaph starting here")
        !            81:                  (sit-for 4)))))
        !            82:       (goto-char opoint))))
        !            83: 
        !            84: (defun TeX-validate-paragraph (start end)
        !            85:   (condition-case ()
        !            86:       (save-excursion
        !            87:        (save-restriction
        !            88:          (narrow-to-region start end)
        !            89:          (goto-char start)
        !            90:          (forward-sexp (- end start))
        !            91:          t))
        !            92:     (error nil)))
        !            93: 
        !            94: (defun TeX-terminate-paragraph (inhibit-validation)
        !            95:   "Insert two newlines, breaking a paragraph for TeX.
        !            96: Check for mismatched braces/$'s in paragraph being terminated.
        !            97: A prefix arg inhibits the checking."
        !            98:   (interactive "P")
        !            99:   (or inhibit-validation
        !           100:       (TeX-validate-paragraph
        !           101:        (save-excursion
        !           102:         (search-backward "\n\n" nil 'move)
        !           103:         (point))
        !           104:        (point))
        !           105:       (message "Paragraph being closed appears to contain a mismatch"))
        !           106:   (insert "\n\n"))
        !           107: 
        !           108: (defun TeX-insert-braces ()
        !           109:   "Make a pair of braces and be poised to type inside of them."
        !           110:   (interactive)
        !           111:   (insert ?\{)
        !           112:   (save-excursion
        !           113:     (insert ?})))
        !           114:     
        !           115: ;(fset 'TeX-mode 'tex-mode) in loaddefs.
        !           116: (defun tex-mode ()
        !           117:   "Major mode for editing files of input for TeX.
        !           118: Makes $ and } display the characters they match.
        !           119: Makes \" insert `` when it seems to be the beginning of a quotation,
        !           120: and '' when it appears to be the end; it inserts \" only after a \\.
        !           121: 
        !           122: Use M-x validate-TeX-buffer to check buffer for paragraphs containing
        !           123: mismatched $'s or braces.
        !           124: 
        !           125: Use C-c C-r to run TeX on the current region, plus a \"header\"
        !           126: copied from the top of the file (containing macro definitions, etc.),
        !           127: running TeX under a special subshell.  C-c C-b does the whole buffer.
        !           128: C-c C-p prints the .dvi file made by either of those.
        !           129: 
        !           130: Special commands:
        !           131: \\{TeX-mode-map}
        !           132: 
        !           133: Entering TeX mode calls the value of text-mode-hook,
        !           134: and then the value of TeX-mode-hook."
        !           135:   (interactive)
        !           136:   (kill-all-local-variables)
        !           137:   (use-local-map TeX-mode-map)
        !           138:   (setq mode-name "TeX")
        !           139:   (setq major-mode 'TeX-mode)
        !           140:   (setq local-abbrev-table text-mode-abbrev-table)
        !           141:   (if (null TeX-mode-syntax-table)
        !           142:       (progn
        !           143:        (setq TeX-mode-syntax-table (make-syntax-table))
        !           144:        (set-syntax-table TeX-mode-syntax-table)
        !           145:        (modify-syntax-entry ?\\ "\\   ")
        !           146:        (modify-syntax-entry ?\$ "$$  ")
        !           147:        (modify-syntax-entry ?\% "<   ")
        !           148:        (modify-syntax-entry ?\f ">   ")
        !           149:        (modify-syntax-entry ?\n ">   ")
        !           150:        (modify-syntax-entry ?' "w   "))
        !           151:     (set-syntax-table TeX-mode-syntax-table))
        !           152:   (make-local-variable 'paragraph-start)
        !           153:   (setq paragraph-start "^\n")
        !           154:   (make-local-variable 'paragraph-separate)
        !           155:   (setq paragraph-separate paragraph-start)
        !           156:   (make-local-variable 'comment-start)
        !           157:   (setq comment-start "%")
        !           158:   (make-local-variable 'comment-start-skip)
        !           159:   (setq comment-start-skip "[^\\]\\(\\\\\\\\\\)*%+ *")
        !           160:   (make-local-variable 'comment-indent-hook)
        !           161:   (setq comment-indent-hook 'TeX-comment-indent)
        !           162:   (run-hooks 'text-mode-hook 'TeX-mode-hook))
        !           163: 
        !           164: (defun TeX-comment-indent ()
        !           165:   (if (looking-at "%%%")
        !           166:       (current-column)
        !           167:     (skip-chars-backward " \t")
        !           168:     (max (1+ (current-column)) comment-column)))
        !           169: 
        !           170: ;; Invoking TeX in an inferior shell.
        !           171: 
        !           172: (defun TeX-region (beg end)
        !           173:   "Run TeX on current region.  Optionally process buffer's header first.
        !           174: The buffer's header is everything up to a line saying \"%**end of header\".
        !           175: It is processed as input by TeX before the region itself.
        !           176: The file has a header if one of the first ten lines says \"%**start of header\".
        !           177: The value of TeX-trailer is supplied as input to TeX after the region.
        !           178: It defaults to \"\\bye\\n\"."
        !           179:   (interactive "r")
        !           180:   (or (get-buffer "*TeX-shell*")
        !           181:       (progn
        !           182:        (require 'shell)
        !           183:        (make-shell "TeX-shell" "csh")))
        !           184:   (or TeX-zap-file (setq TeX-zap-file (make-temp-name "/tmp/tz")))
        !           185:   (let ((tex-out-file (concat TeX-zap-file ".tex")))
        !           186:     (save-excursion
        !           187:       (goto-char (point-min))
        !           188:       (forward-line 10)
        !           189:       (let ((search-end (point))
        !           190:            hbeg)
        !           191:        (goto-char (point-min))
        !           192:        ;; Initialize the temp file with either the header or nothing
        !           193:        (if (and (search-forward "%**start of header" search-end t)
        !           194:                 (< (point) beg))
        !           195:            (progn
        !           196:              (forward-line 1)
        !           197:              (setq hbeg (point))
        !           198:              (search-forward "%**end of header")
        !           199:              (beginning-of-line)
        !           200:              (write-region hbeg (point) tex-out-file))
        !           201:          (write-region (point) (point) tex-out-file))
        !           202:        ;; Append the region to be printed.
        !           203:        (write-region beg end tex-out-file t)))
        !           204:     (send-string "TeX-shell" (concat TeX-command " " tex-out-file "\n")))
        !           205:   (if TeX-trailer
        !           206:       (send-string "TeX-shell" TeX-trailer))
        !           207:   (pop-to-buffer "*TeX-shell*"))
        !           208: 
        !           209: (defun TeX-buffer ()
        !           210:   "Run TeX on current buffer."
        !           211:   (interactive)
        !           212:   (let (TeX-trailer)
        !           213:     (TeX-region (point-min) (point-max))))
        !           214: 
        !           215: (defun TeX-print ()
        !           216:   "Print the .dvi file made by \\[TeX-region] or \\[TeX-buffer]."
        !           217:   (interactive)
        !           218:   (send-string "TeX-shell"
        !           219:               (concat TeX-dvi-print-command " " TeX-zap-file ".dvi\n")))

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.