dan-da/highlight.php

支持 185 种语言的服务器端语法高亮工具。它是 highlight.js 的 PHP 版本,实现了默认 CLI (ansi) 颜色方案。

v9.15.6.2 2019-06-26 16:48 UTC

README

highlight.php 是一个用 PHP 编写的服务器端代码高亮工具,目前支持 185 种语言。它是 Ivan Sagalaev 的 highlight.js 的端口,充分利用了原始 JavaScript 项目的语言和样式定义。

原始 highlight.js 和 highlight.php 通过 CSS 类来实现高亮,用于 HTML。

geekdevs/highlight.php 是一个分支,它支持使用 ansi 转义序列来为 CLI 颜色使用 CSS 类,但它(截至编写时)没有定义一组有用的默认颜色。

dan-da/highlight.php 是一个分支,它实现了默认 CLI 颜色的(部分)集合,并且只关心这一点。

如果您不需要 CLI(ansi)颜色,您应该坚持使用其他分支之一。

安装 + 设置

建议通过 Composer 安装项目。

composer require dan-da/highlight.php

如果您不使用 Composer,请确保通过包含或自动加载器可以找到 Highlight 命名空间中定义的类。为此,此项目包含一个简单的自动加载器,作为 Highlight\Autoloader.php

用法

CLI 高亮显示

    $jsonbuf = json_encode( ['age': 10, 'weight': 90] );
    $highlighter = new \Highlight\Highlighter(
            new \Highlight\Decorator\StatefulCliDecorator([])
    );
    echo $highlighter->highlight('json', $jsonbuf)->value;

Highlight\Highlighter 类包含高亮显示功能。您可以选择两种高亮显示模式:

  1. 显式模式
  2. 自动语言检测模式

显式模式

在显式模式下,您必须定义您将高亮显示的语言。

// Instantiate the Highlighter.
$hl = new Highlight\Highlighter();
$code = file_get_contents('some_ruby_script.rb');

try {
    // Highlight some code.
    $highlighted = $hl->highlight('ruby', $code);

    echo "<pre class=\"hljs {$highlighted->language}\">\n";
    echo $highlighted->value . "\n";
    echo "</pre>\n";
}
catch (DomainException $e) {
    // This is thrown if the specified language does not exist

    echo "<pre>\n";
    echo $code . "\n";
    echo "</pre>\n";
}

自动语言检测模式

或者,您可以使用自动检测模式,该模式会根据库认为最好的语言来高亮显示您的代码。

警告:您必须提供 Highlighter 将从中选择的语言列表。这将采取暴力方式,选择结果最准确的语言。这非常低效,因为您提供的语言越多,可能不一定总是 100% 准确。

强烈建议您明确选择语言或限制自动检测的语言数量,以减少不准确的数量。

$hl = new Highlight\Highlighter();
$hl->setAutodetectLanguages(array('ruby', 'python', 'perl'));

$highlighted = $hl->highlightAuto(file_get_contents('some_ruby_script.rb'));

echo "<pre class=\"hljs {$highlighted->language}\">\n";
echo $highlighted->value . "\n";
echo "</pre>\n";

样式表

highlight.js 项目中可用的相同样式表都位于此项目的 styles 目录中,可以将其包含在您的 CSS 中或使您的 Web 服务器可以访问。

版本控制

该项目将与 highlight.js 项目相同的版本号遵循语言,这意味着在 highlight.js 9.12.0 中可用的语言定义也将可用在 highlight.php 9.12.0 中。但是,有时这个项目或其翻译定义文件可能会出现错误,因此将在版本号后附加一个数字。例如,版本 9.12.0.1 将包含与 highlight.js 9.12.0 相同的所有语言,但也将包含仅针对此项目的修复。这样做是为了使此项目可以在 highlight.js 发布版本 9.12.1 时避免版本冲突。

向后兼容承诺

尽管本项目使用的语义化版本控制与highlight.js相同,但本项目将遵守Symfony向后兼容性承诺。您可以放心,在9.x期间不会有破坏性更改,任何弃用功能都会用@deprecated标记,并在下一个主要版本中才会移除。

一些历史

丹·利比 2019年6月26日

从geekdevs/highlight.php分支出来以添加默认CLI配色方案。

吉尔特·伯格曼 2013年9月30日

JavaScript代码高亮非常方便,在很多情况下正是您想要使用的。特别是对于编程博客,我建议您不要使用其他方式。但有时您可能更适合使用更“静态”的方法,例如,如果您想要在电子邮件中发送高亮代码或用于API文档。为此,我需要一个最好是PHP编写的代码高亮程序。

我找不到任何令人满意的PHP解决方案,所以我决定从JavaScript移植一个。经过对不同高亮程序基于许可、技术、语言支持等方面的比较,我认为highlight.js是最受欢迎的。

我的决定不是制作一个PHP高亮器,而是将highlight.js进行移植,这两者是不同的事情。目标是让它与highlight.js完全一样,尽可能多地使用原始程序的语言定义和CSS文件。

编码愉快!

许可证

BSD