3 个不稳定版本
0.1.1 | 2023 年 8 月 26 日 |
---|---|
0.1.0 | 2022 年 7 月 29 日 |
0.0.0 | 2021 年 1 月 13 日 |
642 在 文本处理 中排名
515 每月下载量
在 3 个 Crates 中使用 (通过 stylish)
66KB
718 代码行
另一个实现彩色文本的 Crate。
将 stylish
区分开来的一项主要设计目标是
将数据样式应用与输出样式的方式解耦。
这源于两个用例
-
一个库 Crate,它渲染数据格式的“诊断”表示形式(想想类似 JSON 的东西)。这个库正在用于基于 WASM 的 Web 应用程序和 CLI 应用程序;在这两种情况下,这些应用程序都可以通过向渲染的数据添加一些语法高亮来得到改进,但在一种情况下我们想输出 HTML,而在另一种情况下则需要 ANSI 颜色代码。
-
另一个(不同的) CLI 应用程序,该程序可以使用嵌入在输出消息中的不同数据类型的语义着色来使其更容易解析,并且可以选择关闭颜色。为了简化颜色切换,消息的渲染不需要持续检查当前是否启用了颜色。
除了这个主要的设计目标外,还有一个次要的设计目标
尽可能集成到
std::fmt
以利用现有知识。
我们已经在 std::fmt
中拥有标准化的格式化基础设施。开发者已经知道如何使用它,并且它非常容易使用。通过重用现有设计和仅在需要时扩展它,应该很容易开始使用 stylish
。
使用属性编写数据
可以使用两种主要机制来输出带属性的属性数据;要么将属性作为格式字符串的一部分应用,要么实现 stylish::Display
以便能够打印带有属性的一些类型。
在格式字符串中应用属性
stylish
的宏扩展了标准的 fmt
参数 以支持在 ()
中设置属性。这些必须在选择特性行之前作为参数的最后一部分。
assert_eq!(
stylish::html::format!("Hello {:(fg=red)}", "Ferris"),
"Hello <span style=color:red>Ferris</span>",
);
允许的属性
有两个参数化属性和三个非参数化属性
-
fg
指定一个Foreground
风格并接受一个小写Color
值 -
bg
指定一个Background
风格并接受一个小写Color
值 -
bold
、normal
和faint
不接受任何参数并指定一个Intensity
风格
语法更改
具体的语法更改是扩展 format_spec
如下
format_spec := [[fill]align][sign]['#']['0'][width]['.' precision][attributes]type
attributes := '(' [attribute [',' attribute]* [',']] ')'
attribute := key ['=' value]
key := identifier
value := identifier
为类型实现样式
stylish::Display
与 std::fmt::Display
类似,但具有支持设置样式属性的 Formatter
。它可以通过在格式字符串中使用特性选择器 s
来指定。有关如何编写数据时以编程方式设置样式的更多详细信息,请参阅 Formatter
文档。
struct Name(&'static str);
impl stylish::Display for Name {
fn fmt(&self, f: &mut stylish::Formatter<'_>) -> stylish::Result {
let color = match self.0 {
"Ferris" => stylish::Color::Red,
"Gorris" => stylish::Color::Cyan,
_ => stylish::Color::Default,
};
f.with(stylish::Foreground(color)).write_str(self.0)
}
}
assert_eq!(
stylish::html::format!("Hello {:s} and {:s}", Name("Ferris"), Name("Gorris")),
"Hello <span style=color:red>Ferris</span> and <span style=color:cyan>Gorris</span>",
);
功能
功能 | 激活 | 效果 |
---|---|---|
std |
默认开启 | 启用 io 模块(以及其他模块中的 io 辅助工具) |
alloc |
由 std 暗示 |
启用 String 和使用它的各种项目 |
宏 |
默认开启 | 在整个已启用的模块中启用宏 |
ansi |
默认关闭 | 启用 ansi 模块和使用的项目 |
html |
默认关闭 | 启用 html 模块和使用的项目 |
plain |
默认关闭 | 启用 plain 模块和使用的项目 |
Rust 版本策略
该软件包仅支持 Rust 的当前稳定版本,补丁版本可以随时使用新功能。
许可
根据以下之一获得许可
- Apache License, Version 2.0 (
LICENSE-APACHE
或 https://apache.ac.cn/licenses/LICENSE-2.0) - 麻省理工学院许可证(
LICENSE-MIT
或 http://opensource.org/licenses/MIT)
根据您的要求。
贡献
除非您明确说明,否则您提交给作品包含在内的任何贡献都将按照上述方式双重许可,不附加任何额外的条款或条件。
依赖项
约85–460KB