API
A shikiphp két belépési pontot kínál: a statikus Shikiphp homlokzatot a gyakori esetekhez, valamint a Highlighter példányt minden egyébhez (HAST-kimenet, egyéni nyelvtanok és témák, téma-változatok, valamint a csomag vizsgálata).
A Shikiphp homlokzat
A Shikiphp\Shikiphp egy vékony statikus homlokzat egy késleltetve létrehozott, gyorsítótárazott, csomagolt kiemelő fölött.
Shikiphp::codeToHtml
public static function codeToHtml(string $code, array $options): string
Tokenizálja a $code értékét, és teljes <pre class="shiki …"> HTML blokkot jelenít meg. Az options tömb mindig tartalmaz lang értéket, valamint egy theme elemet vagy themes leképezést, továbbá a megjelenítési options bármelyikét.
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
A Shikiphp\Render\ThemedToken objektumok csupasz, kétdimenziós tokenrácsát adja vissza (soronként egy belső listát) a HTML helyett.
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
A codeToTokens álneve, amely a Shiki codeToTokensBase elnevezését követi.
Shikiphp::codeToTokensResult
public static function codeToTokensResult(string $code, array $options): TokensResult
A Shiki felső szintű codeToTokens értékét tükröző, részletes eredményt ad vissza: a tokenrácsot a feloldott színekkel, a téma nevével, a két témát kiszolgáló gyökérstílussal és a végső nyelvtanállapottal együtt. Lásd alább: 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
Tokenizálja a $code értékét, és visszaadja a végén elért nyelvtanállapotot (a Shiki getLastGrammarState értékét). Adja át újra a grammarState beállításon keresztül, hogy ugyanabból az állapotból folytassa egy későbbi töredék tokenizálását; ez hasznos inkrementális kiemelésnél. Hibát jelez, ha lang értéke 'ansi' (az ANSI-nek nincs nyelvtanállapota).
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
Visszaadja a megosztott, csomagolt Highlighter példányt, és első használatkor létrehozza. Ezzel érheti el az alábbi példánymetódusokat.
Shikiphp::use és Shikiphp::reset
public static function use(Highlighter $highlighter): void
public static function reset(): void
A use egyéni Highlighter példányt állít be (például olyat, amelybe egyéni nyelvtanokat vagy témákat töltött be), így a homlokzat ahhoz irányítja a hívásokat. A reset törli a gyorsítótárazott példányt, hogy a következő hívás újra létrehozza az alapértelmezett csomagolt kiemelőt.
A Highlighter
A Shikiphp\Highlighter biztosítja a teljes felületet. A megosztott, csomagolt példányt a Shikiphp::highlighter() használatával kérheti le, vagy létrehozhat egyet explicit módon:
use Shikiphp\Highlighter;
$highlighter = Highlighter::createBundled();
A homlokzattal azonos aláírásokkal valósítja meg a codeToHtml, codeToTokens, codeToTokensBase, codeToTokensResult és getLastGrammarState elemeket, továbbá az alábbiakat.
Highlighter::codeToHast
public function codeToHast(string $code, array $options): \Shikiphp\Hast\Element
Létrehozza ugyanazt a pre.shiki > code > (span.line > span)* HAST-fát, mint a Shiki, amely bejárásra, módosításra vagy szerializálásra készen áll. Ezt szerializálja belsőleg a 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
Témánként egyszer tokenizál, majd az eredményt témakulccsal indexelt, tokenenkénti variants értékekbe egyesíti, a Shiki codeToTokensWithThemes értékét követve. themes leképezés szükséges hozzá.
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 és Highlighter::loadTheme
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
public function loadTheme(array $rawTheme): void
Regisztráljon egyéni TextMate nyelvtant vagy VS Code témát dekódolt JSON adatból. Lásd: Egyéni nyelvek és témák.
A csomag tartalmának vizsgálata
/** @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
A loadedLanguages/loadedThemes az összes jelenleg használható azonosítót jelenti (a csomagban lévőket és az Ön által regisztrált egyénieket is). A bundledLanguages/bundledThemes csak a csomaggal érkező azonosítókat jelenti. Lásd: Nyelvek és Témák.
Értékobjektumok
ThemedToken
A Shikiphp\Render\ThemedToken egyetlen stílusozott szövegrész:
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
}
A fontStyle a Shikiphp\Theme\FontStyle bitmaszkja (NONE, ITALIC, BOLD, UNDERLINE, STRIKETHROUGH).
TokensResult
A Shikiphp\TokensResult a codeToTokensResult visszatérési értéke:
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
A Shikiphp\GrammarState tartalmazza a tokenizáló szabályveremét (témanév szerinti kulcsokkal), így a kiemelés egy köztes pontról folytatható.
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;
}