#[cfg(feature = "dtd-validation")]
use oxixml_dtd::{Dtd, DtdParser, ValidationOptions};
#[cfg(feature = "dtd-validation")]
pub use oxixml_dtd::{Validator, ValidityError};
#[cfg(feature = "dtd-validation")]
use super::embedded_dtd::build_xhtml_resolver;
#[cfg(feature = "dtd-validation")]
use super::entity_budget::default_budget;
#[cfg(feature = "dtd-validation")]
pub struct DtdValidator {
dtd: Dtd,
}
#[cfg(feature = "dtd-validation")]
impl DtdValidator {
#[must_use]
pub fn new(declaration: &str) -> Option<Self> {
let resolver = build_xhtml_resolver();
let dtd = DtdParser::new()
.with_resolver(Box::new(resolver))
.with_limits(default_budget())
.parse_doctype(declaration)
.ok()?;
Some(Self { dtd })
}
#[must_use]
pub fn validator(&self) -> Validator<'_> {
Validator::new(&self.dtd, ValidationOptions::default())
}
}