mirror of
https://github.com/servo/servo.git
synced 2025-08-06 22:15:33 +01:00
Thread ParseError return values through CSS parsing.
This commit is contained in:
parent
58e39bfffa
commit
27ae1ef2e7
121 changed files with 2133 additions and 1505 deletions
|
@ -8,12 +8,13 @@
|
|||
|
||||
use Atom;
|
||||
use context::QuirksMode;
|
||||
use cssparser::{Delimiter, Parser, Token};
|
||||
use cssparser::{Delimiter, Parser, Token, ParserInput};
|
||||
use parser::ParserContext;
|
||||
use selectors::parser::SelectorParseError;
|
||||
use serialize_comma_separated_list;
|
||||
use std::ascii::AsciiExt;
|
||||
use std::fmt;
|
||||
use style_traits::ToCss;
|
||||
use style_traits::{ToCss, ParseError, StyleParseError};
|
||||
|
||||
#[cfg(feature = "servo")]
|
||||
pub use servo::media_queries::{Device, Expression};
|
||||
|
@ -209,7 +210,8 @@ impl MediaQuery {
|
|||
/// Parse a media query given css input.
|
||||
///
|
||||
/// Returns an error if any of the expressions is unknown.
|
||||
pub fn parse(context: &ParserContext, input: &mut Parser) -> Result<MediaQuery, ()> {
|
||||
pub fn parse<'i, 't>(context: &ParserContext, input: &mut Parser<'i, 't>)
|
||||
-> Result<MediaQuery, ParseError<'i>> {
|
||||
let mut expressions = vec![];
|
||||
|
||||
let qualifier = if input.try(|input| input.expect_ident_matching("only")).is_ok() {
|
||||
|
@ -221,11 +223,15 @@ impl MediaQuery {
|
|||
};
|
||||
|
||||
let media_type = match input.try(|input| input.expect_ident()) {
|
||||
Ok(ident) => try!(MediaQueryType::parse(&*ident)),
|
||||
Err(()) => {
|
||||
Ok(ident) => {
|
||||
let result: Result<_, ParseError> = MediaQueryType::parse(&*ident)
|
||||
.map_err(|()| SelectorParseError::UnexpectedIdent(ident).into());
|
||||
try!(result)
|
||||
}
|
||||
Err(_) => {
|
||||
// Media type is only optional if qualifier is not specified.
|
||||
if qualifier.is_some() {
|
||||
return Err(())
|
||||
return Err(StyleParseError::UnspecifiedError.into())
|
||||
}
|
||||
|
||||
// Without a media type, require at least one expression.
|
||||
|
@ -270,7 +276,7 @@ pub fn parse_media_query_list(context: &ParserContext, input: &mut Parser) -> Me
|
|||
match input.next() {
|
||||
Ok(Token::Comma) => {},
|
||||
Ok(_) => unreachable!(),
|
||||
Err(()) => break,
|
||||
Err(_) => break,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -311,7 +317,8 @@ impl MediaList {
|
|||
///
|
||||
/// Returns true if added, false if fail to parse the medium string.
|
||||
pub fn append_medium(&mut self, context: &ParserContext, new_medium: &str) -> bool {
|
||||
let mut parser = Parser::new(new_medium);
|
||||
let mut input = ParserInput::new(new_medium);
|
||||
let mut parser = Parser::new(&mut input);
|
||||
let new_query = match MediaQuery::parse(&context, &mut parser) {
|
||||
Ok(query) => query,
|
||||
Err(_) => { return false; }
|
||||
|
@ -329,7 +336,8 @@ impl MediaList {
|
|||
///
|
||||
/// Returns true if found and deleted, false otherwise.
|
||||
pub fn delete_medium(&mut self, context: &ParserContext, old_medium: &str) -> bool {
|
||||
let mut parser = Parser::new(old_medium);
|
||||
let mut input = ParserInput::new(old_medium);
|
||||
let mut parser = Parser::new(&mut input);
|
||||
let old_query = match MediaQuery::parse(context, &mut parser) {
|
||||
Ok(query) => query,
|
||||
Err(_) => { return false; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue