API
shikiphp har två ingångspunkter: den statiska fasaden Shikiphp för de vanliga fallen och instansen Highlighter för allt annat (HAST-utdata, anpassade grammatiker och teman, temavarianter samt inspektion av paketet).
Fasaden Shikiphp
Shikiphp\Shikiphp är en tunn statisk fasad ovanpå en buntad highlighter som skapas vid behov och cachas.
Shikiphp::codeToHtml
public static function codeToHtml(string $code, array $options): string
Tokeniserar $code och återger ett komplett <pre class="shiki …">-block med HTML. Alternativmatrisen innehåller alltid en lang samt antingen en theme eller en themes-mappning och valfria alternativ för återgivning.
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
Returnerar det avskalade 2D-tokenrutnätet (en inre lista per rad) med objekt av typen Shikiphp\Render\ThemedToken i stället för 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
Ett alias för codeToTokens som motsvarar namnet codeToTokensBase i Shiki.
Shikiphp::codeToTokensResult
public static function codeToTokensResult(string $code, array $options): TokensResult
Returnerar det fullständiga resultatet som speglar toppnivå-codeToTokens i Shiki: tokenrutnätet samt de lösta färgerna, temanamnet, rotstilen för dubbeltemat och grammatiktillståndet i slutet. Se TokensResult nedan.
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
Tokeniserar $code och returnerar grammatiktillståndet som nås i slutet (getLastGrammarState i Shiki). Skicka tillbaka det via alternativet grammarState för att fortsätta tokenisera ett senare fragment från samma tillstånd — användbart vid inkrementell markering. Ger fel om lang är 'ansi' (ANSI har inget grammatiktillstånd).
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
Returnerar den gemensamma buntade instansen av Highlighter och skapar den vid första användningen. Använd den för att komma åt instansmetoderna nedan.
Shikiphp::use och Shikiphp::reset
public static function use(Highlighter $highlighter): void
public static function reset(): void
use byter till en anpassad Highlighter (till exempel en som du har läst in anpassade grammatiker eller teman i), så att fasaden delegerar till den. reset rensar den cachade instansen så att nästa anrop bygger om standard-highlightern från paketet.
Highlighter
Shikiphp\Highlighter omfattar hela gränssnittet. Hämta den gemensamma buntade instansen med Shikiphp::highlighter() eller skapa en explicit:
use Shikiphp\Highlighter;
$highlighter = Highlighter::createBundled();
Den implementerar codeToHtml, codeToTokens, codeToTokensBase,
codeToTokensResult och getLastGrammarState med samma signaturer som fasaden,
samt följande.
Highlighter::codeToHast
public function codeToHast(string $code, array $options): \Shikiphp\Hast\Element
Bygger det pre.shiki > code > (span.line > span)* HAST-träd Shiki bygger, redo
för att du själv ska kunna gå igenom, ändra eller serialisera det. Det här är vad codeToHtml serialiserar
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
Tokeniserar en gång per tema och slår ihop resultatet i per-token-variants, nycklade efter
temanyckel, i likhet med Shikis codeToTokensWithThemes. Kräver en themes-karta.
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 och Highlighter::loadTheme
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
public function loadTheme(array $rawTheme): void
Registrera en anpassad TextMate-grammatik eller ett VS Code-tema från avkodad JSON. Se Anpassade språk och teman.
Granskning av paketets innehåll
/** @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 rapporterar alla id:n som går att använda för närvarande (paketerade plus
eventuella egna som du har registrerat). bundledLanguages/bundledThemes rapporterar endast
id:n som ingår i paketet. Se Språk och
Teman.
Värdeobjekt
ThemedToken
Shikiphp\Render\ThemedToken är en formaterad textsekvens:
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 är en bitmask från Shikiphp\Theme\FontStyle (NONE, ITALIC,
BOLD, UNDERLINE, STRIKETHROUGH).
TokensResult
Shikiphp\TokensResult är returvärdet från 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 innehåller tokeniserarens regelstack (nycklad efter temanamn), så
markeringen kan återupptas från en mellanliggande 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;
}