--- gforth/gforth.el 2008/07/15 16:11:49 1.76 +++ gforth/gforth.el 2012/05/04 00:11:04 1.87 @@ -1,6 +1,6 @@ ;;; gforth.el --- major mode for editing (G)Forth sources -;; Copyright (C) 1995,1996,1997,1998,2000,2001,2003,2004,2007,2008 Free Software Foundation, Inc. +;; Copyright (C) 1995,1996,1997,1998,2000,2001,2003,2004,2007,2008,2010,2011 Free Software Foundation, Inc. ;; This file is part of Gforth. @@ -237,23 +237,31 @@ PARSED-TYPE specifies what kind of text (("]" "]l") definition-starter (font-lock-keyword-face . 1)) ((":") definition-starter (font-lock-keyword-face . 1) "[ \t\n]" t name (font-lock-function-name-face . 3)) + (("event:") definition-starter (font-lock-keyword-face . 1) + "[ \t\n]" t name (font-lock-function-name-face . 3)) (("immediate" "compile-only" "restrict") immediate (font-lock-keyword-face . 1)) (("does>") compile-only (font-lock-keyword-face . 1)) ((":noname") definition-starter (font-lock-keyword-face . 1)) - ((";" ";code") definition-ender (font-lock-keyword-face . 1)) + ((";" ";code" ";abi-code") definition-ender (font-lock-keyword-face . 1)) (("include" "require" "needs" "use") non-immediate (font-lock-keyword-face . 1) "[\n\t ]" t string (font-lock-string-face . 1)) (("included" "required" "thru" "load") non-immediate (font-lock-keyword-face . 1)) + (("code" "abi-code") + non-immediate (font-lock-keyword-face . 1) + "[ \t\n]" t name (font-lock-function-name-face . 3)) + (("end-code") + non-immediate (font-lock-keyword-face . 1)) (("[char]") compile-only (font-lock-keyword-face . 1) "[ \t\n]" t string (font-lock-string-face . 1)) (("char") non-immediate (font-lock-keyword-face . 1) "[ \t\n]" t string (font-lock-string-face . 1)) - (("s\"" "c\"") immediate (font-lock-string-face . 1) + ("'.'?" non-immediate (font-lock-string-face . 1)) + (("s\"" "c\"" "s\\\"") immediate (font-lock-string-face . 1) "[\"\n]" nil string (font-lock-string-face . 1)) - ((".\"") compile-only (font-lock-string-face . 1) + ((".\"" ".\\\"") compile-only (font-lock-string-face . 1) "[\"\n]" nil string (font-lock-string-face . 1)) (("abort\"") compile-only (font-lock-keyword-face . 1) "[\"\n]" nil string (font-lock-string-face . 1)) @@ -301,7 +309,7 @@ PARSED-TYPE specifies what kind of text (("create" "variable" "constant" "2variable" "2constant" "fvariable" "fconstant" "value" "field" "user" "vocabulary" - "create-interpret/compile") + "create-interpret/compile" "interpret/compile:") non-immediate (font-lock-type-face . 2) "[ \t\n]" t name (font-lock-variable-name-face . 3)) ("\\S-+%" non-immediate (font-lock-type-face . 2)) @@ -310,9 +318,23 @@ PARSED-TYPE specifies what kind of text "[ \t\n]" t name (font-lock-function-name-face . 3)) (("end-struct") non-immediate (font-lock-keyword-face . 2) "[ \t\n]" t name (font-lock-type-face . 3)) - (("struct") non-immediate (font-lock-keyword-face . 2)) + (("struct" "end-c-library" "c-library-name") + non-immediate (font-lock-keyword-face . 2)) + (("c-library") non-immediate (font-lock-keyword-face . 2) + "[ \t\n]" t name (font-lock-variable-name-face . 3)) + (("c-variable") non-immediate (font-lock-type-face . 1) + "[ \t\n]" t name (font-lock-function-name-face . 3) + "[ \t\n]" t name (font-lock-function-name-face . 3)) + (("c-function" "c-value") non-immediate (font-lock-type-face . 1) + "[ \t\n]" t name (font-lock-function-name-face . 3) + "[ \t\n]" t name (font-lock-function-name-face . 3) + "[\n]" nil comment (font-lock-variable-name-face . 3)) + (("\\c") non-immediate (font-lock-keyword-face . 1) + "[\n]" nil string (font-lock-string-face . 1)) ("-?[0-9]+\\(\\.[0-9]*e\\(-?[0-9]+\\)?\\|\\.?[0-9a-f]*\\)" immediate (font-lock-constant-face . 3)) + ("-?\\([&#][0-9]+\\|\\(0x\\|\\$\\)[0-9a-f]+\\|%[01]+\\)" + immediate (font-lock-constant-face . 3)) )) (defvar forth-use-objects nil @@ -420,7 +442,8 @@ INDENT1 and INDENT2 are indentation spec "u-do" "?dup-if" "?dup-0=-if" "case" "of" "try" "iferror" "[if]" "[ifdef]" "[ifundef]" "[begin]" "[for]" "[do]" "[?do]") (0 . 2) (0 . 2)) - ((":" ":noname" "code" "struct" "m:" ":m" "class" "interface") + ((":" ":noname" "code" "abi-code" "struct" "m:" ":m" "class" + "interface" "c-library" "c-library-name") (0 . 2) (0 . 2) non-immediate) ("\\S-+%$" (0 . 2) (0 . 0) non-immediate) ((";" ";m") (-2 . 0) (0 . -2)) @@ -429,13 +452,13 @@ INDENT1 and INDENT2 are indentation spec "[until]" "[again]" "loop") (-2 . 0) (0 . -2)) (("end-code" "end-class" "end-interface" "end-class-noname" - "end-interface-noname" "end-struct" "class;") + "end-interface-noname" "end-struct" "class;" "end-c-library") (-2 . 0) (0 . -2) non-immediate) (("protected" "public" "how:") (-1 . 1) (0 . 0) non-immediate) (("+loop" "-loop" "until") (-2 . 0) (-2 . 0)) (("else" "recover" "restore" "endtry-iferror" "[else]") (-2 . 2) (0 . 0)) - (("does>") (-1 . 1) (0 . 0)) + (("does>" ";code" ";abi-code") (-1 . 1) (0 . 0)) (("while" "[while]") (-2 . 4) (0 . 2)) (("repeat" "[repeat]") (-4 . 0) (0 . -4)))) @@ -529,6 +552,8 @@ End:\" construct).") "Parse and bind local variables, set in the contents of the current forth-mode buffer. Prepend `forth-local-words' to `forth-words' and `forth-local-indent-words' to `forth-indent-words'." + (put 'forth-local-indent-words 'safe-local-variable 'listp) + (put 'forth-local-words 'safe-local-variable 'listp) (hack-local-variables) (setq forth-words (append forth-local-words forth-words)) (setq forth-indent-words (append forth-local-indent-words @@ -738,7 +763,7 @@ End:\" construct).") (defvar forth-defining-words '("VARIABLE" "CONSTANT" "2VARIABLE" "2CONSTANT" "FVARIABLE" "FCONSTANT" "USER" "VALUE" "field" "end-struct" "VOCABULARY" "CREATE" ":" "CODE" - "DEFER" "ALIAS") + "DEFER" "ALIAS" "interpret/compile:") "List of words, that define the following word. Used for imenu index generation.") @@ -1093,7 +1118,6 @@ exceeds 64 characters." (define-key forth-mode-map "\C-x\\" 'comment-region) (define-key forth-mode-map "\C-x~" 'forth-remove-tracers) (define-key forth-mode-map "\C-x\C-m" 'forth-split) -(define-key forth-mode-map "\e " 'forth-reload) (define-key forth-mode-map "\t" 'forth-indent-command) (define-key forth-mode-map "\C-m" 'forth-reindent-then-newline-and-indent) (define-key forth-mode-map "\M-q" 'forth-fill-paragraph) @@ -1366,7 +1390,7 @@ programmers who tend to fill code won't (defun forth-remove-tracers () "Remove tracers of the form `~~ '. Queries the user for each occurrence." (interactive) - (query-replace-regexp "\\(~~ \\| ~~$\\)" "" nil)) + (query-replace-regexp "\\(~~[ \t]\\|[ \t]~~$\\)" "" nil)) (define-key forth-mode-map "\C-x\C-e" 'compile) (define-key forth-mode-map "\C-x\C-n" 'next-error)