#![deny(clippy::all)]
#![forbid(unsafe_code)]
#![warn(
clippy::all,
clippy::pedantic,
clippy::nursery,
clippy::cargo,
missing_docs,
missing_debug_implementations
)]
#![allow(
clippy::module_name_repetitions,
clippy::missing_errors_doc,
clippy::missing_panics_doc,
clippy::multiple_crate_versions
)]
pub mod corpus;
pub mod document;
pub mod error;
pub mod model;
pub mod parser;
#[cfg(feature = "python")]
mod python;
pub mod source;
#[cfg(feature = "latex_to_unicode")]
pub mod latex_unicode;
mod library;
mod writer;
#[cfg(all(
feature = "python-extension",
not(all(target_os = "linux", target_arch = "aarch64"))
))]
#[global_allocator]
static PYTHON_EXTENSION_ALLOCATOR: mimalloc::MiMalloc = mimalloc::MiMalloc;
pub use corpus::{
CorpusEvent, CorpusSource, DuplicateKeyGroup, DuplicateKeyOccurrence, ParsedCorpus,
};
pub use document::{
Diagnostic, DiagnosticCode, DiagnosticSeverity, DiagnosticTarget, EntryDelimiter,
ExpansionOptions, ParseEvent, ParseFlow, ParseStatus, ParseSummary, ParsedBlock, ParsedComment,
ParsedDocument, ParsedEntry, ParsedEntryStatus, ParsedFailedBlock, ParsedField, ParsedPreamble,
ParsedSource, ParsedString, ParsedValue, StreamingSummary, UnresolvedVariablePolicy,
ValueDelimiter,
};
pub use error::{Error, Result, SourceId, SourceSpan};
pub use library::{
Block, Comment, FailedBlock, FieldNameCase, FieldNormalizeOptions, IssueSummary, Library,
LibraryBuilder, LibraryStats, MonthStyle, Parser, Preamble, SortOptions, StringDefinition,
ValidationReport,
};
pub use model::{
canonical_biblatex_field_alias, classify_resource_field, normalize_biblatex_field_name,
normalize_doi, normalize_field_name_ascii, parse_date_parts, parse_names, DateParseError,
DateParts, Entry, EntryType, Field, PersonName, ResourceField, ResourceKind, ValidationError,
ValidationLevel, ValidationSeverity, Value,
};
pub use parser::{parse_bibtex, ParsedItem};
pub use source::SourceMap;
pub use writer::{
document_to_string, selected_entries_to_string, to_file, to_string, RawWriteMode,
TrailingComma, Writer, WriterConfig,
};
pub mod prelude {
pub use crate::{
canonical_biblatex_field_alias, classify_resource_field, document_to_string,
normalize_biblatex_field_name, normalize_doi, normalize_field_name_ascii, parse_bibtex,
parse_date_parts, parse_names, selected_entries_to_string, Block, Comment, CorpusEvent,
CorpusSource, DateParseError, DateParts, Diagnostic, DiagnosticCode, DiagnosticSeverity,
DiagnosticTarget, DuplicateKeyGroup, DuplicateKeyOccurrence, Entry, EntryDelimiter,
EntryType, Error, ExpansionOptions, FailedBlock, Field, FieldNameCase,
FieldNormalizeOptions, IssueSummary, Library, LibraryBuilder, LibraryStats, MonthStyle,
ParseEvent, ParseFlow, ParseStatus, ParseSummary, ParsedBlock, ParsedComment, ParsedCorpus,
ParsedDocument, ParsedEntry, ParsedEntryStatus, ParsedFailedBlock, ParsedField, ParsedItem,
ParsedPreamble, ParsedSource, ParsedString, ParsedValue, Parser, PersonName, Preamble,
RawWriteMode, ResourceField, ResourceKind, Result, SortOptions, SourceId, SourceMap,
SourceSpan, StreamingSummary, StringDefinition, TrailingComma, UnresolvedVariablePolicy,
ValidationError, ValidationLevel, ValidationReport, ValidationSeverity, Value,
ValueDelimiter, Writer, WriterConfig,
};
}
pub fn parse(input: &str) -> Result<Library<'_>> {
Library::parser().parse(input)
}
pub fn parse_file(path: impl AsRef<std::path::Path>) -> Result<Library<'static>> {
let content = std::fs::read_to_string(path)?;
parse(&content).map(Library::into_owned)
}
#[cfg(feature = "python")]
#[pyo3::pymodule]
fn _native(m: &pyo3::Bound<'_, pyo3::types::PyModule>) -> pyo3::PyResult<()> {
python::register(m)
}