use crate::model::{Chapter, NodeId, Role};
pub fn is_structural_container(role: Option<Role>) -> bool {
matches!(
role,
Some(
Role::Root
| Role::Container | Role::Figure
| Role::Sidebar
| Role::Footnote
| Role::Table
| Role::TableHead
| Role::TableBody
| Role::TableRow
| Role::OrderedList
| Role::UnorderedList
| Role::DefinitionList
)
)
}
pub fn is_block_container(role: Option<Role>) -> bool {
matches!(
role,
Some(
Role::Root
| Role::Container
| Role::BlockQuote
| Role::Figure
| Role::Sidebar
| Role::Footnote
| Role::ListItem
| Role::TableCell
)
)
}
pub fn is_inline_role(role: Role) -> bool {
matches!(
role,
Role::Text | Role::Inline | Role::Link | Role::Image | Role::Break
)
}
pub fn is_prunable_role(role: Role) -> bool {
matches!(
role,
Role::Container
| Role::Inline
| Role::Figure
| Role::Sidebar
| Role::Footnote
| Role::BlockQuote
| Role::OrderedList
| Role::UnorderedList
| Role::DefinitionList
| Role::Table
| Role::TableHead
| Role::TableBody
| Role::TableRow
)
}
pub fn has_semantic_attrs(chapter: &Chapter, node_id: NodeId) -> bool {
let s = &chapter.semantics;
s.href(node_id).is_some()
|| s.src(node_id).is_some()
|| s.alt(node_id).is_some()
|| s.id(node_id).is_some()
|| s.title(node_id).is_some()
|| s.lang(node_id).is_some()
|| s.epub_type(node_id).is_some()
|| s.aria_role(node_id).is_some()
|| s.datetime(node_id).is_some()
|| s.language(node_id).is_some()
|| s.list_start(node_id).is_some()
|| s.row_span(node_id).is_some()
|| s.col_span(node_id).is_some()
|| s.is_header_cell(node_id)
}