#![forbid(unsafe_code)]
mod registry;
mod semantics;
mod structure;
pub use registry::{Meta, SemanticsRule, StructureRule};
use a11y_dom::{Document, Semantics};
use a11y_report::{Finding, NotRun, Report, RuleRun};
pub fn structure_rules<D: Document>() -> Vec<StructureRule<D>> {
structure::rules()
}
pub fn semantics_rules<D: Semantics>() -> Vec<SemanticsRule<D>> {
semantics::rules()
}
fn semantics_rule_ids() -> &'static [&'static str] {
&[
"links/name",
"buttons/name",
"svg/name",
"links/ambiguous-name",
]
}
fn run_structure<D: Document>(doc: &D, report: &mut Report) {
for rule in structure_rules::<D>() {
let mut out: Vec<Finding> = Vec::new();
(rule.run)(doc, &mut out);
report.record(RuleRun::ran(rule.meta.id, out.len()));
report.extend(out);
}
}
pub fn run<D: Document>(doc: &D) -> Report {
let mut report = Report::new();
run_structure(doc, &mut report);
for id in semantics_rule_ids() {
report.record(
RuleRun::not_run(*id, NotRun::CapabilityMissing)
.with_reason("Host liefert keine Rolle und keinen Accessible Name"),
);
}
report.finish()
}
pub fn run_with_semantics<D: Semantics>(doc: &D) -> Report {
let mut report = Report::new();
run_structure(doc, &mut report);
for rule in semantics_rules::<D>() {
let mut out: Vec<Finding> = Vec::new();
(rule.run)(doc, &mut out);
report.record(RuleRun::ran(rule.meta.id, out.len()));
report.extend(out);
}
report.finish()
}