branch: externals/phps-mode commit bfeaa74e281dfa414ba939cc07332cb982634e76 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Started with changing lexer syntax to be more alike re2c --- phps-mode-lexer.el | 1498 ++++++++++++++++++++++++++-------------------------- 1 file changed, 758 insertions(+), 740 deletions(-) diff --git a/phps-mode-lexer.el b/phps-mode-lexer.el index 43d232c..99aeac3 100644 --- a/phps-mode-lexer.el +++ b/phps-mode-lexer.el @@ -411,6 +411,23 @@ "Skip TOKEN to list with START and END." ) +(defvar phps-mode-lexer-re2c-matching-body nil) + +(defvar phps-mode-lexer-re2c-matching-length nil) + +(defun phps-mode-lexer-re2c-rule (condition body) + "Process rule with CONDITION and BODY." + (when condition + (let ((matching-length (- (match-end 0) (match-beginning 0)))) + (when (> matching-length phps-mode-lexer-re2c-matching-length) + (setq phps-mode-lexer-re2c-matching-length matching-length) + (setq phps-mode-lexer-re2c-matching-body body))))) + +(defun phps-mode-lexer-re2c-execute () + "Execute matching body (if any)." + (when phps-mode-lexer-re2c-matching-body + (funcall phps-mode-lexer-re2c-matching-body))) + ;; LEXERS @@ -432,885 +449,886 @@ (ST_LOOKING_FOR_VARNAME (= phps-mode-lexer-STATE phps-mode-lexer-ST_LOOKING_FOR_VARNAME)) (ST_END_HEREDOC (= phps-mode-lexer-STATE phps-mode-lexer-ST_END_HEREDOC)) (ST_VAR_OFFSET (= phps-mode-lexer-STATE phps-mode-lexer-ST_VAR_OFFSET))) - (cond - ((and ST_IN_SCRIPTING (looking-at (concat "exit" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_EXIT (match-beginning 0) (1- (match-end 0)))) + ;; Reset re2c flags + (setq phps-mode-lexer-re2c-matching-body nil) + (setq phps-mode-lexer-re2c-matching-length nil) - ((and ST_IN_SCRIPTING (looking-at (concat "die" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_DIE (match-beginning 0) (1- (match-end 0)))) + + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "exit" phps-mode-lexer-NOT-LABEL))) (lambda() (phps-mode-lexer-RETURN_TOKEN 'T_EXIT (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "function" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_FUNCTION (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "die" phps-mode-lexer-NOT-LABEL))) (lambda() phps-mode-lexer-RETURN_TOKEN 'T_DIE (match-beginning 0) (1- (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "const" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_CONST (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "function" phps-mode-lexer-NOT-LABEL))) (lambda() phps-mode-lexer-RETURN_TOKEN 'T_FUNCTION (match-beginning 0) (1- (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "return" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_RETURN (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "const" phps-mode-lexer-NOT-LABEL))) (lambda() (phps-mode-lexer-RETURN_TOKEN 'T_CONST (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "yield" phps-mode-lexer-WHITESPACE "from" "[^a-zA-Z0-9_\x80-\xff]"))) - (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 (concat "return" phps-mode-lexer-NOT-LABEL))) (lambda() (phps-mode-lexer-RETURN_TOKEN 'T_RETURN (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "yield" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_YIELD (match-beginning 0) (1- (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)))) - ((and ST_IN_SCRIPTING (looking-at (concat "try" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_TRY (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "yield" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_YIELD (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "catch" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_CATCH (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "try" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_TRY (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "finally" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_FINALLY (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "catch" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_CATCH (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "throw" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_THROW (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "finally" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_FINALLY (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "if" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_IF (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "throw" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_THROW (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "elseif" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_ELSEIF (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "if" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_IF (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "endif" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_ENDIF (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "elseif" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_ELSEIF (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "else" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_ELSE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "endif" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_ENDIF (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "while" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_WHILE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "else" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_ELSE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "endwhile" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_ENDWHILE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "while" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_WHILE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "do" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_DO (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "endwhile" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_ENDWHILE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "for" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_FOR (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "do" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_DO (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "endfor" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_ENDFOR (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "for" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_FOR (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "foreach" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_FOREACH (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "endfor" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_ENDFOR (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "endforeach" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_ENDFOREACH (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "foreach" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_FOREACH (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "declare" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_DECLARE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "endforeach" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_ENDFOREACH (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "enddeclare" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_ENDDECLARE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "declare" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_DECLARE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "instanceof" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_INSTANCEOF (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "enddeclare" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_ENDDECLARE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "as" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_AS (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "instanceof" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_INSTANCEOF (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "switch" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_SWITCH (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "as" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_AS (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "endswitch" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_ENDSWITCH (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "switch" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_SWITCH (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "case" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_CASE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "endswitch" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_ENDSWITCH (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "default" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_DEFAULT (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "case" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_CASE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "break" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_BREAK (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "default" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_DEFAULT (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "continue" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_CONTINUE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "break" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_BREAK (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "goto" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_GOTO (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "continue" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_CONTINUE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "echo" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_ECHO (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "goto" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_GOTO (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "print" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_PRINT (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "echo" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_ECHO (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "class" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_CLASS (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "print" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_PRINT (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "interface" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_INTERFACE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "class" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_CLASS (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "trait" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_TRAIT (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "interface" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_INTERFACE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "extends" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_EXTENDS (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "trait" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_TRAIT (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "implements" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_IMPLEMENTS (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "extends" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_EXTENDS (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at "->")) - (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_PROPERTY) - (phps-mode-lexer-RETURN_TOKEN 'T_OBJECT_OPERATOR (match-beginning 0) (match-end 0))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "implements" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_IMPLEMENTS (match-beginning 0) (1- (match-end 0))))) - ((and (or ST_IN_SCRIPTING ST_LOOKING_FOR_PROPERTY) - (looking-at phps-mode-lexer-WHITESPACE)) - (let* ((start (match-beginning 0)) - (end (match-end 0)) - (data (buffer-substring-no-properties start end))) - (if phps-mode-lexer-PARSER_MODE - (phps-mode-lexer-MOVE_FORWARD 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 phps-mode-lexer-ST_LOOKING_FOR_PROPERTY) + ) (phps-mode-lexer-RETURN_TOKEN 'T_OBJECT_OPERATOR (match-beginning 0) (match-end 0))) - ((and ST_LOOKING_FOR_PROPERTY (looking-at "->")) - (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-lexer-PARSER_MODE + (phps-mode-lexer-MOVE_FORWARD end) + (phps-mode-lexer-RETURN_TOKEN data start end))))) - ((and ST_LOOKING_FOR_PROPERTY (looking-at phps-mode-lexer-LABEL)) - (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 "->")) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_OBJECT_OPERATOR (match-beginning 0) (match-end 0)))) - ((and ST_LOOKING_FOR_PROPERTY (looking-at phps-mode-lexer-ANY_CHAR)) - (let ((_start (match-beginning 0)) - (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_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)))) - ((and ST_IN_SCRIPTING (looking-at "::")) - (phps-mode-lexer-RETURN_TOKEN 'T_PAAMAYIM_NEKUDOTAYIM (match-beginning 0) (match-end 0))) + (phps-mode-lexer-re2c-rule (and ST_LOOKING_FOR_PROPERTY (looking-at phps-mode-lexer-ANY_CHAR)) (lambda() + (let ((_start (match-beginning 0)) + (end (match-end 0))) + (phps-mode-lexer-yy_pop_state) + ;; TODO goto restart here? + ;; (message "Restart here") + (phps-mode-lexer-MOVE_FORWARD end)))) - ((and ST_IN_SCRIPTING (looking-at "\\\\")) - (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_PAAMAYIM_NEKUDOTAYIM (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "\\.\\.\\.")) - (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_NS_SEPARATOR (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "\\?\\?" "[^\\=]"))) - (phps-mode-lexer-RETURN_TOKEN 'T_COALESCE (match-beginning 0) (1- (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)))) - ((and ST_IN_SCRIPTING (looking-at (concat "new" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_NEW (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "\\?\\?" "[^\\=]"))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_COALESCE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "clone" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_CLONE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "new" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_NEW (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "var" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_VAR (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "clone" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_CLONE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "(" phps-mode-lexer-TABS_AND_SPACES "\\(int\\|integer\\)" phps-mode-lexer-TABS_AND_SPACES ")"))) - (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 "var" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_VAR (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "(" phps-mode-lexer-TABS_AND_SPACES "\\(real\\|double\\|float\\)" phps-mode-lexer-TABS_AND_SPACES ")"))) - (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 "\\(int\\|integer\\)" phps-mode-lexer-TABS_AND_SPACES ")"))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_INT_CAST (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "(" phps-mode-lexer-TABS_AND_SPACES "\\(string\\|binary\\)" phps-mode-lexer-TABS_AND_SPACES ")"))) - (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 "\\(real\\|double\\|float\\)" phps-mode-lexer-TABS_AND_SPACES ")"))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_DOUBLE_CAST (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "(" phps-mode-lexer-TABS_AND_SPACES "array" phps-mode-lexer-TABS_AND_SPACES ")"))) - (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 "\\(string\\|binary\\)" phps-mode-lexer-TABS_AND_SPACES ")"))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_STRING_CAST (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "(" phps-mode-lexer-TABS_AND_SPACES "object" phps-mode-lexer-TABS_AND_SPACES ")"))) - (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 "array" phps-mode-lexer-TABS_AND_SPACES ")"))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_ARRAY_CAST (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "(" phps-mode-lexer-TABS_AND_SPACES "\\(bool\\|boolean\\)" phps-mode-lexer-TABS_AND_SPACES ")"))) - (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 "object" phps-mode-lexer-TABS_AND_SPACES ")"))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_OBJECT_CAST (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "(" phps-mode-lexer-TABS_AND_SPACES "unset" phps-mode-lexer-TABS_AND_SPACES ")"))) - (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 (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)))) - ((and ST_IN_SCRIPTING (looking-at (concat "eval" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_EVAL (match-beginning 0) (1- (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)))) - ((and ST_IN_SCRIPTING (looking-at (concat "include" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_INCLUDE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "eval" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_EVAL (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "include_once" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_INCLUDE_ONCE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "include" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_INCLUDE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "require" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_REQUIRE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "include_once" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_INCLUDE_ONCE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "require_once" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_REQUIRE_ONCE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "require" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_REQUIRE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "namespace" phps-mode-lexer-NOT-LABEL))) - (setq phps-mode-lexer-declaring_namespace t) - (phps-mode-lexer-RETURN_TOKEN 'T_NAMESPACE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "require_once" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_REQUIRE_ONCE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "use" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_USE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "namespace" phps-mode-lexer-NOT-LABEL))) (lambda() + (setq phps-mode-lexer-declaring_namespace t) + ) (phps-mode-lexer-RETURN_TOKEN 'T_NAMESPACE (match-beginning 0) (1- (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "insteadof" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_INSTEADOF (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "use" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_USE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "global" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_GLOBAL (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "insteadof" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_INSTEADOF (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "isset" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_ISSET (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "global" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_GLOBAL (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "empty" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_EMPTY (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "isset" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_ISSET (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "__halt_compiler" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_HALT_COMPILER (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "empty" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_EMPTY (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "static" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_STATIC (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "__halt_compiler" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_HALT_COMPILER (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "abstract" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_ABSTRACT (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "static" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_STATIC (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "final" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_FINAL (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "abstract" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_ABSTRACT (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "private" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_PRIVATE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "final" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_FINAL (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "protected" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_PROTECTED (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "private" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_PRIVATE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "public" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_PUBLIC (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "protected" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_PROTECTED (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "unset" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_UNSET (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "public" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_PUBLIC (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at "=>")) - (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 (concat "unset" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_UNSET (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "list" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_LIST (match-beginning 0) (1- (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)))) - ((and ST_IN_SCRIPTING (looking-at (concat "array" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_ARRAY (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "list" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_LIST (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "callable" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_CALLABLE (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "array" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_ARRAY (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at "\\+\\+")) - (phps-mode-lexer-RETURN_TOKEN 'T_INC (match-beginning 0) (match-end 0))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "callable" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_CALLABLE (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at "--")) - (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_INC (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "===")) - (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_DEC (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "!==")) - (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_IDENTICAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "==")) - (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_IDENTICAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "\\(!=\\|<>\\)")) - (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_IS_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "<=>")) - (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_NOT_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "<=")) - (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_SPACESHIP (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at ">=")) - (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_IS_SMALLER_OR_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "\\+=")) - (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_IS_GREATER_OR_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "-=")) - (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_PLUS_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "\\*=")) - (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_MINUS_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "\\*\\\\\\*=")) - (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_MUL_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "\\*\\\\\\*")) - (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_POW_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "/=")) - (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_POW (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "\\.=")) - (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_DIV_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "%=")) - (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_CONCAT_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "<<=")) - (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_MOD_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at ">>=")) - (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_SL_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "&=")) - (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_SR_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "|=")) - (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_AND_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "\\^=")) - (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_OR_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "\\?\\?=")) - (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_XOR_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "||")) - (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_COALESCE_EQUAL (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at "&&")) - (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 "||")) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_BOOLEAN_OR (match-beginning 0) (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "OR" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_OR (match-beginning 0) (1- (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)))) - ((and ST_IN_SCRIPTING (looking-at (concat "AND" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_AND (match-beginning 0) (1- (match-end 0)))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "OR" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_OR (match-beginning 0) (1- (match-end 0))))) - ((and ST_IN_SCRIPTING (looking-at (concat "XOR" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_XOR (match-beginning 0) (1- (match-end 0)))) - - ((and ST_IN_SCRIPTING (looking-at (concat "<<" "[^<]"))) - (phps-mode-lexer-RETURN_TOKEN 'T_SL (match-beginning 0) (1- (match-end 0)))) - - ((and ST_IN_SCRIPTING (looking-at (concat ">>" "[^>]"))) - (phps-mode-lexer-RETURN_TOKEN 'T_SR (match-beginning 0) (1- (match-end 0)))) - - ((and ST_IN_SCRIPTING (looking-at "\\?>\n?")) - (let ((start (match-beginning 0)) - (end (match-end 0))) - (when (= (- end start) 3) - (setq end (1- end))) - (phps-mode-lexer-BEGIN phps-mode-lexer-ST_INITIAL) - (when phps-mode-lexer-PARSER_MODE - (phps-mode-lexer-RETURN_TOKEN ";" start end)) - (phps-mode-lexer-RETURN_TOKEN 'T_CLOSE_TAG start end))) - - ;; HEREDOC and NOWDOC - ((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))) - (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 phps-mode-lexer-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 phps-mode-lexer-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 phps-mode-lexer-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))) - - - ((and ST_IN_SCRIPTING (looking-at "{")) - (phps-mode-lexer-yy_push_state phps-mode-lexer-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))) - - ((and ST_IN_SCRIPTING (looking-at "}")) - (when phps-mode-lexer-state_stack - ;; (message "State stack %s" phps-mode-lexer-state_stack) - ;; (message "popping state from } %s at %s-%s" (length phps-mode-lexer-state_stack) (match-beginning 0) (match-end 0)) - (phps-mode-lexer-yy_pop_state) - ;; (message "New state: %s" phps-mode-lexer-STATE) - ) - (phps-mode-lexer-RETURN_TOKEN "}" (match-beginning 0) (match-end 0))) - - ((and ST_IN_SCRIPTING (looking-at phps-mode-lexer-BNUM)) - (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)))) - - ((and ST_IN_SCRIPTING (looking-at phps-mode-lexer-HNUM)) - (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)))) - - ((and ST_IN_SCRIPTING (or (looking-at phps-mode-lexer-EXPONENT_DNUM) - (looking-at phps-mode-lexer-DNUM))) - (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))) - - ((and ST_IN_SCRIPTING (looking-at phps-mode-lexer-LNUM)) - (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)))) - - ((and ST_IN_SCRIPTING (looking-at (concat "__CLASS__" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_CLASS_C (match-beginning 0) (1- (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "__TRAIT__" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_TRAIT_C (match-beginning 0) (1- (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "__FUNCTION__" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_FUNC_C (match-beginning 0) (1- (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "__METHOD__" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_METHOD_C (match-beginning 0) (1- (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "__LINE__" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_LINE (match-beginning 0) (1- (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "__FILE__" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_FILE (match-beginning 0) (1- (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "__DIR__" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_DIR (match-beginning 0) (1- (match-end 0)))) - ((and ST_IN_SCRIPTING (looking-at (concat "__NAMESPACE__" phps-mode-lexer-NOT-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_NS_C (match-beginning 0) (1- (match-end 0)))) - - ((and ST_IN_SCRIPTING (looking-at "\\(//\\|#\\)")) - (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 - ;; (message "Found comment 1 from %s to %s %s in %s" end (+ end (match-beginning 0)) (match-beginning 0) line) - (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)) - )))) - - ((and ST_IN_SCRIPTING (looking-at (concat "/\\*\\*" phps-mode-lexer-WHITESPACE))) - (let* ((start (match-beginning 0)) - (end (match-end 0)) - (_data (buffer-substring-no-properties start end))) - (let ((string-start (search-forward "*/" nil t)) - position) - (if string-start - (setq position string-start) - (progn - (setq position (point-max)) - (phps-mode-lexer-MOVE_FORWARD (point-max)))) - (phps-mode-lexer-RETURN_TOKEN 'T_DOC_COMMENT start position) - ))) - - ((and ST_IN_SCRIPTING (looking-at "/\\*")) - (let* ((start (match-beginning 0)) - (end (match-end 0)) - (_data (buffer-substring-no-properties start end))) - (let ((string-start (search-forward "*/" nil t)) - position) - (if string-start - (setq position string-start) - (progn - (setq position (point-max)) - (phps-mode-lexer-MOVE_FORWARD (point-max)))) - (phps-mode-lexer-RETURN_TOKEN 'T_COMMENT start position) - ))) - - ((and ST_IN_SCRIPTING (looking-at (concat "\\$" phps-mode-lexer-LABEL))) - (let ((start (match-beginning 0)) - (end (match-end 0))) - (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE start end))) - - ((and ST_IN_SCRIPTING (looking-at phps-mode-lexer-TOKENS)) - (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)))) - - ((and ST_IN_SCRIPTING (looking-at "'")) - (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 - ;; (message "Single quoted string %s" (buffer-substring-no-properties start un-escaped-end)) - (phps-mode-lexer-RETURN_TOKEN 'T_CONSTANT_ENCAPSED_STRING start un-escaped-end)) - (progn - ;; Unclosed single quotes - ;; (message "Single quoted string never ends..") - (phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE start (point-max)) - (phps-mode-lexer-MOVE_FORWARD (point-max)))))) - - ;; Double quoted string - ((and ST_IN_SCRIPTING (looking-at "\"")) - (let* ((start (match-beginning 0)) - (end (match-end 0)) - (_data (buffer-substring-no-properties start end))) - (forward-char) - ;; Handle the "" case - (if (looking-at-p "\"") - (progn - ;; (message "Empty double quoted string from %s to %s" start (+ start 2)) - (phps-mode-lexer-RETURN_TOKEN 'T_CONSTANT_ENCAPSED_STRING start (+ start 2)) - (forward-char)) - (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))) - ;; (message "Double quoted string %s" double-quoted-string) - ;; Do we find variable inside quote? - (goto-char string-start) - (if (looking-at "[^\\\\]\"") - (progn - (let ((_double-quoted-string (buffer-substring-no-properties start (+ string-start 2)))) - ;; (message "Double quoted string: %s" _double-quoted-string) - (phps-mode-lexer-RETURN_TOKEN 'T_CONSTANT_ENCAPSED_STRING start (+ string-start 2)))) - (progn - ;; (message "Found variable after '%s'" (buffer-substring-no-properties start string-start)) - (phps-mode-lexer-BEGIN phps-mode-lexer-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 - ;; (message "Found no ending quote, skipping to end") - (phps-mode-lexer-RETURN_TOKEN 'T_ERROR start (point-max)) - (phps-mode-lexer-MOVE_FORWARD (point-max)))))))) - - ((and ST_IN_SCRIPTING (looking-at "[`]")) - ;; (message "Begun backquote at %s-%s" (match-beginning 0) (match-end 0)) - (phps-mode-lexer-BEGIN phps-mode-lexer-ST_BACKQUOTE) - (phps-mode-lexer-RETURN_TOKEN "`" (match-beginning 0) (match-end 0))) - - - ((and ST_IN_SCRIPTING (looking-at phps-mode-lexer-LABEL)) - ;; (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))) - - ((and ST_IN_SCRIPTING (looking-at phps-mode-lexer-TOKENS)) - (phps-mode-lexer-RETURN_TOKEN (match-string 0) (match-beginning 0) (match-end 0))) - - ((and ST_IN_SCRIPTING (looking-at phps-mode-lexer-ANY_CHAR)) - ;; Unexpected character - ;; (message "Unexpected character '%s'" (buffer-substring-no-properties (match-beginning 0) (match-end 0))) - (phps-mode-lexer-RETURN_TOKEN 'T_ERROR (match-beginning 0) (point-max)) - (phps-mode-lexer-MOVE_FORWARD (point-max))) - - - ;; ST_INITIAL - - - ((and ST_INITIAL (looking-at "<\\?=")) - (let ((start (match-beginning 0)) - (end (match-end 0))) - (phps-mode-lexer-BEGIN phps-mode-lexer-ST_IN_SCRIPTING) - ;; (message "Starting scripting after <?=") - (when phps-mode-lexer-PARSER_MODE - (phps-mode-lexer-RETURN_TOKEN 'T_ECHO start end)) - (phps-mode-lexer-RETURN_TOKEN 'T_OPEN_TAG_WITH_ECHO start end))) - - ((and ST_INITIAL (looking-at "<\\?php\\([ \t]\\|\n\\)")) - (let ((start (match-beginning 0)) - (end (match-end 0))) - (phps-mode-lexer-BEGIN phps-mode-lexer-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))) - - ((and ST_INITIAL (looking-at "<\\?")) - (when phps-mode-lexer-SHORT_TAGS - (let ((start (match-beginning 0)) - (end (match-end 0))) - (phps-mode-lexer-BEGIN phps-mode-lexer-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)))) - - ;; NOTE: mimics inline_char_handler - ((and ST_INITIAL (looking-at phps-mode-lexer-ANY_CHAR)) - (let ((start (match-beginning 0))) - (let ((string-start (search-forward "<?" nil t))) - (if string-start - (phps-mode-lexer-RETURN_TOKEN 'T_INLINE_HTML start (- string-start 2)) - (phps-mode-lexer-RETURN_TOKEN 'T_INLINE_HTML start (point-max)))))) - - - ;; ST_DOUBLE_QUOTES - - - ((and ST_DOUBLE_QUOTES (looking-at "\\${")) - (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_VARNAME) - (phps-mode-lexer-RETURN_TOKEN 'T_DOLLAR_OPEN_CURLY_BRACES (match-beginning 0) (match-end 0))) - - ((and ST_DOUBLE_QUOTES (looking-at (concat "\\$" phps-mode-lexer-LABEL "->" "[a-zA-Z_\x80-\xff]"))) - (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_PROPERTY) - (forward-char -3) - (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (- (match-end 0) 3))) - - ((and ST_DOUBLE_QUOTES (looking-at (concat "\\$" phps-mode-lexer-LABEL "\\["))) - (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_VAR_OFFSET) - (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (match-end 0))) - - ((and ST_DOUBLE_QUOTES (looking-at (concat "\\$" phps-mode-lexer-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (match-end 0))) - - ((and ST_DOUBLE_QUOTES (looking-at "{\\$")) - (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_IN_SCRIPTING) - ;; (message "Starting ST_IN_SCRIPTING from double-quoted string at %s-%s" (match-beginning 0) (- (match-end 0) 1)) - (phps-mode-lexer-RETURN_TOKEN 'T_CURLY_OPEN (match-beginning 0) (- (match-end 0) 1))) - - ((and ST_DOUBLE_QUOTES (looking-at "[\"]")) - (phps-mode-lexer-BEGIN phps-mode-lexer-ST_IN_SCRIPTING) - ;; (message "Ended double-quote at %s" (match-beginning 0)) - (phps-mode-lexer-RETURN_TOKEN "\"" (match-beginning 0) (match-end 0))) - - ((and ST_DOUBLE_QUOTES (looking-at phps-mode-lexer-ANY_CHAR)) - (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)) - ))) - (progn - ;; "Found no end of double-quoted region - (phps-mode-lexer-RETURN_TOKEN 'T_ERROR start (point-max)) - (phps-mode-lexer-MOVE_FORWARD (point-max))))))) - - - ;; ST_BACKQUOTE - - - ((and ST_BACKQUOTE (looking-at "\\${")) - (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_VARNAME) - (phps-mode-lexer-RETURN_TOKEN 'T_DOLLAR_OPEN_CURLY_BRACES (match-beginning 0) (match-end 0))) - - ((and ST_BACKQUOTE (looking-at (concat "\\$" phps-mode-lexer-LABEL "->" "[a-zA-Z_\x80-\xff]"))) - (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_PROPERTY) - (forward-char -3) - (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (- (match-end 0) 3))) - - ((and ST_BACKQUOTE (looking-at (concat "\\$" phps-mode-lexer-LABEL "\\["))) - (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_VAR_OFFSET) - (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (match-end 0))) - - ((and ST_BACKQUOTE (looking-at (concat "\\$" phps-mode-lexer-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (match-end 0))) - - ((and ST_BACKQUOTE (looking-at "{\\$")) - (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_IN_SCRIPTING) - (phps-mode-lexer-RETURN_TOKEN 'T_CURLY_OPEN (match-beginning 0) (- (match-end 0) 1))) - - ((and ST_BACKQUOTE (looking-at "[`]")) - (phps-mode-lexer-BEGIN phps-mode-lexer-ST_IN_SCRIPTING) - (phps-mode-lexer-RETURN_TOKEN "`" (match-beginning 0) (match-end 0))) - - ((and ST_BACKQUOTE (looking-at phps-mode-lexer-ANY_CHAR)) - (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 - ;; (message "Found no end of backquote.. skipping to end from %s" (buffer-substring-no-properties (point) (point-max))) - (phps-mode-lexer-RETURN_TOKEN 'T_ERROR old-start (point-max)) - (phps-mode-lexer-MOVE_FORWARD (point-max)))))) - - - ;; ST_HEREDOC - - ((and ST_HEREDOC (looking-at "\\${")) - (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_VARNAME) - (phps-mode-lexer-RETURN_TOKEN 'T_DOLLAR_OPEN_CURLY_BRACES (match-beginning 0) (match-end 0))) - - ((and ST_HEREDOC (looking-at (concat "\\$" phps-mode-lexer-LABEL "->" "[a-zA-Z_\x80-\xff]"))) - (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_PROPERTY) - (forward-char -3) - (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (- (match-end 0) 3))) - - ((and ST_HEREDOC (looking-at (concat "\\$" phps-mode-lexer-LABEL "\\["))) - (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_VAR_OFFSET) - (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (match-end 0))) - - ((and ST_HEREDOC (looking-at (concat "\\$" phps-mode-lexer-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (match-end 0))) - - ((and ST_HEREDOC (looking-at (concat "{\\$"))) - (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_IN_SCRIPTING) - (phps-mode-lexer-RETURN_TOKEN 'T_CURLY_OPEN (match-beginning 0) (- (match-end 0) 1))) - - ((and ST_HEREDOC (looking-at phps-mode-lexer-ANY_CHAR)) - ;; (message "Found nothing useful at '%s' looking at {$ %s" (buffer-substring-no-properties (point) (point-max)) (looking-at "{\\$")) - ;; 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) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "AND" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_AND (match-beginning 0) (1- (match-end 0))))) + + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "XOR" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_XOR (match-beginning 0) (1- (match-end 0))))) + + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "<<" "[^<]"))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_SL (match-beginning 0) (1- (match-end 0))))) + + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat ">>" "[^>]"))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_SR (match-beginning 0) (1- (match-end 0))))) + + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at "\\?>\n?")) (lambda() + (let ((start (match-beginning 0)) + (end (match-end 0))) + (when (= (- end start) 3) + (setq end (1- end))) + (phps-mode-lexer-BEGIN phps-mode-lexer-ST_INITIAL) + (when phps-mode-lexer-PARSER_MODE + (phps-mode-lexer-RETURN_TOKEN ";" start end)) + (phps-mode-lexer-RETURN_TOKEN 'T_CLOSE_TAG start end)))) + + ;; HEREDOC and NOWDOC + (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 phps-mode-lexer-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 phps-mode-lexer-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 phps-mode-lexer-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() + (phps-mode-lexer-yy_push_state phps-mode-lexer-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 ST_IN_SCRIPTING (looking-at "}")) (lambda() + (when phps-mode-lexer-state_stack + ;; (message "State stack %s" phps-mode-lexer-state_stack) + ;; (message "popping state from } %s at %s-%s" (length phps-mode-lexer-state_stack) (match-beginning 0) (match-end 0)) + (phps-mode-lexer-yy_pop_state) + ;; (message "New state: %s" phps-mode-lexer-STATE) + ) + ) (phps-mode-lexer-RETURN_TOKEN "}" (match-beginning 0) (match-end 0))) + + (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-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_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 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 (concat "__CLASS__" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_CLASS_C (match-beginning 0) (1- (match-end 0))))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "__TRAIT__" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_TRAIT_C (match-beginning 0) (1- (match-end 0))))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "__FUNCTION__" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_FUNC_C (match-beginning 0) (1- (match-end 0))))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "__METHOD__" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_METHOD_C (match-beginning 0) (1- (match-end 0))))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "__LINE__" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_LINE (match-beginning 0) (1- (match-end 0))))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "__FILE__" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_FILE (match-beginning 0) (1- (match-end 0))))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "__DIR__" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_DIR (match-beginning 0) (1- (match-end 0))))) + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "__NAMESPACE__" phps-mode-lexer-NOT-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_NS_C (match-beginning 0) (1- (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 + ;; (message "Found comment 1 from %s to %s %s in %s" end (+ end (match-beginning 0)) (match-beginning 0) line) + (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))) + (let ((string-start (search-forward "*/" nil t)) + position) + (if string-start + (setq position string-start) + (progn + (setq position (point-max)) + (phps-mode-lexer-MOVE_FORWARD (point-max)))) + (phps-mode-lexer-RETURN_TOKEN 'T_DOC_COMMENT start position) + )))) + + (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))) + (let ((string-start (search-forward "*/" nil t)) + position) + (if string-start + (setq position string-start) + (progn + (setq position (point-max)) + (phps-mode-lexer-MOVE_FORWARD (point-max)))) + (phps-mode-lexer-RETURN_TOKEN 'T_COMMENT start position) + )))) + + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at (concat "\\$" phps-mode-lexer-LABEL))) (lambda() + (let ((start (match-beginning 0)) + (end (match-end 0))) + (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE start end)))) + + (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() + (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 + ;; (message "Single quoted string %s" (buffer-substring-no-properties start un-escaped-end)) + (phps-mode-lexer-RETURN_TOKEN 'T_CONSTANT_ENCAPSED_STRING start un-escaped-end)) + (progn + ;; Unclosed single quotes + ;; (message "Single quoted string never ends..") + (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))) + (forward-char) + ;; Handle the "" case + (if (looking-at-p "\"") + (progn + ;; (message "Empty double quoted string from %s to %s" start (+ start 2)) + (phps-mode-lexer-RETURN_TOKEN 'T_CONSTANT_ENCAPSED_STRING start (+ start 2)) + (forward-char)) + (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))) + ;; (message "Double quoted string %s" double-quoted-string) + ;; Do we find variable inside quote? + (goto-char string-start) + (if (looking-at "[^\\\\]\"") + (progn + (let ((_double-quoted-string (buffer-substring-no-properties start (+ string-start 2)))) + ;; (message "Double quoted string: %s" _double-quoted-string) + (phps-mode-lexer-RETURN_TOKEN 'T_CONSTANT_ENCAPSED_STRING start (+ string-start 2)))) + (progn + ;; (message "Found variable after '%s'" (buffer-substring-no-properties start string-start)) + (phps-mode-lexer-BEGIN phps-mode-lexer-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 + ;; (message "Found no ending quote, skipping to end") + (phps-mode-lexer-RETURN_TOKEN 'T_ERROR start (point-max)) + (phps-mode-lexer-MOVE_FORWARD (point-max))))))))) + + (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 phps-mode-lexer-ST_BACKQUOTE) + ) (phps-mode-lexer-RETURN_TOKEN "`" (match-beginning 0) (match-end 0))) + + + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (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)))) + + ((and ST_IN_SCRIPTING (looking-at phps-mode-lexer-TOKENS)) + (phps-mode-lexer-RETURN_TOKEN (match-string 0) (match-beginning 0) (match-end 0))) + + (phps-mode-lexer-re2c-rule (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-ANY_CHAR)) (lambda() + ;; Unexpected character + ;; (message "Unexpected character '%s'" (buffer-substring-no-properties (match-beginning 0) (match-end 0))) + (phps-mode-lexer-RETURN_TOKEN 'T_ERROR (match-beginning 0) (point-max)) + ) (phps-mode-lexer-MOVE_FORWARD (point-max))) + + + ;; 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 phps-mode-lexer-ST_IN_SCRIPTING) + ;; (message "Starting scripting after <?=") + (when phps-mode-lexer-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 "<\\?php\\([ \t]\\|\n\\)")) (lambda() + (let ((start (match-beginning 0)) + (end (match-end 0))) + (phps-mode-lexer-BEGIN phps-mode-lexer-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 "<\\?")) (lambda() + (when phps-mode-lexer-SHORT_TAGS + (let ((start (match-beginning 0)) + (end (match-end 0))) + (phps-mode-lexer-BEGIN phps-mode-lexer-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))))) + + ;; NOTE: mimics inline_char_handler + (phps-mode-lexer-re2c-rule (and ST_INITIAL (looking-at phps-mode-lexer-ANY_CHAR)) (lambda() + (let ((start (match-beginning 0))) + (let ((string-start (search-forward "<?" nil t))) + (if string-start + (phps-mode-lexer-RETURN_TOKEN 'T_INLINE_HTML start (- string-start 2)) + (phps-mode-lexer-RETURN_TOKEN 'T_INLINE_HTML start (point-max))))))) + + + ;; ST_DOUBLE_QUOTES + + + (phps-mode-lexer-re2c-rule (and ST_DOUBLE_QUOTES (looking-at "\\${")) (lambda() + (phps-mode-lexer-yy_push_state phps-mode-lexer-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_DOUBLE_QUOTES (looking-at (concat "\\$" phps-mode-lexer-LABEL "->" "[a-zA-Z_\x80-\xff]"))) (lambda() + (phps-mode-lexer-yy_push_state phps-mode-lexer-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 ST_DOUBLE_QUOTES (looking-at (concat "\\$" phps-mode-lexer-LABEL "\\["))) (lambda() + (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_VAR_OFFSET) + ) (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (match-end 0))) + + (phps-mode-lexer-re2c-rule (and ST_DOUBLE_QUOTES (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_DOUBLE_QUOTES (looking-at "{\\$")) (lambda() + (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_IN_SCRIPTING) + ) ;; (message "Starting ST_IN_SCRIPTING from double-quoted string at %s-%s" (match-beginning 0) (- (match-end 0) 1)) + (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 phps-mode-lexer-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_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)) + ))) + (progn + ;; "Found no end of double-quoted region + (phps-mode-lexer-RETURN_TOKEN 'T_ERROR start (point-max)) + (phps-mode-lexer-MOVE_FORWARD (point-max)))))))) + + + ;; ST_BACKQUOTE + + + (phps-mode-lexer-re2c-rule (and ST_BACKQUOTE (looking-at "\\${")) (lambda() + (phps-mode-lexer-yy_push_state phps-mode-lexer-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_BACKQUOTE (looking-at (concat "\\$" phps-mode-lexer-LABEL "->" "[a-zA-Z_\x80-\xff]"))) (lambda() + (phps-mode-lexer-yy_push_state phps-mode-lexer-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 ST_BACKQUOTE (looking-at (concat "\\$" phps-mode-lexer-LABEL "\\["))) (lambda() + (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_VAR_OFFSET) + ) (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (match-end 0))) + + (phps-mode-lexer-re2c-rule (and ST_BACKQUOTE (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_BACKQUOTE (looking-at "{\\$")) (lambda() + (phps-mode-lexer-yy_push_state phps-mode-lexer-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_BACKQUOTE (looking-at "[`]")) (lambda() + (phps-mode-lexer-BEGIN phps-mode-lexer-ST_IN_SCRIPTING) + ) (phps-mode-lexer-RETURN_TOKEN "`" (match-beginning 0) (match-end 0))) + + (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 + ;; (message "Found no end of backquote.. skipping to end from %s" (buffer-substring-no-properties (point) (point-max))) + (phps-mode-lexer-RETURN_TOKEN 'T_ERROR old-start (point-max)) + (phps-mode-lexer-MOVE_FORWARD (point-max))))))) + + + ;; ST_HEREDOC + + (phps-mode-lexer-re2c-rule (and ST_HEREDOC (looking-at "\\${")) (lambda() + (phps-mode-lexer-yy_push_state phps-mode-lexer-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_HEREDOC (looking-at (concat "\\$" phps-mode-lexer-LABEL "->" "[a-zA-Z_\x80-\xff]"))) (lambda() + (phps-mode-lexer-yy_push_state phps-mode-lexer-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 ST_HEREDOC (looking-at (concat "\\$" phps-mode-lexer-LABEL "\\["))) (lambda() + (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_VAR_OFFSET) + ) (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (match-end 0))) + + (phps-mode-lexer-re2c-rule (and ST_HEREDOC (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_HEREDOC (looking-at (concat "{\\$"))) (lambda() + (phps-mode-lexer-yy_push_state phps-mode-lexer-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_HEREDOC (looking-at phps-mode-lexer-ANY_CHAR)) (lambda() + ;; (message "Found nothing useful at '%s' looking at {$ %s" (buffer-substring-no-properties (point) (point-max)) (looking-at "{\\$")) + ;; 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 phps-mode-lexer-ST_END_HEREDOC) - (phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE old-start start)) + (phps-mode-lexer-BEGIN phps-mode-lexer-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) - ) + (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 - ;; (message "Found no ending of heredoc at %s '%s'" heredoc_label (buffer-substring-no-properties (point) (point-max))) - (phps-mode-lexer-RETURN_TOKEN 'T_ERROR old-start (point-max)) - (phps-mode-lexer-MOVE_FORWARD (point-max)) - )))) + )) + (progn + ;; (message "Found no ending of heredoc at %s '%s'" heredoc_label (buffer-substring-no-properties (point) (point-max))) + (phps-mode-lexer-RETURN_TOKEN 'T_ERROR old-start (point-max)) + (phps-mode-lexer-MOVE_FORWARD (point-max)) + ))))) - ;; ST_NOWDOC + ;; ST_NOWDOC - ((and ST_NOWDOC (looking-at phps-mode-lexer-ANY_CHAR)) - (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 phps-mode-lexer-ST_END_HEREDOC) - (phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE old-start start) - ) - (progn - ;; (message "Found no ending of nowdoc at %s '%s'" heredoc_label (buffer-substring-no-properties (point) (point-max))) - (phps-mode-lexer-RETURN_TOKEN 'T_ERROR old-start (point-max)) - (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) + (phps-mode-lexer-BEGIN phps-mode-lexer-ST_END_HEREDOC) + (phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE old-start start) + ) + (progn + ;; (message "Found no ending of nowdoc at %s '%s'" heredoc_label (buffer-substring-no-properties (point) (point-max))) + (phps-mode-lexer-RETURN_TOKEN 'T_ERROR old-start (point-max)) + (phps-mode-lexer-MOVE_FORWARD (point-max)) + ))))) - ;; ST_LOOKING_FOR_VARNAME + ;; ST_LOOKING_FOR_VARNAME - ((and ST_LOOKING_FOR_VARNAME (looking-at (concat phps-mode-lexer-LABEL "[\\[}]"))) - (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 phps-mode-lexer-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 (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 phps-mode-lexer-ST_IN_SCRIPTING) + (phps-mode-lexer-RETURN_TOKEN 'T_STRING_VARNAME start end)))) - ((and ST_LOOKING_FOR_VARNAME (looking-at phps-mode-lexer-ANY_CHAR)) - (phps-mode-lexer-yy_pop_state) - (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_IN_SCRIPTING)) + ((and ST_LOOKING_FOR_VARNAME (looking-at phps-mode-lexer-ANY_CHAR)) + (phps-mode-lexer-yy_pop_state) + (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_IN_SCRIPTING)) - ;; ST_END_HEREDOC + ;; ST_END_HEREDOC - ((and ST_END_HEREDOC (looking-at (concat phps-mode-lexer-ANY_CHAR))) + (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 phps-mode-lexer-ST_IN_SCRIPTING) - (phps-mode-lexer-RETURN_TOKEN 'T_END_HEREDOC start end) + (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 phps-mode-lexer-ST_IN_SCRIPTING) + (phps-mode-lexer-RETURN_TOKEN 'T_END_HEREDOC start end) - )) + ))) - ;; ST_VAR_OFFSET + ;; ST_VAR_OFFSET - ((and ST_VAR_OFFSET (looking-at (concat "\\(" - phps-mode-lexer-LNUM "\\|" - phps-mode-lexer-HNUM "\\|" - phps-mode-lexer-BNUM "\\)"))) - (phps-mode-lexer-RETURN_TOKEN 'T_NUM_STRING (match-beginning 0) (match-end 0))) + (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)))) - ((and ST_VAR_OFFSET (looking-at (concat "\\$" phps-mode-lexer-LABEL))) - (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (match-end 0))) + (phps-mode-lexer-re2c-rule (and ST_VAR_OFFSET (looking-at (concat "\\$" phps-mode-lexer-LABEL))) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (match-end 0)))) - ((and ST_VAR_OFFSET (looking-at "\\]")) - (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 "\\]")) (lambda() + (phps-mode-lexer-yy_pop_state) + ) (phps-mode-lexer-RETURN_TOKEN "]" (match-beginning 0) (match-end 0))) - ((and ST_VAR_OFFSET (looking-at (concat "\\(" phps-mode-lexer-TOKENS - "\\|[{}\"`]\\)"))) - (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 "\\(" 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)))) - ((and ST_VAR_OFFSET (looking-at (concat "[ \n\r\t'#]"))) - (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 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)))) - ((and ST_VAR_OFFSET (looking-at phps-mode-lexer-LABEL)) - (phps-mode-lexer-RETURN_TOKEN 'T_STRING (match-beginning 0) (match-end 0))) + (phps-mode-lexer-re2c-rule (and ST_VAR_OFFSET (looking-at phps-mode-lexer-LABEL)) (lambda() + (phps-mode-lexer-RETURN_TOKEN 'T_STRING (match-beginning 0) (match-end 0)))) - ((and ST_VAR_OFFSET (looking-at phps-mode-lexer-ANY_CHAR)) - ;; Unexpected character - (phps-mode-lexer-RETURN_TOKEN 'T_ERROR (match-beginning 0) (point-max)) - (phps-mode-lexer-MOVE_FORWARD (point-max))) + (phps-mode-lexer-re2c-rule (and ST_VAR_OFFSET (looking-at phps-mode-lexer-ANY_CHAR)) (lambda() + ;; Unexpected character + (phps-mode-lexer-RETURN_TOKEN 'T_ERROR (match-beginning 0) (point-max)) + ) (phps-mode-lexer-MOVE_FORWARD (point-max))) - ))) + (phps-mode-lexer-re2c-execute) + + )) (defun phps-mode-lexer-get-tokens () "Get tokens."