26b/diqa-formatter

命令行界面格式化库

1.2 2023-02-22 12:27 UTC

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] 请注意,在这种情况下通常没有必要只输出一行,因为顶部和底部的边框边界也会被添加。