More PHP highlighting

This commit is contained in:
Timothy Warren 2019-10-29 17:24:04 -04:00
parent 346ef67a08
commit fa96e91b30

View File

@ -303,13 +303,38 @@ class Row {
$charStart = strpos($this->render, $char, $offset); $charStart = strpos($this->render, $char, $offset);
$charEnd = $charStart + $charLen; $charEnd = $charStart + $charLen;
if ($token['typeName'] === 'RAW')
{
switch($token['char'])
{
case '^':
case '%':
case '+':
case '-':
case '*':
case '/':
case '.':
case '|':
case '~':
case '>':
case '<':
case '=':
case '!':
array_replace_range($this->hl, $charStart, $charLen, Highlight::OPERATOR);
$offset = $charEnd;
continue 2;
}
}
switch ($token['type']) switch ($token['type'])
{ {
// Number literals
case T_LNUMBER: case T_LNUMBER:
array_replace_range($this->hl, $charStart, $charLen, Highlight::NUMBER); array_replace_range($this->hl, $charStart, $charLen, Highlight::NUMBER);
$offset = $charEnd; $offset = $charEnd;
continue 2; continue 2;
// Simple string literals
case T_CONSTANT_ENCAPSED_STRING: case T_CONSTANT_ENCAPSED_STRING:
array_replace_range($this->hl, $charStart, $charLen, Highlight::STRING); array_replace_range($this->hl, $charStart, $charLen, Highlight::STRING);
$offset = $charEnd; $offset = $charEnd;
@ -321,6 +346,7 @@ class Row {
case T_BOOLEAN_OR: case T_BOOLEAN_OR:
case T_COALESCE: case T_COALESCE:
case T_CONCAT_EQUAL: case T_CONCAT_EQUAL:
case T_DEC:
case T_DIV_EQUAL: case T_DIV_EQUAL:
case T_DOUBLE_ARROW: case T_DOUBLE_ARROW:
case T_DOUBLE_COLON: case T_DOUBLE_COLON:
@ -339,6 +365,7 @@ class Row {
case T_MINUS_EQUAL: case T_MINUS_EQUAL:
case T_MOD_EQUAL: case T_MOD_EQUAL:
case T_MUL_EQUAL: case T_MUL_EQUAL:
case T_NS_SEPARATOR:
case T_OBJECT_OPERATOR: case T_OBJECT_OPERATOR:
case T_OR_EQUAL: case T_OR_EQUAL:
case T_PAAMAYIM_NEKUDOTAYIM: case T_PAAMAYIM_NEKUDOTAYIM:
@ -354,20 +381,34 @@ class Row {
$offset = $charEnd; $offset = $charEnd;
continue 2; continue 2;
// Simple variables
case T_VARIABLE: case T_VARIABLE:
array_replace_range($this->hl, $charStart, $charLen, Highlight::VARIABLE); array_replace_range($this->hl, $charStart, $charLen, Highlight::VARIABLE);
$offset = $charEnd; $offset = $charEnd;
continue 2; continue 2;
case T_COMMENT:
case T_DOC_COMMENT: case T_DOC_COMMENT:
// TODO // TODO
break; break;
// Not string literals, but identifiers, keywords, etc.
case T_STRING:
if (in_array($char, $this->parent->syntax->keywords2, TRUE))
{
array_replace_range($this->hl, $charStart, $charLen, Highlight::KEYWORD2);
$offset = $charEnd;
continue 2;
}
break;
// Keywords1 // Keywords1
case T_ABSTRACT: case T_ABSTRACT:
case T_AS: case T_AS:
case T_BREAK: case T_BREAK:
case T_CASE: case T_CASE:
case T_CATCH:
case T_CLASS:
case T_DO: case T_DO:
array_replace_range($this->hl, $charStart, $charLen, Highlight::KEYWORD1); array_replace_range($this->hl, $charStart, $charLen, Highlight::KEYWORD1);
// $keyword = $this->getKeywordFromToken($token['type']); // $keyword = $this->getKeywordFromToken($token['type']);
@ -379,17 +420,4 @@ class Row {
} }
} }
} }
private function getKeywordFromToken(int $token): ?string
{
$map = [
T_ABSTRACT => 'abstract',
T_AS => 'as',
T_BREAK => 'break',
T_CASE => 'case',
T_DO => 'do',
];
return $map[$token] ?? NULL;
}
} }