Update for language changes

This commit is contained in:
Brian Anderson 2013-06-24 18:42:17 -07:00
parent a01f6b97f2
commit 56e5ba1b82
109 changed files with 1182 additions and 988 deletions

View file

@ -4,13 +4,15 @@
/// Some little helpers for hooking up the HTML parser with the CSS parser.
use core::cell::Cell;
use core::comm::Port;
use core::str;
use std::cell::Cell;
use std::comm;
use std::comm::Port;
use std::task;
use std::str;
use newcss::stylesheet::Stylesheet;
use newcss::util::DataStream;
use servo_net::resource_task::{ResourceTask, ProgressMsg, Load, Payload, Done};
use std::net::url::Url;
use extra::net::url::Url;
/// Where a style sheet comes from.
pub enum StylesheetProvenance {
@ -23,12 +25,12 @@ pub fn spawn_css_parser(provenance: StylesheetProvenance,
-> Port<Stylesheet> {
let (result_port, result_chan) = comm::stream();
let provenance_cell = Cell(provenance);
let provenance_cell = Cell::new(provenance);
do task::spawn {
let url = do provenance_cell.with_ref |p| {
match *p {
UrlProvenance(copy the_url) => the_url,
InlineProvenance(copy the_url, _) => the_url
UrlProvenance(ref the_url) => copy *the_url,
InlineProvenance(ref the_url, _) => copy *the_url
}
};
@ -64,13 +66,14 @@ fn resource_port_to_data_stream(input_port: Port<ProgressMsg>) -> DataStream {
}
fn data_to_data_stream(data: ~str) -> DataStream {
let data_cell = Cell(data);
let data_cell = Cell::new(data);
return || {
if data_cell.is_empty() {
None
} else {
// FIXME: Blech, a copy.
Some(str::to_bytes(data_cell.take()))
let data = data_cell.take();
Some(data.as_bytes().to_owned())
}
}
}

View file

@ -8,17 +8,21 @@ use dom::node::{Text};
use html::cssparse::{InlineProvenance, StylesheetProvenance, UrlProvenance, spawn_css_parser};
use newcss::stylesheet::Stylesheet;
use core::cell::Cell;
use core::comm::{Chan, Port, SharedChan};
use core::str::eq_slice;
use std::cast;
use std::cell::Cell;
use std::comm;
use std::comm::{Chan, Port, SharedChan};
use std::str::eq_slice;
use std::result;
use std::task;
use hubbub::hubbub;
use servo_net::image_cache_task::ImageCacheTask;
use servo_net::image_cache_task;
use servo_net::resource_task::{Done, Load, Payload, ResourceTask};
use servo_util::tree::TreeUtils;
use servo_util::url::make_url;
use std::net::url::Url;
use std::net::url;
use extra::net::url::Url;
use extra::net::url;
macro_rules! handle_element(
($tag:expr, $string:expr, $type_id:expr, $ctor:ident, [ $(($field:ident : $field_init:expr)),* ]) => (
@ -101,7 +105,7 @@ fn css_link_listener(to_parent: Chan<Option<Stylesheet>>,
// Send the sheets back in order
// FIXME: Shouldn't wait until after we've recieved CSSTaskExit to start sending these
do vec::consume(result_vec) |_i, port| {
do result_vec.consume |_i, port| {
to_parent.send(Some(port.recv()));
}
to_parent.send(None);
@ -140,7 +144,7 @@ fn js_script_listener(to_parent: Chan<~[~[u8]]>,
}
}
}
vec::push(&mut result_vec, result_port);
result_vec.push(result_port);
}
JSTaskExit => {
break;
@ -148,7 +152,7 @@ fn js_script_listener(to_parent: Chan<~[~[u8]]>,
}
}
let js_scripts = vec::filter_map(result_vec, |result_port| result_port.recv());
let js_scripts = result_vec.iter().filter_map(|result_port| result_port.recv()).collect();
to_parent.send(js_scripts);
}
@ -211,9 +215,9 @@ pub fn parse_html(url: Url,
let resource_task2 = resource_task.clone();
let (stylesheet_port, stylesheet_chan) = comm::stream();
let stylesheet_chan = Cell(stylesheet_chan);
let stylesheet_chan = Cell::new(stylesheet_chan);
let (css_msg_port, css_msg_chan) = comm::stream();
let css_msg_port = Cell(css_msg_port);
let css_msg_port = Cell::new(css_msg_port);
do spawn {
css_link_listener(stylesheet_chan.take(), css_msg_port.take(), resource_task2.clone());
}
@ -223,15 +227,16 @@ pub fn parse_html(url: Url,
// Spawn a JS parser to receive JavaScript.
let resource_task2 = resource_task.clone();
let (js_result_port, js_result_chan) = comm::stream();
let js_result_chan = Cell(js_result_chan);
let js_result_chan = Cell::new(js_result_chan);
let (js_msg_port, js_msg_chan) = comm::stream();
let js_msg_port = Cell(js_msg_port);
let js_msg_port = Cell::new(js_msg_port);
do spawn {
js_script_listener(js_result_chan.take(), js_msg_port.take(), resource_task2.clone());
}
let js_chan = SharedChan::new(js_msg_chan);
let url2 = url.clone(), url3 = url.clone();
let url2 = url.clone();
let url3 = url.clone();
// Build the root node.
let root = ~HTMLHtmlElement { parent: Element::new(HTMLHtmlElementTypeId, ~"html") };
@ -239,7 +244,7 @@ pub fn parse_html(url: Url,
debug!("created new node");
let mut parser = hubbub::Parser("UTF-8", false);
debug!("created parser");
parser.set_document_node(root.to_hubbub_node());
parser.set_document_node(unsafe { root.to_hubbub_node() });
parser.enable_scripting(true);
// Performs various actions necessary after appending has taken place. Currently, this
@ -250,7 +255,7 @@ pub fn parse_html(url: Url,
if parent_node.is_style_element() && child_node.is_text() {
debug!("found inline CSS stylesheet");
let url = url::from_str("http://example.com/"); // FIXME
let url_cell = Cell(url);
let url_cell = Cell::new(url);
do child_node.with_imm_text |text_node| {
let data = text_node.parent.data.to_str(); // FIXME: Bad copy.
let provenance = InlineProvenance(result::unwrap(url_cell.take()), data);
@ -330,7 +335,7 @@ pub fn parse_html(url: Url,
_ => {}
}
node.to_hubbub_node()
unsafe { node.to_hubbub_node() }
},
create_text: |data: ~str| {
debug!("create text");