diff options
author | Margaret Meyerhofer <mmeyerhofer@mozilla.com> | 2012-06-11 16:43:55 -0700 |
---|---|---|
committer | Margaret Meyerhofer <mmeyerhofer@mozilla.com> | 2012-06-14 15:13:50 -0700 |
commit | 4cff78af3659ed0520ce5d0b0bf3eec026edc876 (patch) | |
tree | f096d04f1f35238b1202fea3a15b65955e09ba1d /src/servo/parser/css_builder.rs | |
parent | 62496f9166754b426f333fcb9c814711f338413d (diff) | |
download | servo-4cff78af3659ed0520ce5d0b0bf3eec026edc876.tar.gz servo-4cff78af3659ed0520ce5d0b0bf3eec026edc876.zip |
Refactored color functions into a separate module and added support for more types of input.
Diffstat (limited to 'src/servo/parser/css_builder.rs')
-rw-r--r-- | src/servo/parser/css_builder.rs | 72 |
1 files changed, 1 insertions, 71 deletions
diff --git a/src/servo/parser/css_builder.rs b/src/servo/parser/css_builder.rs index 30133f3b577..6020b3fb76a 100644 --- a/src/servo/parser/css_builder.rs +++ b/src/servo/parser/css_builder.rs @@ -10,6 +10,7 @@ import parser::lexer::css::{token, to_start_desc, to_end_desc, to_eof}; import comm::recv; import option::is_none; +import util::color::parsing::parse_color; type token_reader = {stream : port<token>, mut lookahead : option<token>}; @@ -58,77 +59,6 @@ fn parse_element(reader : token_reader) -> option<~selector> { ret some(~element(elmt_name, attr_list)); } -// Currently colors are supported in rgb(a,b,c) form and also by -// keywords for several common colors. -// TODO: extend this -fn parse_color(color : str) -> uint { - let blue_unit = 1u; - let green_unit = 256u; - let red_unit = 256u * 256u; - - let result_color = if color.starts_with("rgb(") { - let color_vec = str::bytes(color); - let mut i = 4u; - let mut red_vec = []; - let mut green_vec = []; - let mut blue_vec = []; - - while i < color_vec.len() && color_vec[i] != ',' as u8 { - red_vec += [color_vec[i]]; - i += 1u; - } - - i += 1u; - - while i < color_vec.len() && color_vec[i] != ',' as u8 { - green_vec += [color_vec[i]]; - i += 1u; - } - - i += 1u; - - while i < color_vec.len() && color_vec[i] != ')' as u8 { - blue_vec += [color_vec[i]]; - i += 1u; - } - - // TODO, fail by ignoring the rule instead of setting the - // color to black - - let blue_intense = alt uint::from_str(str::from_bytes(blue_vec)) { - some(c) { c } - none { 0u } - }; - - let green_intense = alt uint::from_str(str::from_bytes(green_vec)) { - some(c) { c } - none { 0u } - }; - - let red_intense = alt uint::from_str(str::from_bytes(red_vec)) { - some(c) { c } - none { 0u } - }; - - - blue_unit * blue_intense + green_intense * green_unit - + red_intense * red_unit - } else { - alt color { - "red" { red_unit * 255u } - "blue" { blue_unit * 255u } - "green" { green_unit * 255u} - "white" { red_unit * 256u - 1u } - "black" { 0u } - // TODO, fail by ignoring the rule instead of setting the - // color to black - _ { #debug["Unrecognized color %s", color]; 0u } - } - }; - - ret result_color; -} - fn parse_rule(reader : token_reader) -> option<~rule> { let mut sel_list = []; let mut desc_list = []; |