html2text
html2text 是一个将 HTML 转换为纯文本的 Rust crate。
它利用 Servo 项目 的 HTML 解析器 html5ever,使用 DOM 生成文本(可以选择包含一些功能的注释,如超链接)。
该项目旨在合理地呈现合理的 HTML,以适用于终端或其他需要将 HTML 转换为文本的场景(例如 HTML 电子邮件中的纯文本备用)。
通过启用功能(见下文),可以使用一些 CSS/颜色支持。
示例
像 from_read()
这样的简单函数返回格式化文本(包括多种格式,如纯文本)。
use html2text::from_read;
let html = b"
<ul>
<li>第一项</li>
<li>第二项</li>
<li>第三项</li>
</ul>";
assert_eq!(from_read(&html[..], 20),
"\
* 第一项
* 第二项
* 第三项
");
较低级别的 API 提供了更多控制。这会得到相同的结果(除了将错误作为 Result 返回而不是崩溃):
use html2text::config;
let html = b"
<ul>
<li>第一项</li>
<li>第二项</li>
<li>第三项</li>
</ul>";
assert_eq!(
config::plain()
.string_from_read(&html[..], 20)
.unwrap(),
"\
* 第一项
* 第二项
* 第三项
");
作为示例,包含了两个简单的演示程序:
html2text
最简单的示例使用 from_read
将标准输入的 HTML 转换为纯文本:
$ cargo run --example html2text < foo.html
[...]
html2term
提供了一个非常简单的示例,使用富文本接口(from_read_rich
)作为稍微交互式的控制台 HTML 查看器,名为 html2term
。
$ cargo run --example html2term foo.html
[...]
注意,此示例将 HTML 文件作为参数,以便从标准输入读取按键。
Cargo 功能
功能 | 描述 |
---|---|
css | 有限的 CSS 处理,向渲染树添加彩色节点。 |
html_trace | 添加详细的内部日志记录(不推荐) |
html_trace_bt | 为详细的内部日志记录添加回溯 |
CSS 支持
启用 css
功能后,可以使用一些简单的 CSS 处理。
样式规则来自:
- 如果调用了
Config::use_doc_css()
,则从文档中获取样式:<style>
元素- 内联
style
属性(<div style="...">
) <font color=...>
- 独立于
use_doc_css
,可以使用Config::add_css(...)
添加额外规则
实现了以下 CSS 功能:
- 基本选择器匹配(包括子元素和后代、类和元素类型)。
- CSS 颜色(
color
/background-color
)将向渲染树添加Coloured(...)
/BgColoured(...)
节点。 - 具有
display: none
的规则将导致匹配的元素从渲染树中移除。
预计 CSS 处理将在未来得到改进(欢迎提交 PR),但不会发展成为完整的浏览器样式系统,因为这对于终端输出来说过于复杂。
有两种方法可以利用颜色:
- 使用
from_read_rich()
或其变体。你可能会得到的注释之一是Colour(..)
。 - 使用
from_read_coloured()
。这类似于from_read()
,但你需要提供一个函数,根据相同的 RichAnnotations 添加终端颜色(或其他样式)。有关使用 termion 的示例,请参见 examples/html2text.rs。