bebat/console-color

将颜色和样式应用于命令行输出文本

1.0.2 2023-07-13 02:47 UTC

This package is auto-updated.

Last update: 2024-08-26 22:57:21 UTC


README

Latest Stable Version Required PHP Version License Acceptance Test Status Code Coverage

Console Color 是一个轻量级的 PHP 8.1+ 库,用于在命令行文本中添加颜色和其他样式。

安装

可以通过 Composer 安装 Console Color 库

composer require bebat/console-color

基本用法

要将样式应用于文本,您需要一个 BeBat\ConsoleColor\Style 的实例。有了这个实例,您可以将样式对象应用于一些文本

use BeBat\ConsoleColor\Style;

$style = new Style();

echo $style->apply('This text is green', Style\Color::Green) . PHP_EOL;

Style 类将尝试自动确定控制台输出是否可以应用样式(更多详细信息可以在环境变量部分找到 下面)。默认情况下,它检查 STDOUT 是否是 TTY。如果您使用的是不同的输出类型(例如 php:// I/O 流),您可以将其传递给 Style() 以确定该流是否支持样式

use BeBat\ConsoleColor\Style;

$handle = fopen($something, 'w');
$style = new Style($handle);

fwrite($handle, $style->apply(
    'If $something points to a console this text will have a cyan background. ' .
    'Otherwise it will just be plain.',
    Style\BackgroundColor::Cyan,
));

您可以使用 force() 方法使 Style 始终 将样式应用于文本,无论它是否认为输出资源支持它

use BeBat\ConsoleColor\Style;

$handle = fopen($something, 'w');
$style = new Style($handle);
$style->force();

fwrite($handle, $style->apply(
    'This text will always have styling applied to it.', Style\Text::Bold,
));

环境变量

除了检查 STDOUT 是否是 TTY,Style 还将查看几个环境变量以确定是否应用样式以及用户的终端对样式的支持级别。

  • FORCE_COLOR - 如果用户设置了 FORCE_COLOR,则即使 Style 认为输出不是 TTY,也会应用样式。
  • NO_COLOR - 如果用户设置了 NO_COLOR,则禁用样式。NO_COLORFORCE_COLOR 优先。
  • TERM - Style 将检查 TERM 以确定它是否支持 256 色模式。
  • COLORTERM - 如果 COLORTERM 设置为 truecolor,则 Style 将应用基于 RGB 的颜色。

包含的样式

Style::apply() 接受一个 StyleInterface 的实例,Console Color 包含了许多实现此接口的样式。

要查看您的终端支持的样式及其外观,请运行包含的 sample.php 文件。

基本样式

Style\TextStyle\UnderlineStyle\ColorStyle\BackgroundColor受支持的枚举,这有助于使 Console Color 的 API 非常简洁。这些样式在大多数终端中具有最广泛的支持(有一些例外)。

文本

  • Style\Text::None - 无样式
  • Style\Text::Bold - 加粗文本(在某些终端中也可能“加亮”颜色)
  • Style\Text::Faint - 淡色文本颜色
  • Style\Text::Italic - 斜体
  • Style\Text::Underline - 下划线
  • Style\Text::Blink - 闪烁文本(请谨慎使用 😊)
  • Style\Text::Reverse - 交换前景色和背景色
  • Style\Text::Concealed - 隐藏文本(它仍然存在并且可以被选中)
  • Style\Text::Strike - 删除线,不是所有终端都支持
  • Style\Text::DoubleUnderline - 双下划线或加粗下划线,不是所有终端都支持
  • Style\Text::Overline - 文本上方的线,不是所有终端都支持
  • Style\Text::Superscript - 上标文本,很少支持
  • Style\Text::Subscript - 下标文本,很少支持

下划线

自定义下划线样式并不被广泛支持,但某些终端包含它们。大多数,如果不是所有,都只能显示单一下划线。

  • 样式\下划线::单下划线
  • 样式\下划线::双下划线
  • 样式\下划线::波浪线
  • 样式\下划线::点状
  • 样式\下划线::虚线

前景色和背景色

样式\颜色样式\背景颜色都支持相同的值,并且具有相同的API。

  • 样式\颜色::黑色
  • 样式\颜色::红色
  • 样式\颜色::绿色
  • 样式\颜色::黄色
  • 样式\颜色::蓝色
  • 样式\颜色::品红色
  • 样式\颜色::青色
  • 样式\颜色::白色
  • 样式\颜色::默认
  • 样式\颜色::亮黑色
  • 样式\颜色::亮红色
  • 样式\颜色::亮绿色
  • 样式\颜色::亮黄色
  • 样式\颜色::亮蓝色
  • 样式\颜色::亮品红色
  • 样式\颜色::亮青色
  • 样式\颜色::亮白色

256色和真彩色

大多数终端程序支持256色输出,现在许多也支持24位“真”色。控制台颜色可以通过样式\Color256样式\ColorRGB类将这些颜色应用于前景、背景或下划线颜色。

  • 样式\Color256::foreground(int $code) - 将256色应用于文本
  • 样式\Color256::background(int $code) - 将256色应用于背景
  • 样式\Color256::underline(int $code) - 将256色应用于下划线(见以下复合样式)
  • 样式\ColorRGB::foreground(int $red, int $green, int $blue) - 将RGB颜色应用于文本
  • 样式\ColorRGB::background(int $red, int $green, int $blue) - 将RGB颜色应用于背景
  • 样式\ColorRGB::underline(int $red, int $green, int $blue) - 将RGB颜色应用于下划线(见以下复合样式)

组合样式

可以使用样式\Composite类将多个样式应用于文本。例如,要同时应用于前景和背景颜色

use BeBat\ConsoleColor\Style;

$style = new Style();

echo $style->apply(
    'This text is white on red',
    new Style\Composite(Style\Color::BrightWhite, Style\BackgroundColor::Red),
) . PHP_EOL;

如果要将颜色添加到下划线,则需要样式\Composite

use BeBat\ConsoleColor\Style;

$style = new Style();

echo $style->apply(
    'This text has a typo',
    new Style\Composite(Style\Underline::Wavy, Style\ColorRGB::underline(255, 0, 0)),
) . PHP_EOL;

样式\Composite实际上可以接受您需要应用的所有样式

use BeBat\ConsoleColor\Style;

$style = new Style();

echo $style->apply(
    "Please don't do this\n",
    new Style\Composite(
        Style\Text::Bold,
        Style\Text::Italic,
        Style\Text::Blink,
        Style\Color256::background(34),
        Style\Color256::foreground(227),
    ),
);