API
shikiphp expose deux points d'entrée : la façade statique Shikiphp pour les cas courants, et l'instance Highlighter pour tout le reste (sortie HAST, grammaires et thèmes personnalisés, variantes de thème et inspection du bundle).
La façade Shikiphp
Shikiphp\Shikiphp est une fine façade statique autour d'un highlighter intégré, créé à la demande et mis en cache.
Shikiphp::codeToHtml
public static function codeToHtml(string $code, array $options): string
Analyse $code et génère un bloc complet <pre class="shiki …"> HTML. Le tableau d'options contient toujours un lang, ainsi que soit un theme, soit une correspondance themes, et n'importe laquelle des options de rendu.
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
Renvoie la grille de jetons 2D brute (une liste interne par ligne) d'objets Shikiphp\Render\ThemedToken au lieu 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 de codeToTokens qui reprend le nom codeToTokensBase de Shiki.
Shikiphp::codeToTokensResult
public static function codeToTokensResult(string $code, array $options): TokensResult
Renvoie le résultat détaillé qui reflète le codeToTokens de premier niveau de Shiki : la grille de jetons, les couleurs résolues, le nom du thème, le style racine du thème double et l'état final de la grammaire. Voir TokensResult ci-dessous.
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
Analyse $code et renvoie l'état de grammaire atteint à la fin (getLastGrammarState de Shiki). Transmettez-le via l'option grammarState pour reprendre l'analyse d'un fragment ultérieur à partir du même état — utile pour la mise en évidence incrémentale. Une exception est levée si lang vaut 'ansi' (ANSI n'a pas d'état de grammaire).
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
Renvoie le Highlighter partagé intégré, en le créant lors de sa première utilisation. Utilisez-le pour accéder aux méthodes d’instance ci-dessous.
Shikiphp::use et Shikiphp::reset
public static function use(Highlighter $highlighter): void
public static function reset(): void
use remplace le Highlighter intégré par un élément personnalisé (par exemple, un élément auquel vous avez ajouté des grammaires ou des thèmes personnalisés), afin que la façade lui délègue ses opérations. reset efface l'instance mise en cache pour que l'appel suivant recrée le highlighter intégré par défaut.
Le Highlighter
Shikiphp\Highlighter expose toutes les fonctionnalités. Récupérez l'instance intégrée partagée avec Shikiphp::highlighter(), ou créez-en une explicitement :
use Shikiphp\Highlighter;
$highlighter = Highlighter::createBundled();
Il implémente codeToHtml, codeToTokens, codeToTokensBase,
codeToTokensResult et getLastGrammarState avec les mêmes signatures que la façade, ainsi que les éléments suivants.
Highlighter::codeToHast
public function codeToHast(string $code, array $options): \Shikiphp\Hast\Element
Construit l’arbre HAST pre.shiki > code > (span.line > span)* que Shiki construit, prêt à parcourir, modifier ou sérialiser vous-même. C’est ce que codeToHtml sérialise en interne.
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
Tokenise une fois par thème et fusionne le résultat dans variants par jeton, indexés par clé de thème, comme le codeToTokensWithThemes de Shiki. Nécessite une map 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 et Highlighter::loadTheme
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
public function loadTheme(array $rawTheme): void
Enregistrez une grammaire TextMate ou un thème VS Code personnalisé à partir de JSON décodé. Voir Langages et thèmes personnalisés.
Inspection du 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 répertorient tous les identifiants utilisables actuellement (ceux du bundle et ceux que vous avez enregistrés). bundledLanguages/bundledThemes répertorient uniquement les identifiants fournis dans le bundle. Voir Langages et Thèmes.
Objets valeur
ThemedToken
Shikiphp\Render\ThemedToken correspond à une portion de texte mise en forme :
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 est un masque de bits provenant de Shikiphp\Theme\FontStyle (NONE, ITALIC,
BOLD, UNDERLINE, STRIKETHROUGH).
TokensResult
Shikiphp\TokensResult est la valeur renvoyée par 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 contient la pile de règles du tokenizer (indexée par nom de thème) pour permettre de reprendre la coloration syntaxique depuis un point intermédiaire.
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;
}