3个不稳定版本
0.1.1 | 2022年9月13日 |
---|---|
0.1.0 | 2022年7月29日 |
0.0.0 | 2021年1月13日 |
#491 在 内存管理
每月564次下载
用于 8 个crate(4个直接)
65KB
691 行
又一个实现彩色文本的crate。
以下是一个主要的设计目标,将stylish
与现有的crate区分开来
将样式应用于数据应该与如何输出该样式解耦。
这源于两个用例
-
一个库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>",
);
允许的属性
有两个参数化属性和3个非参数化属性
-
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 许可证 2.0(
LICENSE-APACHE
或 https://apache.ac.cn/licenses/LICENSE-2.0) - MIT 许可证(
LICENSE-MIT
或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确表示,否则您有意提交以包含在作品中的任何贡献将双重授权,如上所述,没有任何附加条款或条件。
依赖项
~70–455KB