mod csl;
mod custom;
mod hayagriva_style;
pub use csl::CslBackend;
pub use custom::CustomBackend;
use crate::models::BibItem;
use mdbook_preprocessor::errors::Result as MdResult;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BackendMode {
Custom,
Csl,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum CitationVariant {
#[default]
Standard,
AuthorInText,
Parenthetical,
SuppressAuthor,
}
impl CitationVariant {
pub fn as_template_str(&self) -> &'static str {
match self {
CitationVariant::Standard => "standard",
CitationVariant::AuthorInText => "author_in_text",
CitationVariant::Parenthetical => "parenthetical",
CitationVariant::SuppressAuthor => "suppress_author",
}
}
}
#[derive(Debug, Clone)]
pub struct CitationContext {
pub bib_page_path: String,
pub chapter_path: String,
pub variant: CitationVariant,
}
pub trait BibliographyBackend {
fn format_citation(&self, item: &BibItem, context: &CitationContext) -> MdResult<String>;
fn format_reference(&self, item: &BibItem) -> MdResult<String>;
fn name(&self) -> &str;
}