aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-05-24 16:57:58 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-05-24 16:57:58 -0700
commit8e60fb4dee5818ab4df0f2f4e30a8a41b378df49 (patch)
tree4e56b1f2d21b183dd328b29232efb4595a9363e4 /src
parent47f618bac2ca2dc34ab121dbdfff778982b689de (diff)
downloadservo-8e60fb4dee5818ab4df0f2f4e30a8a41b378df49.tar.gz
servo-8e60fb4dee5818ab4df0f2f4e30a8a41b378df49.zip
Parse generic attributes; add an image test case
Diffstat (limited to 'src')
-rw-r--r--src/servo/dom/base.rs13
-rw-r--r--src/servo/parser/html_builder.rs5
-rw-r--r--src/test/test-image.html10
-rw-r--r--src/test/test.jpegbin0 -> 88129 bytes
4 files changed, 26 insertions, 2 deletions
diff --git a/src/servo/dom/base.rs b/src/servo/dom/base.rs
index 18341096fb4..f1a1ace01f6 100644
--- a/src/servo/dom/base.rs
+++ b/src/servo/dom/base.rs
@@ -2,6 +2,7 @@ import dom::rcu::{writer_methods};
import gfx::geom::{au, size};
import layout::base::layout_data;
import util::tree;
+import dvec::dvec;
enum node_data = {
tree: tree::fields<node>,
@@ -16,10 +17,22 @@ enum node_kind {
class element {
let tag_name: str;
let subclass: ~element_subclass;
+ let attrs: dvec<~attr>;
new(tag_name: str, -subclass: ~element_subclass) {
self.tag_name = tag_name;
self.subclass = subclass;
+ self.attrs = dvec();
+ }
+}
+
+class attr {
+ let name: str;
+ let value: str;
+
+ new(name: str, value: str) {
+ self.name = name;
+ self.value = value;
}
}
diff --git a/src/servo/parser/html_builder.rs b/src/servo/parser/html_builder.rs
index ade6275ce41..8ea396b040f 100644
--- a/src/servo/parser/html_builder.rs
+++ b/src/servo/parser/html_builder.rs
@@ -1,13 +1,14 @@
#[doc="Constructs a DOM tree from an incoming token stream."]
import dom::rcu::writer_methods;
-import dom::base::{element, element_subclass, es_div, es_head, es_img};
+import dom::base::{attr, 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;
import gfx::geom;
+import dvec::extensions;
fn link_up_attribute(scope: dom::node_scope, node: dom::node, key: str,
value: str) {
@@ -17,6 +18,7 @@ fn link_up_attribute(scope: dom::node_scope, node: dom::node, key: str,
|node_contents|
alt *node_contents.kind {
dom::nk_element(element) {
+ element.attrs.push(~attr(key, value));
alt *element.subclass {
es_img(dimensions) if key == "width" {
alt int::from_str(value) {
@@ -32,7 +34,6 @@ fn link_up_attribute(scope: dom::node_scope, node: dom::node, key: str,
}
es_div | es_img(*) | es_head | es_unknown {
// Drop on the floor.
- // FIXME: Implement attributes in a generic way.
}
}
}
diff --git a/src/test/test-image.html b/src/test/test-image.html
new file mode 100644
index 00000000000..587ac581203
--- /dev/null
+++ b/src/test/test-image.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>test</title>
+</head>
+<body>
+<img src="test.jpeg" width="500" height="378"/>
+</body>
+</html>
+
diff --git a/src/test/test.jpeg b/src/test/test.jpeg
new file mode 100644
index 00000000000..3314a53600b
--- /dev/null
+++ b/src/test/test.jpeg
Binary files differ