Stub text support

This commit is contained in:
Patrick Walton 2012-05-17 14:59:46 -07:00
parent dccee997e8
commit 1cbc5e9dfe
6 changed files with 30 additions and 11 deletions

View file

@ -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

View file

@ -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);

View file

@ -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) }
}
}
}

View file

@ -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 })
}
}
}

View file

@ -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...

2
test-text.html Normal file
View file

@ -0,0 +1,2 @@
<div><img></img>Hello world!<img></img></div>