Перейти к содержимому

CLI

shikiphp включает небольшую программу командной строки в bin/shikiphp (устанавливается в проект как vendor/bin/shikiphp). В ней есть три команды: highlight выводит один файл в HTML, а langs и themes показывают содержимое пакета.

highlight

Подсвечивает файл в HTML и выводит результат в stdout.

Командная оболочка
vendor/bin/shikiphp highlight <file> [--lang=<lang>] [--theme=<theme>]
  • <file> — путь к файлу. Файл должен существовать; стандартный ввод не считывается.
  • --lang — идентификатор языка или псевдоним. Если он не указан, в качестве идентификатора используется расширение файла без изменений (если его нет, применяется txt).
  • --theme — идентификатор темы. По умолчанию используется github-dark.
Командная оболочка
vendor/bin/shikiphp highlight src/App.php --lang=php --theme=nord

Результат — тот же блок <pre class="shiki …"> для одной темы, который возвращает codeToHtml, за которым следует символ новой строки, поэтому его можно сразу перенаправить в файл:

Командная оболочка
vendor/bin/shikiphp highlight src/App.php --theme=github-light > app.html

Команда не принимает другие параметры. Для двух тем, преобразователей или любого другого параметра используйте PHP API.

Параметры и аргументы

Параметры должны быть в формате --name=value. Любой другой аргумент, начинающийся с --, игнорируется, а за имя файла принимается последний аргумент, не начинающийся с --. Поэтому --lang php file.rs подсвечивает file.rs как Rust: --lang игнорируется, php заменяется на file.rs, а язык определяется по расширению .rs.

Определение языка

Без --lang расширение становится неизменённым идентификатором языка. Это работает, когда расширение само является встроенным идентификатором или псевдонимом: php, js, ts, tsx, py, rs, go, md, yml, json, sh и многие другие (см. Языки). Это не работает в следующих случаях:

  • файлы без расширения, например Makefile или Dockerfile, для которых используется txt;
  • расширения, не являющиеся идентификаторами языков, например .txt.

txt не является встроенным языком, поэтому в обоих случаях выполнение сейчас завершается ошибкой Unknown language "txt" (#3). Для таких файлов передайте --lang:

Командная оболочка
vendor/bin/shikiphp highlight Dockerfile --lang=docker
vendor/bin/shikiphp highlight Makefile --lang=make

langs

Вывести каждый идентификатор, который сборка принимает в качестве языка, по одному в строке.

Командная оболочка
vendor/bin/shikiphp langs

Список содержит 350 строк: сначала 253 идентификаторов встроенных грамматик в порядке сборки (не по алфавиту), затем 97 их псевдонимов (js, cjs, mjs и так далее). Среди идентификаторов грамматик есть 18 вспомогательных грамматик, которые встраиваются в другие грамматики, например vue-directives и es-tag-css; каталог с названиями и псевдонимами см. в разделе Языки. Для алфавитного списка выполните команду через sort.

themes

Вывести идентификаторы всех встроенных тем, по одному в строке, в алфавитном порядке (65 тем).

Командная оболочка
vendor/bin/shikiphp themes

Каталог с названиями и типами светлой/тёмной темы см. в разделе Темы.

Справка и код завершения

Запустите без команды или с -h / --help / help, чтобы вывести справку.

Командная оболочка
vendor/bin/shikiphp --help
Ситуация Вывод Код завершения
Успех или справка stdout 0
Неизвестная команда Unknown command: <name> в stderr 1
highlight без файла или файл не существует строка справки в stderr 1
Неизвестный язык или тема необработанное Shikiphp\Exceptions\Highlight (фатальная ошибка PHP со стеком вызовов) 255