2019-10-24 16:57:27 -04:00
|
|
|
<?php declare(strict_types=1);
|
|
|
|
|
2019-11-08 16:27:08 -05:00
|
|
|
namespace Aviat\Kilo\Enum;
|
2019-10-24 16:57:27 -04:00
|
|
|
|
2019-11-19 15:57:51 -05:00
|
|
|
use Aviat\Kilo\Traits;
|
|
|
|
|
2021-03-04 12:03:51 -05:00
|
|
|
/**
|
|
|
|
* @enum
|
|
|
|
*/
|
2019-10-24 16:57:27 -04:00
|
|
|
class Highlight {
|
2019-11-19 15:57:51 -05:00
|
|
|
use Traits\ConstList;
|
2019-11-19 13:48:12 -05:00
|
|
|
|
2019-10-24 16:57:27 -04:00
|
|
|
public const NORMAL = 0;
|
2019-10-25 12:08:21 -04:00
|
|
|
public const COMMENT = 1;
|
2019-10-25 16:36:03 -04:00
|
|
|
public const ML_COMMENT = 2;
|
|
|
|
public const KEYWORD1 = 3;
|
|
|
|
public const KEYWORD2 = 4;
|
|
|
|
public const STRING = 5;
|
|
|
|
public const NUMBER = 6;
|
2019-10-29 17:02:03 -04:00
|
|
|
public const OPERATOR = 7;
|
|
|
|
public const VARIABLE = 8;
|
2019-10-30 14:21:10 -04:00
|
|
|
public const DELIMITER = 9;
|
|
|
|
public const INVALID = 10;
|
|
|
|
public const MATCH = 11;
|
2021-03-03 20:23:12 -05:00
|
|
|
public const IDENTIFIER = 12;
|
2021-03-10 11:10:52 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Map a PHP syntax token to its associated highlighting type
|
|
|
|
*
|
|
|
|
* @param int $token
|
|
|
|
* @return int
|
|
|
|
*/
|
|
|
|
public static function fromPHPToken(int $token): int
|
|
|
|
{
|
|
|
|
return match($token) {
|
|
|
|
// Delimiters
|
|
|
|
T_ARRAY,
|
|
|
|
T_CURLY_OPEN,
|
|
|
|
T_DOLLAR_OPEN_CURLY_BRACES,
|
|
|
|
T_OPEN_TAG,
|
|
|
|
T_OPEN_TAG_WITH_ECHO,
|
|
|
|
T_CLOSE_TAG,
|
|
|
|
T_START_HEREDOC,
|
|
|
|
T_END_HEREDOC => 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,
|
|
|
|
};
|
|
|
|
}
|
2019-10-24 16:57:27 -04:00
|
|
|
}
|