aboutsummaryrefslogtreecommitdiffstats
path: root/src/servo/html/cssparse.rs
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-10-30 16:51:21 -0700
committerBrian Anderson <banderson@mozilla.com>2012-10-30 16:51:21 -0700
commit23b6b386cbc1949f8d9e90d49f48174e36d2dd9a (patch)
treec7814d84cd096eaaf2eb7044e7a3d329b60df8fd /src/servo/html/cssparse.rs
parent66f4fdc017f97eb949b54cedfdf3f75a75768947 (diff)
downloadservo-23b6b386cbc1949f8d9e90d49f48174e36d2dd9a.tar.gz
servo-23b6b386cbc1949f8d9e90d49f48174e36d2dd9a.zip
Move CSS lexing into the parser to create a simpler interface
Diffstat (limited to 'src/servo/html/cssparse.rs')
-rw-r--r--src/servo/html/cssparse.rs36
1 files changed, 13 insertions, 23 deletions
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<Stylesheet> {
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<Token> {
- 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<ProgressMsg>) -> DataStream {
+fn resource_port_to_data_stream(input_port: comm::Port<ProgressMsg>) -> DataStream {
return || {
match input_port.recv() {
Payload(move data) => Some(move data),