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

Commit 57a5642

Browse files
committed
Merge pull request #24 from metajack/style-attribute
Implement style attributes
2 parents 55884aa + bd870b6 commit 57a5642

File tree

3 files changed

+42
-12
lines changed

3 files changed

+42
-12
lines changed

parser.rs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,9 @@ use wapcaplet::LwcString;
1717
use extra::net::url::Url;
1818
use netsurfcss::stylesheet::CssUrlResolutionFn;
1919

20-
// This takes a DataStreamFactory instead of a DataStream because
21-
// servo's DataStream contains a comm::Port, which is not sendable,
22-
// so DataStream is an @fn which can't be sent to the lexer task.
23-
// So the DataStreamFactory gives the caller an opportunity to create
24-
// the data stream from inside the lexer task.
25-
pub fn parse_stylesheet(url: Url, input: DataStream) -> CssStylesheet {
20+
fn default_params(url: Url) -> CssStylesheetParams {
2621
let resolve: CssUrlResolutionFn = resolve_url;
27-
let params: CssStylesheetParams = CssStylesheetParams {
22+
CssStylesheetParams {
2823
params_version: CssStylesheetParamsVersion1,
2924
level: CssLevel21,
3025
charset: ~"UTF-8",
@@ -36,7 +31,16 @@ pub fn parse_stylesheet(url: Url, input: DataStream) -> CssStylesheet {
3631
import: None,
3732
color: None,
3833
font: None,
39-
};
34+
}
35+
}
36+
37+
// This takes a DataStreamFactory instead of a DataStream because
38+
// servo's DataStream contains a comm::Port, which is not sendable,
39+
// so DataStream is an @fn which can't be sent to the lexer task.
40+
// So the DataStreamFactory gives the caller an opportunity to create
41+
// the data stream from inside the lexer task.
42+
pub fn parse_stylesheet(url: Url, input: DataStream) -> CssStylesheet {
43+
let params = default_params(url);
4044
let mut sheet = css_stylesheet_create(&params);
4145

4246
loop {
@@ -48,7 +52,16 @@ pub fn parse_stylesheet(url: Url, input: DataStream) -> CssStylesheet {
4852
}
4953
}
5054
sheet.data_done();
51-
return sheet;
55+
sheet
56+
}
57+
58+
pub fn parse_style_attribute(url: Url, data: &str) -> CssStylesheet {
59+
let mut params = default_params(url);
60+
params.inline_style = true;
61+
let mut sheet = css_stylesheet_create(&params);
62+
sheet.append_data(data.as_bytes());
63+
sheet.data_done();
64+
sheet
5265
}
5366

5467
fn resolve_url(_base: &str, _rel: &LwcString) -> CssResult<LwcString> {

select.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,23 @@ impl SelectCtx {
5454
a wide range of client-specific details like node relationships, names, and UA
5555
defaults.
5656
*/
57-
pub fn select_style<N: VoidPtrLike, H: SelectHandler<N>>(&self, node: &N, handler: &H) -> SelectResults {
57+
pub fn select_style<N: VoidPtrLike, H: SelectHandler<N>>(&self,
58+
node: &N,
59+
inline_style: Option<&Stylesheet>,
60+
handler: &H) -> SelectResults {
5861
let inner_handler = SelectHandlerWrapper {
5962
inner: handler
6063
};
64+
let inner_inline_style = match inline_style {
65+
None => None,
66+
Some(ref sheet) => Some(&sheet.inner),
67+
};
6168
SelectResults {
62-
inner: self.inner.select_style::<N, SelectHandlerWrapper<N, H>>(node, n::ll::t::CSS_MEDIA_SCREEN, None, &inner_handler)
69+
inner: self.inner.select_style::<N, SelectHandlerWrapper<N, H>>(
70+
node,
71+
n::ll::t::CSS_MEDIA_SCREEN,
72+
inner_inline_style,
73+
&inner_handler)
6374
}
6475
}
6576
}

stylesheet.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ CSS stylesheets, owned types, immutable after creation
99
use extra::net::url::Url;
1010
use util::DataStream;
1111
use netsurfcss::stylesheet::CssStylesheet;
12-
use parser::parse_stylesheet;
12+
use parser::{parse_stylesheet, parse_style_attribute};
1313

1414
pub struct Stylesheet {
1515
inner: CssStylesheet
@@ -21,4 +21,10 @@ impl Stylesheet {
2121
inner: parse_stylesheet(url, input)
2222
}
2323
}
24+
25+
pub fn from_attribute(url: Url, data: &str) -> Stylesheet {
26+
Stylesheet {
27+
inner: parse_style_attribute(url, data)
28+
}
29+
}
2430
}

0 commit comments

Comments
 (0)