API
shikiphp har to indgangspunkter: den statiske Shikiphp-facade til de almindelige tilfælde og instansen Highlighter til alt andet (HAST-output, brugerdefinerede grammatikker og temaer, temavarianter samt indsigt i pakken).
Facaden Shikiphp
Shikiphp\Shikiphp er en enkel statisk facade over en bundtet fremhæver, der oprettes efter behov og gemmes i cache.
Shikiphp::codeToHtml
public static function codeToHtml(string $code, array $options): string
Tokeniserer $code og gengiver en komplet <pre class="shiki …"> HTML-blok. Options-arrayet indeholder altid en lang samt enten et theme- eller et themes-kort og alle gengivelses-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
Returnerer det rå 2D-tokenraster (én indre liste pr. linje) med Shikiphp\Render\ThemedToken-objekter i stedet for 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
Et alias for codeToTokens, der svarer til navnet Shikis codeToTokensBase.
Shikiphp::codeToTokensResult
public static function codeToTokensResult(string $code, array $options): TokensResult
Returnerer det omfattende resultat, der afspejler Shikis overordnede codeToTokens: tokenrasteret samt de fastlagte farver, temanavnet, rodtypografien for dobbelte temaer og den endelige grammatiktilstand. Se TokensResult nedenfor.
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
Tokeniserer $code og returnerer grammatiktilstanden ved slutningen (Shikis getLastGrammarState). Send den tilbage via indstillingen grammarState for at fortsætte tokeniseringen af et senere fragment fra samme tilstand — nyttigt til inkrementel fremhævning. Kaster en fejl, hvis lang er 'ansi' (ANSI har ingen grammatiktilstand).
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
Returnerer den delte, bundtede Highlighter og opretter den ved første brug. Brug den til at få adgang til instansmetoderne nedenfor.
Shikiphp::use og Shikiphp::reset
public static function use(Highlighter $highlighter): void
public static function reset(): void
use udskifter den aktuelle Highlighter med en brugerdefineret (for eksempel en, du har indlæst brugerdefinerede grammatikker eller temaer i), så facaden videresender kald til den. reset rydder den cachelagrede instans, så næste kald genopbygger standardfremhæveren fra pakken.
Highlighter
Shikiphp\Highlighter indeholder hele funktionsfladen. Hent den delte, bundtede instans med Shikiphp::highlighter(), eller opret en eksplicit:
use Shikiphp\Highlighter;
$highlighter = Highlighter::createBundled();
Den implementerer codeToHtml, codeToTokens, codeToTokensBase, codeToTokensResult og getLastGrammarState med samme signaturer som facaden samt følgende.
Highlighter::codeToHast
public function codeToHast(string $code, array $options): \Shikiphp\Hast\Element
Bygger det pre.shiki > code > (span.line > span)* HAST-træ Shiki bygger, klar til at blive gennemgået, ændret eller serialiseret. Det er det, codeToHtml serialiserer internt.
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
Tokeniserer én gang pr. tema og fletter resultatet til variants pr. token, indekseret efter temanøgle, som afspejler Shikis codeToTokensWithThemes. Kræver et themes-kort.
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 og Highlighter::loadTheme
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
public function loadTheme(array $rawTheme): void
Registrer en brugerdefineret grammatik af typen TextMate eller et tema af typen VS Code fra afkodet JSON. Se Brugerdefinerede sprog og temaer.
Indsigt i pakken
/** @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 viser alle ID'er, der kan bruges i øjeblikket (fra pakken samt brugerdefinerede, som du har registreret). bundledLanguages/bundledThemes viser kun de ID'er, der følger med pakken. Se Sprog og Temaer.
Værdiobjekter
ThemedToken
Shikiphp\Render\ThemedToken er et formateret tekstafsnit:
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 er en bitmaske fra Shikiphp\Theme\FontStyle (NONE, ITALIC, BOLD, UNDERLINE, STRIKETHROUGH).
TokensResult
Shikiphp\TokensResult er resultatet fra 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 indeholder tokenizerens regelstak (indekseret efter temanavn), så fremhævning kan fortsætte fra et mellemliggende punkt.
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;
}