#输出格式 #样式 #Web应用 #stylish #应用程序 #文本格式化 #数据

无需std stylish-html

stylish 用于将样式作为HTML元素编写的辅助函数

3个不稳定版本

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

509文本处理 中排名

Download history 60/week @ 2024-03-16 111/week @ 2024-03-23 105/week @ 2024-03-30 76/week @ 2024-04-06 95/week @ 2024-04-13 70/week @ 2024-04-20 66/week @ 2024-04-27 43/week @ 2024-05-04 55/week @ 2024-05-11 53/week @ 2024-05-18 95/week @ 2024-05-25 107/week @ 2024-06-01 94/week @ 2024-06-08 101/week @ 2024-06-15 120/week @ 2024-06-22 22/week @ 2024-06-29

每月下载量 356次
2 个Crate中使用(通过 stylish

MIT/Apache

64KB
664

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

允许的属性

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

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

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

许可证

根据以下任一许可授权

由您选择。

贡献

除非您明确说明,否则您有意提交以包含在您的工作中的任何贡献,将按上述方式双重许可,没有任何额外条款或条件。

依赖项

~94–470KB