php-kilo/src/Syntax.php

112 lines
2.6 KiB
PHP
Raw Normal View History

2019-10-24 16:58:52 -04:00
<?php declare(strict_types=1);
2019-11-08 16:27:08 -05:00
namespace Aviat\Kilo;
2019-10-24 16:58:52 -04:00
class Syntax {
// Tokens for PHP files
public array $tokens = [];
public static function new(
string $name,
array $keywords1 = [],
array $keywords2 = [],
array $operators = [],
string $slcs = '//',
string $mcs = '/*',
string $mce = '*/',
bool $highlightNumbers = true,
bool $highlightStrings = true,
bool $highlightComments = true,
bool $hasCharType = false,
bool $highlightCharacters = false,
2021-04-14 17:19:01 -04:00
bool $hasCommonOperators = true,
): self
2019-10-24 16:58:52 -04:00
{
return new self(
$name,
$keywords1,
$keywords2,
$operators,
$slcs,
$mcs,
$mce,
$highlightNumbers,
$hasCharType,
$highlightCharacters,
$highlightStrings,
$highlightComments,
2021-04-14 17:19:01 -04:00
$hasCommonOperators,
);
2019-10-24 16:58:52 -04:00
}
2021-03-16 18:37:53 -04:00
public static function default(): self
{
2021-04-14 17:19:01 -04:00
return self::new('No filetype', slcs: '', mcs: '', mce: '', highlightNumbers: false, highlightStrings: false, hasCommonOperators: false);
2021-03-16 18:37:53 -04:00
}
private function __construct(
/** The name of the programming language */
public string $filetype,
/** Primary set of language keywords */
public array $keywords1,
/** Secondary set of language keywords */
public array $keywords2,
/** Operators for the current language */
public array $operators,
/** Syntax to start a single line comment */
public string $singleLineCommentStart,
/** Syntax to start a multi-line comment */
public string $multiLineCommentStart,
/** Syntax to end a multi-line commment */
2021-03-05 21:16:39 -05:00
public string $multiLineCommentEnd,
/** Should we highlight numbers? */
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,
2021-04-14 17:19:01 -04:00
/** should we highlight common operators? */
private bool $hasCommonOperators,
) {}
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 mlComments(): bool
{
return $this->highlightComments
&& strlen($this->multiLineCommentStart) !== 0
&& strlen($this->multiLineCommentStart) !== 0;
}
public function comments(): bool
{
return $this->highlightComments && strlen($this->singleLineCommentStart) !== 0;
}
2021-04-14 17:19:01 -04:00
public function commonOperators(): bool
{
return $this->hasCommonOperators;
}
2019-10-24 16:58:52 -04:00
}