10个版本 (5个重大更改)
0.6.0 | 2023年10月2日 |
---|---|
0.5.0 | 2022年9月23日 |
0.4.1 | 2021年1月4日 |
0.4.0 | 2020年12月2日 |
0.1.0 | 2018年6月1日 |
#516 in 算法
每月753次下载
66KB
1K SLoC
HTML2Pango
一个小的Rust库,用于解析简单的HTML标签并将其转换为pango。此库还将原始链接转换为HTTP链接,并清理消息以避免不希望出现的标签。
库的当前状态为Alpha,因为它是将HTML子集映射到pango标记的验证概念。
此代码最初在Fractal项目中,用于解析包含链接的matrix.org消息,并将其绘制在GtkLabel中。我们决定将其迁移到此仓库,以便能够扩展并在其他项目(如Hammond)中使用。
lib.rs
:
用于清理和将HTML字符串转换为Pango可以渲染的库。
此库包含多个函数,用于(预)处理文本,以便转换为Pango标记。使用什么以及何时使用取决于输入类型和期望的结果。这可以是从简单的转义到转换和清理。请参阅以下示例,了解根据输入类型可用的功能。
以下函数将字符串转换为字符串。如果您的输入可以包含多个块元素,例如标题、列表、代码或引用块,请参阅block
模块,以将输入字符串转换为这些块列表。
Markdown/body HTML
要处理更多的HTML,请使用markup_html
函数。此函数支持HTML正文标记,例如由Markdown到HTML转换产生的HTML。它尝试将输入转换为Pango Markup,以便Pango的渲染与浏览器相似。这包括为段落和列表添加换行符、转换字体样式等。
let m = markup_html("<body>this is some <font color=\"#ff0000\">red text</font>!</body>").unwrap();
assert_eq!(m, "this is some <span foreground=\"#ff0000\">red text</span>!");
let m = markup_html("<body>a nice <a href=\"https://gnome.org\">link</a>").unwrap();
assert_eq!(m, "a nice <a href=\"https://gnome.org\">link</a>");
let m = markup_html("<body>some items: <ul><li>first</li><li>second</li></ul><body").unwrap();
assert_eq!(m, "some items: \n • first\n • second\n");
转义
要仅转义任何HTML保留字符,请使用html_escape
let s = html_escape("this is a <tag> & this is \"quoted text\"");
assert_eq!(s, "this is a <tag> & this is "quoted text"");
矩阵自定义HTML
对于Matrix,其规范定义了一种自定义HTML格式,该格式指定了可以使用的标签和属性。使用matrix_html_to_markup
来处理这种自定义HTML输入,以确保在转换之前输入已得到清理。
此函数仍在开发中!
简单HTML
简单HTML是指仅包含一些格式化标签的纯文本,例如<strong>
、<i>
、<code>
等。有关支持的完整标签列表及其替换方式,请参阅markup_from_raw
。
经过清理
如果您使用markup
,则支持的标签将被替换(如有必要),无效的标签将被删除,HTML保留字符将被转义。
let m = markup("<p><strong>this <i>is &sanitized<f;><unsupported/></i></strong></p>");
assert_eq!(m, "<b>this <i>is &sanitized</i></b>");
其他不受支持但有效的标签将被转义。
let m = markup("this is <span>a tag</span>");
assert_eq!(m, "this is <span>a tag</span>");
URI将被替换为链接。
let m = markup("go to: https://gnome.org");
assert_eq!(m, "go to: <a href=\"https://gnome.org\">https://gnome.org</a>");
未经过清理
如果您已经清理了输入,请使用markup_from_raw
let m = markup_from_raw("<p>this is <unsupported>already sanitized</unsupported></p>");
assert_eq!(m, "this is <unsupported>already sanitized</unsupported>");
链接
要仅将URI替换为链接,请使用markup_links
let m = markup_links("go to: https://gnome.org");
assert_eq!(m, "go to: <a href=\"https://gnome.org\">https://gnome.org</a>");
依赖项
~5–12MB
~146K SLoC