API
shikiphp oferece dois pontos de entrada: a fachada estática Shikiphp para os casos comuns e a instância Highlighter para todo o restante (saída HAST, gramáticas e temas personalizados, variantes de tema e inspeção do pacote).
A fachada Shikiphp
Shikiphp\Shikiphp é uma fachada estática simples sobre um highlighter empacotado, criado sob demanda e armazenado em cache.
Shikiphp::codeToHtml
public static function codeToHtml(string $code, array $options): string
Tokeniza $code e renderiza um bloco completo <pre class="shiki …"> HTML. O array de opções sempre inclui um lang, além de um mapa theme ou themes, e quaisquer opções de renderização.
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
Retorna a grade de tokens 2D simples (uma lista interna por linha) de objetos Shikiphp\Render\ThemedToken em vez 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
Um alias de codeToTokens que corresponde ao nome codeToTokensBase de Shiki.
Shikiphp::codeToTokensResult
public static function codeToTokensResult(string $code, array $options): TokensResult
Retorna o resultado completo que espelha o codeToTokens de nível superior de Shiki: a grade de tokens, além das cores resolvidas, do nome do tema, do estilo raiz de tema duplo e do estado final da gramática. Consulte TokensResult abaixo.
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
Tokeniza $code e retorna o estado da gramática ao final (getLastGrammarState de Shiki). Passe-o novamente pela opção grammarState para retomar a tokenização de um fragmento posterior a partir do mesmo estado — útil para realce incremental. Lança um erro se lang for 'ansi' (ANSI não tem estado de gramática).
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
Retorna o Highlighter compartilhado incluído no pacote, criando-o no primeiro uso. Use isso para acessar os métodos de instância abaixo.
Shikiphp::use e Shikiphp::reset
public static function use(Highlighter $highlighter): void
public static function reset(): void
use substitui a instância por um Highlighter personalizado (por exemplo, um que você carregou com gramáticas ou temas personalizados), para que a fachada o utilize. reset limpa a instância em cache para que a próxima chamada recrie o highlighter empacotado padrão.
O Highlighter
Shikiphp\Highlighter oferece a interface completa. Obtenha a instância empacotada compartilhada com Shikiphp::highlighter() ou crie uma explicitamente:
use Shikiphp\Highlighter;
$highlighter = Highlighter::createBundled();
Implementa codeToHtml, codeToTokens, codeToTokensBase, codeToTokensResult e getLastGrammarState com as mesmas assinaturas da fachada, além do seguinte.
Highlighter::codeToHast
public function codeToHast(string $code, array $options): \Shikiphp\Hast\Element
Cria a árvore HAST pre.shiki > code > (span.line > span)* exata que Shiki cria, pronta para você percorrer, modificar ou serializar. É isso que codeToHtml serializa 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
Tokeniza uma vez por tema e mescla o resultado em variants por token, indexado pela chave do tema, espelhando o codeToTokensWithThemes de Shiki. Requer um mapa 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
Registre uma gramática personalizada de TextMate ou um tema VS Code a partir de JSON decodificado. Consulte Idiomas e temas personalizados.
Inspeção do pacote
/** @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 informam todos os IDs atualmente disponíveis (incluídos no pacote e quaisquer personalizados que você registrou). bundledLanguages/bundledThemes informam somente os IDs incluídos no pacote. Consulte Idiomas e Temas.
Objetos de valor
ThemedToken
Shikiphp\Render\ThemedToken é um trecho de texto com um único estilo:
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 é uma máscara de bits de Shikiphp\Theme\FontStyle (NONE, ITALIC, BOLD, UNDERLINE, STRIKETHROUGH).
TokensResult
Shikiphp\TokensResult é o retorno de 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 contém a pilha de regras do tokenizador (indexada pelo nome do tema) para que o destaque possa ser retomado de um ponto intermediário.
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;
}