aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser/simplify.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser/simplify.rs')
-rw-r--r--src/parser/simplify.rs34
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
+ }
+}
+