spatie / shiki-php
使用Shiki在PHP中高亮代码
Requires
- php: ^7.4|^8.0
- ext-json: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^v3.0
- pestphp/pest: ^1.8
- phpunit/phpunit: ^9.5
- spatie/pest-plugin-snapshots: ^1.1
- spatie/ray: ^1.10
README
Shiki 是一个由许多代码编辑器所使用的语言引擎驱动的美丽语法高亮工具。此包允许您从PHP中使用Shiki。
\Spatie\ShikiPhp\Shiki::highlight( code: '<?php echo "Hello World"; ?>', language: 'php', theme: 'github-light', );
此包还提供了以下额外语言,除了Shiki开箱即支持的100多种语言之外
- Antlers
- Blade
Laravel和league/commonmark中的使用
Laravel用户可以通过我们的spatie/laravel-markdown包轻松使用Shiki。
如果您需要league/commonmark的扩展来高亮代码,请访问spatie/commonmark-shiki-highlighter。
支持我们
我们投入了大量资源来创建一流的开放源代码包。您可以通过购买我们的付费产品之一来支持我们。
我们非常感激您从家乡寄来明信片,说明您正在使用我们的哪些包。您可以在我们的联系页面上找到我们的地址。我们将所有收到的明信片发布在我们的虚拟明信片墙上。
安装
您可以通过composer安装此包
composer require spatie/shiki-php
在您的项目中,您必须安装JavaScript包shiki
,否则输出中不会存在<pre>
元素。
您可以通过npm安装它
npm install shiki
... 或者Yarn。
yarn add shiki
确保您已安装Node 10或更高版本。
用法
以下是一个我们将要高亮一些PHP代码的例子。
use Spatie\ShikiPhp\Shiki; Shiki::highlight( code: '<?php echo "Hello World"; ?>', language: 'php', theme: 'github-light', );
输出是以下HTML片段,它将在浏览器中精美呈现
<pre class="shiki" style="background-color: #2e3440ff"><code><span class="line"><span style="color: #81A1C1"><?</span><span style="color: #D8DEE9FF">php </span><span style="color: #81A1C1">echo</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">Hello World</span><span style="color: #ECEFF4">"</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">?></span></span></code></pre>
标记行以突出显示、添加、删除或聚焦
Shiki-php 允许您标记某些行作为highlighted
、added
、deleted
和focus
。要执行此操作,您可以将必要的行传递给highlight
方法
use Spatie\ShikiPhp\Shiki; // Highlighting lines 1 and 4,5,6 Shiki::highlight( code: $code, language: 'php', highlightLines: [1, '4-6'], ); // Marking line 1 as added Shiki::highlight( code: $code, language: 'php', addLines: [1], ); // Marking line 1 as deleted Shiki::highlight( code: $code, language: 'php', deleteLines: [1], ); // Marking line 1 as focus Shiki::highlight( code: $code, language: 'php', focusLines: [1], );
然后您可以在自己的CSS中针对这些类来着色这些行。
PHP 7.4支持
Shiki 与至少PHP 8配合使用时具有简洁且易于理解的语法。
它支持PHP 7.4,但如果与PHP7.4一起使用,则其简洁的语法会略有损失,因为您需要遵循变量的顺序。
// As reference highlight( string $code, ?string $language = 'php', ?string $theme = 'nord', ?array $highlightLines = [], ?array $addLines = [], ?array $deleteLines = [], ?array $focusLines = [] ) // Instead of PHP 8 syntax Shiki::highlight( code: $code, language: 'php', deleteLines: [1], ); // You need to follow PHP 7.4 syntax Shiki::highlight( $code, 'php', null, null, [1], );
确定可用语言
要获取包含Shiki支持的所有语言的数组,请调用getAvailableLanguages
$shiki = new \Spatie\ShikiPhp\Shiki(); $shiki->getAvailableLanguages(); // returns an array $shiki->languageIsAvailable('php'); // returns true $shiki->languageIsAvailable('non-existing-language'); // returns false
确定可用主题
要获取包含Shiki支持的所有主题的数组,请调用getAvailableThemes
$shiki = new \Spatie\ShikiPhp\Shiki(); $shiki->getAvailableThemes(); // returns an array $shiki->themeIsAvailable('github-light'); // returns true $shiki->themeIsAvailable('non-existing-theme'); // returns false
使用自定义主题
Shiki 支持任何 VSCode 主题。
您只需通过传递绝对路径作为主题参数即可加载一个主题。
use Spatie\ShikiPhp\Shiki; Shiki::highlight( code: '<?php echo "Hello World"; ?>', language: 'php', theme: __DIR__ . '/your-path-to/themes/some-theme.json', );
使用 Node 版本管理器
在内部,此包运行一个 node 命令来渲染 markdown。如果您在开发过程中使用 NVM,则此包可能找不到您的 Node 版本,因为它在 /usr/local/bin
和 /opt/homebrew/bin
中查找 node 可执行文件 - 如果情况如此,则您应该在 NVM 文件夹中的 node 发行版与 usr/local/bin
之间创建一个符号链接。这样的命令可能如下所示
sudo ln -s /home/some-user/.nvm/versions/node/v17.3.1/bin/node /usr/local/bin/node
创建此符号链接将允许该包找到您的 NPM 可执行文件。请注意,如果您更改了 NPM 版本,您必须相应地更新您的符号链接。
测试
您可以使用此命令运行所有测试
composer test
更新日志
有关最近更改的更多信息,请参阅更新日志。
贡献
有关详细信息,请参阅贡献指南。
安全漏洞
有关报告安全漏洞的详细信息,请参阅我们的安全策略。
鸣谢
Blade 语法高亮源代码来自此仓库。
Antlers 语法高亮源代码来自此仓库。
替代方案
如果您不想自己安装和处理 Shiki,请查看 Torchlight,它可以以最少的设置来高亮您的代码。
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅许可证文件。