Refactor syntax class to use boolean flags instead of bitflags, allow conditional rendering of characters
This commit is contained in:
parent
30b4c3818a
commit
ead70c33ac
@ -27,7 +27,7 @@ class ANSI {
|
|||||||
/**
|
/**
|
||||||
* Removes text attributes, such as bold, underline, blink, inverted colors
|
* Removes text attributes, such as bold, underline, blink, inverted colors
|
||||||
*/
|
*/
|
||||||
public const RESET_TEXT = "\e[0m";
|
public const RESET_TEXT = "\e[m";
|
||||||
|
|
||||||
public const BOLD_TEXT = "\e[1m";
|
public const BOLD_TEXT = "\e[1m";
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ class Highlight {
|
|||||||
public const INVALID = 10;
|
public const INVALID = 10;
|
||||||
public const MATCH = 11;
|
public const MATCH = 11;
|
||||||
public const IDENTIFIER = 12;
|
public const IDENTIFIER = 12;
|
||||||
|
public const CHARACTER = 13;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map a PHP syntax token to its associated highlighting type
|
* Map a PHP syntax token to its associated highlighting type
|
||||||
|
@ -29,11 +29,27 @@ class FileType {
|
|||||||
'#include', 'unsigned', '#define', '#ifndef', 'double', 'signed', '#endif',
|
'#include', 'unsigned', '#define', '#ifndef', 'double', 'signed', '#endif',
|
||||||
'#ifdef', 'float', '#error', '#undef', 'long', 'char', 'int', 'void', '#if',
|
'#ifdef', 'float', '#error', '#undef', 'long', 'char', 'int', 'void', '#if',
|
||||||
],
|
],
|
||||||
|
hasCharType: true,
|
||||||
|
highlightCharacters: true,
|
||||||
),
|
),
|
||||||
'.css', '.less', '.sass', '.scss' => Syntax::new(
|
'.css', '.less', '.sass', '.scss' => Syntax::new(
|
||||||
'CSS',
|
'CSS',
|
||||||
slcs: '',
|
slcs: '',
|
||||||
),
|
),
|
||||||
|
'.go' => Syntax::new(
|
||||||
|
'Go',
|
||||||
|
[
|
||||||
|
'break', 'case', 'chan', 'const', 'continue', 'default', 'defer', 'else',
|
||||||
|
'fallthrough', 'for', 'func', 'go', 'goto', 'if', 'import', 'interface',
|
||||||
|
'map', 'package', 'range', 'return', 'select', 'struct', 'switch', 'type', 'var',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'uint8', 'uint16', 'uint32', 'uint64', 'int8', 'int16', 'int32', 'int64', 'float32', 'float64',
|
||||||
|
'uint', 'int', 'uintptr', 'complex64', 'complex128', 'byte', 'rune', '[]',
|
||||||
|
],
|
||||||
|
hasCharType: true,
|
||||||
|
highlightCharacters: true,
|
||||||
|
),
|
||||||
'.js', '.jsx', '.ts', '.tsx', '.jsm', '.mjs', '.es' => Syntax::new(
|
'.js', '.jsx', '.ts', '.tsx', '.jsm', '.mjs', '.es' => Syntax::new(
|
||||||
'JavaScript',
|
'JavaScript',
|
||||||
[
|
[
|
||||||
@ -63,6 +79,8 @@ class FileType {
|
|||||||
'Sync', 'bool', 'char', 'i128', 'u128', 'Box', 'Err', 'Ord', 'Vec', 'dyn', 'f32',
|
'Sync', 'bool', 'char', 'i128', 'u128', 'Box', 'Err', 'Ord', 'Vec', 'dyn', 'f32',
|
||||||
'f64', 'i16', 'i32', 'i64', 'str', 'u16', 'u32', 'u64', 'Eq', 'Fn', 'Ok', 'i8', 'u8',
|
'f64', 'i16', 'i32', 'i64', 'str', 'u16', 'u32', 'u64', 'Eq', 'Fn', 'Ok', 'i8', 'u8',
|
||||||
],
|
],
|
||||||
|
hasCharType: true,
|
||||||
|
highlightCharacters: true,
|
||||||
),
|
),
|
||||||
default => Syntax::default(),
|
default => Syntax::default(),
|
||||||
};
|
};
|
||||||
|
@ -3,9 +3,6 @@
|
|||||||
namespace Aviat\Kilo;
|
namespace Aviat\Kilo;
|
||||||
|
|
||||||
class Syntax {
|
class Syntax {
|
||||||
public const HIGHLIGHT_NUMBERS = (1 << 0);
|
|
||||||
public const HIGHLIGHT_STRINGS = (1 << 1);
|
|
||||||
|
|
||||||
// Tokens for PHP files
|
// Tokens for PHP files
|
||||||
public array $tokens = [];
|
public array $tokens = [];
|
||||||
|
|
||||||
@ -16,15 +13,31 @@ class Syntax {
|
|||||||
string $slcs = '//',
|
string $slcs = '//',
|
||||||
string $mcs = '/*',
|
string $mcs = '/*',
|
||||||
string $mce = '*/',
|
string $mce = '*/',
|
||||||
int $flags = self::HIGHLIGHT_NUMBERS | self::HIGHLIGHT_STRINGS,
|
bool $highlightNumbers = true,
|
||||||
|
bool $highlightStrings = true,
|
||||||
|
bool $highlightComments = true,
|
||||||
|
bool $hasCharType = false,
|
||||||
|
bool $highlightCharacters = false,
|
||||||
): self
|
): self
|
||||||
{
|
{
|
||||||
return new self($name, $keywords1, $keywords2, $slcs, $mcs, $mce, $flags);
|
return new self(
|
||||||
|
$name,
|
||||||
|
$keywords1,
|
||||||
|
$keywords2,
|
||||||
|
$slcs,
|
||||||
|
$mcs,
|
||||||
|
$mce,
|
||||||
|
$highlightNumbers,
|
||||||
|
$hasCharType,
|
||||||
|
$highlightCharacters,
|
||||||
|
$highlightStrings,
|
||||||
|
$highlightComments,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function default(): self
|
public static function default(): self
|
||||||
{
|
{
|
||||||
return self::new('No filetype', slcs: '', mcs: '', mce: '', flags: 0);
|
return self::new('No filetype', slcs: '', mcs: '', mce: '', highlightNumbers: false, highlightStrings: false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function __construct(
|
private function __construct(
|
||||||
@ -40,7 +53,40 @@ class Syntax {
|
|||||||
public string $multiLineCommentStart,
|
public string $multiLineCommentStart,
|
||||||
/** Syntax to end a multi-line commment */
|
/** Syntax to end a multi-line commment */
|
||||||
public string $multiLineCommentEnd,
|
public string $multiLineCommentEnd,
|
||||||
/** Bitflags configuring the specified language syntax */
|
/** Should we highlight numbers? */
|
||||||
public int $flags,
|
private bool $highlightNumbers,
|
||||||
|
/** Does this language have a character type, separate from strings? */
|
||||||
|
private bool $hasCharType,
|
||||||
|
/** Should we highlight chars? */
|
||||||
|
private bool $highlightCharacters,
|
||||||
|
/** should we highlight Strings? */
|
||||||
|
private bool $highlightStrings,
|
||||||
|
/** should we highlight comments? */
|
||||||
|
private bool $highlightComments,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
public function numbers(): bool
|
||||||
|
{
|
||||||
|
return $this->highlightNumbers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function strings(): bool
|
||||||
|
{
|
||||||
|
return $this->highlightStrings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasChar(): bool
|
||||||
|
{
|
||||||
|
return $this->hasCharType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function characters(): bool
|
||||||
|
{
|
||||||
|
return $this->hasCharType && $this->highlightCharacters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function comments(): bool
|
||||||
|
{
|
||||||
|
return $this->highlightComments;
|
||||||
|
}
|
||||||
}
|
}
|
@ -165,6 +165,7 @@ function syntax_to_color(int $hl): int
|
|||||||
Highlight::KEYWORD1 => Color::FG_YELLOW,
|
Highlight::KEYWORD1 => Color::FG_YELLOW,
|
||||||
Highlight::KEYWORD2 => Color::FG_GREEN,
|
Highlight::KEYWORD2 => Color::FG_GREEN,
|
||||||
Highlight::STRING => Color::FG_MAGENTA,
|
Highlight::STRING => Color::FG_MAGENTA,
|
||||||
|
Highlight::CHARACTER => Color::FG_BRIGHT_MAGENTA,
|
||||||
Highlight::NUMBER => Color::FG_BRIGHT_RED,
|
Highlight::NUMBER => Color::FG_BRIGHT_RED,
|
||||||
Highlight::OPERATOR => Color::FG_BRIGHT_GREEN,
|
Highlight::OPERATOR => Color::FG_BRIGHT_GREEN,
|
||||||
Highlight::VARIABLE => Color::FG_BRIGHT_CYAN,
|
Highlight::VARIABLE => Color::FG_BRIGHT_CYAN,
|
||||||
|
Loading…
Reference in New Issue
Block a user