3个不稳定版本

0.1.1 2022年9月13日
0.1.0 2022年7月29日
0.0.0 2021年1月13日

#491内存管理

Download history 95/week @ 2024-03-14 111/week @ 2024-03-21 142/week @ 2024-03-28 152/week @ 2024-04-04 125/week @ 2024-04-11 133/week @ 2024-04-18 110/week @ 2024-04-25 104/week @ 2024-05-02 99/week @ 2024-05-09 110/week @ 2024-05-16 111/week @ 2024-05-23 144/week @ 2024-05-30 116/week @ 2024-06-06 152/week @ 2024-06-13 197/week @ 2024-06-20 76/week @ 2024-06-27

每月564次下载
用于 8 个crate(4个直接)

MIT/Apache

65KB
691

version-badge license-badge rust-version-badge

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

以下是一个主要的设计目标,将stylish与现有的crate区分开来

将样式应用于数据应该与如何输出该样式解耦。

这源于两个用例

  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>",
);

允许的属性

有两个参数化属性和3个非参数化属性

  • 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 版本策略

这个软件包只支持 Rust 的当前稳定版本,补丁版本可以随时使用新特性。

许可证

根据您的选择,许可方式为以下之一

贡献

除非您明确表示,否则您有意提交以包含在作品中的任何贡献将双重授权,如上所述,没有任何附加条款或条件。

依赖项

~70–455KB