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 文本处理
5,080,785 个月下载量
在 17,057 个 crates (357 直接) 中使用
165KB
2.5K SLoC
Textwrap
Textwrap 是一个用于包装和缩进文本的库。它通常用于命令行程序,以在终端中格式化动态输出,使其看起来更好。您还可以使用 Textwrap 来包装设置为等宽字体的文本——例如用于生成 PDF 文件的文本,或者在 使用 WebAssembly 绘制的 HTML5 画布。
使用方法
要使用 textwrap crate,将以下内容添加到您的 Cargo.toml
文件中
[dependencies]
textwrap = "0.16"
默认情况下,这将启用支持 Unicode 字符串的单词包装。可以通过 Cargo 功能启用额外功能,如果需要,可以禁用 Unicode 支持。这样可以精简库,因此您只需为实际使用的功能付费。
请参阅 crate 文档中的 Cargo Features,以获取可用的功能列表以及它们对二进制文件大小的影响。
文档
入门指南
使用 wrap
和 fill
函数可以轻松地进行单词包装
#[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