|
|
1.1 ! root 1: ;; Syntax checker for Mim (MDL). ! 2: ;; Copyright (C) 1985 Richard M. Stallman and K. Shane Hartman. ! 3: ;; Bugs to shane@mit-xx (or bug-gnu-emacs@mit-prep) ! 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: (require 'mim-mode) ! 24: ! 25: (defun slow-syntax-check-mim () ! 26: "Check Mim syntax slowly. ! 27: Points out the context of the error, if the syntax is incorrect." ! 28: (interactive) ! 29: (message "checking syntax...") ! 30: (let ((stop (point-max)) point-stack current last-bracket whoops last-point) ! 31: (save-excursion ! 32: (goto-char (point-min)) ! 33: (while (and (not whoops) ! 34: (re-search-forward "\\s(\\|\\s)\\|\"\\|[\\]" stop t)) ! 35: (setq current (preceding-char)) ! 36: (cond ((= current ?\") ! 37: (condition-case nil ! 38: (progn (re-search-forward "[^\\]\"") ! 39: (setq current nil)) ! 40: (error (setq whoops (point))))) ! 41: ((= current ?\\) ! 42: (condition-case nil (forward-char 1) (error nil))) ! 43: ((= (char-syntax current) ?\)) ! 44: (if (or (not last-bracket) ! 45: (not (= (logand (lsh (aref (syntax-table) last-bracket) -8) ! 46: ?\177) ! 47: current))) ! 48: (setq whoops (point)) ! 49: (setq last-point (car point-stack)) ! 50: (setq last-bracket (if last-point (char-after (1- last-point)))) ! 51: (setq point-stack (cdr point-stack)))) ! 52: (t ! 53: (if last-point (setq point-stack (cons last-point point-stack))) ! 54: (setq last-point (point)) ! 55: (setq last-bracket current))))) ! 56: (cond ((not (or whoops last-point)) ! 57: (message "Syntax correct")) ! 58: (whoops ! 59: (goto-char whoops) ! 60: (cond ((equal current ?\") ! 61: (error "Unterminated string")) ! 62: ((not last-point) ! 63: (error "Extraneous %s" (char-to-string current))) ! 64: (t ! 65: (error "Mismatched %s with %s" ! 66: (save-excursion ! 67: (setq whoops (1- (point))) ! 68: (goto-char (1- last-point)) ! 69: (buffer-substring (point) ! 70: (min (progn (end-of-line) (point)) ! 71: whoops))) ! 72: (char-to-string current))))) ! 73: (t ! 74: (goto-char last-point) ! 75: (error "Unmatched %s" (char-to-string last-bracket)))))) ! 76: ! 77: (defun fast-syntax-check-mim () ! 78: "Checks Mim syntax quickly. ! 79: Answers correct or incorrect, cannot point out the error context." ! 80: (interactive) ! 81: (save-excursion ! 82: (goto-char (point-min)) ! 83: (let (state) ! 84: (while (and (not (eobp)) ! 85: (equal (car (setq state (parse-partial-sexp (point) (point-max) 0))) ! 86: 0))) ! 87: (if (equal (car state) 0) ! 88: (message "Syntax correct") ! 89: (error "Syntax incorrect"))))) ! 90: ! 91: ! 92:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.