API
shikiphp ponuja dve vstopni točki: statično fasado Shikiphp za običajne primere in primerek Highlighter za vse ostalo (izhod HAST, gramatike in teme po meri, različice tem ter pregled svežnjev).
Fasada Shikiphp
Shikiphp\Shikiphp je tanka statična fasada nad predpomnjenim razčlenjevalnikom označevanja v svežnju, ki se ustvari z zakasnitvijo.
Shikiphp::codeToHtml
public static function codeToHtml(string $code, array $options): string
Tokenizira $code in izriše celoten blok <pre class="shiki …"> HTML. Polje možnosti vedno vsebuje lang ter bodisi theme bodisi preslikavo themes in katere koli možnosti za izris.
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
Vrne golo 2D-mrežo žetonov (po en notranji seznam za vsako vrstico) z objekti Shikiphp\Render\ThemedToken namesto 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
Vzdevek za codeToTokens, ki ustreza imenu codeToTokensBase v Shiki.
Shikiphp::codeToTokensResult
public static function codeToTokensResult(string $code, array $options): TokensResult
Vrne podroben rezultat, ki odraža vrhnji codeToTokens v Shiki: mrežo žetonov, razrešene barve, ime teme, korenski slog dveh tem in končno stanje gramatike. Glejte spodaj: 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
Tokenizira $code in vrne stanje gramatike ob koncu (Shiki, njegov getLastGrammarState). Podajte ga nazaj prek možnosti grammarState, da nadaljujete tokenizacijo poznejšega odlomka iz istega stanja — uporabno za postopno poudarjanje. Sproži napako, če je lang enak 'ansi' (ANSI nima stanja gramatike).
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
Vrne skupni vključeni Highlighter in ga ustvari ob prvi uporabi. To uporabite za
klicanje spodnjih metod instance.
Shikiphp::use in Shikiphp::reset
public static function use(Highlighter $highlighter): void
public static function reset(): void
use zamenja primerek Highlighter po meri (na primer takšnega, v katerega ste naložili gramatike ali teme po meri), da mu fasada preda izvajanje. reset izbriše predpomnjeni primerek, zato naslednji klic znova sestavi privzeti razčlenjevalnik označevanja v svežnju.
Highlighter
Shikiphp\Highlighter ponuja celoten vmesnik. Skupni primerek iz svežnja pridobite z Shikiphp::highlighter() ali pa ga izrecno ustvarite:
use Shikiphp\Highlighter;
$highlighter = Highlighter::createBundled();
Izvaja codeToHtml, codeToTokens, codeToTokensBase,
codeToTokensResult in getLastGrammarState z enakimi podpisi kot fasada, poleg tega pa še naslednje.
Highlighter::codeToHast
public function codeToHast(string $code, array $options): \Shikiphp\Hast\Element
Zgradi drevo HAST pre.shiki > code > (span.line > span)*, ki ga zgradi Shiki, pripravljeno
za sprehod, spreminjanje ali serializacijo. To je tisto, kar codeToHtml serializira
interno.
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
Tokenizira enkrat za vsako temo in združi rezultat v variants za posamezne žetone, indeksirane po ključu teme, po vzoru ShikicodeToTokensWithThemes. Zahteva zemljevid 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 in Highlighter::loadTheme
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
public function loadTheme(array $rawTheme): void
Registrirajte slovnico po meri TextMate ali temo VS Code iz dekodiranega JSON. Oglejte si Jeziki in teme po meri.
Pregled vsebine paketa
/** @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 izpišeta vsak trenutno uporaben ID (vgrajen in vse po meri, ki ste jih registrirali). bundledLanguages/bundledThemes izpišeta samo ID-je, vključene v paket. Oglejte si Jezike in Teme.
Vrednostni objekti
ThemedToken
Shikiphp\Render\ThemedToken je en oblikovan odsek besedila:
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 je bitna maska iz Shikiphp\Theme\FontStyle (NONE, ITALIC,
BOLD, UNDERLINE, STRIKETHROUGH).
TokensResult
Shikiphp\TokensResult je vrnjena vrednost funkcije 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 hrani sklad pravil tokenizatorja (indeksiran po imenu teme), da se lahko označevanje nadaljuje od vmesne točke.
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;
}