26b / diqa-formatter
命令行界面格式化库
Requires
- php: ^8.0
Requires (Dev)
- phpunit/phpunit: ^9
This package is not auto-updated.
Last update: 2024-09-19 18:23:34 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] 请注意,在这种情况下通常没有必要只输出一行,因为顶部和底部的边框边界也会被添加。