Pular para o conteúdo

ShikiPHP

Realçador de sintaxe PHP puro, implementação de Shiki. Estilize blocos de código com temas VS Code e gramáticas TextMate sem Node; a saída corresponde a Shiki 3.23.0 em cenários de referência 214.

Terminal
composer require shikiphp/shikiphp

Versão mais recente v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring

Na prática

Realce um trecho de um modelo ou script de compilação PHP e exiba o HTML retornado.

Uma chamada por bloco de código

Shikiphp::codeToHtml recebe o código, um ID de idioma e um ID de tema. Retorna um bloco pre completo, com as cores definidas inline, pronto para ser renderizado sem uma folha de estilos adicional.

Passe um mapa themes em vez de theme para que o mesmo bloco inclua cores claras e escuras por meio de variáveis 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 reais de TextMate

Implementação fiel de vscode-textmate: linguagens incorporadas, injeções e repositórios aninhados. As mesmas gramáticas que Shiki e VS Code usam para tokenizar.

Temas de VS Code

Especificidade de seletores de escopo e correspondência de escopos pais, implementadas de vscode-textmate. Tema único ou modo claro/escuro duplo via variáveis CSS.

Saída idêntica à de Shiki

Em 214 cenários de referência, que cobrem 167 das 253 gramáticas incluídas, ANSI e todos os 65 temas, o HTML coincide com o produzido por Shiki 3.23.0 usando seu motor de regex JavaScript, exceto pelos caracteres em branco iniciais e finais.

Mecanismo de regex puro em PHP

Mecanismo RegExp JavaScript incluído no pacote, de inline0/phasis, alimentado por uma implementação de oniguruma-to-es. O mecanismo de regex JavaScript de Shiki segue o mesmo caminho de Oniguruma para RegExp.

Transformadores

Todos os hooks de Shiki (preprocess, tokens, root, pre, code, line, span, postprocess), além dos transformadores integrados de notação, metadados e espaços em branco.

O pacote completo

Todas as linguagens de tm-grammars (235, mais 18 gramáticas auxiliares) e todos os temas de tm-themes (65) já vêm incluídos. Saída de terminal ANSI, decorações e colorReplacements também incluídos.

CLI

Realce um arquivo para HTML ou liste os idiomas e temas incluídos diretamente pela linha de comando com bin/shikiphp.

Sem Node

Funciona com PHP 8.2+ usando apenas ext-json e ext-mbstring. Sem ambiente de execução Node, vínculo nativo de Oniguruma ou execução de comandos externos.

Por que ShikiPHP

Executa onde seu PHP é executado

O realce ocorre dentro do processo PHP, sem executar o Node externamente nem chamar um API hospedado. É adequado para uma etapa de compilação de Laravel, WordPress ou de site estático.

Saída que pode ser armazenada em cache

O mesmo código com as mesmas opções sempre produz o mesmo HTML. Realce durante a compilação ou armazene o HTML em cache por código e opções até que a origem mude.

Um bloco para temas claro e escuro

Um mapa de temas define o segundo tema como variáveis CSS na mesma marcação, e algumas linhas de CSS ativam esse tema. A opção defaultColor escolhe qual tema é definido inline.

Limites para entradas não confiáveis

O mecanismo de regex memoriza falhas e oferece proteção contra ReDoS, fazendo com que um padrão problemático fique lento em vez de travar. A opção tokenizeMaxLineLength emite linhas longas demais como um único token simples.

Comparação com

Outras formas de realçar código em um site PHP e as diferenças de ShikiPHP.

ShikiPHP em comparação com outras ferramentas
Shiki Ideal paraA implementação de referência, em JavaScript. Funciona em qualquer ambiente de execução JavaScript moderno sem APIs de Node.js, carrega gramáticas e temas sob demanda e oferece integrações Twoslash TypeScript. Diferenças em relação a ShikiPHPShikiPHP implementa esse pipeline em PHP para páginas renderizadas em um servidor PHP. Seu conjunto de testes de referência compara a saída HTML com Shiki 3.23.0, enquanto a ramificação principal de Shiki avançou para v4.
Phiki Ideal paraUm realçador PHP que também usa gramáticas TextMate e temas VS Code. Inclui uma extensão league/commonmark que funciona com Str::markdown de Laravel, saída para terminal e um executável de linha de comando. Diferenças em relação a ShikiPHPPhiki descreve seu tokenizador como inspirado em vscode-textmate, mas não como uma tradução 1-1. ShikiPHP implementa vscode-textmate e oniguruma-to-es, e testa sua saída HTML comparando-a com a saída de Shiki em cenários de referência 214.
highlight.php Ideal paraUma implementação PHP no servidor de highlight.js, compatível com 185 idiomas usando as definições originais de idioma e estilo, com detecção automática do idioma. Diferenças em relação a ShikiPHPShikiPHP tokeniza com gramáticas TextMate e aplica cores com temas VS Code, os mesmos arquivos usados por Shiki; cada chamada informa o idioma.
Torchlight Ideal paraUm serviço de realce compatível com VS Code. É um HTTP API com anotações de comentário para realces, foco e diferenças, além de clientes oficiais para Laravel, CommonMark, Statamic e outras pilhas. Diferenças em relação a ShikiPHPShikiPHP é executado dentro do seu processo PHP, sem um API hospedado. Seus transformadores de notação integrados leem comentários semelhantes para linhas realçadas, em foco e de diferenças.

Perguntas e respostas

Respostas curtas da documentação do ShikiPHP.

Comece pelo guia de introdução e, depois, adicione transformadores, gramáticas personalizadas ou saída ANSI quando suas páginas precisarem deles.