diff --git a/src/rust-css b/src/rust-css index 5ff00c90ba3..37cfbe86b6c 160000 --- a/src/rust-css +++ b/src/rust-css @@ -1 +1 @@ -Subproject commit 5ff00c90ba3c668f5da62eb25377e37714f855e7 +Subproject commit 37cfbe86b6c024de87d1815843c956f4de535e9c diff --git a/src/rust-netsurfcss b/src/rust-netsurfcss index 16ed0ba20ca..d83cd4e7879 160000 --- a/src/rust-netsurfcss +++ b/src/rust-netsurfcss @@ -1 +1 @@ -Subproject commit 16ed0ba20caab03e5c16acb674e0f97d04327065 +Subproject commit d83cd4e787993461bd00e321ee28570005dc933c diff --git a/src/servo/html/cssparse.rs b/src/servo/html/cssparse.rs index 10008052345..0f0c7a0bd48 100644 --- a/src/servo/html/cssparse.rs +++ b/src/servo/html/cssparse.rs @@ -3,42 +3,32 @@ Some little helpers for hooking up the HTML parser with the CSS parser */ use std::net::url::Url; +use std::cell::Cell; use resource::resource_task::{ResourceTask, ProgressMsg, Load, Payload, Done}; -use newcss::values::Rule; -use newcss::lexer_util::DataStream; -use newcss::lexer::{Token, lex_css_from_bytes}; +use newcss::values::Stylesheet; +use newcss::util::{DataStream, DataStreamFactory}; -pub fn spawn_css_parser(url: Url, resource_task: ResourceTask) -> comm::Port<~[~Rule]> { +pub fn spawn_css_parser(url: Url, resource_task: ResourceTask) -> comm::Port { let result_port = comm::Port(); let result_chan = comm::Chan(&result_port); - // TODO: change copy to move once we have match move - let url = copy url; do task::spawn |move url, copy resource_task| { - let css_stream = spawn_css_lexer_task(copy url, resource_task); - let mut css_rules = newcss::parser::build_stylesheet(move css_stream); - result_chan.send(move css_rules); + let sheet = newcss::parser::parse_stylesheet(copy url, data_stream_factory(copy url, resource_task)); + result_chan.send(move sheet); } return result_port; } -#[allow(non_implicitly_copyable_typarams)] -fn spawn_css_lexer_task(url: Url, resource_task: ResourceTask) -> pipes::Port { - let (result_chan, result_port) = pipes::stream(); - - do task::spawn |move result_chan, move url| { - assert url.path.ends_with(".css"); +fn data_stream_factory(url: Url, resource_task: ResourceTask) -> DataStreamFactory { + let url = Cell(move url); + return |move url| { let input_port = Port(); - // TODO: change copy to move once the compiler permits it - resource_task.send(Load(copy url, input_port.chan())); - - lex_css_from_bytes(resource_port_to_lexer_stream(input_port), &result_chan); - }; - - return move result_port; + resource_task.send(Load(url.take(), input_port.chan())); + resource_port_to_data_stream(input_port) + } } -fn resource_port_to_lexer_stream(input_port: comm::Port) -> DataStream { +fn resource_port_to_data_stream(input_port: comm::Port) -> DataStream { return || { match input_port.recv() { Payload(move data) => Some(move data),