API
shikiphp espone due punti di accesso: la facciata statica Shikiphp per i casi comuni e l’istanza Highlighter per tutto il resto (output HAST, grammatiche e temi personalizzati, varianti dei temi e introspezione del bundle).
La facciata Shikiphp
Shikiphp\Shikiphp è una facciata statica essenziale sopra un highlighter bundled, creato e memorizzato nella cache quando serve.
Shikiphp::codeToHtml
public static function codeToHtml(string $code, array $options): string
Analizza $code e genera un blocco <pre class="shiki …"> HTML completo. L’array di opzioni include sempre un lang, oltre a una mappa theme o themes e a qualsiasi opzione di rendering.
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
Restituisce la griglia di token 2D essenziale (una lista interna per riga) di oggetti Shikiphp\Render\ThemedToken anziché 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 di codeToTokens che corrisponde al nome codeToTokensBase di Shiki.
Shikiphp::codeToTokensResult
public static function codeToTokensResult(string $code, array $options): TokensResult
Restituisce il risultato completo che rispecchia codeToTokens di primo livello di Shiki: la griglia di token, i colori risolti, il nome del tema, lo stile radice dei temi chiaro e scuro e lo stato finale della grammatica. Vedi TokensResult più avanti.
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
Analizza $code e restituisce lo stato della grammatica raggiunto al termine (getLastGrammarState di Shiki). Passatelo all’opzione grammarState per riprendere l’analisi di un frammento successivo dallo stesso stato, utile per l’evidenziazione incrementale. Genera un errore se lang è 'ansi' (ANSI non ha uno stato della grammatica).
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
Restituisce l’istanza bundled condivisa di Highlighter, creandola al primo utilizzo. Usatela per accedere ai metodi dell’istanza descritti di seguito.
Shikiphp::use e Shikiphp::reset
public static function use(Highlighter $highlighter): void
public static function reset(): void
use sostituisce l’istanza Highlighter con una personalizzata (per esempio, una in cui avete caricato grammatiche o temi personalizzati), così che la facciata la usi. reset svuota la cache dell’istanza, in modo che la chiamata successiva ricrei l’highlighter bundled predefinito.
La Highlighter
Shikiphp\Highlighter offre tutte le funzionalità. Ottenete l’istanza bundled condivisa con Shikiphp::highlighter() oppure createne una esplicitamente:
use Shikiphp\Highlighter;
$highlighter = Highlighter::createBundled();
Implementa codeToHtml, codeToTokens, codeToTokensBase, codeToTokensResult e getLastGrammarState con le stesse firme della facciata, oltre a quanto segue.
Highlighter::codeToHast
public function codeToHast(string $code, array $options): \Shikiphp\Hast\Element
Genera l'albero HAST esatto di pre.shiki > code > (span.line > span)*, come le build di Shiki, pronto per essere esplorato, modificato o serializzato. È ciò che codeToHtml serializza internamente.
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
Analizza una volta per tema e unisce il risultato in una variants per token, indicizzata per chiave del tema, rispecchiando codeToTokensWithThemes di Shiki. Richiede una mappa 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 e Highlighter::loadTheme
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
public function loadTheme(array $rawTheme): void
Registrate una grammatica TextMate o un tema VS Code personalizzato da JSON decodificato. Vedi Lingue e temi personalizzati.
Introspezione del bundle
/** @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 riportano tutti gli ID attualmente utilizzabili (inclusi quelli bundled e quelli personalizzati registrati). bundledLanguages/bundledThemes riportano solo gli ID inclusi nel pacchetto. Vedi Lingue e Temi.
Oggetti valore
ThemedToken
Shikiphp\Render\ThemedToken è una sequenza di testo con uno stile:
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 è una maschera di bit di Shikiphp\Theme\FontStyle (NONE, ITALIC, BOLD, UNDERLINE, STRIKETHROUGH).
TokensResult
Shikiphp\TokensResult è il valore restituito da 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 contiene lo stack di regole del tokenizer (indicizzato per nome del tema), così da poter riprendere l’evidenziazione da un punto intermedio.
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;
}