Skip to content
This repository was archived by the owner on Jul 10, 2023. It is now read-only.

Implement style attributes #24

Merged
merged 2 commits into from
Aug 6, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 22 additions & 9 deletions parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,9 @@ use wapcaplet::LwcString;
use extra::net::url::Url;
use netsurfcss::stylesheet::CssUrlResolutionFn;

// This takes a DataStreamFactory instead of a DataStream because
// servo's DataStream contains a comm::Port, which is not sendable,
// so DataStream is an @fn which can't be sent to the lexer task.
// So the DataStreamFactory gives the caller an opportunity to create
// the data stream from inside the lexer task.
pub fn parse_stylesheet(url: Url, input: DataStream) -> CssStylesheet {
fn default_params(url: Url) -> CssStylesheetParams {
let resolve: CssUrlResolutionFn = resolve_url;
let params: CssStylesheetParams = CssStylesheetParams {
CssStylesheetParams {
params_version: CssStylesheetParamsVersion1,
level: CssLevel21,
charset: ~"UTF-8",
Expand All @@ -36,7 +31,16 @@ pub fn parse_stylesheet(url: Url, input: DataStream) -> CssStylesheet {
import: None,
color: None,
font: None,
};
}
}

// This takes a DataStreamFactory instead of a DataStream because
// servo's DataStream contains a comm::Port, which is not sendable,
// so DataStream is an @fn which can't be sent to the lexer task.
// So the DataStreamFactory gives the caller an opportunity to create
// the data stream from inside the lexer task.
pub fn parse_stylesheet(url: Url, input: DataStream) -> CssStylesheet {
let params = default_params(url);
let mut sheet = css_stylesheet_create(&params);

loop {
Expand All @@ -48,7 +52,16 @@ pub fn parse_stylesheet(url: Url, input: DataStream) -> CssStylesheet {
}
}
sheet.data_done();
return sheet;
sheet
}

pub fn parse_style_attribute(url: Url, data: &str) -> CssStylesheet {
let mut params = default_params(url);
params.inline_style = true;
let mut sheet = css_stylesheet_create(&params);
sheet.append_data(data.as_bytes());
sheet.data_done();
sheet
}

fn resolve_url(_base: &str, _rel: &LwcString) -> CssResult<LwcString> {
Expand Down
15 changes: 13 additions & 2 deletions select.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,23 @@ impl SelectCtx {
a wide range of client-specific details like node relationships, names, and UA
defaults.
*/
pub fn select_style<N: VoidPtrLike, H: SelectHandler<N>>(&self, node: &N, handler: &H) -> SelectResults {
pub fn select_style<N: VoidPtrLike, H: SelectHandler<N>>(&self,
node: &N,
inline_style: Option<&Stylesheet>,
handler: &H) -> SelectResults {
let inner_handler = SelectHandlerWrapper {
inner: handler
};
let inner_inline_style = match inline_style {
None => None,
Some(ref sheet) => Some(&sheet.inner),
};
SelectResults {
inner: self.inner.select_style::<N, SelectHandlerWrapper<N, H>>(node, n::ll::t::CSS_MEDIA_SCREEN, None, &inner_handler)
inner: self.inner.select_style::<N, SelectHandlerWrapper<N, H>>(
node,
n::ll::t::CSS_MEDIA_SCREEN,
inner_inline_style,
&inner_handler)
}
}
}
Expand Down
8 changes: 7 additions & 1 deletion stylesheet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ CSS stylesheets, owned types, immutable after creation
use extra::net::url::Url;
use util::DataStream;
use netsurfcss::stylesheet::CssStylesheet;
use parser::parse_stylesheet;
use parser::{parse_stylesheet, parse_style_attribute};

pub struct Stylesheet {
inner: CssStylesheet
Expand All @@ -21,4 +21,10 @@ impl Stylesheet {
inner: parse_stylesheet(url, input)
}
}

pub fn from_attribute(url: Url, data: &str) -> Stylesheet {
Stylesheet {
inner: parse_style_attribute(url, data)
}
}
}