Diff for /gforth/gforth.el between versions 1.46 and 1.47

version 1.46, 2000/12/16 17:19:41 version 1.47, 2001/03/11 22:50:49
Line 112  OBS! All words in forth-negatives must b Line 112  OBS! All words in forth-negatives must b
 (defvar forth-mode-syntax-table nil  (defvar forth-mode-syntax-table nil
   "Syntax table in use in Forth-mode buffers.")    "Syntax table in use in Forth-mode buffers.")
 (if (not forth-mode-syntax-table)  (if t;; (not forth-mode-syntax-table)
     (progn      (progn
       (setq forth-mode-syntax-table (make-syntax-table))        (setq forth-mode-syntax-table (make-syntax-table))
       (let ((char 0))        (let ((char 0))
Line 123  OBS! All words in forth-negatives must b Line 123  OBS! All words in forth-negatives must b
           (modify-syntax-entry char "w" forth-mode-syntax-table)            (modify-syntax-entry char "w" forth-mode-syntax-table)
           (setq char (1+ char))))            (setq char (1+ char))))
       (modify-syntax-entry ?\" "\"" forth-mode-syntax-table)        (modify-syntax-entry ?\" "\"" forth-mode-syntax-table)
       (modify-syntax-entry ?\\ "<" forth-mode-syntax-table)  
       (modify-syntax-entry ?\n ">" forth-mode-syntax-table)  
       ))        ))
 ;I do not define '(' and ')' as comment delimiters, because emacs  ;I do not define '(' and ')' as comment delimiters, because emacs
 ;only supports one comment syntax (and a hack to accomodate C++); I  ;only supports one comment syntax (and a hack to accomodate C++); I
