# bibparser
A Rust crate for parsing BibTeχ and BibLaTeχ files.
As opposed to the `biblatex` crate, this crate does not try to interpret the content of fields.
This crate resulted from the usecase that `biblatex` threw an error when math inline mode was not terminated before text was cut off.
## Who should use it?
Anyone, how wants to retrieve data from a `.bib` file.
## How does one use it?
Add this to your `Cargo.toml`:
```toml
[dependencies]
bibparser = "0.4.0"
```
Instantiate the parser and iterate over the items:
```rust
use bibparser::Parser;
//let mut p = Parser::from_file("source.bib")?;
let mut p = Parser::from_str(r#"@book{tolkien1937, author = {J. R. R. Tolkien}}"#)?;
for result in p.iter() {
let entry = result?;
println!("type = {}", entry.kind);
println!("id = {}", entry.id);
for (name, data) in entry.fields.iter() {
println!("\t{}\t= {}", name, data);
}
}
```
## How does one run it?
This library comes with one example:
```bash
$ cargo run --example cli -- --input refs.bib
```
You can also enable serde-json support in order to print data as JSON:
```bash
$ cargo run --features serde,serde_json --example cli -- --input refs.bib --json
```
In this example, the library would read file `refs.bib` and then only print the entry with ID `tolkien1937` to stdout.
## Where is the source code?
On [github](https://github.com/typho/bibparser).
## What is the content's license?
[MIT License](LICENSE.txt)
## Changelog
* **2022-07-16 version 0.4.0:** skip @preamble, proper escape character handling, more tests, bugfix lexing error propagation
* **2022-01-30 version 0.3.2:** bugfix cli example & add JSON support
* **2022-01-30 version 0.3.1:** fix documentation & README
* **2022-01-30 version 0.3.0:** initial release
## Where can I ask you to fix a bug?
On [github](https://github.com/typho/bibparser/issues).
## What are known bugs / limitations?
- `.bib` are strongly associated with Teχ which is a programming language, not a markup language. As such only the plain Teχ engine would be capable of understanding the content (esp. the field's `data` content). This library explicitly takes the approach to assume the content to be a markup language, which hopefully serves 99% of all usecases.
- The markup language parsed by this library is not formalized.
- Compability to BibTeχ or biblatex was not comprehensively tested.