loilo/lowlight

在终端显示150多种语言的语法高亮代码

2.0.0 2020-03-23 09:55 UTC

This package is auto-updated.

Last update: 2024-09-24 07:01:48 UTC


README

Lowlight logo showing a couch and a shade lamp

Lowlight

Tests Packagist

Lowlight在终端显示150多种语言的语法高亮代码。它建立在highlight.php之上。

Part of Lowlight's source code, highlighted with Lowlight

安装

此软件包可通过Composer获取。要将它添加到您的项目中,只需运行

composer require loilo/lowlight

用法

前提条件

如果您在没有框架上下文中运行Lowlight,您可能需要首先初始化Composer的自动加载

require_once __DIR__ . '/vendor/autoload.php';

入门指南

要高亮显示一段PHP代码,请这样做

$ll = new Lowlight\Lowlight;

echo $ll->highlight('php', $somePhpSnippet)->value;

有许多语言可用。请参阅完整列表此处

自动语言检测

如果您正在处理用户提供的代码,您可能并不总是知道所使用的语言。这就是自动检测发挥作用的地方。

假设我们得到了配置代码,但我们不确定它是JSON、YAML还是INI,那么以下方法将适当地突出显示它

$ll = new Lowlight\Lowlight;

echo $ll->highlightAuto($userProvidedCode, [ 'json', 'yaml', 'ini' ])->value;

highlightAuto()方法的第二个参数是要检查的语言。

  • 传递参数是可选的。默认为[ 'xml', 'json', 'javascript', 'css', 'php', 'http' ]
  • 您可以通过调用以下方法来调整默认检测语言
    $ll->setDefaultAutodetectLanguages([ 'json', 'yaml', 'ini' ]);

主题化

主题化与highlight.js的主题化类似。Highlight.js将每个标记表示为CSS类名(例如hljs-comment),而Lowlight使用标记作为主题数组中的键。

$ll->theme['comment'] = 'green';

如您所见,终端中的样式相当有限。Lowlight仅允许您设置标记的文本颜色,没有其他设置。因此,您通常无法通过主题创建与CSS相同数量的氛围(也许除了使用任意RGB颜色外)。

颜色

可用的颜色有

  • default(终端的默认文本颜色)
  • 黑色
  • gray / grey(实际上是相同的)
  • whitebright-white
  • redbright-red
  • greenbright-green
  • yellowbright-yellow
  • bluebright-blue
  • magentabright-magenta
  • cyanbright-cyan

RGB颜色

许多现代终端都支持24位调色板。您可以使用RGB数组为标记提供颜色,而不是使用16种左右的旧式颜色名称。

$ll->theme['comment'] = [ 0, 175, 95 ];

如果您想使用这些颜色,检测对24位颜色的支持(就像所有与颜色相关的功能一样)取决于您自己。

自定义主题

要创建自己的主题,一种可行的方法是使用现有的highlight.js主题,提取所有.hljs-xxx类,并将它们转换为PHP关联数组。

注意:通常,您不知道用户终端的通用样式以及您的主题如何与之集成(尤其是如果他们使用的是深色或浅色主题),因此在使用颜色时要小心并限制。

顺便说一下,这是Lowlight的默认主题

$ll->theme = [
    'comment' => 'gray',
    'string' => 'blue',
    'number' => 'green',
    'literal' => 'bright-green',
    'meta' => 'cyan',
    'meta-string' => 'bright-cyan',

    'keyword' => 'yellow',
    'attribute' => 'yellow',
    'selector-tag' => 'yellow',
    'meta-keyword' => 'yellow',
    'doctag' => 'yellow',
    'name' => 'yellow',

    'type' => 'red',
    'subst' => 'red',
    'selector-id' => 'red',
    'selector-class' => 'red',
    'quote' => 'red',
    'template-tag' => 'red',
    'deletion' => 'red',

    'title' => 'magenta',
    'section' => 'magenta',
    'built_in' => 'magenta',

    'regexp' => 'bright-red',
    'symbol' => 'bright-red',
    'variable' => 'bright-red',
    'template-variable' => 'bright-red',
    'link' => 'bright-red',
    'selector-attr' => 'bright-red',
    'selector-pseudo' => 'bright-red',

    'built' => 'green',
    'bullet' => 'green',
    'code' => 'green',
    'addition' => 'green',

    'emphasis' => 'red',
    'strong' => 'red'
];

致谢