1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
//! A feature complete *BibTeX* parser using [nom](https://github.com/Geal/nom).
//!
//! **nom-bibtex** can parse the four differents types of entries listed in the
//! [BibTeX format description](http://www.bibtex.org/Format/):
//!
//! - 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" # " another test"
//! }
//!
//! @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 another test");
//!
//! 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");
//! }
//! ```
//!
extern crate nom;
extern crate quick_error;
pub mod error;
pub mod model;
mod parser;
pub use model::{Bibliography, Bibtex};
pub use parser::Entry;