dreadnip / highlighter
此包最新版本(0.0.1)的许可信息不可用。
使用令牌的PHP语法高亮器
0.0.1
2022-09-05 15:37 UTC
Requires
- php: ^8.1
Requires (Dev)
- phpstan/phpstan: 1.8
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.6
- symfony/var-dumper: ^6.1
This package is not auto-updated.
Last update: 2024-09-17 00:11:15 UTC
README
一个微小的PHP语法高亮器。使用 PhpToken
将PHP代码转换为PHP语言令牌,然后使用默认样式或您提供的自定义样式将这些令牌渲染为HTML。
用法
Vegetable.php
<?php // Great source of vitamins class Vegetable { public readonly string $edible; public readonly string $color; public function __construct(string $edible, string $color = "green") { $this->edible = $edible; $this->color = $color; } public function isEdible(): string { return $this->edible; } public function getColor(): string { return $this->color; } }
使用以下代码
$input = file_get_contents('Vegetable.php'); $html = new Highlighter()->render($input); echo $html;
生成以下HTML
<pre><code><span style="color: #3A97D4; font-weight: bold;"><?php<br></span><span style="color: #09814A; font-weight: bold;"><br></span><span style="color: #888; font-style: italic;">// Great source of vitamins</span><span style="color: #09814A; font-weight: bold;"><br></span><span style="color: #3A97D4; font-weight: bold;">class</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #D87A1A">Vegetable</span><span style="color: #09814A; font-weight: bold;"><br></span><span style="color: #333;">{</span><span style="color: #09814A; font-weight: bold;"><br> </span><span style="color: #3A97D4; font-weight: bold;">public</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #3A97D4; font-weight: bold;">readonly</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #D87A1A">string</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #09814A">$edible</span><span style="color: #333;">;</span><span style="color: #09814A; font-weight: bold;"><br> </span><span style="color: #3A97D4; font-weight: bold;">public</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #3A97D4; font-weight: bold;">readonly</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #D87A1A">string</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #09814A">$color</span><span style="color: #333;">;</span><span style="color: #09814A; font-weight: bold;"><br><br> </span><span style="color: #3A97D4; font-weight: bold;">public</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #3A97D4; font-weight: bold;">function</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #D87A1A">__construct</span><span style="color: #333;">(</span><span style="color: #D87A1A">string</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #09814A">$edible</span><span style="color: #333;">,</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #D87A1A">string</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #09814A">$color</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #333;">=</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #333">"green"</span><span style="color: #333;">)</span><span style="color: #09814A; font-weight: bold;"><br> </span><span style="color: #333;">{</span><span style="color: #09814A; font-weight: bold;"><br> </span><span style="color: #09814A">$this</span><span style="color: #666">-></span><span style="color: #D87A1A">edible</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #333;">=</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #09814A">$edible</span><span style="color: #333;">;</span><span style="color: #09814A; font-weight: bold;"><br> </span><span style="color: #09814A">$this</span><span style="color: #666">-></span><span style="color: #D87A1A">color</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #333;">=</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #09814A">$color</span><span style="color: #333;">;</span><span style="color: #09814A; font-weight: bold;"><br> </span><span style="color: #333;">}</span><span style="color: #09814A; font-weight: bold;"><br><br> </span><span style="color: #3A97D4; font-weight: bold;">public</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #3A97D4; font-weight: bold;">function</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #D87A1A">isEdible</span><span style="color: #333;">(</span><span style="color: #333;">)</span><span style="color: #333;">:</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #D87A1A">string</span><span style="color: #09814A; font-weight: bold;"><br> </span><span style="color: #333;">{</span><span style="color: #09814A; font-weight: bold;"><br> </span><span style="color: #3A97D4; font-weight: bold;">return</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #09814A">$this</span><span style="color: #666">-></span><span style="color: #D87A1A">edible</span><span style="color: #333;">;</span><span style="color: #09814A; font-weight: bold;"><br> </span><span style="color: #333;">}</span><span style="color: #09814A; font-weight: bold;"><br><br> </span><span style="color: #3A97D4; font-weight: bold;">public</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #3A97D4; font-weight: bold;">function</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #D87A1A">getColor</span><span style="color: #333;">(</span><span style="color: #333;">)</span><span style="color: #333;">:</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #D87A1A">string</span><span style="color: #09814A; font-weight: bold;"><br> </span><span style="color: #333;">{</span><span style="color: #09814A; font-weight: bold;"><br> </span><span style="color: #3A97D4; font-weight: bold;">return</span><span style="color: #09814A; font-weight: bold;"> </span><span style="color: #09814A">$this</span><span style="color: #666">-></span><span style="color: #D87A1A">color</span><span style="color: #333;">;</span><span style="color: #09814A; font-weight: bold;"><br> </span><span style="color: #333;">}</span><span style="color: #09814A; font-weight: bold;"><br></span><span style="color: #333;">}</span></code></pre>
PHP代码的每一部分都被渲染为带有内联样式的HTML <span>
标签。特殊字符,如引号,被转换为HTML实体,换行符被渲染为 <br>
标签。
在浏览器中渲染时,HTML将看起来像这样
自定义样式
高亮显示100%可自定义。
内部,Highlighter
类使用令牌映射和样式映射。您可以将这两个映射传递给类的构造函数并覆盖默认值。您的令牌映射应包含PHP令牌代码(例如T_OPEN_TAG),并使用关键字分组。您的样式映射应将CSS样式映射到您为令牌映射选择的键词。
// If you enter the following token map $tokenMap = [ 'foobar' => [ T_STRING, // identifiers, e.g. keywords like parent and self, function names, class names and more T_CALLABLE, // any callable, ] ]; // Your style map has to contain styles for that keyword $styleMap = [ 'foobar' => 'color: #3A97D4; font-weight: bold;', ];
请参阅PHP文档以获取所有可能的解析令牌列表。