css, submodules: Implement named-ancestor-node

This commit is contained in:
Patrick Walton 2012-11-11 14:31:49 -08:00
parent b0f185412d
commit 8c3b8fe3d4
3 changed files with 26 additions and 3 deletions

@ -1 +1 @@
Subproject commit 7f9bd3c32baae72bec864085e81df7773542f790 Subproject commit 3bbe4ed4fc3d642e1e651ff3d8123c9dca626c22

@ -1 +1 @@
Subproject commit 6f7633390e76a08ee2bb43fafdbe8ba5d0890896 Subproject commit cb49f5f7b4ae92c70b374b544d6e3f5ab1e3da26

View file

@ -40,6 +40,29 @@ impl NodeSelectHandler: SelectHandler<Node> {
tree::parent(&NodeTree, node) tree::parent(&NodeTree, node)
} }
// TODO: Use a Bloom filter.
fn named_ancestor_node(node: &Node, name: &str) -> Option<Node> {
let mut node = *node;
loop {
let parent = tree::parent(&NodeTree, &node);
match parent {
Some(parent) => {
let mut found = false;
do parent.read |data| {
if name == node_name(data) {
found = true;
}
}
if found {
return Some(parent);
}
node = parent;
}
None => return None
}
}
}
fn node_is_root(node: &Node) -> bool { fn node_is_root(node: &Node) -> bool {
self.parent_node(node).is_none() self.parent_node(node).is_none()
} }