[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode e89976c: Error-handling and presentation of l
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode e89976c: Error-handling and presentation of lexer errors |
Date: |
Thu, 19 Dec 2019 06:30:44 -0500 (EST) |
branch: externals/phps-mode
commit e89976c46c38fe4e4f94aee6f40cf5bf14e8fd65
Author: Christian Johansson <address@hidden>
Commit: Christian Johansson <address@hidden>
Error-handling and presentation of lexer errors
---
docs/todo.md | 1 +
phps-mode-analyzer.el | 2610 ++++++++++++++++++++++--------------------
phps-mode.el | 6 +-
test/phps-mode-test-lexer.el | 6 +-
4 files changed, 1365 insertions(+), 1258 deletions(-)
diff --git a/docs/todo.md b/docs/todo.md
index d69500b..7746bed 100644
--- a/docs/todo.md
+++ b/docs/todo.md
@@ -11,5 +11,6 @@
* Eldoc support (0%)
* Flymake support (0%)
* PSR-2 auto-formatting tool based on lexer tokens (0%)
+* Alternative indentation for inline control structures (0%)
[Back to start](../../../)
diff --git a/phps-mode-analyzer.el b/phps-mode-analyzer.el
index 36d5bf1..56176da 100644
--- a/phps-mode-analyzer.el
+++ b/phps-mode-analyzer.el
@@ -183,7 +183,7 @@
;; (message "Going back to poppped state %s" old-state)
(if old-state
(phps-mode-lexer-BEGIN old-state)
- (display-warning 'phps-mode "PHPs Lexer Error - Going back to nil?"))))
+ (signal 'error (list "PHPs Lexer Error - Going back from state to
nil?")))))
(defun phps-mode-lexer-MOVE_FORWARD (position)
"Move forward to POSITION."
@@ -384,17 +384,11 @@
(defun phps-mode-lexer-RETURN_TOKEN (token start end)
"Push TOKEN to list with START and END."
-(phps-mode-analyzer-emit-token token start end))
+ (phps-mode-analyzer-emit-token token start end))
(defun phps-mode-analyzer-emit-token (token start end)
"Emit TOKEN with START and END."
- ;; Colourize token
- (let ((token-syntax-color (phps-mode-lexer-get-token-syntax-color token)))
- (if token-syntax-color
- (phps-mode-lexer-set-region-syntax-color start end token-syntax-color)
- (phps-mode-lexer-clear-region-syntax-color start end)))
-
;; (when (and
;; (equal token 'T_INLINE_HTML)
;; phps-mode-inline-mmm-submode
@@ -442,14 +436,12 @@
;; (message "Found match %s" phps-mode-lexer-re2c-matching-data)
(set-match-data phps-mode-lexer-re2c-matching-data)
(funcall phps-mode-lexer-re2c-matching-body))
- (error "Failed to lex input")))
+ (signal 'error (list "Found no matching lexer rule to execute"))))
;; LEXERS
-;; If multiple rules match, re2c prefers the longest match. If rules match the
same string, the earlier rule has priority.
-;; @see http://re2c.org/manual/syntax/syntax.html
-(define-lex-analyzer phps-mode-lexer-lex-analyzer
+(define-lex-analyzer phps-mode-analyzer-lexer
"Elisp port of original Zend re2c lexer."
t
@@ -467,1264 +459,1284 @@
(let ((start (car (cdr token)))
(end (cdr (cdr token)))
(token-name (car token)))
+
+ ;; Apply syntax color on token
+ (let ((token-syntax-color
(phps-mode-lexer-get-token-syntax-color token-name)))
+ (if token-syntax-color
+ (phps-mode-lexer-set-region-syntax-color start end
token-syntax-color)
+ (phps-mode-lexer-clear-region-syntax-color start end)))
+
(semantic-lex-push-token
(semantic-lex-token token-name start end))))
(phps-mode-lexer-MOVE_FORWARD (point-max)))
- (phps-mode-debug-message (message "Running lexer from %s" old-start))
-
- (let ((heredoc_label (car phps-mode-lexer-heredoc_label_stack))
- (SHEBANG (equal phps-mode-lexer-STATE 'SHEBANG))
- (ST_IN_SCRIPTING (equal phps-mode-lexer-STATE 'ST_IN_SCRIPTING))
- (ST_INITIAL (equal phps-mode-lexer-STATE 'ST_INITIAL))
- (ST_LOOKING_FOR_PROPERTY (equal phps-mode-lexer-STATE
'ST_LOOKING_FOR_PROPERTY))
- (ST_DOUBLE_QUOTES (equal phps-mode-lexer-STATE 'ST_DOUBLE_QUOTES))
- (ST_BACKQUOTE (equal phps-mode-lexer-STATE 'ST_BACKQUOTE))
- (ST_HEREDOC (equal phps-mode-lexer-STATE 'ST_HEREDOC))
- (ST_NOWDOC (equal phps-mode-lexer-STATE 'ST_NOWDOC))
- (ST_LOOKING_FOR_VARNAME (equal phps-mode-lexer-STATE
'ST_LOOKING_FOR_VARNAME))
- (ST_END_HEREDOC (equal phps-mode-lexer-STATE 'ST_END_HEREDOC))
- (ST_VAR_OFFSET (equal phps-mode-lexer-STATE 'ST_VAR_OFFSET)))
-
- ;; Reset re2c flags
- (setq phps-mode-lexer-re2c-matching-body nil)
- (setq phps-mode-lexer-re2c-matching-length nil)
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "exit"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_EXIT (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "die"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_DIE (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "fn"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_FN (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "function"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_FUNCTION (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "const"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_CONST (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "return"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_RETURN (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING
- (looking-at
- (concat "yield" phps-mode-lexer-WHITESPACE "from"
"[^a-zA-Z0-9_\x80-\xff]")))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_YIELD_FROM (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "yield"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_YIELD (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "try"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_TRY (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "catch"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_CATCH (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "finally"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_FINALLY (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "throw"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_THROW (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "if"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_IF (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "elseif"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_ELSEIF (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "endif"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_ENDIF (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "else"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_ELSE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "while"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_WHILE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "endwhile"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_ENDWHILE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "do"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_DO (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "for"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_FOR (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "endfor"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_ENDFOR (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "foreach"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_FOREACH (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "endforeach"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_ENDFOREACH (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "declare"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_DECLARE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "enddeclare"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_ENDDECLARE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "instanceof"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_INSTANCEOF (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "as"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_AS (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "switch"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_SWITCH (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "endswitch"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_ENDSWITCH (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "case"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_CASE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "default"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_DEFAULT (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "break"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_BREAK (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "continue"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_CONTINUE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "goto"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_GOTO (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "echo"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_ECHO (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "print"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_PRINT (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "class"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_CLASS (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "interface"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_INTERFACE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "trait"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_TRAIT (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "extends"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_EXTENDS (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "implements"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_IMPLEMENTS (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "->"))
- (lambda()
- (phps-mode-lexer-yy_push_state 'ST_LOOKING_FOR_PROPERTY)
- (phps-mode-lexer-RETURN_TOKEN 'T_OBJECT_OPERATOR (match-beginning
0) (match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and (or ST_IN_SCRIPTING ST_LOOKING_FOR_PROPERTY)
- (looking-at phps-mode-lexer-WHITESPACE))
- (lambda()
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (data (buffer-substring-no-properties start end)))
- (if (phps-mode-wy-macros-CG 'PARSER_MODE)
- (phps-mode-lexer-MOVE_FORWARD end)
- (phps-mode-lexer-RETURN_TOKEN data start end)))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_LOOKING_FOR_PROPERTY (looking-at "->"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_OBJECT_OPERATOR (match-beginning
0) (match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_LOOKING_FOR_PROPERTY (looking-at phps-mode-lexer-LABEL))
- (lambda()
- (let ((start (match-beginning 0))
- (end (match-end 0)))
- (phps-mode-lexer-yy_pop_state)
- (phps-mode-lexer-RETURN_TOKEN 'T_STRING start end))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_LOOKING_FOR_PROPERTY (looking-at phps-mode-lexer-ANY_CHAR))
- (lambda()
- (let ((end (match-end 0)))
- (phps-mode-lexer-yy_pop_state)
- ;; TODO goto restart here?
- ;; (message "Restart here")
- (phps-mode-lexer-MOVE_FORWARD end))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "::"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_PAAMAYIM_NEKUDOTAYIM
(match-beginning 0) (match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "\\\\"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_NS_SEPARATOR (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "\\.\\.\\."))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_ELLIPSIS (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "\\?\\?"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_COALESCE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "new"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_NEW (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "clone"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_CLONE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "var"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_VAR (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer-TABS_AND_SPACES
- "\\(int\\|integer\\)"
- phps-mode-lexer-TABS_AND_SPACES
- ")")))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_INT_CAST (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer-TABS_AND_SPACES
- "\\(double\\|float\\)"
- phps-mode-lexer-TABS_AND_SPACES
- ")")))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_DOUBLE_CAST (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer-TABS_AND_SPACES
- "\\(real\\)"
- phps-mode-lexer-TABS_AND_SPACES
- ")")))
- (lambda()
- (when (phps-mode-wy-macros-CG 'PARSER_MODE)
- (display-warning 'phps-mode "PHPs Lexer Error - The (real) cast
is deprecated, use (float) instead"))
- (phps-mode-lexer-RETURN_TOKEN 'T_DOUBLE_CAST (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer-TABS_AND_SPACES
- "\\(string\\|binary\\)"
- phps-mode-lexer-TABS_AND_SPACES
- ")")))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_STRING_CAST (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer-TABS_AND_SPACES
- "array"
- phps-mode-lexer-TABS_AND_SPACES
- ")")))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_ARRAY_CAST (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer-TABS_AND_SPACES
- "object"
- phps-mode-lexer-TABS_AND_SPACES
- ")")))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_OBJECT_CAST (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at (concat "("
phps-mode-lexer-TABS_AND_SPACES "\\(bool\\|boolean\\)"
phps-mode-lexer-TABS_AND_SPACES ")")))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_BOOL_CAST (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer-TABS_AND_SPACES
- "unset"
- phps-mode-lexer-TABS_AND_SPACES ")")))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_UNSET_CAST (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "eval"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_EVAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "include"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_INCLUDE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "include_once"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_INCLUDE_ONCE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "require"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_REQUIRE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "require_once"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_REQUIRE_ONCE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "namespace"))
- (lambda()
- (setq phps-mode-lexer-declaring_namespace t)
- (phps-mode-lexer-RETURN_TOKEN 'T_NAMESPACE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "use"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_USE (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "insteadof"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_INSTEADOF (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "global"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_GLOBAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "isset"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_ISSET (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "empty"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_EMPTY (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "__halt_compiler"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_HALT_COMPILER (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "static"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_STATIC (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "abstract"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_ABSTRACT (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "final"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_FINAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "private"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_PRIVATE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "protected"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_PROTECTED (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "public"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_PUBLIC (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "unset"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_UNSET (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "=>"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_DOUBLE_ARROW (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "list"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_LIST (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "array"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_ARRAY (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "callable"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_CALLABLE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "\\+\\+"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_INC (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "--"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_DEC (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "==="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_IS_IDENTICAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "!=="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_IS_NOT_IDENTICAL (match-beginning
0) (match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "=="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_IS_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "\\(!=\\|<>\\)"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_IS_NOT_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "<=>"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_SPACESHIP (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "<="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_IS_SMALLER_OR_EQUAL
(match-beginning 0) (match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at ">="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_IS_GREATER_OR_EQUAL
(match-beginning 0) (match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "\\+="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_PLUS_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "-="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_MINUS_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "\\*="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_MUL_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "\\*\\\\\\*="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_POW_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "\\*\\\\\\*"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_POW (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "/="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_DIV_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "\\.="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_CONCAT_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "%="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_MOD_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "<<="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_SL_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at ">>="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_SR_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "&="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_AND_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "|="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_OR_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "\\^="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_XOR_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "\\?\\?="))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_COALESCE_EQUAL (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "||"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_BOOLEAN_OR (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "&&"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_BOOLEAN_AND (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "OR"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_OR (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "AND"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_AND (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "XOR"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_XOR (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "<<"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_SL (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at ">>"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_SR (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-TOKENS))
- (lambda()
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (data (buffer-substring-no-properties start end))
- (use-brace nil))
- ;; (message "Found token '%s'" data)
- (when phps-mode-lexer-declaring_namespace
- (when (string= data ";")
- (setq phps-mode-lexer-prepend_trailing_brace t)
- ;; (message "Set flag prepend trailing brace")
- ;; (setq use-brace t)
- )
- (setq phps-mode-lexer-declaring_namespace nil))
- (if use-brace
- (phps-mode-lexer-RETURN_TOKEN "{" start end)
- (phps-mode-lexer-RETURN_TOKEN data start end)))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "{"))
- (lambda()
- (phps-mode-lexer-yy_push_state 'ST_IN_SCRIPTING)
+ (phps-mode-lexer-set-region-syntax-color
+ (point-min)
+ (point-max)
+ (list 'font-lock-face 'font-lock-warning-face))
+
+ (semantic-lex-push-token
+ (semantic-lex-token 'T_ERROR (point-min) (point-max))))))
+
+;; If multiple rules match, re2c prefers the longest match. If rules match the
same string, the earlier rule has priority.
+;; @see http://re2c.org/manual/syntax/syntax.html
+(define-lex-analyzer phps-mode-analyzer-re2c-lexer
+ "Elisp port of original Zend re2c lexer."
+ t
+
+ (let ((old-start (point)))
+
+ (phps-mode-debug-message (message "Running lexer from %s" old-start))
+
+ (let ((heredoc_label (car phps-mode-lexer-heredoc_label_stack))
+ (SHEBANG (equal phps-mode-lexer-STATE 'SHEBANG))
+ (ST_IN_SCRIPTING (equal phps-mode-lexer-STATE 'ST_IN_SCRIPTING))
+ (ST_INITIAL (equal phps-mode-lexer-STATE 'ST_INITIAL))
+ (ST_LOOKING_FOR_PROPERTY (equal phps-mode-lexer-STATE
'ST_LOOKING_FOR_PROPERTY))
+ (ST_DOUBLE_QUOTES (equal phps-mode-lexer-STATE 'ST_DOUBLE_QUOTES))
+ (ST_BACKQUOTE (equal phps-mode-lexer-STATE 'ST_BACKQUOTE))
+ (ST_HEREDOC (equal phps-mode-lexer-STATE 'ST_HEREDOC))
+ (ST_NOWDOC (equal phps-mode-lexer-STATE 'ST_NOWDOC))
+ (ST_LOOKING_FOR_VARNAME (equal phps-mode-lexer-STATE
'ST_LOOKING_FOR_VARNAME))
+ (ST_END_HEREDOC (equal phps-mode-lexer-STATE 'ST_END_HEREDOC))
+ (ST_VAR_OFFSET (equal phps-mode-lexer-STATE 'ST_VAR_OFFSET)))
+
+ ;; Reset re2c flags
+ (setq phps-mode-lexer-re2c-matching-body nil)
+ (setq phps-mode-lexer-re2c-matching-length nil)
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "exit"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_EXIT (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "die"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_DIE (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "fn"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_FN (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "function"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_FUNCTION (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "const"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_CONST (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "return"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_RETURN (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING
+ (looking-at
+ (concat "yield" phps-mode-lexer-WHITESPACE "from"
"[^a-zA-Z0-9_\x80-\xff]")))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_YIELD_FROM (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "yield"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_YIELD (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "try"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_TRY (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "catch"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_CATCH (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "finally"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_FINALLY (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "throw"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_THROW (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "if"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_IF (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "elseif"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_ELSEIF (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "endif"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_ENDIF (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "else"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_ELSE (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "while"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_WHILE (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "endwhile"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_ENDWHILE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "do"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_DO (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "for"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_FOR (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "endfor"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_ENDFOR (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "foreach"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_FOREACH (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "endforeach"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_ENDFOREACH (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "declare"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_DECLARE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "enddeclare"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_ENDDECLARE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "instanceof"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_INSTANCEOF (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "as"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_AS (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "switch"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_SWITCH (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "endswitch"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_ENDSWITCH (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "case"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_CASE (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "default"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_DEFAULT (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "break"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_BREAK (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "continue"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_CONTINUE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "goto"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_GOTO (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "echo"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_ECHO (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "print"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_PRINT (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "class"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_CLASS (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "interface"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_INTERFACE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "trait"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_TRAIT (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "extends"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_EXTENDS (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "implements"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_IMPLEMENTS (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "->"))
+ (lambda()
+ (phps-mode-lexer-yy_push_state 'ST_LOOKING_FOR_PROPERTY)
+ (phps-mode-lexer-RETURN_TOKEN 'T_OBJECT_OPERATOR (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and (or ST_IN_SCRIPTING ST_LOOKING_FOR_PROPERTY)
+ (looking-at phps-mode-lexer-WHITESPACE))
+ (lambda()
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (data (buffer-substring-no-properties start end)))
+ (if (phps-mode-wy-macros-CG 'PARSER_MODE)
+ (phps-mode-lexer-MOVE_FORWARD end)
+ (phps-mode-lexer-RETURN_TOKEN data start end)))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_LOOKING_FOR_PROPERTY (looking-at "->"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_OBJECT_OPERATOR (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_LOOKING_FOR_PROPERTY (looking-at phps-mode-lexer-LABEL))
+ (lambda()
+ (let ((start (match-beginning 0))
+ (end (match-end 0)))
+ (phps-mode-lexer-yy_pop_state)
+ (phps-mode-lexer-RETURN_TOKEN 'T_STRING start end))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_LOOKING_FOR_PROPERTY (looking-at phps-mode-lexer-ANY_CHAR))
+ (lambda()
+ (let ((end (match-end 0)))
+ (phps-mode-lexer-yy_pop_state)
+ ;; TODO goto restart here?
+ ;; (message "Restart here")
+ (phps-mode-lexer-MOVE_FORWARD end))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "::"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_PAAMAYIM_NEKUDOTAYIM
(match-beginning 0) (match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "\\\\"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_NS_SEPARATOR (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "\\.\\.\\."))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_ELLIPSIS (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "\\?\\?"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_COALESCE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "new"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_NEW (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "clone"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_CLONE (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "var"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_VAR (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer-TABS_AND_SPACES
+ "\\(int\\|integer\\)"
+ phps-mode-lexer-TABS_AND_SPACES
+ ")")))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_INT_CAST (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer-TABS_AND_SPACES
+ "\\(double\\|float\\)"
+ phps-mode-lexer-TABS_AND_SPACES
+ ")")))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_DOUBLE_CAST (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer-TABS_AND_SPACES
+ "\\(real\\)"
+ phps-mode-lexer-TABS_AND_SPACES
+ ")")))
+ (lambda()
+ (when (phps-mode-wy-macros-CG 'PARSER_MODE)
+ (signal 'phps-mode (list "PHPs Lexer Error - The (real) cast is
deprecated, use (float) instead")))
+ (phps-mode-lexer-RETURN_TOKEN 'T_DOUBLE_CAST (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer-TABS_AND_SPACES
+ "\\(string\\|binary\\)"
+ phps-mode-lexer-TABS_AND_SPACES
+ ")")))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_STRING_CAST (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer-TABS_AND_SPACES
+ "array"
+ phps-mode-lexer-TABS_AND_SPACES
+ ")")))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_ARRAY_CAST (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer-TABS_AND_SPACES
+ "object"
+ phps-mode-lexer-TABS_AND_SPACES
+ ")")))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_OBJECT_CAST (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at (concat "("
phps-mode-lexer-TABS_AND_SPACES "\\(bool\\|boolean\\)"
phps-mode-lexer-TABS_AND_SPACES ")")))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_BOOL_CAST (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer-TABS_AND_SPACES
+ "unset"
+ phps-mode-lexer-TABS_AND_SPACES ")")))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_UNSET_CAST (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "eval"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_EVAL (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "include"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_INCLUDE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "include_once"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_INCLUDE_ONCE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "require"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_REQUIRE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "require_once"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_REQUIRE_ONCE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "namespace"))
+ (lambda()
+ (setq phps-mode-lexer-declaring_namespace t)
+ (phps-mode-lexer-RETURN_TOKEN 'T_NAMESPACE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "use"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_USE (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "insteadof"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_INSTEADOF (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "global"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_GLOBAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "isset"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_ISSET (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "empty"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_EMPTY (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "__halt_compiler"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_HALT_COMPILER (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "static"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_STATIC (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "abstract"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_ABSTRACT (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "final"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_FINAL (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "private"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_PRIVATE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "protected"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_PROTECTED (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "public"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_PUBLIC (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "unset"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_UNSET (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "=>"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_DOUBLE_ARROW (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "list"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_LIST (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "array"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_ARRAY (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "callable"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_CALLABLE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "\\+\\+"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_INC (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "--"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_DEC (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "==="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_IS_IDENTICAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "!=="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_IS_NOT_IDENTICAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "=="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_IS_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "\\(!=\\|<>\\)"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_IS_NOT_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "<=>"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_SPACESHIP (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "<="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_IS_SMALLER_OR_EQUAL (match-beginning
0) (match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at ">="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_IS_GREATER_OR_EQUAL (match-beginning
0) (match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "\\+="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_PLUS_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "-="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_MINUS_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "\\*="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_MUL_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "\\*\\\\\\*="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_POW_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "\\*\\\\\\*"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_POW (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "/="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_DIV_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "\\.="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_CONCAT_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "%="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_MOD_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "<<="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_SL_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at ">>="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_SR_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "&="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_AND_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "|="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_OR_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "\\^="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_XOR_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "\\?\\?="))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_COALESCE_EQUAL (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "||"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_BOOLEAN_OR (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "&&"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_BOOLEAN_AND (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "OR"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_OR (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "AND"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_AND (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "XOR"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_XOR (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "<<"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_SL (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at ">>"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_SR (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-TOKENS))
+ (lambda()
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (data (buffer-substring-no-properties start end))
+ (use-brace nil))
+ ;; (message "Found token '%s'" data)
(when phps-mode-lexer-declaring_namespace
+ (when (string= data ";")
+ (setq phps-mode-lexer-prepend_trailing_brace t)
+ ;; (message "Set flag prepend trailing brace")
+ ;; (setq use-brace t)
+ )
(setq phps-mode-lexer-declaring_namespace nil))
- (phps-mode-lexer-RETURN_TOKEN "{" (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and (or ST_DOUBLE_QUOTES ST_BACKQUOTE ST_HEREDOC) (looking-at
"\\${"))
- (lambda()
- (phps-mode-lexer-yy_push_state 'ST_LOOKING_FOR_VARNAME)
- (phps-mode-lexer-RETURN_TOKEN 'T_DOLLAR_OPEN_CURLY_BRACES
(match-beginning 0) (match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "}"))
- (lambda()
- (when phps-mode-lexer-state_stack
- (phps-mode-lexer-yy_pop_state))
- (phps-mode-lexer-RETURN_TOKEN "}" (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_LOOKING_FOR_VARNAME (looking-at (concat phps-mode-lexer-LABEL
"[\\[}]")))
- (lambda()
- (let ((start (match-beginning 0))
- (end (- (match-end 0) 1)))
- ;; (message "Stopped here")
- (phps-mode-lexer-yy_pop_state)
- (phps-mode-lexer-yy_push_state 'ST_IN_SCRIPTING)
- (phps-mode-lexer-RETURN_TOKEN 'T_STRING_VARNAME start end))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_LOOKING_FOR_VARNAME (looking-at phps-mode-lexer-ANY_CHAR))
- (lambda()
+ (if use-brace
+ (phps-mode-lexer-RETURN_TOKEN "{" start end)
+ (phps-mode-lexer-RETURN_TOKEN data start end)))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "{"))
+ (lambda()
+ (phps-mode-lexer-yy_push_state 'ST_IN_SCRIPTING)
+ (when phps-mode-lexer-declaring_namespace
+ (setq phps-mode-lexer-declaring_namespace nil))
+ (phps-mode-lexer-RETURN_TOKEN "{" (match-beginning 0) (match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and (or ST_DOUBLE_QUOTES ST_BACKQUOTE ST_HEREDOC) (looking-at "\\${"))
+ (lambda()
+ (phps-mode-lexer-yy_push_state 'ST_LOOKING_FOR_VARNAME)
+ (phps-mode-lexer-RETURN_TOKEN 'T_DOLLAR_OPEN_CURLY_BRACES
(match-beginning 0) (match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "}"))
+ (lambda()
+ (when phps-mode-lexer-state_stack
+ (phps-mode-lexer-yy_pop_state))
+ (phps-mode-lexer-RETURN_TOKEN "}" (match-beginning 0) (match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_LOOKING_FOR_VARNAME (looking-at (concat phps-mode-lexer-LABEL
"[\\[}]")))
+ (lambda()
+ (let ((start (match-beginning 0))
+ (end (- (match-end 0) 1)))
+ ;; (message "Stopped here")
(phps-mode-lexer-yy_pop_state)
- (phps-mode-lexer-yy_push_state 'ST_IN_SCRIPTING)))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-BNUM))
- (lambda()
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (data (buffer-substring-no-properties (+ start 2) end))
- (long-number (string-to-number data 2)))
- ;; (message "Binary number %s from %s" long-number data)
- (if (> long-number phps-mode-lexer-long-limit)
- (phps-mode-lexer-RETURN_TOKEN 'T_DNUMBER start end)
- (phps-mode-lexer-RETURN_TOKEN 'T_LNUMBER start end)))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-LNUM))
- (lambda()
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (data (string-to-number (buffer-substring-no-properties
start end))))
- ;; (message "Long number: %d" data)
- (if (> data phps-mode-lexer-long-limit)
- (phps-mode-lexer-RETURN_TOKEN 'T_DNUMBER start end)
- (phps-mode-lexer-RETURN_TOKEN 'T_LNUMBER start end)))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-HNUM))
- (lambda()
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (data (buffer-substring-no-properties (+ start 2) end))
- (long-number (string-to-number data 16)))
- ;; (message "Hexadecimal number %s from %s" long-number data)
- (if (> long-number phps-mode-lexer-long-limit)
- (phps-mode-lexer-RETURN_TOKEN 'T_DNUMBER start end)
- (phps-mode-lexer-RETURN_TOKEN 'T_LNUMBER start end)))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_VAR_OFFSET (looking-at "\\([0]\\|[1-9][0-9]*\\)"))
- (lambda()
- (let ((start (match-beginning 0))
- (end (match-end 0)))
- (phps-mode-lexer-RETURN_TOKEN 'T_NUM_STRING start end))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_VAR_OFFSET (looking-at (concat "\\("
- phps-mode-lexer-LNUM "\\|"
- phps-mode-lexer-HNUM "\\|"
- phps-mode-lexer-BNUM "\\)")))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_NUM_STRING (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (or (looking-at phps-mode-lexer-EXPONENT_DNUM)
- (looking-at phps-mode-lexer-DNUM)))
- (lambda()
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (_data (buffer-substring-no-properties start end)))
- ;; (message "Exponent/double at: %s" _data)
- (phps-mode-lexer-RETURN_TOKEN 'T_DNUMBER start end))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "__CLASS__"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_CLASS_C (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "__TRAIT__"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_TRAIT_C (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "__FUNCTION__"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_FUNC_C (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "__METHOD__"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_METHOD_C (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "__LINE__"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_LINE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "__FILE__"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_FILE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "__DIR__"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_DIR (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "__NAMESPACE__"))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_NS_C (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and SHEBANG (looking-at (concat "#!.*" phps-mode-lexer-NEWLINE)))
- (lambda()
- (phps-mode-lexer-BEGIN 'ST_INITIAL)))
-
- (phps-mode-lexer-re2c-rule
- (and SHEBANG (looking-at phps-mode-lexer-ANY_CHAR))
- (lambda()
- (phps-mode-lexer-BEGIN 'ST_INITIAL)))
-
- (phps-mode-lexer-re2c-rule
- (and ST_INITIAL (looking-at "<\\?="))
- (lambda()
- (let ((start (match-beginning 0))
- (end (match-end 0)))
- (phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
- (when (phps-mode-wy-macros-CG 'PARSER_MODE)
- (phps-mode-lexer-RETURN_TOKEN 'T_ECHO start end))
- (phps-mode-lexer-RETURN_TOKEN 'T_OPEN_TAG_WITH_ECHO start end))))
+ (phps-mode-lexer-yy_push_state 'ST_IN_SCRIPTING)
+ (phps-mode-lexer-RETURN_TOKEN 'T_STRING_VARNAME start end))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_LOOKING_FOR_VARNAME (looking-at phps-mode-lexer-ANY_CHAR))
+ (lambda()
+ (phps-mode-lexer-yy_pop_state)
+ (phps-mode-lexer-yy_push_state 'ST_IN_SCRIPTING)))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-BNUM))
+ (lambda()
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (data (buffer-substring-no-properties (+ start 2) end))
+ (long-number (string-to-number data 2)))
+ ;; (message "Binary number %s from %s" long-number data)
+ (if (> long-number phps-mode-lexer-long-limit)
+ (phps-mode-lexer-RETURN_TOKEN 'T_DNUMBER start end)
+ (phps-mode-lexer-RETURN_TOKEN 'T_LNUMBER start end)))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-LNUM))
+ (lambda()
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (data (string-to-number (buffer-substring-no-properties start
end))))
+ ;; (message "Long number: %d" data)
+ (if (> data phps-mode-lexer-long-limit)
+ (phps-mode-lexer-RETURN_TOKEN 'T_DNUMBER start end)
+ (phps-mode-lexer-RETURN_TOKEN 'T_LNUMBER start end)))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-HNUM))
+ (lambda()
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (data (buffer-substring-no-properties (+ start 2) end))
+ (long-number (string-to-number data 16)))
+ ;; (message "Hexadecimal number %s from %s" long-number data)
+ (if (> long-number phps-mode-lexer-long-limit)
+ (phps-mode-lexer-RETURN_TOKEN 'T_DNUMBER start end)
+ (phps-mode-lexer-RETURN_TOKEN 'T_LNUMBER start end)))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_VAR_OFFSET (looking-at "\\([0]\\|[1-9][0-9]*\\)"))
+ (lambda()
+ (let ((start (match-beginning 0))
+ (end (match-end 0)))
+ (phps-mode-lexer-RETURN_TOKEN 'T_NUM_STRING start end))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_VAR_OFFSET (looking-at (concat "\\("
+ phps-mode-lexer-LNUM "\\|"
+ phps-mode-lexer-HNUM "\\|"
+ phps-mode-lexer-BNUM "\\)")))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_NUM_STRING (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (or (looking-at phps-mode-lexer-EXPONENT_DNUM)
+ (looking-at phps-mode-lexer-DNUM)))
+ (lambda()
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (_data (buffer-substring-no-properties start end)))
+ ;; (message "Exponent/double at: %s" _data)
+ (phps-mode-lexer-RETURN_TOKEN 'T_DNUMBER start end))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "__CLASS__"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_CLASS_C (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "__TRAIT__"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_TRAIT_C (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "__FUNCTION__"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_FUNC_C (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "__METHOD__"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_METHOD_C (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "__LINE__"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_LINE (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "__FILE__"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_FILE (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "__DIR__"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_DIR (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "__NAMESPACE__"))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_NS_C (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and SHEBANG (looking-at (concat "#!.*" phps-mode-lexer-NEWLINE)))
+ (lambda()
+ (phps-mode-lexer-BEGIN 'ST_INITIAL)))
+
+ (phps-mode-lexer-re2c-rule
+ (and SHEBANG (looking-at phps-mode-lexer-ANY_CHAR))
+ (lambda()
+ (phps-mode-lexer-BEGIN 'ST_INITIAL)))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_INITIAL (looking-at "<\\?="))
+ (lambda()
+ (let ((start (match-beginning 0))
+ (end (match-end 0)))
+ (phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
+ (when (phps-mode-wy-macros-CG 'PARSER_MODE)
+ (phps-mode-lexer-RETURN_TOKEN 'T_ECHO start end))
+ (phps-mode-lexer-RETURN_TOKEN 'T_OPEN_TAG_WITH_ECHO start end))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_INITIAL (looking-at (concat "<\\?php\\([ \t]\\|"
phps-mode-lexer-NEWLINE "\\)")))
+ (lambda()
+ (let ((start (match-beginning 0))
+ (end (match-end 0)))
+ (phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
+ ;; (message "Starting scripting after <?php")
+ (when phps-mode-lexer-EXPECTED
+ (phps-mode-lexer-SKIP_TOKEN 'T_OPEN_TAG start end))
+ (phps-mode-lexer-RETURN_TOKEN 'T_OPEN_TAG start end))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_INITIAL (looking-at "<\\?php"))
+ (lambda()
+ (let ((start (match-beginning 0))
+ (end (match-end 0)))
- (phps-mode-lexer-re2c-rule
- (and ST_INITIAL (looking-at (concat "<\\?php\\([ \t]\\|"
phps-mode-lexer-NEWLINE "\\)")))
- (lambda()
+ ;; Allow <?php followed by end of file.
+ (cond
+
+ ((equal end (point-max))
+ (phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
+ (phps-mode-lexer-RETURN_OR_SKIP_TOKEN
+ 'T_OPEN_TAG
+ start
+ end))
+
+ ((phps-mode-wy-macros-CG 'SHORT_TAGS)
+ (phps-mode-lexer-yyless 3)
+ (setq end (- end 3))
+ (phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
+ (phps-mode-lexer-RETURN_OR_SKIP_TOKEN
+ 'T_OPEN_TAG
+ start
+ end))
+
+ (t
+ (phps-mode-anaylzer-inline-char-handler))))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_INITIAL (looking-at "<\\?"))
+ (lambda()
+ (when (phps-mode-wy-macros-CG 'SHORT_TAGS)
(let ((start (match-beginning 0))
(end (match-end 0)))
(phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
- ;; (message "Starting scripting after <?php")
(when phps-mode-lexer-EXPECTED
(phps-mode-lexer-SKIP_TOKEN 'T_OPEN_TAG start end))
- (phps-mode-lexer-RETURN_TOKEN 'T_OPEN_TAG start end))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_INITIAL (looking-at "<\\?php"))
- (lambda()
- (let ((start (match-beginning 0))
- (end (match-end 0)))
-
- ;; Allow <?php followed by end of file.
- (cond
-
- ((equal end (point-max))
- (phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
- (phps-mode-lexer-RETURN_OR_SKIP_TOKEN
- 'T_OPEN_TAG
- start
- end))
-
- ((phps-mode-wy-macros-CG 'SHORT_TAGS)
- (phps-mode-lexer-yyless 3)
- (setq end (- end 3))
- (phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
- (phps-mode-lexer-RETURN_OR_SKIP_TOKEN
- 'T_OPEN_TAG
- start
- end))
-
- (t
- (phps-mode-anaylzer-inline-char-handler))))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_INITIAL (looking-at "<\\?"))
- (lambda()
- (when (phps-mode-wy-macros-CG 'SHORT_TAGS)
- (let ((start (match-beginning 0))
- (end (match-end 0)))
- (phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
- (when phps-mode-lexer-EXPECTED
- (phps-mode-lexer-SKIP_TOKEN 'T_OPEN_TAG start end))
- ;; (message "Starting scripting after <?")
- (phps-mode-lexer-RETURN_TOKEN 'T_OPEN_TAG start end)))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_INITIAL (looking-at phps-mode-lexer-ANY_CHAR))
- (lambda()
- (phps-mode-anaylzer-inline-char-handler)))
-
- (phps-mode-lexer-re2c-rule
- (and (or ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE)
- (looking-at
- (concat
- "\\$"
- phps-mode-lexer-LABEL
- "->"
- "[a-zA-Z_\x80-\xff]")))
- (lambda()
- (phps-mode-lexer-yy_push_state 'ST_LOOKING_FOR_PROPERTY)
- (forward-char -3)
- (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (-
(match-end 0) 3))))
-
- (phps-mode-lexer-re2c-rule
- (and (or ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE)
- (looking-at
- (concat
- "\\$"
- phps-mode-lexer-LABEL
- "\\[")))
- (lambda()
- (phps-mode-lexer-yy_push_state 'ST_VAR_OFFSET)
- (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and (or ST_IN_SCRIPTING ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE
ST_VAR_OFFSET)
- (looking-at
- (concat
- "\\$"
- phps-mode-lexer-LABEL)))
- (lambda()
- (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_VAR_OFFSET (looking-at "\\]"))
- (lambda()
+ ;; (message "Starting scripting after <?")
+ (phps-mode-lexer-RETURN_TOKEN 'T_OPEN_TAG start end)))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_INITIAL (looking-at phps-mode-lexer-ANY_CHAR))
+ (lambda()
+ (phps-mode-anaylzer-inline-char-handler)))
+
+ (phps-mode-lexer-re2c-rule
+ (and (or ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE)
+ (looking-at
+ (concat
+ "\\$"
+ phps-mode-lexer-LABEL
+ "->"
+ "[a-zA-Z_\x80-\xff]")))
+ (lambda()
+ (phps-mode-lexer-yy_push_state 'ST_LOOKING_FOR_PROPERTY)
+ (forward-char -3)
+ (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (-
(match-end 0) 3))))
+
+ (phps-mode-lexer-re2c-rule
+ (and (or ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE)
+ (looking-at
+ (concat
+ "\\$"
+ phps-mode-lexer-LABEL
+ "\\[")))
+ (lambda()
+ (phps-mode-lexer-yy_push_state 'ST_VAR_OFFSET)
+ (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and (or ST_IN_SCRIPTING ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE
ST_VAR_OFFSET)
+ (looking-at
+ (concat
+ "\\$"
+ phps-mode-lexer-LABEL)))
+ (lambda()
+ (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_VAR_OFFSET (looking-at "\\]"))
+ (lambda()
+ (phps-mode-lexer-yy_pop_state)
+ (phps-mode-lexer-RETURN_TOKEN "]" (match-beginning 0) (match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_VAR_OFFSET (looking-at (concat "\\(" phps-mode-lexer-TOKENS
+ "\\|[{}\"`]\\)")))
+ (lambda()
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (data (buffer-substring-no-properties start end)))
+ (phps-mode-lexer-RETURN_TOKEN data start end))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_VAR_OFFSET (looking-at (concat "[ \n\r\t'#]")))
+ (lambda()
+ (let* ((start (match-beginning 0))
+ (end (- (match-end 0) 1)))
(phps-mode-lexer-yy_pop_state)
- (phps-mode-lexer-RETURN_TOKEN "]" (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_VAR_OFFSET (looking-at (concat "\\(" phps-mode-lexer-TOKENS
- "\\|[{}\"`]\\)")))
- (lambda()
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (data (buffer-substring-no-properties start end)))
- (phps-mode-lexer-RETURN_TOKEN data start end))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_VAR_OFFSET (looking-at (concat "[ \n\r\t'#]")))
- (lambda()
- (let* ((start (match-beginning 0))
- (end (- (match-end 0) 1)))
- (phps-mode-lexer-yy_pop_state)
- (phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE start
end))))
-
- (phps-mode-lexer-re2c-rule
- (and (or ST_IN_SCRIPTING ST_VAR_OFFSET) (looking-at
phps-mode-lexer-LABEL))
- (lambda()
- ;; (message "Adding T_STRING from %s to %s" (match-beginning 0)
(match-end 0))
- (phps-mode-lexer-RETURN_TOKEN 'T_STRING (match-beginning 0)
(match-end 0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "\\(#\\|//\\)"))
- (lambda()
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (_data (buffer-substring-no-properties start end))
- (line (buffer-substring-no-properties end
(line-end-position))))
- (if (string-match "\\?>" line)
- (progn
- (phps-mode-lexer-RETURN_TOKEN 'T_COMMENT start (+ end
(match-beginning 0))))
+ (phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE start
end))))
+
+ (phps-mode-lexer-re2c-rule
+ (and (or ST_IN_SCRIPTING ST_VAR_OFFSET) (looking-at
phps-mode-lexer-LABEL))
+ (lambda()
+ ;; (message "Adding T_STRING from %s to %s" (match-beginning 0)
(match-end 0))
+ (phps-mode-lexer-RETURN_TOKEN 'T_STRING (match-beginning 0)
(match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "\\(#\\|//\\)"))
+ (lambda()
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (_data (buffer-substring-no-properties start end))
+ (line (buffer-substring-no-properties end
(line-end-position))))
+ (if (string-match "\\?>" line)
(progn
- ;; TODO Handle expecting values here
- ;; (message "Found comment 2 from %s to %s" start
(line-end-position))
- (phps-mode-lexer-RETURN_TOKEN 'T_COMMENT start
(line-end-position)))))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING
- (looking-at
- (concat
- "\\(/\\*\\|/\\*\\*"
- phps-mode-lexer-WHITESPACE
- "\\)")))
- (lambda()
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (_data (buffer-substring-no-properties start end))
- (doc-com (looking-at-p (concat "/\\*\\*"
phps-mode-lexer-WHITESPACE))))
- (let ((string-start (search-forward "*/" nil t)))
- (if string-start
- (if doc-com
- (phps-mode-lexer-RETURN_TOKEN 'T_DOC_COMMENT start
(match-end 0))
- (phps-mode-lexer-RETURN_TOKEN 'T_COMMENT start (match-end
0)))
- (progn
- (display-warning 'phps-mode
- (format
- "PHPs Lexer Error - Unterminated comment
starting at %s"
- (point)))
- (phps-mode-lexer-MOVE_FORWARD (point-max))))))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at (concat "\\?>"
phps-mode-lexer-NEWLINE "?")))
- (lambda()
- (let ((start (match-beginning 0))
- (end (match-end 0)))
- (when (= (- end start) 3)
- (setq end (1- end)))
- (phps-mode-lexer-BEGIN 'ST_INITIAL)
- (when (phps-mode-wy-macros-CG 'PARSER_MODE)
- (phps-mode-lexer-RETURN_TOKEN ";" start end))
- (phps-mode-lexer-RETURN_TOKEN 'T_CLOSE_TAG start end))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "'"))
- (lambda()
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (_data (buffer-substring-no-properties start end))
- (un-escaped-end (phps-mode-lexer--get-next-unescaped "'")))
- (if un-escaped-end
- (progn
- (phps-mode-lexer-RETURN_TOKEN 'T_CONSTANT_ENCAPSED_STRING
start un-escaped-end))
+ (phps-mode-lexer-RETURN_TOKEN 'T_COMMENT start (+ end
(match-beginning 0))))
+ (progn
+ ;; TODO Handle expecting values here
+ ;; (message "Found comment 2 from %s to %s" start
(line-end-position))
+ (phps-mode-lexer-RETURN_TOKEN 'T_COMMENT start
(line-end-position)))))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "\\(/\\*\\|/\\*\\*"
+ phps-mode-lexer-WHITESPACE
+ "\\)")))
+ (lambda()
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (_data (buffer-substring-no-properties start end))
+ (doc-com (looking-at-p (concat "/\\*\\*"
phps-mode-lexer-WHITESPACE))))
+ (let ((string-start (search-forward "*/" nil t)))
+ (if string-start
+ (if doc-com
+ (phps-mode-lexer-RETURN_TOKEN 'T_DOC_COMMENT start
(match-end 0))
+ (phps-mode-lexer-RETURN_TOKEN 'T_COMMENT start (match-end
0)))
(progn
- ;; Unclosed single quotes
- (phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE
start (point-max))
- (phps-mode-lexer-MOVE_FORWARD (point-max)))))))
-
- ;; Double quoted string
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "\""))
- (lambda()
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (_data (buffer-substring-no-properties start end))
- (open-quote t))
-
- ;; Move forward from the double-quote
- (forward-char)
-
- (while open-quote
- (let ((string-start
- (search-forward-regexp
- (concat
- "\\(\""
- "\\|\\$" phps-mode-lexer-LABEL
- "\\|\\${" phps-mode-lexer-LABEL
- "\\|{\\$" phps-mode-lexer-LABEL "\\)")
- nil t)))
-
- ;; Do we find a ending double quote or starting variable?
- (if string-start
- (let ((string-start (match-beginning 0))
- (is-escaped nil))
-
- ;; Go to character before match start
- (goto-char (1- string-start))
-
- ;; Store whether character is escaped or not
- (setq is-escaped (looking-at-p "\\\\"))
-
- ;; Do we find variable inside quote?
- (goto-char string-start)
-
- ;; Process character if it's not escaped
- (if is-escaped
- (forward-char 1)
- (setq open-quote nil)
- (if (looking-at "\"")
- (let ((_double-quoted-string
(buffer-substring-no-properties start (+ string-start 1))))
- ;; (message "Double quoted string: %s"
_double-quoted-string)
- (phps-mode-lexer-RETURN_TOKEN
'T_CONSTANT_ENCAPSED_STRING start (+ string-start 1)))
- ;; (message "Found variable after '%s'"
(buffer-substring-no-properties start string-start))
- (phps-mode-lexer-BEGIN 'ST_DOUBLE_QUOTES)
- (phps-mode-lexer-RETURN_TOKEN "\"" start (1+ start))
- (phps-mode-lexer-RETURN_TOKEN
'T_ENCAPSED_AND_WHITESPACE (1+ start) string-start))))
- (progn
- (display-warning 'phps-mode (format "Found no ending of
quote at %s-%s" start (point)))
- (phps-mode-lexer-MOVE_FORWARD (point-max))
- (setq open-quote nil))))))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING
- (looking-at
- (concat
- "<<<"
- phps-mode-lexer-TABS_AND_SPACES
- "\\("
- phps-mode-lexer-LABEL
- "\\|'"
- phps-mode-lexer-LABEL
- "'\\|\""
- phps-mode-lexer-LABEL
- "\"\\)"
- phps-mode-lexer-NEWLINE)))
- (lambda()
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (data (buffer-substring-no-properties (match-beginning 1)
(match-end 1)))
- (heredoc_label))
-
- ;; Determine if it's HEREDOC or NOWDOC and extract label here
- (if (string= (substring data 0 1) "'")
- (progn
- (setq heredoc_label (substring data 1 (- (length data) 1)))
- (phps-mode-lexer-BEGIN 'ST_NOWDOC))
+ (signal 'phps-mode (list (format
+ "PHPs Lexer Error - Unterminated comment
starting at %s"
+ (point))))))))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at (concat "\\?>" phps-mode-lexer-NEWLINE
"?")))
+ (lambda()
+ (let ((start (match-beginning 0))
+ (end (match-end 0)))
+ (when (= (- end start) 3)
+ (setq end (1- end)))
+ (phps-mode-lexer-BEGIN 'ST_INITIAL)
+ (when (phps-mode-wy-macros-CG 'PARSER_MODE)
+ (phps-mode-lexer-RETURN_TOKEN ";" start end))
+ (phps-mode-lexer-RETURN_TOKEN 'T_CLOSE_TAG start end))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "'"))
+ (lambda()
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (_data (buffer-substring-no-properties start end))
+ (un-escaped-end (phps-mode-lexer--get-next-unescaped "'")))
+ (if un-escaped-end
(progn
- (if (string= (substring data 0 1) "\"")
- (setq heredoc_label (substring data 1 (- (length data)
1)))
- (setq heredoc_label data))
- (phps-mode-lexer-BEGIN 'ST_HEREDOC)))
-
- ;; Check for ending label on the next line
- (when (string= (buffer-substring-no-properties end (+ end (length
heredoc_label))) heredoc_label)
- (phps-mode-lexer-BEGIN 'ST_END_HEREDOC))
-
- (push heredoc_label phps-mode-lexer-heredoc_label_stack)
- ;; (message "Found heredoc or nowdoc at %s with label %s" data
heredoc_label)
-
- (phps-mode-lexer-RETURN_TOKEN 'T_START_HEREDOC start end))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_IN_SCRIPTING (looking-at "[`]"))
- (lambda()
- ;; (message "Begun backquote at %s-%s" (match-beginning 0)
(match-end 0))
- (phps-mode-lexer-BEGIN 'ST_BACKQUOTE)
- (phps-mode-lexer-RETURN_TOKEN "`" (match-beginning 0) (match-end
0))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_END_HEREDOC (looking-at (concat phps-mode-lexer-ANY_CHAR)))
- (lambda()
- (let* ((start (match-beginning 0))
- (end (+ start (length heredoc_label) 1))
- (_data (buffer-substring-no-properties start end)))
- ;; (message "Found ending heredoc at %s, %s of %s" _data
(thing-at-point 'line) heredoc_label)
- (pop phps-mode-lexer-heredoc_label_stack)
- (phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
- (phps-mode-lexer-RETURN_TOKEN 'T_END_HEREDOC start end))))
-
- (phps-mode-lexer-re2c-rule
- (and (or ST_DOUBLE_QUOTES ST_BACKQUOTE ST_HEREDOC) (looking-at
(concat "{\\$")))
- (lambda()
- (phps-mode-lexer-yy_push_state 'ST_IN_SCRIPTING)
- (phps-mode-lexer-RETURN_TOKEN 'T_CURLY_OPEN (match-beginning 0) (-
(match-end 0) 1))))
+ (phps-mode-lexer-RETURN_TOKEN 'T_CONSTANT_ENCAPSED_STRING
start un-escaped-end))
+ (progn
+ ;; Unclosed single quotes
+ (phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE start
(point-max))
+ (phps-mode-lexer-MOVE_FORWARD (point-max)))))))
+
+ ;; Double quoted string
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "\""))
+ (lambda()
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (_data (buffer-substring-no-properties start end))
+ (open-quote t))
+
+ ;; Move forward from the double-quote
+ (forward-char)
+
+ (while open-quote
+ (let ((string-start
+ (search-forward-regexp
+ (concat
+ "\\(\""
+ "\\|\\$" phps-mode-lexer-LABEL
+ "\\|\\${" phps-mode-lexer-LABEL
+ "\\|{\\$" phps-mode-lexer-LABEL "\\)")
+ nil t)))
+
+ ;; Do we find a ending double quote or starting variable?
+ (if string-start
+ (let ((string-start (match-beginning 0))
+ (is-escaped nil))
- (phps-mode-lexer-re2c-rule
- (and ST_DOUBLE_QUOTES (looking-at "[\"]"))
- (lambda()
- (phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
- ;; (message "Ended double-quote at %s" (match-beginning 0))
- (phps-mode-lexer-RETURN_TOKEN "\"" (match-beginning 0) (match-end
0))))
+ ;; Go to character before match start
+ (goto-char (1- string-start))
- (phps-mode-lexer-re2c-rule
- (and ST_BACKQUOTE (looking-at "[`]"))
- (lambda()
- (phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
- (phps-mode-lexer-RETURN_TOKEN "`" (match-beginning 0) (match-end
0))))
+ ;; Store whether character is escaped or not
+ (setq is-escaped (looking-at-p "\\\\"))
- (phps-mode-lexer-re2c-rule
- (and ST_DOUBLE_QUOTES (looking-at phps-mode-lexer-ANY_CHAR))
- (lambda()
- (let ((start (point)))
- (let ((string-start (search-forward-regexp "[^\\\\]\"" nil t)))
- (if string-start
- (let* ((end (- (match-end 0) 1))
- (double-quoted-string
(buffer-substring-no-properties start end)))
;; Do we find variable inside quote?
- (if (or (string-match (concat "\\${"
phps-mode-lexer-LABEL) double-quoted-string)
- (string-match (concat "{\\$"
phps-mode-lexer-LABEL) double-quoted-string)
- (string-match (concat "\\$"
phps-mode-lexer-LABEL) double-quoted-string))
- (progn
- (let ((variable-start (+ start (match-beginning
0))))
-
- ;; (message "Found starting expression inside
double-quoted string at: %s %s" start variable-start)
- (phps-mode-lexer-RETURN_TOKEN
'T_CONSTANT_ENCAPSED_STRING start variable-start)
- ))
- (progn
- (phps-mode-lexer-RETURN_TOKEN
'T_CONSTANT_ENCAPSED_STRING start end)
- ;; (message "Found end of quote at %s-%s, moving
ahead after '%s'" start end (buffer-substring-no-properties start end))
- )))
+ (goto-char string-start)
+
+ ;; Process character if it's not escaped
+ (if is-escaped
+ (forward-char 1)
+ (setq open-quote nil)
+ (if (looking-at "\"")
+ (let ((_double-quoted-string
(buffer-substring-no-properties start (+ string-start 1))))
+ ;; (message "Double quoted string: %s"
_double-quoted-string)
+ (phps-mode-lexer-RETURN_TOKEN
'T_CONSTANT_ENCAPSED_STRING start (+ string-start 1)))
+ ;; (message "Found variable after '%s'"
(buffer-substring-no-properties start string-start))
+ (phps-mode-lexer-BEGIN 'ST_DOUBLE_QUOTES)
+ (phps-mode-lexer-RETURN_TOKEN "\"" start (1+ start))
+ (phps-mode-lexer-RETURN_TOKEN
'T_ENCAPSED_AND_WHITESPACE (1+ start) string-start))))
(progn
- (display-warning 'phps-mode (format "Found no ending of
double quoted region starting at %s" start))
- (phps-mode-lexer-MOVE_FORWARD (point-max))))))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_BACKQUOTE (looking-at phps-mode-lexer-ANY_CHAR))
- (lambda()
- (let ((string-start (search-forward-regexp
"\\([^\\\\]`\\|\\$\\|{\\)" nil t)))
- (if string-start
- (let ((start (- (match-end 0) 1)))
- ;; (message "Skipping backquote forward over %s"
(buffer-substring-no-properties old-start start))
- (phps-mode-lexer-RETURN_TOKEN 'T_CONSTANT_ENCAPSED_STRING
old-start start)
- )
+ (signal 'error (list (format "Found no ending of quote at
%s-%s" start (point))))
+ (setq open-quote nil))))))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "<<<"
+ phps-mode-lexer-TABS_AND_SPACES
+ "\\("
+ phps-mode-lexer-LABEL
+ "\\|'"
+ phps-mode-lexer-LABEL
+ "'\\|\""
+ phps-mode-lexer-LABEL
+ "\"\\)"
+ phps-mode-lexer-NEWLINE)))
+ (lambda()
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (data (buffer-substring-no-properties (match-beginning 1)
(match-end 1)))
+ (heredoc_label))
+
+ ;; Determine if it's HEREDOC or NOWDOC and extract label here
+ (if (string= (substring data 0 1) "'")
(progn
- (display-warning 'phps-mode (format "Found no ending of
backquoted string starting at %s" (point)))
- (phps-mode-lexer-MOVE_FORWARD (point-max)))))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_HEREDOC (looking-at phps-mode-lexer-ANY_CHAR))
- (lambda()
- ;; Check for $, ${ and {$ forward
- (let ((string-start
- (search-forward-regexp
- (concat
- "\\(\n"
- heredoc_label
- ";?\n\\|\\$"
- phps-mode-lexer-LABEL
- "\\|{\\$"
- phps-mode-lexer-LABEL
- "\\|\\${"
- phps-mode-lexer-LABEL
- "\\)"
- ) nil t)))
+ (setq heredoc_label (substring data 1 (- (length data) 1)))
+ (phps-mode-lexer-BEGIN 'ST_NOWDOC))
+ (progn
+ (if (string= (substring data 0 1) "\"")
+ (setq heredoc_label (substring data 1 (- (length data) 1)))
+ (setq heredoc_label data))
+ (phps-mode-lexer-BEGIN 'ST_HEREDOC)))
+
+ ;; Check for ending label on the next line
+ (when (string= (buffer-substring-no-properties end (+ end (length
heredoc_label))) heredoc_label)
+ (phps-mode-lexer-BEGIN 'ST_END_HEREDOC))
+
+ (push heredoc_label phps-mode-lexer-heredoc_label_stack)
+ ;; (message "Found heredoc or nowdoc at %s with label %s" data
heredoc_label)
+
+ (phps-mode-lexer-RETURN_TOKEN 'T_START_HEREDOC start end))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_IN_SCRIPTING (looking-at "[`]"))
+ (lambda()
+ ;; (message "Begun backquote at %s-%s" (match-beginning 0) (match-end
0))
+ (phps-mode-lexer-BEGIN 'ST_BACKQUOTE)
+ (phps-mode-lexer-RETURN_TOKEN "`" (match-beginning 0) (match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_END_HEREDOC (looking-at (concat phps-mode-lexer-ANY_CHAR)))
+ (lambda()
+ (let* ((start (match-beginning 0))
+ (end (+ start (length heredoc_label) 1))
+ (_data (buffer-substring-no-properties start end)))
+ ;; (message "Found ending heredoc at %s, %s of %s" _data
(thing-at-point 'line) heredoc_label)
+ (pop phps-mode-lexer-heredoc_label_stack)
+ (phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
+ (phps-mode-lexer-RETURN_TOKEN 'T_END_HEREDOC start end))))
+
+ (phps-mode-lexer-re2c-rule
+ (and (or ST_DOUBLE_QUOTES ST_BACKQUOTE ST_HEREDOC) (looking-at (concat
"{\\$")))
+ (lambda()
+ (phps-mode-lexer-yy_push_state 'ST_IN_SCRIPTING)
+ (phps-mode-lexer-RETURN_TOKEN 'T_CURLY_OPEN (match-beginning 0) (-
(match-end 0) 1))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_DOUBLE_QUOTES (looking-at "[\"]"))
+ (lambda()
+ (phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
+ ;; (message "Ended double-quote at %s" (match-beginning 0))
+ (phps-mode-lexer-RETURN_TOKEN "\"" (match-beginning 0) (match-end
0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_BACKQUOTE (looking-at "[`]"))
+ (lambda()
+ (phps-mode-lexer-BEGIN 'ST_IN_SCRIPTING)
+ (phps-mode-lexer-RETURN_TOKEN "`" (match-beginning 0) (match-end 0))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_DOUBLE_QUOTES (looking-at phps-mode-lexer-ANY_CHAR))
+ (lambda()
+ (let ((start (point)))
+ (let ((string-start (search-forward-regexp "[^\\\\]\"" nil t)))
(if string-start
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (data (buffer-substring-no-properties start end)))
- ;; (message "Found something ending at %s" data)
-
- (cond
-
- ((string-match (concat "\n" heredoc_label ";?\n") data)
- ;, (message "Found heredoc end at
%s-%s" start end)
- (phps-mode-lexer-BEGIN 'ST_END_HEREDOC)
- (phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE
old-start start))
-
- (t
- ;; (message "Found variable at '%s'.. Skipping forward to
%s" data start)
- (phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE
old-start start)
- )
-
- ))
+ (let* ((end (- (match-end 0) 1))
+ (double-quoted-string (buffer-substring-no-properties
start end)))
+ ;; Do we find variable inside quote?
+ (if (or (string-match (concat "\\${" phps-mode-lexer-LABEL)
double-quoted-string)
+ (string-match (concat "{\\$" phps-mode-lexer-LABEL)
double-quoted-string)
+ (string-match (concat "\\$" phps-mode-lexer-LABEL)
double-quoted-string))
+ (progn
+ (let ((variable-start (+ start (match-beginning 0))))
+
+ ;; (message "Found starting expression inside
double-quoted string at: %s %s" start variable-start)
+ (phps-mode-lexer-RETURN_TOKEN
'T_CONSTANT_ENCAPSED_STRING start variable-start)
+ ))
+ (progn
+ (phps-mode-lexer-RETURN_TOKEN
'T_CONSTANT_ENCAPSED_STRING start end)
+ ;; (message "Found end of quote at %s-%s, moving ahead
after '%s'" start end (buffer-substring-no-properties start end))
+ )))
(progn
- (display-warning 'phps-mode (format "Found no ending of
heredoc at %s" (point)))
- (phps-mode-lexer-MOVE_FORWARD (point-max)))))))
-
- (phps-mode-lexer-re2c-rule
- (and ST_NOWDOC (looking-at phps-mode-lexer-ANY_CHAR))
- (lambda()
- (let ((string-start (search-forward-regexp (concat "\n"
heredoc_label ";?\\\n") nil t)))
- (if string-start
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (_data (buffer-substring-no-properties start end)))
- ;; (message "Found something ending at %s" _data)
- ;; (message "Found nowdoc end at %s-%s" start end)
+ (signal 'error (list (format "Found no ending of double
quoted region starting at %s" start)))))))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_BACKQUOTE (looking-at phps-mode-lexer-ANY_CHAR))
+ (lambda()
+ (let ((string-start (search-forward-regexp "\\([^\\\\]`\\|\\$\\|{\\)"
nil t)))
+ (if string-start
+ (let ((start (- (match-end 0) 1)))
+ ;; (message "Skipping backquote forward over %s"
(buffer-substring-no-properties old-start start))
+ (phps-mode-lexer-RETURN_TOKEN 'T_CONSTANT_ENCAPSED_STRING
old-start start)
+ )
+ (progn
+ (signal 'error (list (format "Found no ending of backquoted
string starting at %s" (point)))))))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_HEREDOC (looking-at phps-mode-lexer-ANY_CHAR))
+ (lambda()
+ ;; Check for $, ${ and {$ forward
+ (let ((string-start
+ (search-forward-regexp
+ (concat
+ "\\(\n"
+ heredoc_label
+ ";?\n\\|\\$"
+ phps-mode-lexer-LABEL
+ "\\|{\\$"
+ phps-mode-lexer-LABEL
+ "\\|\\${"
+ phps-mode-lexer-LABEL
+ "\\)"
+ ) nil t)))
+ (if string-start
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (data (buffer-substring-no-properties start end)))
+ ;; (message "Found something ending at %s" data)
+
+ (cond
+
+ ((string-match (concat "\n" heredoc_label ";?\n") data)
+ ;, (message "Found heredoc end at
%s-%s" start end)
(phps-mode-lexer-BEGIN 'ST_END_HEREDOC)
+ (phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE
old-start start))
+
+ (t
+ ;; (message "Found variable at '%s'.. Skipping forward to
%s" data start)
(phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE
old-start start)
)
- (progn
- (display-warning 'phps-mode (format "Found no ending of
newdoc starting at %s" (point)))
- (phps-mode-lexer-MOVE_FORWARD (point-max)))))))
- (phps-mode-lexer-re2c-rule
- (and (or ST_IN_SCRIPTING ST_VAR_OFFSET) (looking-at
phps-mode-lexer-ANY_CHAR))
- (lambda()
- (display-warning 'phps-mode (format "Unexpected character at %s"
(point)))
- (phps-mode-lexer-MOVE_FORWARD (point-max))))
+ ))
+ (progn
+ (signal 'error (list (format "Found no ending of heredoc at %s"
(point)))))))))
+
+ (phps-mode-lexer-re2c-rule
+ (and ST_NOWDOC (looking-at phps-mode-lexer-ANY_CHAR))
+ (lambda()
+ (let ((string-start (search-forward-regexp (concat "\n" heredoc_label
";?\\\n") nil t)))
+ (if string-start
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (_data (buffer-substring-no-properties start end)))
+ ;; (message "Found something ending at %s" _data)
+ ;; (message "Found nowdoc end at %s-%s" start end)
+ (phps-mode-lexer-BEGIN 'ST_END_HEREDOC)
+ (phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE
old-start start)
+ )
+ (progn
+ (signal 'error (list (format "Found no ending of newdoc
starting at %s" (point)))))))))
+
+ (phps-mode-lexer-re2c-rule
+ (and (or ST_IN_SCRIPTING ST_VAR_OFFSET) (looking-at
phps-mode-lexer-ANY_CHAR))
+ (lambda()
+ (signal 'error (list (format "Unexpected character at %s" (point))))))
+
+ (phps-mode-lexer-re2c-execute))))
- (phps-mode-lexer-re2c-execute)))))
+(define-lex phps-mode-analyzer-lex
+ "Call lexer analyzer action."
+ phps-mode-analyzer-lexer
+ semantic-lex-default-action)
-(define-lex phps-mode-lexer-lex
+(define-lex phps-mode-analyzer-re2c-lex
"Call lexer analyzer action."
- phps-mode-lexer-lex-analyzer
+ phps-mode-analyzer-re2c-lexer
semantic-lex-default-action)
(defun phps-mode-lexer--get-next-unescaped (character)
@@ -1757,10 +1769,79 @@
(phps-mode-debug-message (message "Lexer run"))
(setq-local phps-mode-lexer-buffer-length (1- (point-max)))
(setq-local phps-mode-lexer-buffer-contents (buffer-substring-no-properties
(point-min) (point-max)))
- (setq-local phps-mode-lexer-STATE nil)
- (setq-local phps-mode-lexer-state_stack nil)
- (setq-local phps-mode-lexer-states nil)
- (setq-local phps-mode-lexer-tokens (semantic-lex-buffer)))
+
+ (let ((result (phps-mode-analyzer-lex-string
phps-mode-lexer-buffer-contents)))
+
+ ;; Move variables into this buffers variables
+ (setq phps-mode-lexer-tokens (nth 0 result))
+ (setq phps-mode-lexer-states (nth 1 result))
+ (setq phps-mode-lexer-STATE (nth 2 result))
+ (setq phps-mode-lexer-state_stack (nth 3 result))
+
+ ;; Apply syntax color on tokens
+ (dolist (token phps-mode-lexer-tokens)
+ (let ((start (car (cdr token)))
+ (end (cdr (cdr token)))
+ (token-name (car token)))
+ (let ((token-syntax-color (phps-mode-lexer-get-token-syntax-color
token-name)))
+ (if token-syntax-color
+ (phps-mode-lexer-set-region-syntax-color start end
token-syntax-color)
+ (phps-mode-lexer-clear-region-syntax-color start end)))))
+
+
+ (let ((errors (nth 4 result)))
+ (when errors
+ (display-warning 'phps-mode (format "Lex Errors: %s" errors))))))
+
+(defun phps-mode-analyzer-lex-string (contents &optional start end states
state state-stack tokens)
+ "Run lexer on CONTENTS."
+ ;; Create a separate buffer, run lexer inside of it, catch errors and return
them
+ ;; to enable nice presentation
+ (let ((errors))
+ (let ((buffer (generate-new-buffer "*PHPs Lexer*")))
+
+ ;; Create temporary buffer and run lexer in it
+ (save-excursion
+ (switch-to-buffer buffer)
+ (insert contents)
+
+ (if states
+ (setq-local phps-mode-lexer-states states)
+ (setq-local phps-mode-lexer-states nil))
+ (if state-stack
+ (setq-local phps-mode-lexer-state_stack state-stack)
+ (setq-local phps-mode-lexer-state_stack nil))
+ (if state
+ (setq-local phps-mode-lexer-STATE state)
+ (phps-mode-lexer-BEGIN 'ST_INITIAL))
+
+ (when (boundp 'phps-mode-syntax-table)
+ (setq-local semantic-lex-syntax-table phps-mode-syntax-table))
+ (when (fboundp 'phps-mode-analyzer-re2c-lex)
+ (setq-local semantic-lex-analyzer #'phps-mode-analyzer-re2c-lex))
+
+ ;; Catch any potential errors
+ (condition-case conditions
+ (progn
+ (if (and start end)
+ (progn
+ (phps-mode-debug-message
+ (message "Running (semantic-lex %s %s)" start end))
+ (let ((incremental-tokens (semantic-lex start end)))
+ (setq-local phps-mode-lexer-tokens (append tokens
incremental-tokens))))
+ (phps-mode-debug-message
+ (message "Running (semantic-lex-buffer)"))
+ (setq-local phps-mode-lexer-tokens (semantic-lex-buffer))))
+ (error
+ (setq errors (car (cdr conditions)))))
+
+ ;; Move variables outside of buffer
+ (setq state phps-mode-lexer-STATE)
+ (setq state-stack phps-mode-lexer-state_stack)
+ (setq states phps-mode-lexer-states)
+ (setq tokens phps-mode-lexer-tokens)
+ (kill-buffer)))
+ (list tokens states state state-stack errors)))
(defun phps-mode-lexer-move-states (start diff)
"Move lexer states after (or equal to) START with modification DIFF."
@@ -1915,20 +1996,44 @@
;; Do partial lex from previous-token-end to
change-stop
- ;; Rewind lexer state here
- (setq-local phps-mode-lexer-states head-states)
- (setq-local phps-mode-lexer-STATE incremental-state)
- (setq-local phps-mode-lexer-state_stack
incremental-state-stack)
+ (let ((result (phps-mode-analyzer-lex-string
+ (buffer-substring-no-properties
(point-min) (point-max))
+ incremental-start-new-buffer
+ (point-max)
+ head-states
+ incremental-state
+ incremental-state-stack
+ head-tokens)))
- ;; Generate new tokens
- (setq incremental-tokens (semantic-lex
incremental-start-new-buffer (point-max)))
+ (phps-mode-debug-message
+ (message "Incrementally-lexed-string: %s" result))
- (setq-local phps-mode-lexer-tokens (append
head-tokens incremental-tokens))
+ (setq phps-mode-lexer-tokens (nth 0 result))
+ (setq phps-mode-lexer-states (nth 1 result))
+ (setq phps-mode-lexer-STATE (nth 2 result))
+ (setq phps-mode-lexer-state_stack (nth 3 result))
- (push (list 'INCREMENTAL-LEX
incremental-start-new-buffer) log)
+ ;; Apply syntax color on token
+ (dolist (token phps-mode-lexer-tokens)
+ (let ((start (car (cdr token)))
+ (end (cdr (cdr token)))
+ (token-name (car token)))
- (phps-mode-debug-message
- (message "Incremental tokens: %s"
incremental-tokens)))
+ ;; Apply syntax color on token
+ (let ((token-syntax-color
(phps-mode-lexer-get-token-syntax-color token-name)))
+ (if token-syntax-color
+ (phps-mode-lexer-set-region-syntax-color
start end token-syntax-color)
+ (phps-mode-lexer-clear-region-syntax-color
start end)))))
+
+
+ (let ((errors (nth 4 result)))
+ (when errors
+ (display-warning 'phps-mode (format
"Incremental Lex Errors: %s" errors))))
+
+ (push (list 'INCREMENTAL-LEX
incremental-start-new-buffer) log)
+
+ (phps-mode-debug-message
+ (message "Incremental tokens: %s"
incremental-tokens))))
(push (list 'FOUND-NO-HEAD-STATES
incremental-start-new-buffer) log)
(phps-mode-debug-message
(message "Found no head states"))
@@ -1947,6 +2052,7 @@
(phps-mode-debug-message
(message "Running full lexer"))
(phps-mode-lexer-run))
+
log)))
(defun phps-mode-functions-get-processed-buffer ()
@@ -3322,7 +3428,7 @@ SQUARE-BRACKET-LEVEL and ROUND-BRACKET-LEVEL."
(setq new-indentation (1- new-indentation)))
(when (and (= bracket-level 0)
- line-starts-with-closing-bracket)
+ line-starts-with-closing-bracket)
(setq new-indentation (+ new-indentation tab-width)))
(when current-line-starts-with-closing-bracket
diff --git a/phps-mode.el b/phps-mode.el
index 8601856..3d743f9 100644
--- a/phps-mode.el
+++ b/phps-mode.el
@@ -5,8 +5,8 @@
;; Author: Christian Johansson <address@hidden>
;; Maintainer: Christian Johansson <address@hidden>
;; Created: 3 Mar 2018
-;; Modified: 13 Dec 2019
-;; Version: 0.3.25
+;; Modified: 19 Dec 2019
+;; Version: 0.3.26
;; Keywords: tools, convenience
;; URL: https://github.com/cjohansson/emacs-phps-mode
@@ -217,7 +217,7 @@
(setq-local semantic-lex-syntax-table phps-mode-syntax-table)
;; Semantic
- (setq-local semantic-lex-analyzer #'phps-mode-lexer-lex)
+ (setq-local semantic-lex-analyzer #'phps-mode-analyzer-lex)
;; Set semantic-lex initializer function
(add-hook 'semantic-lex-reset-functions #'phps-mode-lexer-setup 0 t)
diff --git a/test/phps-mode-test-lexer.el b/test/phps-mode-test-lexer.el
index a24b4cc..1437e06 100644
--- a/test/phps-mode-test-lexer.el
+++ b/test/phps-mode-test-lexer.el
@@ -336,19 +336,19 @@
"<?php\necho \"My neverending double quotation\n"
"Neverending double quotation"
(should (equal phps-mode-lexer-tokens
- '((T_OPEN_TAG 1 . 7) (T_ECHO 7 . 11)))))
+ nil)))
(phps-mode-test-with-buffer
"<?php\n`My neverending backquotes\n"
"Neverending backquotes"
(should (equal phps-mode-lexer-tokens
- '((T_OPEN_TAG 1 . 7) ("`" 7 . 8)))))
+ nil)))
(phps-mode-test-with-buffer
"<?php\n<<<LABEL\nMy neverending heredoc\ngoes on forever\n"
"Neverending heredoc"
(should (equal phps-mode-lexer-tokens
- '((T_OPEN_TAG 1 . 7) (T_START_HEREDOC 7 . 16)))))
+ nil)))
)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] externals/phps-mode e89976c: Error-handling and presentation of lexer errors,
Christian Johansson <=