#ansi #stylish #ansi-codes #styling #output #data #escaping

no-std stylish-ansi

stylish 使用 ANSI 转义码编写样式的辅助工具

3 个不稳定版本

0.1.1 2023 年 8 月 26 日
0.1.0 2022 年 7 月 29 日
0.0.0 2021 年 1 月 13 日

642文本处理 中排名

Download history 70/week @ 2024-04-23 70/week @ 2024-04-30 55/week @ 2024-05-07 64/week @ 2024-05-14 67/week @ 2024-05-21 124/week @ 2024-05-28 106/week @ 2024-06-04 114/week @ 2024-06-11 142/week @ 2024-06-18 92/week @ 2024-06-25 71/week @ 2024-07-02 102/week @ 2024-07-09 111/week @ 2024-07-16 90/week @ 2024-07-23 197/week @ 2024-07-30 102/week @ 2024-08-06

515 每月下载量
3 个 Crates 中使用 (通过 stylish)

MIT/Apache

66KB
718 代码行

version-badge license-badge rust-version-badge

另一个实现彩色文本的 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::Displaystd::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 的当前稳定版本,补丁版本可以随时使用新功能。

许可

根据以下之一获得许可

根据您的要求。

贡献

除非您明确说明,否则您提交给作品包含在内的任何贡献都将按照上述方式双重许可,不附加任何额外的条款或条件。

依赖项

约85–460KB