diff options
Diffstat (limited to 'src/servo/parser/html_builder.rs')
-rw-r--r-- | src/servo/parser/html_builder.rs | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/src/servo/parser/html_builder.rs b/src/servo/parser/html_builder.rs index 93c77e5046e..ade6275ce41 100644 --- a/src/servo/parser/html_builder.rs +++ b/src/servo/parser/html_builder.rs @@ -1,8 +1,9 @@ #[doc="Constructs a DOM tree from an incoming token stream."] import dom::rcu::writer_methods; -import dom::base::{element, es_div, es_img, es_unknown, methods, nk_element}; -import dom::base::{nk_text, rd_tree_ops, wr_tree_ops}; +import dom::base::{element, element_subclass, es_div, es_head, es_img}; +import dom::base::{es_unknown, methods, nk_element, nk_text, rd_tree_ops}; +import dom::base::{wr_tree_ops}; import dom = dom::base; import parser = parser::html; import html::token; @@ -29,8 +30,9 @@ fn link_up_attribute(scope: dom::node_scope, node: dom::node, key: str, some(s) { dimensions.height = geom::px_to_au(s); } } } - es_div | es_img(*) | es_unknown { + es_div | es_img(*) | es_head | es_unknown { // Drop on the floor. + // FIXME: Implement attributes in a generic way. } } } @@ -41,6 +43,20 @@ fn link_up_attribute(scope: dom::node_scope, node: dom::node, key: str, } } +fn build_element_subclass(tag_name: str) -> ~element_subclass { + alt tag_name { + "div" { ret ~es_div; } + "img" { + ret ~es_img({ + mut width: geom::px_to_au(100), + mut height: geom::px_to_au(100) + }); + } + "head" { ret ~es_head; } + _ { ret ~es_unknown; } + } +} + fn build_dom(scope: dom::node_scope, stream: port<token>) -> dom::node { // The current reference node. @@ -49,26 +65,12 @@ fn build_dom(scope: dom::node_scope, let token = stream.recv(); alt token { parser::to_eof { break; } - parser::to_start_opening_tag("div") { - #debug["DIV"]; - let new_node = - scope.new_node(dom::nk_element(element("div", ~es_div))); - scope.add_child(cur, new_node); - cur = new_node; - } - parser::to_start_opening_tag("img") { - #debug["IMG"]; - let new_node = - scope.new_node(dom::nk_element(element("img", - ~es_img({mut width: geom::px_to_au(100), - mut height: geom::px_to_au(100)})))); - scope.add_child(cur, new_node); - cur = new_node; - } - parser::to_start_opening_tag(t) { - #debug["unknown element: %s", t]; + parser::to_start_opening_tag(tag_name) { + #debug["starting tag %s", tag_name]; + let element_subclass = build_element_subclass(tag_name); let new_node = - scope.new_node(dom::nk_element(element(t, ~es_unknown))); + scope.new_node(dom::nk_element(element(tag_name, + element_subclass))); scope.add_child(cur, new_node); cur = new_node; } |