diff options
author | Patrick Walton <pcwalton@mimiga.net> | 2012-05-17 14:59:46 -0700 |
---|---|---|
committer | Patrick Walton <pcwalton@mimiga.net> | 2012-05-17 14:59:46 -0700 |
commit | 1cbc5e9dfe234df1b9d6b9d217d39c350f659d02 (patch) | |
tree | 28a311a2e609ebff348f74fa38e37ec1adcf801b /src | |
parent | dccee997e872d79ce08642a36566a9c2505f8e58 (diff) | |
download | servo-1cbc5e9dfe234df1b9d6b9d217d39c350f659d02.tar.gz servo-1cbc5e9dfe234df1b9d6b9d217d39c350f659d02.zip |
Stub text support
Diffstat (limited to 'src')
-rw-r--r-- | src/servo/dom/base.rs | 3 | ||||
-rw-r--r-- | src/servo/layout/base.rs | 15 | ||||
-rw-r--r-- | src/servo/layout/box_builder.rs | 7 | ||||
-rw-r--r-- | src/servo/layout/style/style.rs | 8 | ||||
-rw-r--r-- | src/servo/parser/html_builder.rs | 6 |
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... |