1 ;;; fuel-font-lock.el -- font lock for factor code
3 ;; Copyright (C) 2008 Jose Antonio Ortega Ruiz
4 ;; See http://factorcode.org/license.txt for BSD license.
6 ;; Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
7 ;; Keywords: languages, fuel, factor
8 ;; Start date: Wed Dec 03, 2008 21:40
12 ;; Font lock setup for highlighting Factor code.
17 (require 'fuel-syntax)
24 (defmacro fuel-font-lock--make-face (prefix def-prefix group face def doc)
25 (let ((face (intern (format "%s-%s" prefix face)))
26 (def (intern (format "%s-%s-face" def-prefix def))))
27 `(defface ,face (face-default-spec ,def)
28 ,(format "Face for %s." doc)
32 (defmacro fuel-font-lock--define-faces (prefix def-prefix group faces)
33 (let ((setup (make-symbol (format "%s--faces-setup" prefix))))
37 (mapcar (lambda (f) (append '(fuel-font-lock--make-face
38 ,prefix ,def-prefix ,group) f))
45 (defconst fuel-font-lock--parsing-lock-keywords
46 (cons '("\\(P\\|SBUF\\)\"" 1 'factor-font-lock-parsing-word)
47 (mapcar (lambda (w) `(,(format "\\(^\\| \\)\\(%s\\)\\($\\| \\)" w)
48 2 'factor-font-lock-parsing-word))
49 fuel-syntax--parsing-words)))
51 (defconst fuel-font-lock--font-lock-keywords
52 `(,@fuel-font-lock--parsing-lock-keywords
53 (,fuel-syntax--stack-effect-regex . 'factor-font-lock-stack-effect)
54 (,fuel-syntax--parsing-words-ext-regex . 'factor-font-lock-parsing-word)
55 (,fuel-syntax--declaration-words-regex 1 'factor-font-lock-declaration)
56 (,fuel-syntax--word-definition-regex 2 'factor-font-lock-word)
57 (,fuel-syntax--type-definition-regex 2 'factor-font-lock-type-name)
58 (,fuel-syntax--method-definition-regex (1 'factor-font-lock-type-name)
59 (2 'factor-font-lock-word))
60 (,fuel-syntax--parent-type-regex 1 'factor-font-lock-type-name)
61 (,fuel-syntax--constructor-regex . 'factor-font-lock-constructor)
62 (,fuel-syntax--setter-regex . 'factor-font-lock-setter-word)
63 (,fuel-syntax--symbol-definition-regex 2 'factor-font-lock-symbol)
64 (,fuel-syntax--use-line-regex 1 'factor-font-lock-vocabulary-name))
65 "Font lock keywords definition for Factor mode.")
67 (defun fuel-font-lock--font-lock-setup (&optional keywords no-syntax)
68 (set (make-local-variable 'comment-start) "! ")
69 (set (make-local-variable 'parse-sexp-lookup-properties) t)
70 (set (make-local-variable 'font-lock-comment-face) 'factor-font-lock-comment)
71 (set (make-local-variable 'font-lock-string-face) 'factor-font-lock-string)
72 (set (make-local-variable 'font-lock-defaults)
73 `(,(or keywords 'fuel-font-lock--font-lock-keywords)
76 (list (cons 'font-lock-syntactic-keywords
77 fuel-syntax--syntactic-keywords))))))
80 (provide 'fuel-font-lock)
81 ;;; fuel-font-lock.el ends here