Saltar al contenido

ShikiPHP

Resaltador de sintaxis puro en PHP, trasladado de Shiki. Da estilo a los bloques de código con temas VS Code y gramáticas TextMate sin Node; la salida coincide con Shiki 3.23.0 en los 214 escenarios de referencia.

Terminal
composer require shikiphp/shikiphp

Última versión v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring

En la práctica

Resalta un fragmento de una plantilla o script de compilación PHP e imprime el HTML que devuelve.

Una llamada por bloque de código

Shikiphp::codeToHtml recibe el código, un ID de lenguaje y un ID de tema. Devuelve un bloque pre completo con los colores en línea, listo para mostrarse sin una hoja de estilos adicional.

Pasa un mapa themes en lugar de theme y el mismo bloque incluirá los colores claro y oscuro mediante variables CSS.

PHP
use Shikiphp\Shikiphp;

echo Shikiphp::codeToHtml(<<<'PHP'
<?php
function greet(string $name): string {
    return "Hello, {$name}!";
}
PHP, [
    'lang'  => 'php',
    'theme' => 'github-dark',
]);

Gramáticas TextMate reales

Un traslado fiel de vscode-textmate: lenguajes integrados, inyecciones y repositorios anidados. Usa las mismas gramáticas con las que tokenizan Shiki y VS Code.

Temas VS Code

Especificidad de selectores de ámbito y coincidencia de ámbitos principales, trasladadas de vscode-textmate. Un tema o temas claro/oscuro duales mediante variables CSS.

Salida idéntica a Shiki

En 214 escenarios de referencia, que abarcan 167 de las 253 gramáticas incluidas, ANSI y los 65 temas, la salida coincide con HTML de Shiki 3.23.0 con su motor de expresiones regulares JavaScript, salvo por los espacios en blanco iniciales y finales.

Motor de expresiones regulares puro en PHP

Motor RegExp de JavaScript incluido directamente desde inline0/phasis y alimentado por un traslado de oniguruma-to-es. El motor de expresiones regulares JavaScript de Shiki sigue la misma ruta de Oniguruma a RegExp.

Transformadores

Todos los hooks de Shiki (preprocess, tokens, root, pre, code, line, span, postprocess), más los transformadores integrados de notación, metadatos y espacios en blanco.

El paquete completo

Incluye todos los lenguajes tm-grammars (235, más 18 gramáticas auxiliares) y todos los temas tm-themes (65). Incluye salida de terminal ANSI, decoraciones y sustituciones de color.

CLI

Resalta un archivo en HTML o muestra los lenguajes y temas incluidos directamente desde la línea de comandos con bin/shikiphp.

Sin Node

Funciona con PHP 8.2+ solo con ext-json y ext-mbstring. Sin entorno de ejecución de Node, enlace nativo Oniguruma ni llamadas a la shell.

Por qué ShikiPHP

Se ejecuta donde se ejecuta PHP

El resaltado se realiza dentro del proceso de PHP, sin ejecutar Node desde la shell ni llamar a un API alojado. Ideal para Laravel, WordPress o como paso de compilación de un sitio estático.

Salida que se puede almacenar en caché

El mismo código con las mismas opciones siempre produce el mismo HTML. Resalta durante la compilación o guarda en caché el HTML con una clave basada en el código y las opciones hasta que cambie el código fuente.

Un bloque para claro y oscuro

Un mapa de temas escribe el segundo tema como variables CSS en el mismo marcado, y unas pocas líneas de CSS permiten activarlo. La opción defaultColor determina qué tema se escribe en línea.

Límites para entradas no fiables

El motor de expresiones regulares memoriza los fallos y protege contra ReDoS, así que un patrón problemático ralentiza el proceso en lugar de bloquearlo. La opción tokenizeMaxLineLength emite las líneas demasiado largas como un único token sin formato.

Comparación con

Otras formas de resaltar código para un sitio PHP y en qué se diferencia ShikiPHP.

ShikiPHP en comparación con otras herramientas
Shiki Ideal paraLa implementación de referencia en JavaScript. Funciona en cualquier entorno de ejecución JavaScript moderno sin API de Node.js, carga gramáticas y temas bajo demanda e incluye integraciones Twoslash de TypeScript. Diferencia con ShikiPHPShikiPHP traslada ese flujo a PHP para páginas renderizadas en un servidor PHP. Su banco de pruebas de referencia compara su HTML con Shiki 3.23.0, mientras que la rama principal de Shiki ya ha avanzado a v4.
Phiki Ideal paraUn resaltador PHP que también usa gramáticas TextMate y temas VS Code. Incluye una extensión league/commonmark compatible con Str::markdown de Laravel, salida para terminal y un ejecutable de línea de comandos. Diferencia con ShikiPHPPhiki describe su tokenizador como inspirado en vscode-textmate, pero no como una traducción 1-1. ShikiPHP traslada vscode-textmate y oniguruma-to-es, y prueba su HTML comparándolo con la salida de Shiki en 214 escenarios de referencia.
highlight.php Ideal paraUn traslado PHP de highlight.js para el servidor que admite lenguajes 185 con las definiciones originales de lenguaje y estilo, y puede detectar el lenguaje automáticamente. Diferencia con ShikiPHPShikiPHP tokeniza con gramáticas TextMate y aplica colores con temas VS Code, los mismos archivos que usa Shiki. En cada llamada hay que indicar el lenguaje.
Torchlight Ideal paraUn servicio de resaltado compatible con VS Code. Es un HTTP API con anotaciones en comentarios para resaltar, enfocar y mostrar diferencias; ofrece clientes propios para Laravel, CommonMark, Statamic y otras plataformas. Diferencia con ShikiPHPShikiPHP se ejecuta dentro del proceso de PHP, sin API alojado. Sus transformadores de notación integrados procesan comentarios similares para resaltar líneas, enfocarlas y mostrar diferencias.

Preguntas y respuestas

Respuestas breves de la documentación de ShikiPHP.

Empieza con la guía de primeros pasos y añade transformadores, gramáticas personalizadas o salida ANSI cuando tus páginas lo necesiten.