4 releases (2 breaking)

0.3.0 Jul 22, 2020
0.2.0 May 29, 2017
0.1.1 May 23, 2017
0.1.0 May 23, 2017

#425 in Parser implementations

Download history 147/week @ 2021-08-11 259/week @ 2021-08-18 108/week @ 2021-08-25 201/week @ 2021-09-01 193/week @ 2021-09-08 53/week @ 2021-09-15 97/week @ 2021-09-22 98/week @ 2021-09-29 85/week @ 2021-10-06 144/week @ 2021-10-13 132/week @ 2021-10-20 130/week @ 2021-10-27 179/week @ 2021-11-03 97/week @ 2021-11-10 213/week @ 2021-11-17 125/week @ 2021-11-24

627 downloads per month
Used in 2 crates

MIT license

42KB
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 = "@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[0], ("name".into(), "Charles Vandevoorde".into()));
    assert_eq!(variables[1], ("github".into(), "https://github.com/charlesvdv".into()));

    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[0], ("author".into(), "Charles Vandevoorde".into()));
    assert_eq!(bib_tags[1], ("title".into(), "nom-bibtex".into()));
    assert_eq!(bib_tags[2], ("note".into(), "Github: https://github.com/charlesvdv".into()));
}

Dependencies

~1–1.6MB
~34K SLoC