lucinda / console
Lucinda Console 表格:API 可在 UNIX 控制台或 Windows 命令提示符中绘制表格
Requires
- php: ^8.1
README
此 API 的创建是为了提供一种样式化控制台响应的能力,使其易于阅读且愉快观看。它通过以下两个步骤实现
- 定义一个平台,通过以下类创建和格式化文本
- Text:封装文本的类,可以应用上述三个 UNIX 风格选项中的任何一个
- BackgroundColor:封装 UNIX 控制台文本可以具有的背景颜色的枚举
- ForegroundColor:封装 UNIX 控制台文本可以具有的前颜色的枚举
- FontStyle:封装 UNIX 控制台文本可以具有的字体样式的枚举(例如:粗体)
- Table:封装表格的类,不能包含子表格
- OrderedList:封装有序列表的类,能够包含指向其他有序列表的叶子节点
- UnorderedList:封装无序列表的类,能够包含指向其他无序列表的叶子节点
- Text:封装文本的类,可以应用上述三个 UNIX 风格选项中的任何一个
- 定义一个类似于 HTML 的 模板语言,在幕后指向上述结构,帮助开发人员通过以下标签实现控制台前端而无需编程
- 定义一个类,能够将点 #2 的模板化文本与点 #3 的结构绑定,以构建最终的视图
- Wrapper:封装表格的类
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 指令
- font-style:值必须是 FontStyle 常量名称之一
- 背景颜色:value 必须是以下 BackgroundColor 常量名称之一
- 颜色:value 必须是以下 ForegroundColor 常量名称之一
Div 标签
绑定到 文本,与 HTML <div> 标签作用相同,但有以下限制
语法示例
<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 只能包含以下之一
示例
<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> 的作用相同,但有以下限制
示例
<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 异常!