--- gforth/gforth.el 1995/10/07 17:38:15 1.14 +++ gforth/gforth.el 1997/03/25 23:27:12 1.21 @@ -1,11 +1,12 @@ -;; This file is part of GNU Emacs. +;; Forth mode for Emacs +;; This file is part of GForth. ;; Changes by anton ;; This is a variant of forth.el that came with TILE. ;; I left most of this stuff untouched and made just a few changes for ;; the things I use (mainly indentation and syntax tables). ;; So there is still a lot of work to do to adapt this to gforth. -;; GNU Emacs is distributed in the hope that it will be useful, +;; GForth is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY. No author or distributor ;; accepts responsibility to anyone for the consequences of using it ;; or for whether it serves any particular purpose or works at all, @@ -15,13 +16,11 @@ ;; Everyone is granted permission to copy, modify and redistribute ;; GNU Emacs, but only under the conditions described in the ;; GNU Emacs General Public License. A copy of this license is -;; supposed to have been given to you along with GNU Emacs so you +;; supposed to have been given to you along with Gforth so you ;; can know your rights and responsibilities. It should be in a ;; file named COPYING. Among other things, the copyright notice ;; and this notice must be preserved on all copies. -;;; $Header: /nfs/unsafe/cvs-repository/src-master/gforth/gforth.el,v 1.14 1995/10/07 17:38:15 anton Exp $ - ;;------------------------------------------------------------------- ;; A Forth indentation, documentation search and interaction library ;;------------------------------------------------------------------- @@ -37,21 +36,31 @@ (defvar forth-positives - " : :noname code does> begin do ?do while if ?dup-if ?dup-not-if else case struct [if] [else] " + " : :noname code interpretation: ;code does> begin do ?do +do -do u+do u-do while if ?dup-if ?dup-0=-if else case of struct [if] [else] with public: private: class " "Contains all words which will cause the indent-level to be incremented on the next line. OBS! All words in forth-positives must be surrounded by spaces.") (defvar forth-negatives - " ; end-code does> until repeat while +loop loop s+loop else then endif again endcase end-struct [then] [else] [endif]" + " ; end-code ;code does> until repeat while +loop loop -loop s+loop else then endif again endcase endof end-struct [then] [else] [endif] endwith class; how: " "Contains all words which will cause the indent-level to be decremented on the current line. OBS! All words in forth-negatives must be surrounded by spaces.") (defvar forth-zeroes - " : :noname code " + " : :noname code interpretation: public: private: how: class class; " "Contains all words which causes the indent to go to zero") +(setq forth-zero 0) + +(defvar forth-zup + " how: " + "Contains all words which causes zero indent level to change") + +(defvar forth-zdown + " class; how: class public: private: " + "Contains all words which causes zero indent level to change") + (defvar forth-prefixes " postpone [compile] ['] [char] " "words that prefix and escape other words") @@ -319,8 +328,12 @@ programmers who tend to fill code won't (regexp-quote (concat " " w1 " ")) forth-negatives) forth-indent-level 0))) + (if (string-match (regexp-quote (concat " " w1 " ")) forth-zdown) + (setq forth-zero 0)) (if (string-match (regexp-quote (concat " " w1 " ")) forth-zeroes) - (setq indent 0)) + (setq indent forth-zero)) + (if (string-match (regexp-quote (concat " " w1 " ")) forth-zup) + (setq forth-zero 4)) indent)) (defun forth-sum-line-indentation () @@ -378,7 +391,7 @@ the input stream (comments, arguments, e (defun forth-remove-tracers () "Remove tracers of the form `~~ '. Queries the user for each occurrence." (interactive) - (query-replace "~~ " "")) + (query-replace-regexp "\\(~~ \\| ~~$\\)" "" nil)) (defvar forth-program-name "gforth" "*Program invoked by the `run-forth' command.")