[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode 7e9816d 4/5: Merge branch 'master' of vps.cvj
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode 7e9816d 4/5: Merge branch 'master' of vps.cvj.se:emacs-phps-mode |
Date: |
Tue, 2 Nov 2021 12:05:34 -0400 (EDT) |
branch: externals/phps-mode
commit 7e9816d31d43360103eaaa25305b453a4c88178b
Merge: 00e3a69 7fa869d
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Merge branch 'master' of vps.cvj.se:emacs-phps-mode
---
phps-mode-lex-analyzer.el | 864 +++++++++++++++++++++++++++++++++++-----------
phps-mode-lexer.el | 17 +-
2 files changed, 669 insertions(+), 212 deletions(-)
diff --git a/phps-mode-lex-analyzer.el b/phps-mode-lex-analyzer.el
index 1a6b793..4869a24 100644
--- a/phps-mode-lex-analyzer.el
+++ b/phps-mode-lex-analyzer.el
@@ -99,6 +99,607 @@
(defvar-local phps-mode-lex-analyzer--parse-error nil
"Non-nil means an error.")
+(defvar
+ phps-mode-lex-analyzer--token-for-bookkeeping-p
+ (make-hash-table :test 'equal)
+ "Tokens that are connected to the bookkeeping of symbols.")
+(puthash
+ 'T_VARIABLE
+ t
+ phps-mode-lex-analyzer--token-for-bookkeeping-p)
+(puthash
+ 'T_STRING
+ t
+ phps-mode-lex-analyzer--token-for-bookkeeping-p)
+
+(defvar
+ phps-mode-lex-analyzer--token-font-face
+ (make-hash-table :test 'equal)
+ "Token symbol to font face.")
+
+(puthash
+ 'T_ERROR
+ 'font-lock-warning-face
+ phps-mode-lex-analyzer--token-font-face)
+
+(puthash
+ 'T_OPEN_TAG
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_OPEN_TAG_WITH_ECHO
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_CLOSE_TAG
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_START_HEREDOC
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_END_HEREDOC
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ELLIPSIS
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_COALESCE
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_DOUBLE_ARROW
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_DOUBLE_ARROW
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_INC
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_DEC
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_IS_IDENTICAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_IS_NOT_IDENTICAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_IS_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_IS_NOT_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_SPACESHIP
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_IS_SMALLER_OR_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_IS_GREATER_OR_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_PLUS_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_MINUS_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_MUL_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_POW_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_POW
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_DIV_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_CONCAT_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_MOD_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_SL_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_SR_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_AND_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_OR_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_XOR_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_COALESCE_EQUAL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_BOOLEAN_OR
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_BOOLEAN_AND
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_BOOLEAN_XOR
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_LOGICAL_XOR
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_LOGICAL_OR
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_LOGICAL_AND
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_SL
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_SR
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_CLASS_C
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_TRAIT_C
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_FUNC_C
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_METHOD_C
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_LINE
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_FILE
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_DIR
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_NS_C
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_INT_CAST
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_DOUBLE_CAST
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_STRING_CAST
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ARRAY_CAST
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_OBJECT_CAST
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_BOOL_CAST
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_UNSET_CAST
+ 'font-lock-constant-face
+ phps-mode-lex-analyzer--token-font-face)
+
+(puthash
+ 'T_DOLLAR_OPEN_CURLY_BRACES
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_CURLY_OPEN
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_OBJECT_OPERATOR
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_NULLSAFE_OBJECT_OPERATOR
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_PAAMAYIM_NEKUDOTAYIM
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_NS_SEPARATOR
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_EXIT
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_RETURN
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_YIELD_FROM
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_YIELD
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_TRY
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_CATCH
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_FINALLY
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_THROW
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_IF
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ELSEIF
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ENDIF
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ELSE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_WHILE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ENDWHILE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_DO
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_FUNCTION
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_FN
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_CONST
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_FOREACH
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ENDFOREACH
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_FOR
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ENDFOR
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_DECLARE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ENDDECLARE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_INSTANCEOF
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_AS
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_SWITCH
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_MATCH
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ENDSWITCH
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_CASE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_DEFAULT
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_BREAK
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_CONTINUE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_GOTO
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ECHO
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_PRINT
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_CLASS
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_INTERFACE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_TRAIT
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_EXTENDS
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_IMPLEMENTS
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_NEW
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_CLONE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_VAR
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_EVAL
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_INCLUDE_ONCE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_INCLUDE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_REQUIRE_ONCE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_REQUIRE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_NAMESPACE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_USE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_INSTEADOF
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_GLOBAL
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ISSET
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_EMPTY
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_HALT_COMPILER
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_STATIC
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ABSTRACT
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_FINAL
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_PRIVATE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_PROTECTED
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_PUBLIC
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_UNSET
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_LIST
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ARRAY
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_CALLABLE
+ 'font-lock-keyword-face
+ phps-mode-lex-analyzer--token-font-face)
+
+(puthash
+ 'T_STRING
+ 'font-lock-string-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_CONSTANT_ENCAPSED_STRING
+ 'font-lock-string-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_ENCAPSED_AND_WHITESPACE
+ 'font-lock-string-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_NUM_STRING
+ 'font-lock-string-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_DNUMBER
+ 'font-lock-string-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_LNUMBER
+ 'font-lock-string-face
+ phps-mode-lex-analyzer--token-font-face)
+
+(puthash
+ 'T_INLINE_HTML
+ 'font-lock-preprocessor-face
+ phps-mode-lex-analyzer--token-font-face)
+
+(puthash
+ 'T_ATTRIBUTE
+ 'font-lock-doc-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_DOC_COMMENT
+ 'font-lock-doc-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_COMMENT
+ 'font-lock-doc-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'END
+ 'font-lock-doc-face
+ phps-mode-lex-analyzer--token-font-face)
+
+(puthash
+ 'T_VARIABLE
+ 'font-lock-variable-name-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_STRING_VARNAME
+ 'font-lock-variable-name-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_NAME_RELATIVE
+ 'font-lock-variable-name-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_NAME_QUALIFIED
+ 'font-lock-variable-name-face
+ phps-mode-lex-analyzer--token-font-face)
+(puthash
+ 'T_NAME_FULLY_QUALIFIED
+ 'font-lock-variable-name-face
+ phps-mode-lex-analyzer--token-font-face)
+
;; FUNCTIONS
@@ -129,194 +730,41 @@
(defun phps-mode-lex-analyzer--get-token-syntax-color (token)
"Return syntax color for TOKEN."
- ;; Syntax coloring
- ;; see
https://www.gnu.org/software/emacs/manual/html_node/elisp/Faces-for-Font-Lock.html#Faces-for-Font-Lock
- (let* ((start (car (cdr token)))
- (end (cdr (cdr token)))
- (bookkeeping-index (list start end))
- (token-name (car token)))
-
- ;; (message "Color token %s %s %s" token-name start end)
+ (let ((token-name (car token))
+ (start)
+ (end)
+ (bookkeeping-index)
+ (bookkeeping-value))
+ (when (gethash
+ token-name
+ phps-mode-lex-analyzer--token-for-bookkeeping-p)
+ (setq
+ start (car (cdr token)))
+ (setq
+ end (cdr (cdr token)))
+ (setq
+ bookkeeping-index
+ (list start end))
+ (setq
+ bookkeeping-value
+ (gethash
+ bookkeeping-index
+ phps-mode-lex-analyzer--bookkeeping)))
+
(cond
- ((and (or (equal token-name 'T_VARIABLE)
- (equal token-name 'T_STRING))
- (gethash bookkeeping-index phps-mode-lex-analyzer--bookkeeping))
- (let ((bookkeeping (gethash bookkeeping-index
phps-mode-lex-analyzer--bookkeeping)))
- (if (> bookkeeping 0)
- (list 'font-lock-face 'font-lock-variable-name-face)
- (list 'font-lock-face 'font-lock-warning-face))))
-
- ((or
- (equal token-name 'T_VARIABLE)
- (equal token-name 'T_STRING_VARNAME)
- (equal token-name 'T_NAME_RELATIVE)
- (equal token-name 'T_NAME_QUALIFIED)
- (equal token-name 'T_NAME_FULLY_QUALIFIED))
- (list 'font-lock-face 'font-lock-variable-name-face))
-
- ((or
- (equal token-name 'T_COMMENT)
- (equal token-name 'END))
- (list 'font-lock-face 'font-lock-comment-face))
-
- ((equal token-name 'T_DOC_COMMENT)
- (list 'font-lock-face 'font-lock-doc-face))
-
- ((equal token-name 'T_ATTRIBUTE)
- (list 'font-lock-face 'font-lock-doc-face))
-
- ((equal token-name 'T_INLINE_HTML)
- ;; NOTE T_INLINE_HTML is missing by purpose here to distinguish those
areas from other entities
- nil)
-
- ((or
- (equal token-name 'T_STRING)
- (equal token-name 'T_CONSTANT_ENCAPSED_STRING)
- (equal token-name 'T_ENCAPSED_AND_WHITESPACE)
- (equal token-name 'T_NUM_STRING)
- (equal token-name 'T_DNUMBER)
- (equal token-name 'T_LNUMBER))
- (list 'font-lock-face 'font-lock-string-face))
-
- ((or
- (equal token-name 'T_DOLLAR_OPEN_CURLY_BRACES)
- (equal token-name 'T_CURLY_OPEN)
- (equal token-name 'T_OBJECT_OPERATOR)
- (equal token-name 'T_NULLSAFE_OBJECT_OPERATOR)
- (equal token-name 'T_PAAMAYIM_NEKUDOTAYIM)
- (equal token-name 'T_NS_SEPARATOR)
- (equal token-name 'T_EXIT)
- (equal token-name 'T_RETURN)
- (equal token-name 'T_YIELD_FROM)
- (equal token-name 'T_YIELD)
- (equal token-name 'T_TRY)
- (equal token-name 'T_CATCH)
- (equal token-name 'T_FINALLY)
- (equal token-name 'T_THROW)
- (equal token-name 'T_IF)
- (equal token-name 'T_ELSEIF)
- (equal token-name 'T_ENDIF)
- (equal token-name 'T_ELSE)
- (equal token-name 'T_WHILE)
- (equal token-name 'T_ENDWHILE)
- (equal token-name 'T_DO)
- (equal token-name 'T_FUNCTION)
- (equal token-name 'T_FN)
- (equal token-name 'T_CONST)
- (equal token-name 'T_FOREACH)
- (equal token-name 'T_ENDFOREACH)
- (equal token-name 'T_FOR)
- (equal token-name 'T_ENDFOR)
- (equal token-name 'T_DECLARE)
- (equal token-name 'T_ENDDECLARE)
- (equal token-name 'T_INSTANCEOF)
- (equal token-name 'T_AS)
- (equal token-name 'T_SWITCH)
- (equal token-name 'T_MATCH)
- (equal token-name 'T_ENDSWITCH)
- (equal token-name 'T_CASE)
- (equal token-name 'T_DEFAULT)
- (equal token-name 'T_BREAK)
- (equal token-name 'T_CONTINUE)
- (equal token-name 'T_GOTO)
- (equal token-name 'T_ECHO)
- (equal token-name 'T_PRINT)
- (equal token-name 'T_CLASS)
- (equal token-name 'T_INTERFACE)
- (equal token-name 'T_TRAIT)
- (equal token-name 'T_EXTENDS)
- (equal token-name 'T_IMPLEMENTS)
- (equal token-name 'T_NEW)
- (equal token-name 'T_CLONE)
- (equal token-name 'T_VAR)
- (equal token-name 'T_EVAL)
- (equal token-name 'T_INCLUDE_ONCE)
- (equal token-name 'T_INCLUDE)
- (equal token-name 'T_REQUIRE_ONCE)
- (equal token-name 'T_REQUIRE)
- (equal token-name 'T_NAMESPACE)
- (equal token-name 'T_USE)
- (equal token-name 'T_INSTEADOF)
- (equal token-name 'T_GLOBAL)
- (equal token-name 'T_ISSET)
- (equal token-name 'T_EMPTY)
- (equal token-name 'T_HALT_COMPILER)
- (equal token-name 'T_STATIC)
- (equal token-name 'T_ABSTRACT)
- (equal token-name 'T_FINAL)
- (equal token-name 'T_PRIVATE)
- (equal token-name 'T_PROTECTED)
- (equal token-name 'T_PUBLIC)
- (equal token-name 'T_UNSET)
- (equal token-name 'T_LIST)
- (equal token-name 'T_ARRAY)
- (equal token-name 'T_CALLABLE)
- )
- (list 'font-lock-face 'font-lock-keyword-face))
-
- ((or
- (equal token-name 'T_OPEN_TAG)
- (equal token-name 'T_OPEN_TAG_WITH_ECHO)
- (equal token-name 'T_CLOSE_TAG)
- (equal token-name 'T_START_HEREDOC)
- (equal token-name 'T_END_HEREDOC)
- (equal token-name 'T_ELLIPSIS)
- (equal token-name 'T_COALESCE)
- (equal token-name 'T_DOUBLE_ARROW)
- (equal token-name 'T_INC)
- (equal token-name 'T_DEC)
- (equal token-name 'T_IS_IDENTICAL)
- (equal token-name 'T_IS_NOT_IDENTICAL)
- (equal token-name 'T_IS_EQUAL)
- (equal token-name 'T_IS_NOT_EQUAL)
- (equal token-name 'T_SPACESHIP)
- (equal token-name 'T_IS_SMALLER_OR_EQUAL)
- (equal token-name 'T_IS_GREATER_OR_EQUAL)
- (equal token-name 'T_PLUS_EQUAL)
- (equal token-name 'T_MINUS_EQUAL)
- (equal token-name 'T_MUL_EQUAL)
- (equal token-name 'T_POW_EQUAL)
- (equal token-name 'T_POW)
- (equal token-name 'T_DIV_EQUAL)
- (equal token-name 'T_CONCAT_EQUAL)
- (equal token-name 'T_MOD_EQUAL)
- (equal token-name 'T_SL_EQUAL)
- (equal token-name 'T_SR_EQUAL)
- (equal token-name 'T_AND_EQUAL)
- (equal token-name 'T_OR_EQUAL)
- (equal token-name 'T_XOR_EQUAL)
- (equal token-name 'T_COALESCE_EQUAL)
- (equal token-name 'T_BOOLEAN_OR)
- (equal token-name 'T_BOOLEAN_AND)
- (equal token-name 'T_BOOLEAN_XOR)
- (equal token-name 'T_LOGICAL_XOR)
- (equal token-name 'T_LOGICAL_OR)
- (equal token-name 'T_LOGICAL_AND)
- (equal token-name 'T_SL)
- (equal token-name 'T_SR)
- (equal token-name 'T_CLASS_C)
- (equal token-name 'T_TRAIT_C)
- (equal token-name 'T_FUNC_C)
- (equal token-name 'T_METHOD_C)
- (equal token-name 'T_LINE)
- (equal token-name 'T_FILE)
- (equal token-name 'T_DIR)
- (equal token-name 'T_NS_C)
- (equal token-name 'T_INT_CAST)
- (equal token-name 'T_DOUBLE_CAST)
- (equal token-name 'T_STRING_CAST)
- (equal token-name 'T_ARRAY_CAST)
- (equal token-name 'T_OBJECT_CAST)
- (equal token-name 'T_BOOL_CAST)
- (equal token-name 'T_UNSET_CAST)
- )
- (list 'font-lock-face 'font-lock-constant-face))
-
- ((equal token-name 'T_ERROR)
- (list 'font-lock-face 'font-lock-warning-face))
-
- (t (list 'font-lock-face 'font-lock-constant-face)))))
+ ((when bookkeeping-value
+ (if (> bookkeeping-value 0)
+ 'font-lock-variable-name-face
+ 'font-lock-warning-face)))
+
+ ((when-let ((face
+ (gethash
+ token-name
+ phps-mode-lex-analyzer--token-font-face)))
+ face))
+
+ (t 'font-lock-constant-face))))
;; LEXERS
@@ -345,7 +793,7 @@
(let ((token-syntax-color
(phps-mode-lex-analyzer--get-token-syntax-color token)))
(if token-syntax-color
- (phps-mode-lex-analyzer--set-region-syntax-color start end
token-syntax-color)
+ (phps-mode-lex-analyzer--set-region-syntax-color start end
(list 'font-lock-face token-syntax-color))
(phps-mode-lex-analyzer--clear-region-syntax-color start
end)))
(semantic-lex-push-token
@@ -388,16 +836,17 @@
buffer-name
(lambda()
- (let* ((lex-result
+ (let ((lex-result
(phps-mode-lex-analyzer--lex-string
- buffer-contents))
- (processed-result
- (phps-mode-lex-analyzer--process-tokens-in-string
- (nth 0 lex-result)
buffer-contents)))
- (list
- lex-result
- processed-result)))
+ (thread-yield)
+ (let ((processed-result
+ (phps-mode-lex-analyzer--process-tokens-in-string
+ (nth 0 lex-result)
+ buffer-contents)))
+ (list
+ lex-result
+ processed-result))))
(lambda(result)
(when (get-buffer buffer-name)
@@ -422,6 +871,7 @@
(setq phps-mode-lex-analyzer--lines-indent (nth 1
processed-result))
(setq phps-mode-lex-analyzer--bookkeeping (nth 2
processed-result))
(phps-mode-lex-analyzer--reset-imenu)
+ (thread-yield)
;; Apply syntax color on tokens
(dolist (token phps-mode-lex-analyzer--tokens)
@@ -429,7 +879,7 @@
(end (cdr (cdr token))))
(let ((token-syntax-color
(phps-mode-lex-analyzer--get-token-syntax-color token)))
(if token-syntax-color
- (phps-mode-lex-analyzer--set-region-syntax-color start
end token-syntax-color)
+ (phps-mode-lex-analyzer--set-region-syntax-color start
end (list 'font-lock-face token-syntax-color))
(phps-mode-lex-analyzer--clear-region-syntax-color start
end)))))
@@ -514,7 +964,7 @@
buffer-name
(lambda()
- (let* ((lex-result
+ (let ((lex-result
(phps-mode-lex-analyzer--lex-string
buffer-contents
incremental-start-new-buffer
@@ -525,14 +975,15 @@
incremental-heredoc-label
incremental-heredoc-label-stack
incremental-nest-location-stack
- head-tokens))
- (processed-result
- (phps-mode-lex-analyzer--process-tokens-in-string
- (nth 0 lex-result)
- buffer-contents)))
- (list
- lex-result
- processed-result)))
+ head-tokens)))
+ (thread-yield)
+ (let ((processed-result
+ (phps-mode-lex-analyzer--process-tokens-in-string
+ (nth 0 lex-result)
+ buffer-contents)))
+ (list
+ lex-result
+ processed-result))))
(lambda(result)
(when (get-buffer buffer-name)
@@ -562,6 +1013,7 @@
(setq phps-mode-lex-analyzer--lines-indent (nth 1
processed-result))
(setq phps-mode-lex-analyzer--bookkeeping (nth 2
processed-result))
(phps-mode-lex-analyzer--reset-imenu)
+ (thread-yield)
;; Apply syntax color on tokens
(dolist (token phps-mode-lex-analyzer--tokens)
@@ -571,7 +1023,7 @@
;; Apply syntax color on token
(let ((token-syntax-color
(phps-mode-lex-analyzer--get-token-syntax-color token)))
(if token-syntax-color
- (phps-mode-lex-analyzer--set-region-syntax-color start
end token-syntax-color)
+ (phps-mode-lex-analyzer--set-region-syntax-color start
end (list 'font-lock-face token-syntax-color))
(phps-mode-lex-analyzer--clear-region-syntax-color start
end)))))
;; Signal parser error (if any)
diff --git a/phps-mode-lexer.el b/phps-mode-lexer.el
index ba1d661..80d1ee0 100644
--- a/phps-mode-lexer.el
+++ b/phps-mode-lexer.el
@@ -493,11 +493,11 @@
(buffer-substring-no-properties
start
end))
- (message
- "\nRunning lexer from point %s, state: %s, lookahead: '%s'.."
- old-start
- phps-mode-lexer--state
- lookahead)))
+ (message
+ "\nRunning lexer from point %s, state: %s, lookahead: '%s'.."
+ old-start
+ phps-mode-lexer--state
+ lookahead)))
(phps-mode-lexer--reset-match-data)
(let ((SHEBANG (equal phps-mode-lexer--state 'SHEBANG))
@@ -848,6 +848,8 @@
phps-mode-lexer--tabs-and-spaces ")")))
(phps-mode-lexer--return-token 'T_UNSET_CAST))
+ (thread-yield)
+
(phps-mode-lexer--match-macro
(and ST_IN_SCRIPTING (looking-at "eval"))
(phps-mode-lexer--return-token-with-indent 'T_EVAL))
@@ -1151,6 +1153,8 @@
(phps-mode-lexer--return-token 'T_DNUMBER)
(phps-mode-lexer--return-token 'T_LNUMBER))))
+ (thread-yield)
+
(phps-mode-lexer--match-macro
(and ST_VAR_OFFSET (looking-at "\\([0]\\|[1-9][0-9]*\\)"))
(phps-mode-lexer--return-token 'T_NUM_STRING))
@@ -1827,7 +1831,8 @@
(message "Restarting lexer"))
(phps-mode-lexer--re2c)))
(phps-mode-debug-message
- (message "Found nothing at %d" (point)))))))
+ (message "Found nothing at %d" (point))))))
+ (thread-yield))
(provide 'phps-mode-lexer)