47 个版本 (12 个重大更新)

0.13.0-alpha.12024年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 文本处理

Download history 3824/week @ 2024-05-02 6298/week @ 2024-05-09 4196/week @ 2024-05-16 4269/week @ 2024-05-23 3464/week @ 2024-05-30 5428/week @ 2024-06-06 6210/week @ 2024-06-13 7797/week @ 2024-06-20 7437/week @ 2024-06-27 5744/week @ 2024-07-04 8778/week @ 2024-07-11 5732/week @ 2024-07-18 5447/week @ 2024-07-25 7911/week @ 2024-08-01 9488/week @ 2024-08-08 9425/week @ 2024-08-15

每月 32,951 次下载
用于 77 包(47 个直接使用)

MIT 许可证

270KB
7.5K SLoC

jugglerchris

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