API
shikiphp предоставя две входни точки: статичната фасада Shikiphp за обичайните случаи и екземпляра Highlighter за всичко останало (изход HAST, персонализирани граматики и теми, варианти на теми и проверка на съдържанието на пакета).
Фасадата Shikiphp
Shikiphp\Shikiphp е тънка статична фасада върху създаван при нужда кеширан осветител на синтаксис от пакета.
Shikiphp::codeToHtml
public static function codeToHtml(string $code, array $options): string
Токенизира $code и изобразява пълен блок <pre class="shiki …"> HTML. Масивът с опции винаги съдържа lang, както и карта theme или themes, плюс всяка от опциите за изобразяване options.
use Shikiphp\Shikiphp;
echo Shikiphp::codeToHtml($code, ['lang' => 'php', 'theme' => 'github-dark']);
Shikiphp::codeToTokens
/** @return list<list<ThemedToken>> */
public static function codeToTokens(string $code, array $options): array
Връща голата 2D мрежа от токени (по един вътрешен списък на ред)
от обекти Shikiphp\Render\ThemedToken вместо HTML.
use Shikiphp\Shikiphp;
$lines = Shikiphp::codeToTokens($code, ['lang' => 'js', 'theme' => 'nord']);
foreach ($lines as $line) {
foreach ($line as $token) {
// $token->content, $token->color, $token->fontStyle,
// $token->bgColor, $token->htmlStyle, $token->offset
}
}
Shikiphp::codeToTokensBase
/** @return list<list<ThemedToken>> */
public static function codeToTokensBase(string $code, array $options): array
Псевдоним на codeToTokens, съответстващ на името codeToTokensBase на Shiki.
Shikiphp::codeToTokensResult
public static function codeToTokensResult(string $code, array $options): TokensResult
Връща богат резултат, съответстващ на най-горното codeToTokens на Shiki: мрежата от токени заедно с разрешените цветове, името на темата, кореновия стил за две теми и крайното състояние на граматиката. Вижте TokensResult по-долу.
use Shikiphp\Shikiphp;
$result = Shikiphp::codeToTokensResult($code, [
'lang' => 'php',
'theme' => 'github-dark',
]);
$result->tokens; // list<list<ThemedToken>>
$result->fg; // "#e1e4e8"
$result->bg; // "#24292e"
$result->themeName; // "github-dark"
$result->grammarState; // GrammarState
Shikiphp::getLastGrammarState
public static function getLastGrammarState(string $code, array $options): GrammarState
Токенизира $code и връща състоянието на граматиката в края (getLastGrammarState на Shiki).
Подайте го обратно чрез опцията grammarState, за да продължите токенизирането на следващ фрагмент от същото състояние — полезно за постепенно оцветяване. Извежда грешка, ако lang е 'ansi' (ANSI няма състояние на граматиката).
use Shikiphp\Shikiphp;
$state = Shikiphp::getLastGrammarState("/* unterminated comment", [
'lang' => 'js',
'theme' => 'nord',
]);
$html = Shikiphp::codeToHtml("still inside the comment */", [
'lang' => 'js',
'theme' => 'nord',
'grammarState' => $state,
]);
Shikiphp::highlighter
public static function highlighter(): Highlighter
Връща споделения обединен Highlighter, като го създава при първо използване. Използвайте го за достъп до методите на екземпляра по-долу.
Shikiphp::use и Shikiphp::reset
public static function use(Highlighter $highlighter): void
public static function reset(): void
use заменя персонализирания Highlighter (например такъв, в който сте заредили персонализирани граматики или теми), така че фасадата да го използва. reset изчиства кеширания екземпляр, за да създаде следващото извикване осветителя на синтаксис по подразбиране от пакета.
Highlighter
Shikiphp\Highlighter предоставя пълния интерфейс. Вземете споделения екземпляр от пакета чрез Shikiphp::highlighter() или създайте свой изрично:
use Shikiphp\Highlighter;
$highlighter = Highlighter::createBundled();
Той реализира codeToHtml, codeToTokens, codeToTokensBase,
codeToTokensResult и getLastGrammarState със същите сигнатури като фасадата, плюс следното.
Highlighter::codeToHast
public function codeToHast(string $code, array $options): \Shikiphp\Hast\Element
Изгражда дървото HAST Shiki, което създава pre.shiki > code > (span.line > span)*, готово за обхождане, промяна или сериализация от вас. Това сериализира вътрешно codeToHtml.
use Shikiphp\Shikiphp;
$hast = Shikiphp::highlighter()->codeToHast($code, [
'lang' => 'rust',
'theme' => 'nord',
]);
Highlighter::codeToTokensWithThemes
/** @return list<list<ThemedTokenWithVariants>> */
public function codeToTokensWithThemes(string $code, array $options): array
Токенизира веднъж за всяка тема и обединява резултата в variants за всеки токен, индексиран по ключа на темата, както прави codeToTokensWithThemes на Shiki. Изисква карта themes.
use Shikiphp\Shikiphp;
$lines = Shikiphp::highlighter()->codeToTokensWithThemes($code, [
'lang' => 'ts',
'themes' => ['light' => 'github-light', 'dark' => 'github-dark'],
]);
$lines[0][0]->content; // token text
$lines[0][0]->variants['light']; // ThemedTokenStyle for the light theme
$lines[0][0]->variants['dark']; // ThemedTokenStyle for the dark theme
Highlighter::loadGrammar и Highlighter::loadTheme
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
public function loadTheme(array $rawTheme): void
Регистрира персонализирана граматика на TextMate или тема на VS Code от декодиран JSON. Вижте Персонализирани езици и теми.
Проверка на съдържанието на пакета
/** @return list<string> */ public function loadedLanguages(): array
/** @return list<string> */ public function loadedThemes(): array
/** @return list<string> */ public function bundledLanguages(): array
/** @return list<string> */ public function bundledThemes(): array
loadedLanguages/loadedThemes показват всички ID, които могат да се използват в момента (включени в пакета и всички регистрирани от вас). bundledLanguages/bundledThemes показват само ID-тата, включени в пакета. Вижте Езици и Теми.
Обекти със стойности
ThemedToken
Shikiphp\Render\ThemedToken е един стилизиран откъс текст:
final class ThemedToken
{
public readonly string $content;
public readonly ?string $color;
public readonly int $fontStyle; // FontStyle bitmask
public readonly ?string $bgColor;
public readonly ?string $htmlStyle; // pre-built inline style (dual themes / ANSI)
public readonly int $offset; // UTF-16 code-unit offset into the source
}
fontStyle е битова маска от Shikiphp\Theme\FontStyle (NONE, ITALIC,
BOLD, UNDERLINE, STRIKETHROUGH).
TokensResult
Shikiphp\TokensResult е върнатата стойност на codeToTokensResult:
final class TokensResult
{
public readonly array $tokens; // list<list<ThemedToken>>
public readonly ?string $fg; // resolved foreground
public readonly ?string $bg; // resolved background
public readonly ?string $themeName; // single id, or "shiki-themes …"
public readonly string|false|null $rootStyle; // dual-theme root style (or null)
public readonly ?GrammarState $grammarState;
}
GrammarState
Shikiphp\GrammarState съхранява стека с правила на токенизатора (индексиран по име на тема), за да може оцветяването да продължи от междинна точка.
final class GrammarState
{
public readonly string $lang;
public function theme(): string; // first theme name
public function themes(): array; // list<string>
public function getScopes(?string $theme = null): array; // scopes in effect, innermost first
public function withTheme(string $theme): self;
}