API
shikiphp oferă două puncte de intrare: fațada statică Shikiphp pentru cazurile obișnuite și instanța Highlighter pentru orice altceva (ieșire HAST, gramatici și teme personalizate, variante de teme și inspectarea pachetului).
Fațada Shikiphp
Shikiphp\Shikiphp este o fațadă statică simplă peste un highlighter inclus în pachet, creat la cerere și păstrat în cache.
Shikiphp::codeToHtml
public static function codeToHtml(string $code, array $options): string
Tokenizează $code și redă un bloc <pre class="shiki …"> HTML complet. Tabloul de opțiuni include întotdeauna un lang, plus fie theme, fie o mapare themes și oricare dintre opțiunile de redare.
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
Returnează grila de tokenuri 2D simplă (o listă internă pentru fiecare linie) de obiecte Shikiphp\Render\ThemedToken în loc de 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
Un alias pentru codeToTokens, cu același nume ca Shiki codeToTokensBase.
Shikiphp::codeToTokensResult
public static function codeToTokensResult(string $code, array $options): TokensResult
Returnează rezultatul detaliat, care reflectă codeToTokens de nivel superior din Shiki: grila de tokenuri, culorile rezolvate, numele temei, stilul rădăcină pentru tema duală și starea finală a gramaticii. Consultați TokensResult mai jos.
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
Tokenizează $code și returnează starea gramaticii la final (getLastGrammarState Shiki). Transmiteți-o din nou prin opțiunea grammarState pentru a relua tokenizarea unui fragment ulterior din aceeași stare — util pentru evidențiere incrementală. Generează o excepție dacă lang este 'ansi' (ANSI nu are stare gramaticală).
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
Returnează Highlighter comun inclus în pachet, creându-l la prima utilizare. Folosiți-l pentru a
accesa metodele instanței de mai jos.
Shikiphp::use și Shikiphp::reset
public static function use(Highlighter $highlighter): void
public static function reset(): void
use înlocuiește instanța cu un Highlighter personalizat (de exemplu, unul în care ați încărcat gramatici sau teme personalizate), astfel încât fațada să îi delege operațiile. reset șterge instanța din cache, pentru ca următorul apel să reconstruiască highlighterul implicit inclus în pachet.
Highlighter
Shikiphp\Highlighter oferă întreaga interfață. Obțineți instanța comună inclusă în pachet cu Shikiphp::highlighter() sau creați una explicit:
use Shikiphp\Highlighter;
$highlighter = Highlighter::createBundled();
Implementează codeToHtml, codeToTokens, codeToTokensBase,
codeToTokensResult și getLastGrammarState cu aceleași semnături ca fațada, plus următoarele.
Highlighter::codeToHast
public function codeToHast(string $code, array $options): \Shikiphp\Hast\Element
Construiește arborele HAST pre.shiki > code > (span.line > span)* Shiki, gata
să îl parcurgeți, modificați sau serializați. Acesta este arborele pe care codeToHtml îl serializează
intern.
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
Tokenizează o dată pentru fiecare temă și combină rezultatul într-o structură variants per token, indexată după cheia temei, după modelul Shiki codeToTokensWithThemes. Necesită o mapare 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 și Highlighter::loadTheme
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
public function loadTheme(array $rawTheme): void
Înregistrați o gramatică TextMate personalizată sau o temă VS Code din JSON decodat. Consultați Limbi și teme personalizate.
Inspectarea pachetului
/** @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 raportează toate ID-urile utilizabile în prezent (incluse în pachet și personalizate, dacă ați înregistrat). bundledLanguages/bundledThemes raportează doar ID-urile incluse în pachet. Consultați Limbi și Teme.
Obiecte valoare
ThemedToken
Shikiphp\Render\ThemedToken este o secvență de text cu un singur stil:
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 este o mască de biți din Shikiphp\Theme\FontStyle (NONE, ITALIC,
BOLD, UNDERLINE, STRIKETHROUGH).
TokensResult
Shikiphp\TokensResult este valoarea returnată de 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 păstrează stiva de reguli a tokenizerului, indexată după numele temei, pentru ca evidențierea să poată fi reluată dintr-un punct intermediar.
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;
}