6 个版本 (破坏性更新)
0.5.0 | 2023年9月24日 |
---|---|
0.4.0 | 2023年3月14日 |
0.3.0 | 2020年7月22日 |
0.2.0 | 2017年5月29日 |
0.1.1 | 2017年5月23日 |
#398 in 解析器实现
1,371 个月下载量
在 5 crates 中使用
44KB
1K SLoC
nom-bibtex
一个功能完整的 BibTeX 解析器,使用 nom 构建。
nom-bibtex 可以解析 BibTeX 格式描述 中列出的四种不同类型的条目
- 序言部分,允许在 BibTeX 中调用 LaTeX 命令。
- 字符串,定义键值格式的缩写。
- 注释。
- 参考文献条目。
示例
extern crate nom_bibtex;
use nom_bibtex::*;
const BIBFILE_DATA: &str = r#"@preamble{
"A bibtex preamble"
}
@Comment{
Here is a comment.
}
Another comment!
@string ( name= "Charles Vandevoorde")
@string (github = "https://github.com/charlesvdv")
@misc {my_citation_key,
author= name,
title = "nom-bibtex",
note = "Github: " # github
}
"#;
fn main() {
let bibtex = Bibtex::parse(BIBFILE_DATA).unwrap();
let preambles = bibtex.preambles();
assert_eq!(preambles[0], "A bibtex preamble");
let comments = bibtex.comments();
assert_eq!(comments[0], "Here is a comment.");
assert_eq!(comments[1], "Another comment!");
let variables = bibtex.variables();
assert_eq!(variables["name"], "Charles Vandevoorde");
assert_eq!(variables["github"], "https://github.com/charlesvdv");
let biblio = &bibtex.bibliographies()[0];
assert_eq!(biblio.entry_type(), "misc");
assert_eq!(biblio.citation_key(), "my_citation_key");
let bib_tags = biblio.tags();
assert_eq!(bib_tags["author"], "Charles Vandevoorde");
assert_eq!(bib_tags["title"], "nom-bibtex");
assert_eq!(bib_tags["note"], "Github: https://github.com/charlesvdv");
}
依赖项
~2.5MB
~59K SLoC