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 +	} +} + | 
