diqa / formatter
命令行界面格式化库
Requires
- php: >=7.2.0
- composer/installers: 1.*,>=1.0.1
Requires (Dev)
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2024-08-31 00:35:48 UTC
README
格式化库 diqa/formatter
简化了在控制台多列输出格式化文本。
特性
- 固定列宽
- 列内的不同对齐方式
- 分隔符(水平线)
- 边框支持
- 填充
- 颜色高亮(适用于控制台)
- 换行或缩短
- 字符序列可以由布局机制忽略
快速开始
首先,您必须使用配置初始化格式化器。
配置对象仅需要的选项是第一个参数: 列宽。所有其他选项都是可选的。在给定的示例中,我们有一个3列布局,第一列左对齐,第二列居中对齐,第三列右对齐。我们还选择了边框填充。
$config = new Config([20,30,20],
[Config::LEFT_ALIGN, Config::CENTER_ALIGN, Config::RIGHT_ALIGN],
[
'borderPadding' => true
]
);
$formatter = new Formatter($config);
现在您可以使用它了。您可以打印一行或行数组。[1]
一行
$output = $formatter->formatLine("column1", "column2", "column3");
多行
$output = $formatter->format([
["column1", "column2", "column3"], // row 1
["column1", "column2", "column3"], // row 2
["column1", "column2", "column3"] // row 3
]);
选项
配置类有以下构造函数参数
-
列宽 的字符数组,例如对于3列:
[ 20, 30 ,20 ]
-
对齐方式的数组(可选,如果缺失,则所有列默认为 LEFT_ALIGN)
Config::LEFT_ALIGN
Config::RIGHT_ALIGN
Config::CENTER_ALIGN
Config::LEFT_AND_RIGHT_ALIGN
-
选项数组。以下是目前可用的选项
- borderPadding:在边框(左和右)添加1字符填充。默认为无。
- border:添加边框 [2]。默认为无。
- paddingChar:更改填充字符。默认为空白。
- wrapColumns:指定是否应换行或缩短行。默认为换行。
-
分隔线:一行可以是以下常量之一(适用于所有列)
Config::LINE_SEPARATOR
:渲染单行Config::DOUBLE_LINE_SEPARATOR
:渲染双行Config::EMPTY_LINE_SEPARATOR
:渲染空行
$output = $formatter->format([ ["column1", "column2", "column3"], // row 1 [Config::DOUBLE_LINE_SEPARATOR], // row 2 ["column1", "column2", "column3"] // row 3 ]);
此外,以下方法也可用
-
highlightWord ($word, $color, $column = NULL)
-
使用颜色突出显示一个单词。最后一个参数是可选的。如果缺失,则在该单词突出显示所有列。请参见此示例
$warningColor = Color::fromColor(Color::LIGHT_GREY, Color::RED); $config->highlightWord("[ERROR]", $warningColor, 3);
突出显示第3列的字符串 "[ERROR]",背景为红色,文字颜色为浅灰色。
-
-
setSequencesToIgnore (array $sequences)
-
指定应完全由布局机制忽略的字符序列。这对于您想要为打印机输出格式化数据的情况非常有用。请参见此示例
$config->setSequencesToIgnore(["//BOLD", "//ITALIC", "//OFF"]);
这些字符串完全被布局忽略,例如 "//BOLDHaus//OFF" 被视为 "Haus"。
-
-
setLeftColumnPadding(int $column, int $leftPadding)
- 指定在 $column 上应用多少左填充
对齐方式
虽然左、中、右对齐方式相当直观,但左右对齐可能不是。这意味着一个单列由两部分组成。第一部分左对齐,第二部分右对齐。示例
Date of purchase..................2020-07-12
Shop.......................Aldi Süd Oststadt
Product..Tütensuppe Miraculi Familienpackung
您不能为此使用两列布局,因为在第1行中,第一列在第3行中与第二列重叠。
由两部分组成的列作为包含两个条目的数组输入。因此请小心:这里有3层嵌套数组。第一层是行,第二层是列(实际上只有一个)和第三层是两部分组成的列。
$output = $formatter->format([
[["Date of purchase", "2020-07-12" ]], // row 1
[["Shop", "Aldi Süd" ]], // row 2
[["Product", "Tütensuppe Miraculi Familienpackung" ]] // row 3
]);
备注
单词换行
多行显示列的算法尝试保留单词边界。只有在列文本中没有找到任何空白字符时,它才在最后一个可能的字符处进行硬换行。
脚注
[1] 请注意,一个输入行不一定输出为一行。文本可能被拆分为多行以适应列宽。
[2] 请注意,在这种情况下输出单行通常没有意义,因为顶部和底部的边界也被添加了。