"\\`[^&:]")
(defconst context-coloring-ignored-word-regexp
- (concat "\\`[-+]?[0-9]\\|" (context-coloring-exact-or-regexp
- '("t" "nil" "." "?"))))
+ (concat "\\`[&:-+]?[0-9]\\|" (context-coloring-exact-or-regexp
+ '("t" "nil" "." "?"))))
(defconst context-coloring-WORD-CODE 2)
(defconst context-coloring-SYMBOL-CODE 3)
(defconst context-coloring-OPEN-PARENTHESIS-CODE 4)
(defconst context-coloring-CLOSE-PARENTHESIS-CODE 5)
+(defconst context-coloring-EXPRESSION-PREFIX-CODE 6)
+(defconst context-coloring-APOSTROPHE-CHAR (string-to-char "'"))
(defconst context-coloring-OPEN-PARENTHESIS-CHAR (string-to-char "("))
(defconst context-coloring-COMMA-CHAR (string-to-char ","))
(defconst context-coloring-BACKTICK-CHAR (string-to-char "`"))
(defun context-coloring-elisp-colorize-lambda ()
(context-coloring-elisp-colorize-defun t))
-(defun context-coloring-elisp-colorize-sexp ()
+(defun context-coloring-elisp-colorize-parenthesized-sexp ()
(let ((start (point))
end
syntax
(goto-char start)
(forward-sexp)))))
+(defun context-coloring-elisp-colorize-symbol ()
+ (let (symbol-pos
+ symbol-end
+ symbol-string)
+ (setq symbol-pos (point))
+ (forward-sexp)
+ (setq symbol-end (point))
+ (setq symbol-string (buffer-substring-no-properties
+ symbol-pos
+ symbol-end))
+ (cond
+ ((string-match-p context-coloring-ignored-word-regexp symbol-string))
+ (t
+ (context-coloring-colorize-region
+ symbol-pos
+ symbol-end
+ (context-coloring-elisp-get-variable-level
+ (buffer-substring-no-properties
+ symbol-pos
+ symbol-end)))))))
+
+(defun context-coloring-elisp-colorize-expression-prefix ()
+ (let (start
+ end
+ char)
+ (setq char (char-after))
+ (cond
+ ((= char context-coloring-APOSTROPHE-CHAR)
+ (forward-sexp))
+ ((= char context-coloring-BACKTICK-CHAR)
+ (setq start (point))
+ (forward-sexp)
+ (setq end (point))
+ (goto-char start)
+ (while (> end (progn (forward-char)
+ (point)))
+ (setq char (char-after))
+ (when (= char context-coloring-COMMA-CHAR)
+ (forward-char)
+ (skip-syntax-forward " ")
+ (context-coloring-elisp-colorize-sexp)))))))
+
+(defun context-coloring-elisp-colorize-sexp ()
+ (let (syntax
+ syntax-code)
+ (setq syntax (syntax-after (point)))
+ (setq syntax-code (syntax-class syntax))
+ (cond
+ ((= syntax-code context-coloring-OPEN-PARENTHESIS-CODE)
+ (context-coloring-elisp-colorize-parenthesized-sexp))
+ ((or (= syntax-code context-coloring-WORD-CODE)
+ (= syntax-code context-coloring-SYMBOL-CODE))
+ (context-coloring-elisp-colorize-symbol))
+ ((= syntax-code context-coloring-EXPRESSION-PREFIX-CODE)
+ (context-coloring-elisp-colorize-expression-prefix))
+ (t
+ (forward-char)))))
+
(defun context-coloring-elisp-colorize-region (start end)
(let (syntax
- syntax-code
- word-n-pos
- word-n-end)
+ syntax-code)
(goto-char start)
(while (> end (progn (skip-syntax-forward "^()w_'" end)
(point)))
(setq syntax (syntax-after (point)))
(setq syntax-code (syntax-class syntax))
(cond
- ((= syntax-code context-coloring-OPEN-PARENTHESIS-CODE)
+ ((or (= syntax-code context-coloring-OPEN-PARENTHESIS-CODE)
+ (= syntax-code context-coloring-WORD-CODE)
+ (= syntax-code context-coloring-SYMBOL-CODE)
+ (= syntax-code context-coloring-EXPRESSION-PREFIX-CODE))
(context-coloring-elisp-colorize-sexp))
- ((or (= syntax-code context-coloring-WORD-CODE)
- (= syntax-code context-coloring-SYMBOL-CODE))
- (setq word-n-pos (point))
- (forward-sexp)
- (setq word-n-end (point))
- (context-coloring-colorize-region
- word-n-pos
- word-n-end
- (context-coloring-elisp-get-variable-level
- (buffer-substring-no-properties
- word-n-pos
- word-n-end))))
(t
(forward-char))))))