4 个版本
0.1.3 | 2024年2月12日 |
---|---|
0.1.2 | 2023年6月19日 |
0.1.1 | 2023年4月20日 |
0.1.0 | 2023年3月20日 |
#1655 in 解析器实现
每月605次下载
在 2 个 crate 中使用(通过 ini-merge)
29KB
697 行
快速格式保留(往返)INI 解析器
[ crates.io ] [ lib.rs ] [ docs.rs ]
ini-roundtrip
是一个快速格式保留(往返)流式 INI 解析器,旨在处理任意 INI 文件。
代码灵感来源于且主要基于 ini_core。
MSRV
当前最低支持的 Rust 版本为 1.70.0。这可能需要更新。MSRV 提升不被视为 semver 破坏性变更。
lib.rs
:
格式保留 Ini 流式解析器
具有以下功能的简单 INI 解析器
功能
- 格式保留(您可以将其写出来并得到相同的结果)
- 快速!
- 流式处理
no_std
支持
注意事项
- 在 [Item] 的 Display 特质上 不 保留格式,如果您需要这样做,请确保使用
raw
属性来提取原始行。 - 不保存换行符。由调用者负责跟踪使用的换行符类型。在加载时支持混合换行符(例如 CR、CRLF 和 LF 的混合),但在保存时不支持。
示例
use ini_roundtrip as ini;
let document = "\
[SECTION]
;this is a comment
Key = Value ";
let elements = [
ini::Item::SectionEnd,
ini::Item::Section{name: "SECTION", raw: "[SECTION]"},
ini::Item::Comment{raw: ";this is a comment"},
ini::Item::Property{key: "Key", val: Some("Value"), raw: "Key = Value "},
ini::Item::SectionEnd,
];
for (index, item) in ini::Parser::new(document).enumerate() {
assert_eq!(item, elements[index]);
}
在新的部分之前和文档末尾返回 SectionEnd
伪元素。这有助于在属性解析完成后处理部分。
解析器非常基于行,无论发生什么情况都会继续,并以项目返回无意义的内容。
use ini_roundtrip as ini;
let document = "\
[SECTION
nonsense";
let elements = [
ini::Item::SectionEnd,
ini::Item::Error("[SECTION"),
ini::Item::Property{key: "nonsense", val: None, raw: "nonsense"},
ini::Item::SectionEnd,
];
for (index, item) in ini::Parser::new(document).enumerate() {
assert_eq!(item, elements[index]);
}
以 [
开头的行,如果包含没有闭合的 ]
或者闭合的 ]
后面没有换行符,则返回为 Item::Error
。缺少 =
的行返回为 Item::Property
,其值为 None
。更多信息请见下文。
格式
INI 是一个定义不严格的格式,该解析器尽可能少做假设,但它确实做出了决定。
- 换行符可以是
"\r\n"
、"\n"
或"\r"
。它们可以在单个文档中混合使用,但不建议这样做。 - 节标题格式为
"[" section "]" 换行符
。section
可以是任何内容,但不能包含换行符。 - 属性格式为
key "=" value 换行符
。key
和value
可以是任何内容,但不能包含换行符。 - 注释是以下划线
;
或#
开头的原始行。 - 空白只是
换行符
。
填充空白总是被裁剪,但原始行始终被存储。
不对输入进行进一步处理,例如,如果需要转义序列,它们必须由调用者处理。