mirror of
https://github.com/servo/servo.git
synced 2025-08-06 22:15:33 +01:00
Bring CSS parse error reporting back. (Still off by default. Enable with RUST_LOG=style
.)
This commit is contained in:
parent
966af0030a
commit
493a9e6a89
6 changed files with 53 additions and 25 deletions
2
components/servo/Cargo.lock
generated
2
components/servo/Cargo.lock
generated
|
@ -134,7 +134,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cssparser"
|
name = "cssparser"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/servo/rust-cssparser#f4214c9a7bfafd6f40a62b0726aa0bde900ef0dc"
|
source = "git+https://github.com/servo/rust-cssparser#42714934cbe83dab349190695503a09ae23f9528"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"encoding 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
|
|
@ -9,7 +9,7 @@ use properties::longhands::font_family::parse_one_family;
|
||||||
use properties::computed_values::font_family::FontFamily;
|
use properties::computed_values::font_family::FontFamily;
|
||||||
use media_queries::Device;
|
use media_queries::Device;
|
||||||
use url::{Url, UrlParser};
|
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,
|
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, ()> {
|
-> Result<FontFaceRule, ()> {
|
||||||
let mut family = None;
|
let mut family = None;
|
||||||
let mut src = 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 {
|
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)) => {
|
Ok(FontFaceDescriptorDeclaration::Family(value)) => {
|
||||||
family = Some(value);
|
family = Some(value);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ use geom::SideOffsets2D;
|
||||||
use values::specified::BorderStyle;
|
use values::specified::BorderStyle;
|
||||||
use values::computed;
|
use values::computed;
|
||||||
use selector_matching::DeclarationBlock;
|
use selector_matching::DeclarationBlock;
|
||||||
use parser::ParserContext;
|
use parser::{ParserContext, log_css_error};
|
||||||
use stylesheets::Origin;
|
use stylesheets::Origin;
|
||||||
|
|
||||||
use self::property_bit_field::PropertyBitField;
|
use self::property_bit_field::PropertyBitField;
|
||||||
|
@ -2363,12 +2363,20 @@ pub fn parse_property_declaration_list(context: &ParserContext, input: &mut Pars
|
||||||
let parser = PropertyDeclarationParser {
|
let parser = PropertyDeclarationParser {
|
||||||
context: context,
|
context: context,
|
||||||
};
|
};
|
||||||
for declaration in DeclarationListParser::new(input, parser) {
|
let mut iter = DeclarationListParser::new(input, parser);
|
||||||
if let Ok((results, important)) = declaration {
|
while let Some(declaration) = iter.next() {
|
||||||
if important {
|
match declaration {
|
||||||
important_declarations.push_all(results.as_slice());
|
Ok((results, important)) => {
|
||||||
} else {
|
if important {
|
||||||
normal_declarations.push_all(results.as_slice());
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ use cssparser::{Parser, decode_stylesheet_bytes,
|
||||||
QualifiedRuleParser, AtRuleParser, RuleListParser, AtRuleType};
|
QualifiedRuleParser, AtRuleParser, RuleListParser, AtRuleType};
|
||||||
use string_cache::{Atom, Namespace};
|
use string_cache::{Atom, Namespace};
|
||||||
use selectors::{Selector, parse_selector_list};
|
use selectors::{Selector, parse_selector_list};
|
||||||
use parser::ParserContext;
|
use parser::{ParserContext, log_css_error};
|
||||||
use properties::{PropertyDeclarationBlock, parse_property_declaration_list};
|
use properties::{PropertyDeclarationBlock, parse_property_declaration_list};
|
||||||
use media_queries::{self, Device, MediaQueryList, parse_media_query_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};
|
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 iter = RuleListParser::new_for_stylesheet(&mut input, rule_parser);
|
||||||
let mut rules = Vec::new();
|
let mut rules = Vec::new();
|
||||||
while let Some(result) = iter.next() {
|
while let Some(result) = iter.next() {
|
||||||
if let Ok(rule) = result {
|
match result {
|
||||||
if let CSSRule::Namespace(ref prefix, ref namespace) = rule {
|
Ok(rule) => {
|
||||||
if let Some(prefix) = prefix.as_ref() {
|
if let CSSRule::Namespace(ref prefix, ref namespace) = rule {
|
||||||
iter.parser.context.namespaces.prefix_map.insert(
|
if let Some(prefix) = prefix.as_ref() {
|
||||||
prefix.clone(), namespace.clone());
|
iter.parser.context.namespaces.prefix_map.insert(
|
||||||
} else {
|
prefix.clone(), namespace.clone());
|
||||||
iter.parser.context.namespaces.default = Some(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 {
|
Stylesheet {
|
||||||
|
@ -114,9 +120,18 @@ impl Stylesheet {
|
||||||
|
|
||||||
|
|
||||||
fn parse_nested_rules(context: &ParserContext, input: &mut Parser) -> Vec<CSSRule> {
|
fn parse_nested_rules(context: &ParserContext, input: &mut Parser) -> Vec<CSSRule> {
|
||||||
RuleListParser::new_for_nested_rule(input, NestedRuleParser { context: context })
|
let mut iter = RuleListParser::new_for_nested_rule(input, NestedRuleParser { context: context });
|
||||||
.filter_map(|result| result.ok())
|
let mut rules = Vec::new();
|
||||||
.collect()
|
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
2
ports/cef/Cargo.lock
generated
|
@ -132,7 +132,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cssparser"
|
name = "cssparser"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/servo/rust-cssparser#f4214c9a7bfafd6f40a62b0726aa0bde900ef0dc"
|
source = "git+https://github.com/servo/rust-cssparser#42714934cbe83dab349190695503a09ae23f9528"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"encoding 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
|
2
ports/gonk/Cargo.lock
generated
2
ports/gonk/Cargo.lock
generated
|
@ -103,7 +103,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cssparser"
|
name = "cssparser"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/servo/rust-cssparser#f4214c9a7bfafd6f40a62b0726aa0bde900ef0dc"
|
source = "git+https://github.com/servo/rust-cssparser#42714934cbe83dab349190695503a09ae23f9528"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"encoding 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue