#wrap #formatting #hyphenation #typesetting #text-formatting #unicode-text #string-formatting

textwrap

字符串包装、缩进和取消缩进的库。还支持可选的 Unicode 和表情符号以及机器分词。

24 个版本 (15 个重大更新)

0.16.1 2024年2月17日
0.16.0 2022年10月23日
0.15.2 2022年10月24日
0.15.0 2022年2月27日
0.2.0 2016年12月29日

#2 in 文本处理

Download history 1122164/week @ 2024-04-29 1106408/week @ 2024-05-06 1204482/week @ 2024-05-13 1237955/week @ 2024-05-20 1226735/week @ 2024-05-27 1346665/week @ 2024-06-03 1344989/week @ 2024-06-10 1289137/week @ 2024-06-17 1327203/week @ 2024-06-24 1195962/week @ 2024-07-01 1291006/week @ 2024-07-08 1232739/week @ 2024-07-15 1280416/week @ 2024-07-22 1259239/week @ 2024-07-29 1253798/week @ 2024-08-05 1229971/week @ 2024-08-12

5,080,785 个月下载量
17,057 个 crates (357 直接) 中使用

MIT 许可证

165KB
2.5K SLoC

Textwrap

Textwrap 是一个用于包装和缩进文本的库。它通常用于命令行程序,以在终端中格式化动态输出,使其看起来更好。您还可以使用 Textwrap 来包装设置为等宽字体的文本——例如用于生成 PDF 文件的文本,或者在 使用 WebAssembly 绘制的 HTML5 画布

使用方法

要使用 textwrap crate,将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
textwrap = "0.16"

默认情况下,这将启用支持 Unicode 字符串的单词包装。可以通过 Cargo 功能启用额外功能,如果需要,可以禁用 Unicode 支持。这样可以精简库,因此您只需为实际使用的功能付费。

请参阅 crate 文档中的 Cargo Features,以获取可用的功能列表以及它们对二进制文件大小的影响。

文档

API 文档

入门指南

使用 wrapfill 函数可以轻松地进行单词包装

#[cfg(feature = "smawk")] {
let text = "textwrap: an efficient and powerful library for wrapping text.";
assert_eq!(
    textwrap::wrap(text, 28),
    vec![
        "textwrap: an efficient",
        "and powerful library for",
        "wrapping text.",
    ]
);
}

细心的读者会注意到第一行宽 22 列。那么为什么“和”这个词被放在第二行,而第一行还有空间呢?

解释是 textwrap 并不仅仅逐行包装文本。相反,它使用一种最优拟合算法,可以向前查看并选择可以最小化行尾留下空隙的行中断。这是通过 smawk Cargo 功能控制的,这就是为什么示例被包装在 cfg-block 中。

没有前瞻,第一行会更长,文本会看起来像这样

#[cfg(not(feature = "smawk"))] {
let text = "textwrap: an efficient and powerful library for wrapping text.";
assert_eq!(
    textwrap::wrap(text, 28),
    vec![
        "textwrap: an efficient and",
        "powerful library for",
        "wrapping text.",
    ]
);
}

第二行现在更短,文本也更粗糙。可以通过 选项::wrap_algorithm 配置换行方式。

如果您启用了 hyphenation Cargo 功能,您将获得通过高质量的 TeX 拼写模式支持约 70 种语言的自动拼写功能。

您的程序必须加载拼写模式,并配置 选项::word_splitter 以使用它。

#[cfg(feature = "hyphenation")] {
use hyphenation::{Language, Load, Standard};
use textwrap::{fill, Options, WordSplitter};

let dictionary = Standard::from_embedded(Language::EnglishUS).unwrap();
let options = textwrap::Options::new(28).word_splitter(WordSplitter::Hyphenation(dictionary));
let text = "textwrap: an efficient and powerful library for wrapping text.";

assert_eq!(
    textwrap::wrap(text, &options),
    vec![
        "textwrap: an efficient and",
        "powerful library for wrap-",
        "ping text."
    ]
);
}

当您启用 hyphenation 功能时,US-English 拼写模式将被嵌入。它们受一个 宽松许可协议 的约束,并在您的二进制文件中占用约 88 KB。如果您需要其他语言的拼写功能,您需要下载一个 预编译的 .bincode 文件 并自行加载。请参阅 hyphenation 文档 了解详细信息。

编译时字符串换行

如果您的字符串在编译时已知,请查看来自 textwrap-macros 的过程宏。

示例

该库包含一个 示例程序集合,展示了各种功能。

如果您想立即看到 Textwrap 的实际效果,请查看 examples/wasm/,它展示了如何换行无衬线、衬线和无空格文本。它使用 WebAssembly,并自动部署到 https://mgeisler.github.io/textwrap/

对于命令行示例,我们邀请您克隆存储库并亲自尝试!特别值得一提的是 examples/interactive.rs。这是一个演示程序,展示了大多数可用功能:您可以输入文本并交互式地调整其换行宽度。您还可以调整 Options,以查看不同 WordSplitter 和换行算法的效果。

使用以下命令运行演示

$ cargo run --example interactive

该演示需要一个 Linux 终端才能运行。

发布历史

请参阅 CHANGELOG 文件 了解每次发布所做的更改详情。

许可协议

Textwrap 可以根据 MIT 许可协议 进行分发。贡献将在同一许可协议下接受。

依赖项

~0.4–14MB
~98K SLoC