geekdevs/highlight.php

支持185种语言的服务器端语法高亮器。它是highlight.js的PHP端口

v9.15.6.1 2019-03-18 09:49 UTC

README

Build Status Latest Packagist release Monthly downloads on Packagist

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

安装+设置

建议通过Composer来安装项目。

composer require scrivo/highlight.php

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

Composer版本约束

在您的composer.json中引入此项目时,建议您使用尖号版本范围,并仅使用主版本和次要值;例如:^9.14

我们已经注意到,许多教程和项目将自身锁定在此项目的特定版本上;例如:"scrivo/highlight.php": "v9.12.0.1"。请不要这样做或鼓励这样做。我们承诺有一个可靠的向后兼容性策略,因此没有理由将自身锁定在如此特定的版本上。通过这样做,您将阻止自己或您的用户收到语言定义和错误修复的更新。

用法

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 标记,并且不会在下一个主要版本中删除。

一些历史

Geert Bergman 2013年9月30日

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

我没有找到任何令人满意的 PHP 解决方案,因此我决定从 JavaScript 中移植一个。经过比较不同高亮程序基于许可、技术、语言支持的几个方面后,在我看来 highlight.js 是最受欢迎的。

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

快乐编码!

许可证

BSD