diff options
author | Jim Blandy <jimb@redhat.com> | 1989-10-31 15:59:53 +0000 |
---|---|---|
committer | Jim Blandy <jimb@redhat.com> | 1989-10-31 15:59:53 +0000 |
commit | ac1c6ea2915c86f32904c13ad6be2db16487003e (patch) | |
tree | 2af4fca28f1fddcdcb00479261b7e83bca6a47e8 /lisp/=mim-syntax.el | |
parent | 5211c0c990394c4476accaf0f2597d5d7963e7c8 (diff) | |
download | emacs-ac1c6ea2915c86f32904c13ad6be2db16487003e.tar.gz |
Initial revision
Diffstat (limited to 'lisp/=mim-syntax.el')
-rw-r--r-- | lisp/=mim-syntax.el | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/lisp/=mim-syntax.el b/lisp/=mim-syntax.el new file mode 100644 index 00000000000..c9a95b50f2f --- /dev/null +++ b/lisp/=mim-syntax.el @@ -0,0 +1,91 @@ +;; Syntax checker for Mim (MDL). +;; Copyright (C) 1985 Free Software Foundation, Inc. +;; Principal author K. Shane Hartman + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 1, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to +;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + + +(require 'mim-mode) + +(defun slow-syntax-check-mim () + "Check Mim syntax slowly. +Points out the context of the error, if the syntax is incorrect." + (interactive) + (message "checking syntax...") + (let ((stop (point-max)) point-stack current last-bracket whoops last-point) + (save-excursion + (goto-char (point-min)) + (while (and (not whoops) + (re-search-forward "\\s(\\|\\s)\\|\"\\|[\\]" stop t)) + (setq current (preceding-char)) + (cond ((= current ?\") + (condition-case nil + (progn (re-search-forward "[^\\]\"") + (setq current nil)) + (error (setq whoops (point))))) + ((= current ?\\) + (condition-case nil (forward-char 1) (error nil))) + ((= (char-syntax current) ?\)) + (if (or (not last-bracket) + (not (= (logand (lsh (aref (syntax-table) last-bracket) -8) + ?\177) + current))) + (setq whoops (point)) + (setq last-point (car point-stack)) + (setq last-bracket (if last-point (char-after (1- last-point)))) + (setq point-stack (cdr point-stack)))) + (t + (if last-point (setq point-stack (cons last-point point-stack))) + (setq last-point (point)) + (setq last-bracket current))))) + (cond ((not (or whoops last-point)) + (message "Syntax correct")) + (whoops + (goto-char whoops) + (cond ((equal current ?\") + (error "Unterminated string")) + ((not last-point) + (error "Extraneous %s" (char-to-string current))) + (t + (error "Mismatched %s with %s" + (save-excursion + (setq whoops (1- (point))) + (goto-char (1- last-point)) + (buffer-substring (point) + (min (progn (end-of-line) (point)) + whoops))) + (char-to-string current))))) + (t + (goto-char last-point) + (error "Unmatched %s" (char-to-string last-bracket)))))) + +(defun fast-syntax-check-mim () + "Checks Mim syntax quickly. +Answers correct or incorrect, cannot point out the error context." + (interactive) + (save-excursion + (goto-char (point-min)) + (let (state) + (while (and (not (eobp)) + (equal (car (setq state (parse-partial-sexp (point) (point-max) 0))) + 0))) + (if (equal (car state) 0) + (message "Syntax correct") + (error "Syntax incorrect"))))) + + + |