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