#bibtex #nom #latex #parser

nom-bibtex

BibTeX 解析器,使用 nom 构建

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 解析器实现

Download history 261/week @ 2024-03-13 214/week @ 2024-03-20 189/week @ 2024-03-27 261/week @ 2024-04-03 157/week @ 2024-04-10 189/week @ 2024-04-17 292/week @ 2024-04-24 251/week @ 2024-05-01 227/week @ 2024-05-08 289/week @ 2024-05-15 320/week @ 2024-05-22 264/week @ 2024-05-29 179/week @ 2024-06-05 307/week @ 2024-06-12 589/week @ 2024-06-19 261/week @ 2024-06-26

1,371 个月下载量
5 crates 中使用

MIT 许可证

44KB
1K SLoC

nom-bibtex

Rust Docs Badge crates.io

一个功能完整的 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