1 个不稳定版本

0.1.0 2022年7月29日

内存管理 中排名 #381

Download history 130/week @ 2024-04-01 73/week @ 2024-04-08 117/week @ 2024-04-15 75/week @ 2024-04-22 81/week @ 2024-04-29 56/week @ 2024-05-06 84/week @ 2024-05-13 62/week @ 2024-05-20 117/week @ 2024-05-27 109/week @ 2024-06-03 114/week @ 2024-06-10 133/week @ 2024-06-17 175/week @ 2024-06-24 78/week @ 2024-07-01 101/week @ 2024-07-08 128/week @ 2024-07-15

每月下载量 504
9 个软件包中使用(直接使用2个)

MIT/Apache

16KB
163

version-badge license-badge rust-version-badge

另一个实现彩色文本的软件包。

stylish 与现有软件包区分开来的一个主要设计目标是

将样式应用于数据应与输出该样式的具体方式解耦。

这源于两个用例

  1. 一个库软件包,它将数据格式的 "诊断" 表示形式渲染出来(想想类似 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以及使用它的各种项
默认启用 在整个启用的模块中启用宏
ansi 默认禁用 启用ansi模块及其使用的项
html 默认禁用 启用html模块及其使用的项
plain 默认禁用 启用plain模块及其使用的项

Rust 版本策略

这个crate只支持Rust的当前稳定版本,补丁版本可能会在任何时候使用新功能。

许可证

根据您的选择,受以下其中之一许可协议的许可

贡献

除非您明确说明,否则您有意提交以包含在作品中的任何贡献都将按照上述方式双授权,不附加任何其他条款或条件。

无运行时依赖