aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-05-17 14:59:46 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-05-17 14:59:46 -0700
commit1cbc5e9dfe234df1b9d6b9d217d39c350f659d02 (patch)
tree28a311a2e609ebff348f74fa38e37ec1adcf801b /src
parentdccee997e872d79ce08642a36566a9c2505f8e58 (diff)
downloadservo-1cbc5e9dfe234df1b9d6b9d217d39c350f659d02.tar.gz
servo-1cbc5e9dfe234df1b9d6b9d217d39c350f659d02.zip
Stub text support
Diffstat (limited to 'src')
-rw-r--r--src/servo/dom/base.rs3
-rw-r--r--src/servo/layout/base.rs15
-rw-r--r--src/servo/layout/box_builder.rs7
-rw-r--r--src/servo/layout/style/style.rs8
-rw-r--r--src/servo/parser/html_builder.rs6
5 files changed, 28 insertions, 11 deletions
diff --git a/src/servo/dom/base.rs b/src/servo/dom/base.rs
index 73379023706..77dee5132a2 100644
--- a/src/servo/dom/base.rs
+++ b/src/servo/dom/base.rs
@@ -10,7 +10,8 @@ enum node_data = {
enum node_kind {
nk_div,
- nk_img(size<au>)
+ nk_img(size<au>),
+ nk_text(str)
}
#[doc="The rd_aux data is a (weak) pointer to the layout data, which contains
diff --git a/src/servo/layout/base.rs b/src/servo/layout/base.rs
index 5ce07de2dda..e2f1a38fa5b 100644
--- a/src/servo/layout/base.rs
+++ b/src/servo/layout/base.rs
@@ -7,14 +7,14 @@ import gfx::geom;
import gfx::geom::{size, rect, point, au, zero_size_au};
import /*layout::*/block::block_layout_methods;
import /*layout::*/inline::inline_layout_methods;
-import /*layout::*/style::style::{computed_style, di_block, di_inline};
-import /*layout::*/style::style::style_methods;
+import /*layout::*/style::style::*;
import util::tree;
enum box_kind {
bk_block,
bk_inline,
- bk_intrinsic(@geom::size<au>)
+ bk_intrinsic(@geom::size<au>),
+ bk_text(str)
}
enum box = {
@@ -84,6 +84,7 @@ impl layout_methods for @box {
bk_block { self.reflow_block(available_width) }
bk_inline { self.reflow_inline(available_width) }
bk_intrinsic(size) { self.reflow_intrinsic(*size) }
+ bk_text(s) { self.reflow_text(s) }
}
}
@@ -94,6 +95,14 @@ impl layout_methods for @box {
#debug["reflow_intrinsic size=%?", self.bounds];
}
+ #[doc="The reflow routine for text frames."]
+ fn reflow_text(text: str) {
+ self.bounds.size = {
+ mut width: au(text.len() as int * 60 * 10),
+ mut height: au(60 * 14)
+ };
+ }
+
#[doc="Dumps the box tree, for debugging."]
fn dump() {
self.dump_indent(0u);
diff --git a/src/servo/layout/box_builder.rs b/src/servo/layout/box_builder.rs
index 412eea8003f..1a5cac2f75f 100644
--- a/src/servo/layout/box_builder.rs
+++ b/src/servo/layout/box_builder.rs
@@ -1,10 +1,10 @@
#[doc="Creates CSS boxes from a DOM."]
-import dom::base::{nk_div, nk_img, node};
+import dom::base::{nk_div, nk_img, nk_text, node};
import dom::rcu::reader_methods;
import gfx::geom;
-import /*layout::*/base::{bk_block, bk_inline, bk_intrinsic, box, box_kind};
-import /*layout::*/base::{btree, node_methods, ntree, rd_tree_ops};
+import /*layout::*/base::{bk_block, bk_inline, bk_intrinsic, bk_text, box};
+import /*layout::*/base::{box_kind, btree, node_methods, ntree, rd_tree_ops};
import /*layout::*/base::wr_tree_ops;
import /*layout::*/style::style::{di_block, di_inline, style_methods};
import util::tree;
@@ -120,6 +120,7 @@ impl box_builder_priv for node {
alt self.rd({ |n| n.kind }) {
nk_img(size) { bk_intrinsic(@size) }
nk_div { bk_block }
+ nk_text(s) { bk_text(s) }
}
}
}
diff --git a/src/servo/layout/style/style.rs b/src/servo/layout/style/style.rs
index fd6dd261c67..5bc5ddaefd2 100644
--- a/src/servo/layout/style/style.rs
+++ b/src/servo/layout/style/style.rs
@@ -1,6 +1,6 @@
#[doc="High-level interface to CSS selector matching."]
-import dom::base::{nk_div, nk_img, node, node_kind};
+import dom::base::{nk_div, nk_img, nk_text, node, node_kind};
import dom::rcu::reader_methods;
import /*layout::*/base::*; // FIXME: resolve bug requires *
@@ -16,8 +16,10 @@ enum display {
#[doc="Returns the default style for the given node kind."]
fn default_style_for_node_kind(kind : node_kind) -> computed_style {
alt kind {
- nk_div { computed_style({ mut display: di_block }) }
- nk_img(*) { computed_style({ mut display: di_inline }) }
+ nk_div { computed_style({ mut display: di_block }) }
+ nk_img(*) | nk_text(*) {
+ computed_style({ mut display: di_inline })
+ }
}
}
diff --git a/src/servo/parser/html_builder.rs b/src/servo/parser/html_builder.rs
index 013f26bee7e..6f764ef1913 100644
--- a/src/servo/parser/html_builder.rs
+++ b/src/servo/parser/html_builder.rs
@@ -40,8 +40,12 @@ fn build_dom(scope: dom::node_scope,
// spec) if we close more tags than we open.
cur = scope.get_parent(cur).get();
}
+ parser::to_text(s) if !s.is_whitespace() {
+ let new_node = scope.new_node(dom::nk_text(s));
+ scope.add_child(cur, new_node);
+ }
parser::to_text(_) {
- // TODO
+ // FIXME: Whitespace should not be ignored.
}
parser::to_doctype {
// TODO: Do something here...