Line 138  OBS! All words in forth-negatives must b Line 136  OBS! All words in forth-negatives must b
 ;same character. we could use ' ' as first and '(' and '\' as second  ;same character. we could use ' ' as first and '(' and '\' as second
 ;character. However this would fail for G\ comments.  ;character. However this would fail for G\ comments.
   ;comment handling has been moved to syntactic font lock (david)
 (defconst forth-indent-level 4  (defconst forth-indent-level 4
   "Indentation of Forth statements.")    "Indentation of Forth statements.")
Line 160  OBS! All words in forth-negatives must b Line 160  OBS! All words in forth-negatives must b
   (setq comment-column 40)    (setq comment-column 40)
   (make-local-variable 'comment-start-skip)    (make-local-variable 'comment-start-skip)
   (setq comment-start-skip "\\ ")    (setq comment-start-skip "\\ ")
 ; this is obsolete (according to 20.5 docs) and replace with comment-indent-function    (make-local-variable 'comment-indent-hook)
 ;  (make-local-hook 'comment-indent-hook)    (setq comment-indent-hook 'forth-comment-indent)
 ;  (add-hook 'comment-indent-hook 'forth-comment-indent nil t)  
   (make-local-variable 'comment-indent-function)  
   (setq comment-indent-function 'forth-comment-indent)  
   (make-local-variable 'parse-sexp-ignore-comments)    (make-local-variable 'parse-sexp-ignore-comments)
   (setq parse-sexp-ignore-comments t))    (setq parse-sexp-ignore-comments t)
     (make-local-variable 'font-lock-defaults)
     (setq font-lock-defaults '(forth-font-lock-keywords nil t nil nil
         (font-lock-syntactic-keywords . forth-font-lock-syntactic-keywords)))
   ;  (make-local-variable 'font-lock-syntactic-keywords)
   ;  (setq font-lock-syntactic-keywords 'forth-font-lock-syntactic-keywords)
 ;;;###autoload  ;;;###autoload
 (defun forth-mode ()  (defun forth-mode ()
Line 993  The region is sent terminated by a newli Line 997  The region is sent terminated by a newli
 ;       (define-key global-map '(shift button3) 'mouse-function-menu)  ;       (define-key global-map '(shift button3) 'mouse-function-menu)
 ))  ))
 ;;; Highlighting  ;;; Font lock code                              (david <dvdkhlng@gmx.de>)
 ; (cond ((featurep 'hilit19)  ;;; note that words which contain a closing paren, which have the comment-ender
 ;  (if (not (file-exists-p "/usr/share/emacs/site-lisp/hl319.el"))  ;;; syntactic class, won't be matched by `\w+' and `\<' and `\>' won't work
 ;      (require 'hilit19)  ;;; either; solution: use of `\S-' and `\s-' where necessary
 ;    (require 'hl319))  ;;;
   (defvar forth-bracket-keyword nil)
 ;  (hilit-set-mode-patterns  (defvar forth-syntactic-keywords nil)
 ;   '(forth-mode)  (defvar forth-variable-defining-words nil)
 ;   (append  (defvar forth-function-defining-words nil)
 ;    '(("\\\\ \\(.*\\)$" nil comment))    ; comments  (defvar forth-function-parsing-words nil)
 ;    '(("\\\\[gG] \\(.*\\)$" nil comment)) ; comments  (defvar forth-variable-parsing-words nil)
 ;    '(("(\\( [^)\n]* \\| \\)--\\( [^)\n]* \\| \\))" nil decl))  (defvar forth-word-string-parsing-words nil)
 ;    '(("( " ")" comment))  (defvar forth-type-defining-words nil)
 ;    '(("\" [^\"\n]*\"" nil string))  (defvar forth-font-lock-keywords nil)
 ;    '(("\\(\\[IF]\\|\\[IFDEF]\\|\\[IFUNDEF]\\|\\[ELSE]\\|\\[THEN]\\|IF\\|ELSE\\|THEN\\|CASE\\|ENDCASE\\|OF\\|ENDOF\\|BEGIN\\|WHILE\\|REPEAT\\|UNTIL\\|AGAIN\\|DOES>\\|?DO\\|DO\\|\+LOOP\\|UNLOOP\\|LOOP\\|EXIT\\)" nil keyword))  
 ;    '(("\\(\\[if]\\|\\[ifdef]\\|\\[ifundef]\\|\\[else]\\|\\[then]\\|if\\|else\\|then\\|case\\|endcase\\|of\\|endof\\|begin\\|while\\|repeat\\|until\\|again\\|does>\\|?do\\|do\\|\+loop\\|unloop\\|loop\\|exit\\)" nil keyword))  (setq forth-bracket-keywords 
 ;    '((": *[^ \n]*" nil defun))        '("[if]" "[ifdef]" "[ifundef]" "[else]" "[then]" "[?do]" "[do]" "[for]" 
 ;    '(("Defer *[^ \n]*" nil defun))          "[loop]" "[+loop]" "[next]" "[begin]" "[until]" "[again]" "[while]" 
 ;    '(("\\(Variable\\|Constant\\|Value\\|Create\\) *[^ \n]*" nil define))          "[repeat]"))
 ;    '(("\\(include\\|require\\) *[^ \n]*" nil include))  (setq forth-syntactic-keywords
 ;    '(("[\n    ]\\(\\$[0-9A-Fa-f]+[\n  ]\\|&[0-9]+[\n  ]\\|[0-9]+[\n   ]\\|%[01]+[\n   ]\\|'[^ \n]+\\)+" nil formula))        '("if" "else" "then" "case" "endcase" "of" "endof" "begin" "while"
 ;    '((":noname" nil defun))))))          "repeat" "until" "again" "does>" "?do" "do" "+loop" "unloop" "loop"
           "exit" "u+do" "-do" "u-do" "-loop" "u+do" "for" "next" "cs-roll"
           "cs-pick" "recurse" "?dup-if" "?dup-0=-if" "leave" "?leave" "done"
           ";" ":noname" "immediate" "restrict" "compile-only" "interpretation>"
           "<interpretation" "compilation>" "<compilation" ";code" "end-code"
           "ahead" "struct"))
   (setq forth-variable-defining-words
         '("variable" "constant" "value" "2variable" "2constant" "2value"
           "fvariable" "fconstant" "field" "w:" "d:" "c:" "f:"))
   (setq forth-function-defining-words
         '(":" "defer" "alias" "interpret/compile" "code"))
   (setq forth-function-parsing-words
         '("postpone" "'" "[']" "[IS]" "IS" "<IS>"))
   (setq forth-variable-parsing-words
         '("[TO]" "TO" "<TO>"))
   (setq forth-word-string-parsing-words
         '("[CHAR]" "CHAR" "include" "require" "needs"))
   (setq forth-type-defining-words
   (defun forth-make-words-regexp (word-list)
     (concat "\\<" (regexp-opt word-list t) "\\>"))
   (defun forth-make-parsing-words-regexp (word-list)
     (concat "\\<" (regexp-opt word-list t) "\\s-+\\(\\S-+\\)"))
   (defun forth-make-parsing-words-matcher (word-list word-face parsed-face)
     (let ((regexp (forth-make-parsing-words-regexp word-list)))
       (list regexp (list 1 word-face)
             (list (regexp-opt-depth regexp) parsed-face))
   (setq forth-font-lock-keywords 
          (forth-make-parsing-words-matcher forth-function-defining-words
                font-lock-keyword-face font-lock-function-name-face)
          (forth-make-parsing-words-matcher forth-variable-defining-words
                font-lock-type-face font-lock-variable-name-face)
          (forth-make-parsing-words-matcher forth-type-defining-words
                font-lock-keyword-face font-lock-type-face)
          (forth-make-parsing-words-matcher forth-function-parsing-words
                font-lock-keyword-face font-lock-function-name-face)
          (forth-make-parsing-words-matcher forth-variable-parsing-words
                font-lock-keyword-face font-lock-variable-name-face)
          (forth-make-parsing-words-matcher forth-word-string-parsing-words
                font-lock-keyword-face font-lock-string-face)
          (list (forth-make-words-regexp forth-bracket-keywords)
                0 font-lock-keyword-face)
          (list (forth-make-words-regexp forth-syntactic-keywords)
                0 font-lock-keyword-face)
   ;       '("\\<\\({\\)\\(\\([ \t]+-?[^- \t}\n]*\\>\\)*\\)\\([^}\n]*\\)\\(}\\)?"
   ;        (1 font-lock-keyword-face) (2 font-lock-variable-name-face)
   ;        (4 font-lock-comment-face) (5 font-lock-keyword-face nil t))
          '("\\<-?[0-9][0-9a-f]*\\>" . font-lock-constant-face)
          '("\\<[^ \t\n%]+%" . font-lock-type-face)
   ;; Syntactic highlighting is used for getting Forth comments highlighted
   ;; properly: `\' and `\g' comments are handled with a single regular 
   ;; expression that parses from `\' to end of line and assigns the 
   ;; "comment-fence" generic comment delimiter to the backslash and end-of-line 
   ;; characters.
   ;; `( ... )' comments are handled by the usual comment-starter/comment-ender
   ;; syntax classes, with the extension that `(' must be a single word.
   (defvar forth-font-lock-syntactic-keywords nil)
   (setq forth-font-lock-syntactic-keywords
     '(("\\<\\(\\(\\\\\\)g?\\)\\>.*\\(\n\\)" (2 (14 . nil)) (3 (14 . nil)))
       ("\\<(\\>" 0 (11 . nil))
       (")" 0 (12 . nil))))
 ;; end  ;;; End font lock code

Removed from v.1.46  
changed lines
  Added in v.1.47

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>