API
shikiphp ofrece dos puntos de entrada: la fachada estática Shikiphp para los casos habituales y la instancia Highlighter para todo lo demás (salida HAST, gramáticas y temas personalizados, variantes de tema e introspección de paquetes).
La fachada Shikiphp
Shikiphp\Shikiphp es una fachada estática sencilla sobre un resaltador incluido que se crea de forma diferida y se almacena en caché.
Shikiphp::codeToHtml
public static function codeToHtml(string $code, array $options): string
Tokeniza $code y representa un bloque completo de <pre class="shiki …"> HTML. La matriz de opciones siempre contiene un lang, además de un mapa theme o themes, y cualquiera de las opciones de representación.
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
Devuelve la cuadrícula de tokens bidimensional sin procesar (una lista interna por línea) de objetos Shikiphp\Render\ThemedToken en lugar 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 que coincide con el nombre codeToTokensBase de Shiki.
Shikiphp::codeToTokensResult
public static function codeToTokensResult(string $code, array $options): TokensResult
Devuelve el resultado completo que refleja el codeToTokens de nivel superior de Shiki: la cuadrícula de tokens, los colores resueltos, el nombre del tema, el estilo raíz del tema dual y el estado gramatical final. Consulte TokensResult más abajo.
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 y devuelve el estado gramatical alcanzado al final (getLastGrammarState de Shiki). Vuelva a pasarlo mediante la opción grammarState para reanudar la tokenización de un fragmento posterior desde el mismo estado, útil para el resaltado incremental. Genera un error si lang es 'ansi' (ANSI no tiene estado gramatical).
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
Devuelve el Highlighter incluido y compartido, y lo crea en el primer uso. Úselo para acceder a los métodos de instancia que aparecen a continuación.
Shikiphp::use y Shikiphp::reset
public static function use(Highlighter $highlighter): void
public static function reset(): void
use sustituye el Highlighter personalizado (por ejemplo, uno en el que haya cargado gramáticas o temas personalizados) para que la fachada lo use como delegado. reset borra la instancia almacenada en caché para que la siguiente llamada vuelva a crear el resaltador incluido predeterminado.
El Highlighter
Shikiphp\Highlighter ofrece la interfaz completa. Obtenga la instancia incluida y compartida con Shikiphp::highlighter(), o cree una explícitamente:
use Shikiphp\Highlighter;
$highlighter = Highlighter::createBundled();
Implementa codeToHtml, codeToTokens, codeToTokensBase,
codeToTokensResult y getLastGrammarState con las mismas firmas que la fachada, además de lo siguiente.
Highlighter::codeToHast
public function codeToHast(string $code, array $options): \Shikiphp\Hast\Element
Construye el árbol HAST que genera pre.shiki > code > (span.line > span)* Shiki, listo
para recorrerlo, modificarlo o serializarlo. Esto es lo 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 una vez por tema y combina el resultado en variants por token, con claves
según el tema, como hace Shiki con codeToTokensWithThemes. Requiere un 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 y Highlighter::loadTheme
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
public function loadTheme(array $rawTheme): void
Registra una gramática TextMate o un tema VS Code personalizado a partir de JSON decodificado. Consulta Idiomas y temas personalizados.
Información del paquete
/** @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 muestran todos los ids disponibles (incluidos los del paquete y
los personalizados que hayas registrado). bundledLanguages/bundledThemes muestran solo
los ids incluidos en el paquete. Consulta Idiomas y
Temas.
Objetos de valor
ThemedToken
Shikiphp\Render\ThemedToken es un fragmento de texto con 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 es una máscara de bits de Shikiphp\Theme\FontStyle (NONE, ITALIC,
BOLD, UNDERLINE, STRIKETHROUGH).
TokensResult
Shikiphp\TokensResult es el valor que devuelve 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 la pila de reglas del tokenizador (con claves por nombre de tema) para
reanudar el resaltado desde 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;
}