From b2431912d36dd84c2c0a5c6dabaa870435dcd621 Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Mon, 21 Oct 2013 22:56:44 +0900 Subject: Use the new style system Credits to: Deokjin Kim Ilyong Cho Jaeman Park Junyoung Cho Ryan Choi Sangeun Kim Yongjin Kim Youngmin Yoo Youngsoo Son --- src/components/script/html/cssparse.rs | 80 ++++++++++------------------------ 1 file changed, 24 insertions(+), 56 deletions(-) (limited to 'src/components/script/html/cssparse.rs') diff --git a/src/components/script/html/cssparse.rs b/src/components/script/html/cssparse.rs index e6383599d39..bfe1d984171 100644 --- a/src/components/script/html/cssparse.rs +++ b/src/components/script/html/cssparse.rs @@ -8,9 +8,8 @@ use std::cell::Cell; use std::comm; use std::comm::Port; use std::task; -use newcss::stylesheet::Stylesheet; -use newcss::util::DataStream; -use servo_net::resource_task::{Load, LoadResponse, Payload, Done, ResourceTask, ProgressMsg}; +use style::Stylesheet; +use servo_net::resource_task::{Load, ProgressMsg, Payload, Done, ResourceTask}; use extra::url::Url; /// Where a style sheet comes from. @@ -26,73 +25,42 @@ pub fn spawn_css_parser(provenance: StylesheetProvenance, let provenance_cell = Cell::new(provenance); do task::spawn { - let url = do provenance_cell.with_ref |p| { + // TODO: CSS parsing should take a base URL. + let _url = do provenance_cell.with_ref |p| { match *p { UrlProvenance(ref the_url) => (*the_url).clone(), InlineProvenance(ref the_url, _) => (*the_url).clone() } }; - let sheet = Stylesheet::new(url, data_stream(provenance_cell.take(), - resource_task.clone())); + let sheet = match provenance_cell.take() { + UrlProvenance(url) => { + debug!("cssparse: loading style sheet at %s", url.to_str()); + let (input_port, input_chan) = comm::stream(); + resource_task.send(Load(url, input_chan)); + Stylesheet::from_iter(ProgressMsgPortIterator { + progress_port: input_port.recv().progress_port + }) + } + InlineProvenance(_, data) => { + Stylesheet::from_str(data) + } + }; result_chan.send(sheet); } return result_port; } -fn data_stream(provenance: StylesheetProvenance, resource_task: ResourceTask) -> @mut DataStream { - match provenance { - UrlProvenance(url) => { - debug!("cssparse: loading style sheet at %s", url.to_str()); - let (input_port, input_chan) = comm::stream(); - resource_task.send(Load(url, input_chan)); - resource_port_to_data_stream(input_port) - } - InlineProvenance(_, data) => { - data_to_data_stream(data) - } - } +struct ProgressMsgPortIterator { + progress_port: Port } -fn resource_port_to_data_stream(input_port: Port) -> @mut DataStream { - let progress_port = input_port.recv().progress_port; - struct ResourcePortDataStream { - progress_port: Port, - }; - impl DataStream for ResourcePortDataStream { - fn read(&mut self) -> Option<~[u8]> { - match self.progress_port.recv() { - Payload(data) => Some(data), - Done(*) => None - } +impl Iterator<~[u8]> for ProgressMsgPortIterator { + fn next(&mut self) -> Option<~[u8]> { + match self.progress_port.recv() { + Payload(data) => Some(data), + Done(*) => None } } - let stream = @mut ResourcePortDataStream { - progress_port: progress_port, - }; - stream as @mut DataStream } - -fn data_to_data_stream(data: ~str) -> @mut DataStream { - let data_cell = Cell::new(data); - struct DataDataStream { - data_cell: Cell<~str>, - }; - impl DataStream for DataDataStream { - fn read(&mut self) -> Option<~[u8]> { - if self.data_cell.is_empty() { - None - } else { - // FIXME: Blech, a copy. - let data = self.data_cell.take(); - Some(data.as_bytes().to_owned()) - } - } - } - let stream = @mut DataDataStream { - data_cell: data_cell, - }; - stream as @mut DataStream -} - -- cgit v1.2.3