dreadnip/highlighter

此包最新版本(0.0.1)的许可信息不可用。

使用令牌的PHP语法高亮器

0.0.1 2022-09-05 15:37 UTC

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;">&lt;?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">&quot;green&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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文档以获取所有可能的解析令牌列表。