2 个不稳定版本

0.1.0 2022年7月29日
0.0.0 2021年1月3日

命令行界面 中排名第 228

Download history 81/week @ 2024-04-20 73/week @ 2024-04-27 49/week @ 2024-05-04 69/week @ 2024-05-11 61/week @ 2024-05-18 103/week @ 2024-05-25 109/week @ 2024-06-01 94/week @ 2024-06-08 109/week @ 2024-06-15 130/week @ 2024-06-22 68/week @ 2024-06-29 84/week @ 2024-07-06 119/week @ 2024-07-13 87/week @ 2024-07-20 176/week @ 2024-07-27 114/week @ 2024-08-03

每月下载量 511
7 个crate中 使用

MIT/Apache

77KB
727 代码行

version-badge license-badge rust-version-badge

又一个实现着色文本的crate。

与现有crate相比,stylish 有一个主要的设计目标

将数据的着色与应用着色输出的方式解耦。

这源于两个用例

  1. 一个库crate,它渲染数据格式的“诊断”表示(例如类似JSON的东西)。这个库正在WASM基于的Web应用程序和CLI应用程序中使用;在两种情况下,这些应用程序通过添加一些语法高亮来渲染数据都可以得到改善,但在一种情况下我们想输出HTML,而另一种情况则需要ANSI颜色代码。

  2. 另一个(不同的)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

  • boldnormalfaint 不接受参数,并指定一个 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 以及使用它的各种项
macros 默认启用 在其他启用的模块中启用宏
ansi 默认禁用 启用 ansi 模块及其使用的项
html 默认禁用 启用 html 模块及其使用的项
plain 默认禁用 启用 plain 模块及其使用的项

Rust 版本策略

此 crate 仅支持 Rust 的当前稳定版本,补丁版本可以随时使用新功能。

许可证

许可协议为以下之一

任选其一。

贡献

除非您明确声明,否则您提交给本作品包含的任何贡献将被双重许可,如上所述,没有任何额外条款或条件。

依赖项

~85–460KB