6 releases (breaking)

0.5.0 Sep 24, 2023
0.4.0 Mar 14, 2023
0.3.0 Jul 22, 2020
0.2.0 May 29, 2017
0.1.1 May 23, 2017

#781 in Parser implementations

Download history 234/week @ 2024-07-22 282/week @ 2024-07-29 291/week @ 2024-08-05 387/week @ 2024-08-12 226/week @ 2024-08-19 236/week @ 2024-08-26 360/week @ 2024-09-02 317/week @ 2024-09-09 398/week @ 2024-09-16 484/week @ 2024-09-23 441/week @ 2024-09-30 400/week @ 2024-10-07 339/week @ 2024-10-14 217/week @ 2024-10-21 247/week @ 2024-10-28 327/week @ 2024-11-04

1,166 downloads per month
Used in 5 crates

MIT license

44KB
1K SLoC

nom-bibtex

Rust Docs Badge crates.io

A feature complete BibTeX parser using nom.

nom-bibtex can parse the four differents types of entries listed in the BibTeX format description:

  • Preambles which allows to call LaTeX command inside your BibTeX.
  • Strings which defines abbreviations in a key-value format.
  • Comments.
  • Bibliography entries.

Example

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");
}

Dependencies

~2.5MB
~59K SLoC