# Citationberg [![Crates.io](https://img.shields.io/crates/v/citationberg.svg)](https://crates.io/crates/citationberg) [![Documentation](https://docs.rs/citationberg/badge.svg)](https://docs.rs/citationberg) [![Build status](https://github.com/typst/citationberg/workflows/Continuous%20integration/badge.svg)](https://github.com/typst/citationberg/actions)

Dinkelberg meme: Dad from the TV show The Fairly Odd Parents exclaiming Citationberg

A library for parsing CSL styles. ```toml [dependencies] citationberg = "0.4" ``` Citationberg deserializes CSL styles from XML into Rust structs. It supports [CSL 1.0.2](https://docs.citationstyles.org/en/stable/specification.html). This crate is not a CSL processor, so you are free to choose whatever data model and data types you need for your bibliographic needs. If you need to render citations, you can use [Hayagriva](https://github.com/typst/hayagriva) which uses this crate under the hood. Parse your style like this: ```rust use std::fs; use citationberg::Style; let string = fs::read_to_string("tests/independent/ieee.csl")?; let style = citationberg::Style::from_xml(&string)?; let Style::Independent(independent) = style else { panic!("IEEE is an independent style"); }; assert_eq!(independent.info.title.value, "IEEE"); ``` Be sure to check out the CSL [styles](https://github.com/citation-style-language/styles) and [locales](https://github.com/citation-style-language/locales) repositories into sibling folders of `citationberg` if you want to run the tests. ## Safety This crate forbids unsafe code. ## License This crate is dual-licensed under the MIT and Apache 2.0 licenses.