47 个版本 (12 个重大更新)
0.13.0-alpha.1 | 2024年6月1日 |
---|---|
0.12.5 | 2024年5月5日 |
0.12.4 | 2024年3月3日 |
0.9.4 | 2023年12月31日 |
0.1.3 | 2016年12月31日 |
#35 in 文本处理
每月 32,951 次下载
用于 77 个 包(47 个直接使用)
270KB
7.5K SLoC
html2text
html2text 是一个 Rust 包,用于将 HTML 转换为纯文本。
它使用 Servo 项目 的 HTML 解析器 html5ever,通过 DOM 生成文本(可选包括某些功能(如超链接)的注释)。
项目旨在在终端或其他需要将 HTML 转换为文本的地方(例如 HTML 邮件的 text/plain 回退)合理地渲染合理的 HTML。
具有功能(见下文),提供有限的 CSS/颜色支持。
示例
简单的函数,如 from_read()
返回格式化的文本(包括纯文本在内的各种格式)。
use html2text::from_read;
let html = b"
<ul>
<li>Item one</li>
<li>Item two</li>
<li>Item three</li>
</ul>";
assert_eq!(from_read(&html[..], 20),
"\
* Item one
* Item two
* Item three
");
一个更底层的 API 提供了更多的控制。这会产生相同的结果(除了返回错误而不是引发恐慌)
use html2text::config;
let html = b"
<ul>
<li>Item one</li>
<li>Item two</li>
<li>Item three</li>
</ul>";
assert_eq!(
config::plain()
.string_from_read(&html[..], 20)
.unwrap(),
"\
* Item one
* Item two
* Item three
");
包含一些简单的示例程序作为示例
html2text
最简单的示例使用 from_read
将 stdin 上的 HTML 转换为纯文本
$ cargo run --example html2text < foo.html
[...]
html2term
提供了一个使用丰富接口(from_read_rich
)的简单交互式控制台 HTML 查看器的示例 html2term
。
$ cargo run --example html2term foo.html
[...]
请注意,此示例将 HTML 文件作为参数,以便可以从 stdin 读取键。
Cargo 功能
功能 | 描述 |
---|---|
css | 有限地处理 CSS,将彩色节点添加到渲染树中。 |
html_trace | 添加详细内部日志(不推荐) |
html_trace_bt | 将堆栈跟踪添加到详细内部日志中 |
CSS 支持
当启用 css
功能时,提供一些简单的 CSS 处理。
样式规则来自
- 如果调用
Config::use_doc_css()
,则使用文档中的样式<style>
元素- 内联
style
属性 (<div style="...">
) <字体 颜色=...>
- 无论是否使用
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 添加终端颜色(或其它样式)。请参见 examples/html2text.rs 中的使用 termion 的示例。
依赖项
~2.5–9MB
~76K SLoC