diff options
Diffstat (limited to 'src/parser/simplify.rs')
| -rw-r--r-- | src/parser/simplify.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/parser/simplify.rs b/src/parser/simplify.rs new file mode 100644 index 0000000..2743a69 --- /dev/null +++ b/src/parser/simplify.rs @@ -0,0 +1,34 @@ +use std::collections::HashMap; + +use crate::target::Target; +use crate::document_tree::{ + Document, + HasChildren, + attribute_types::ID, + element_categories as c, +}; + + +trait ResolvableRefs { + fn populate_targets(&self, refs: &mut HashMap<&ID, Target>); + fn resolve_refs(self, refs: &HashMap<&ID, Target>) -> Self; +} + +pub fn resolve_references(mut doc: Document) -> Document { + let mut references = HashMap::new(); + for c in doc.children() { + c.populate_targets(&mut references); + } + let new: Vec<_> = doc.children_mut().drain(..).map(|c| c.resolve_refs(&references)).collect(); + Document::with_children(new) +} + +impl ResolvableRefs for c::StructuralSubElement { + fn populate_targets(&self, refs: &mut HashMap<&ID, Target>) { + //TODO + } + fn resolve_refs(self, refs: &HashMap<&ID, Target>) -> Self { + self //TODO + } +} + |
