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;