diqa/formatter

命令行界面格式化库

1.1 2023-05-03 11:16 UTC

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