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_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, // Invalid syntax T_BAD_CHARACTER => Highlight::INVALID, default => Highlight::NORMAL, }; } /** * Map a single character PHP delimiter or operator to its associated * highlighting type * * @param string $char * @return int */ public static function fromPHPChar(string $char): int { return match ($char) { // Delimiter characters '[', ']', '{', '}', '(', ')', '"', "'" => Highlight::DELIMITER, // Single character operators '?', ',', ';', ':', '^', '%', '+', '-', '*', '/', '.', '|', '~', '>', '<', '=', '!' => Highlight::OPERATOR, default => Highlight::NORMAL, }; } }