Highlight::Delimiter, // Number literals and magic constants T_CLASS_C, T_DIR, T_DNUMBER, T_LNUMBER, T_FILE, T_FUNC_C, T_LINE, T_METHOD_C, T_NS_C, T_NUM_STRING, T_TRAIT_C => Highlight::Number, // String literals T_CONSTANT_ENCAPSED_STRING, T_ENCAPSED_AND_WHITESPACE => Highlight::String, // Simple variables T_VARIABLE, T_STRING_VARNAME => Highlight::Variable, // Operators T_AS, T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG, T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG, T_AND_EQUAL, T_BOOLEAN_AND, T_BOOLEAN_OR, T_COALESCE, T_COALESCE_EQUAL, T_CONCAT_EQUAL, T_DEC, T_DIV_EQUAL, T_DOUBLE_ARROW, T_DOUBLE_COLON, T_ELLIPSIS, T_INC, T_INSTANCEOF, T_INSTEADOF, T_IS_EQUAL, T_IS_GREATER_OR_EQUAL, T_IS_IDENTICAL, T_IS_NOT_EQUAL, T_IS_NOT_IDENTICAL, T_IS_SMALLER_OR_EQUAL, T_SPACESHIP, T_LOGICAL_AND, T_LOGICAL_OR, T_LOGICAL_XOR, T_MINUS_EQUAL, T_MOD_EQUAL, T_MUL_EQUAL, T_NS_SEPARATOR, T_NULLSAFE_OBJECT_OPERATOR, T_OBJECT_OPERATOR, T_OR_EQUAL, T_PLUS_EQUAL, T_POW, T_POW_EQUAL, T_SL, T_SL_EQUAL, T_SR, T_SR_EQUAL, T_XOR_EQUAL => Highlight::Operator, // Keywords1 T_ABSTRACT, T_BREAK, T_CASE, T_CATCH, T_CLASS, T_CLONE, T_CONST, T_CONTINUE, T_DECLARE, T_DEFAULT, T_DO, T_ECHO, T_ELSE, T_ELSEIF, T_EMPTY, T_ENDDECLARE, T_ENDFOR, T_ENDFOREACH, T_ENDIF, T_ENDSWITCH, T_ENDWHILE, T_EVAL, T_EXIT, T_EXTENDS, T_FINAL, T_FINALLY, T_FN, T_FOR, T_FOREACH, T_FUNCTION, T_GLOBAL, T_GOTO, T_HALT_COMPILER, T_IF, T_IMPLEMENTS, T_INCLUDE, T_INCLUDE_ONCE, T_INTERFACE, T_ISSET, T_LIST, T_MATCH, T_NAMESPACE, T_NEW, T_PRINT, T_PRIVATE, T_PUBLIC, T_PROTECTED, T_REQUIRE, T_REQUIRE_ONCE, T_RETURN, T_STATIC, T_SWITCH, T_THROW, T_TRAIT, T_TRY, T_UNSET, T_USE, T_VAR, T_WHILE, T_YIELD, T_YIELD_FROM => Highlight::Keyword1, // Not string literals, but identifiers, keywords, etc. T_STRING => Highlight::Identifier, // Types and casts T_ARRAY_CAST, T_BOOL_CAST, T_CALLABLE, T_DOUBLE_CAST, T_INT_CAST, T_OBJECT_CAST, T_STRING_CAST, T_UNSET_CAST => Highlight::Keyword2, // Comments T_DOC_COMMENT => Highlight::MultiLineComment, T_INLINE_HTML => Highlight::Embed, default => Highlight::Normal, }; } /** * Map a single character PHP delimiter or operator to its associated * highlighting type * * @param string $char * @return Highlight */ public static function fromPHPChar(string $char): self { return match ($char) { // Delimiter characters '[', ']', '{', '}', '(', ')', '"', "'" => Highlight::Delimiter, // Single character operators '?', ',', ';', ':', '^', '%', '+', '-', '*', '/', '.', '|', '~', '>', '<', '=', '!' => Highlight::Operator, default => Highlight::Normal, }; } }