Bring CSS parse error reporting back. (Still off by default. Enable with RUST_LOG=style.)

This commit is contained in:
Simon Sapin 2015-01-28 20:35:12 +01:00
parent 966af0030a
commit 493a9e6a89
6 changed files with 53 additions and 25 deletions

View file

@ -134,7 +134,7 @@ dependencies = [
[[package]]
name = "cssparser"
version = "0.2.0"
source = "git+https://github.com/servo/rust-cssparser#f4214c9a7bfafd6f40a62b0726aa0bde900ef0dc"
source = "git+https://github.com/servo/rust-cssparser#42714934cbe83dab349190695503a09ae23f9528"
dependencies = [
"encoding 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
"matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",

View file

@ -9,7 +9,7 @@ use properties::longhands::font_family::parse_one_family;
use properties::computed_values::font_family::FontFamily;
use media_queries::Device;
use url::{Url, UrlParser};
use parser::ParserContext;
use parser::{ParserContext, log_css_error};
pub fn iter_font_face_rules_inner<F>(rules: &[CSSRule], device: &Device,
@ -54,9 +54,14 @@ pub fn parse_font_face_block(context: &ParserContext, input: &mut Parser)
-> Result<FontFaceRule, ()> {
let mut family = None;
let mut src = None;
for declaration in DeclarationListParser::new(input, FontFaceRuleParser { context: context }) {
let mut iter = DeclarationListParser::new(input, FontFaceRuleParser { context: context });
while let Some(declaration) = iter.next() {
match declaration {
Err(()) => {}
Err(range) => {
let message = format!("Unsupported @font-face descriptor declaration: '{}'",
iter.input.slice(range));
log_css_error(iter.input, range.start, &*message);
}
Ok(FontFaceDescriptorDeclaration::Family(value)) => {
family = Some(value);
}

View file

@ -20,7 +20,7 @@ use geom::SideOffsets2D;
use values::specified::BorderStyle;
use values::computed;
use selector_matching::DeclarationBlock;
use parser::ParserContext;
use parser::{ParserContext, log_css_error};
use stylesheets::Origin;
use self::property_bit_field::PropertyBitField;
@ -2363,12 +2363,20 @@ pub fn parse_property_declaration_list(context: &ParserContext, input: &mut Pars
let parser = PropertyDeclarationParser {
context: context,
};
for declaration in DeclarationListParser::new(input, parser) {
if let Ok((results, important)) = declaration {
if important {
important_declarations.push_all(results.as_slice());
} else {
normal_declarations.push_all(results.as_slice());
let mut iter = DeclarationListParser::new(input, parser);
while let Some(declaration) = iter.next() {
match declaration {
Ok((results, important)) => {
if important {
important_declarations.push_all(results.as_slice());
} else {
normal_declarations.push_all(results.as_slice());
}
}
Err(range) => {
let message = format!("Unsupported property declaration: '{}'",
iter.input.slice(range));
log_css_error(iter.input, range.start, &*message);
}
}
}

View file

@ -13,7 +13,7 @@ use cssparser::{Parser, decode_stylesheet_bytes,
QualifiedRuleParser, AtRuleParser, RuleListParser, AtRuleType};
use string_cache::{Atom, Namespace};
use selectors::{Selector, parse_selector_list};
use parser::ParserContext;
use parser::{ParserContext, log_css_error};
use properties::{PropertyDeclarationBlock, parse_property_declaration_list};
use media_queries::{self, Device, MediaQueryList, parse_media_query_list};
use font_face::{FontFaceRule, Source, parse_font_face_block, iter_font_face_rules_inner};
@ -93,16 +93,22 @@ impl Stylesheet {
let mut iter = RuleListParser::new_for_stylesheet(&mut input, rule_parser);
let mut rules = Vec::new();
while let Some(result) = iter.next() {
if let Ok(rule) = result {
if let CSSRule::Namespace(ref prefix, ref namespace) = rule {
if let Some(prefix) = prefix.as_ref() {
iter.parser.context.namespaces.prefix_map.insert(
prefix.clone(), namespace.clone());
} else {
iter.parser.context.namespaces.default = Some(namespace.clone());
match result {
Ok(rule) => {
if let CSSRule::Namespace(ref prefix, ref namespace) = rule {
if let Some(prefix) = prefix.as_ref() {
iter.parser.context.namespaces.prefix_map.insert(
prefix.clone(), namespace.clone());
} else {
iter.parser.context.namespaces.default = Some(namespace.clone());
}
}
rules.push(rule);
}
Err(range) => {
let message = format!("Invalid rule: '{}'", iter.input.slice(range));
log_css_error(iter.input, range.start, &*message);
}
rules.push(rule);
}
}
Stylesheet {
@ -114,9 +120,18 @@ impl Stylesheet {
fn parse_nested_rules(context: &ParserContext, input: &mut Parser) -> Vec<CSSRule> {
RuleListParser::new_for_nested_rule(input, NestedRuleParser { context: context })
.filter_map(|result| result.ok())
.collect()
let mut iter = RuleListParser::new_for_nested_rule(input, NestedRuleParser { context: context });
let mut rules = Vec::new();
while let Some(result) = iter.next() {
match result {
Ok(rule) => rules.push(rule),
Err(range) => {
let message = format!("Unsupported rule: '{}'", iter.input.slice(range));
log_css_error(iter.input, range.start, &*message);
}
}
}
rules
}

2
ports/cef/Cargo.lock generated
View file

@ -132,7 +132,7 @@ dependencies = [
[[package]]
name = "cssparser"
version = "0.2.0"
source = "git+https://github.com/servo/rust-cssparser#f4214c9a7bfafd6f40a62b0726aa0bde900ef0dc"
source = "git+https://github.com/servo/rust-cssparser#42714934cbe83dab349190695503a09ae23f9528"
dependencies = [
"encoding 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
"matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",

2
ports/gonk/Cargo.lock generated
View file

@ -103,7 +103,7 @@ dependencies = [
[[package]]
name = "cssparser"
version = "0.2.0"
source = "git+https://github.com/servo/rust-cssparser#f4214c9a7bfafd6f40a62b0726aa0bde900ef0dc"
source = "git+https://github.com/servo/rust-cssparser#42714934cbe83dab349190695503a09ae23f9528"
dependencies = [
"encoding 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
"matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",