lucinda/console

Lucinda Console 表格:API 可在 UNIX 控制台或 Windows 命令提示符中绘制表格

v2.0.5 2022-12-25 17:58 UTC

This package is auto-updated.

Last update: 2024-09-25 21:42:58 UTC


README

此 API 的创建是为了提供一种样式化控制台响应的能力,使其易于阅读且愉快观看。它通过以下两个步骤实现

  1. 定义一个平台,通过以下类创建和格式化文本
    • Text:封装文本的类,可以应用上述三个 UNIX 风格选项中的任何一个
      • BackgroundColor:封装 UNIX 控制台文本可以具有的背景颜色的枚举
      • ForegroundColor:封装 UNIX 控制台文本可以具有的前颜色的枚举
      • FontStyle:封装 UNIX 控制台文本可以具有的字体样式的枚举(例如:粗体)
    • Table:封装表格的类,不能包含子表格
    • OrderedList:封装有序列表的类,能够包含指向其他有序列表的叶子节点
    • UnorderedList:封装无序列表的类,能够包含指向其他无序列表的叶子节点
  2. 定义一个类似于 HTML 的 模板语言,在幕后指向上述结构,帮助开发人员通过以下标签实现控制台前端而无需编程
    • <div>:与 HTML 标签相同,但仅支持 style 属性。
    • <table>:与 HTML 标签相同,但有一些限制
    • <ol>:与 HTML 标签相同,但有一些差异和限制
    • <ul>:与 HTML 标签相同,与 <ol> 有相同的不同和限制
    • <span>:与 HTML 标签相同
    • <u>:与 HTML 标签相同
    • <b>:与 HTML 标签相同
    • <i>:与 HTML 标签相同
  3. 定义一个类,能够将点 #2 的模板化文本与点 #3 的结构绑定,以构建最终的视图

API 除了 PHP 8.1+ 解释器和 SimpleXML 扩展之外不需要任何依赖。所有类都属于 Lucinda\Console 接口!

示例用法

// defines text to be compiled
$text = '
<div style="font-style: bold">hello</div>
    
<table>
    <thead>
        <tr>
            <td style="background-color: red">Name</td>
            <td>Value</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td style="color: green">qqq</td>
            <td>sss</td>
        </tr>
        <tr>
            <td>ddd</td>
            <td>fff</td>
        </tr>
    </tbody>
</table>
    
<ol>
    <caption style="color: blue">Is Lucinda smart?</caption>
    <li>
        <ol>
            <caption>Yes</caption>
            <li style="background-color: blue">qwerty</li>
            <li>asdfgh</li>
        </ol>
    </li>
    <li>No</li>
</ol>
';

// compiling and outputting results (on windows style attributes will be ignored)
$wrapper = new Lucinda\Console\Wrapper($text);
echo $wrapper->getBody();

控制台模板语言

控制台模板语言支持 HTML 标准的一部分,即那些在样式和格式化控制台文本中可行的部分。某些元素允许一个 style 属性,该属性支持以下 CSS 指令

Div 标签

绑定到 文本,与 HTML <div> 标签作用相同,但有以下限制

  • 只支持 style 属性
  • body 只能包含纯文本或/和以下标签: <span><u><b><i>

语法示例

<div style="background-color: red">Hello, <b>world</b>!</div>

表格标签

绑定到 表格,与 HTML <table> 标签作用相同,但有以下限制

  • 必须有一个 <thead> 子标签
  • 必须有一个 <tbody> 子标签
  • 任何 <tr> 内部不支持任何属性
  • 任何 <td> 内部只支持 style 属性
  • 任何 <td> 的 body 只能包含纯文本

语法示例

<table>
    <thead>
        <tr>
            <td style="color: red">Name</td>
            <td>Value</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>qqq</td>
            <td>sss</td>
        </tr>
    </tbody>
</table>

有序列表标签

绑定到 有序列表,与 HTML <ol> 标签作用相同,但有以下差异和限制

  • 可以包含一个定义列表内容的 <caption> 标签(行为类似于 <div>)。
  • 如果存在 <caption>,它必须是第一个子标签!
  • 必须包含只支持 style 属性的 <li> 子标签
  • 任何 <li> 的 body 只能包含以下之一
    • 纯文本或/和以下标签: <span><u><b><i>
    • 另一个 <ol>/<ul> 标签

示例

<ol>
    <caption style="color: blue">Is Lucinda smart?</caption>
    <li>
        <ol>
            <caption>Yes</caption>
            <li style="background-color: blue">qwerty</li>
            <li>asdfgh</li>
        </ol>
    </li>
    <li>No</li>
</ol>

无序列表标签

绑定到 无序列表,与 HTML <ul> 标签作用相同,但有与 <ol> 相同的差异和限制。

Span 标签

与 HTML <span> 的作用相同,但有以下限制

  • 只支持 style 属性
  • 纯文本或/和以下标签: <u><b><i>
  • 只能出现在 <div> 或 <caption> 内部

示例

<div>Hello, <span style="background-color: BLUE">Lucian</span>!</div>

B 标签

与 HTML <b> 的作用相同,与 <span> 标签有相同的限制!相当于

<span style="font-style: bold">Lucian</span>

U 标签

与 HTML <u> 的作用相同,与 <span> 标签有相同的限制!相当于

<span style="font-style: underline">Lucian</span>

^ 注意与 HTML text-decoration: underline 的区别

I 标签

与 HTML <i> 的作用相同,与 <span> 标签有相同的限制!相当于

<span style="font-style: italic">Lucian</span>

^ 注意与 HTML font-style: italic 的区别

参考指南

文本

Lucinda\Console\Text 实现 Stringable,并样式化 UNIX 控制台文本,定义以下公共方法

表格

Lucinda\Console\Table 实现 Stringable,并在控制台/终端上创建要显示的表格,定义以下公共方法

抽象列表

抽象类 Lucinda\Console\AbstractList 实现了 Stringable 接口,并创建要在控制台/终端上显示的列表,定义以下公共方法

以及以下必须实现的具体抽象方法子类

有序列表

Lucinda\Console\OrderedList 扩展了 AbstractList,并在控制台/终端上创建有序列表。

无序列表

Lucinda\Console\UnorderedList 扩展了 AbstractList,并在控制台/终端上创建无序列表。

包装器

Lucinda\Console\Wrapper 使用 控制台模板语言 编译用户定义的文本,通过将标签绑定到它们对应的类。它定义以下公共方法

如果编译失败,将抛出 Lucinda\Console\Exception 异常!