mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +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]]
|
||||
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)",
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue