use {
crate::domain::at_rules::counter_style::System,
cssparser::{
BasicParseErrorKind,
CowRcStr,
ParseError,
ParseErrorKind,
SourceLocation,
Token,
},
selectors::parser::{SelectorParseError, SelectorParseErrorKind},
};
#[derive(Debug)]
pub enum CustomParseError<'i> {
UnsupportedAtRule(CowRcStr<'i>),
InvalidParseState,
UnexpectedCharsetAtRule,
UnsupportedCounterStyleProperty(CowRcStr<'i>),
InvalidCounterStyleWithoutSymbols(System),
InvalidCounterStyleNotEnoughSymbols(System),
InvalidCounterStyleWithoutAdditiveSymbols,
InvalidCounterStyleExtendsWithSymbols,
InvalidCounterStyleExtendsWithAdditiveSymbols,
CounterStyleSystemIsNotKnown(CowRcStr<'i>),
CounterStyleSymbolsCanNotBeEmpty,
CounterStyleRangesCanNotHaveStartGreaterThanEnd(i32, i32),
CounterStylePadMinLengthCanNotBeNegative(i32),
CounterStyleAdditiveTupleWeightCanNotBeNegative(i32),
CounterStyleAdditiveSymbolsCanNotHaveASecondWeightEqualToOrGreaterThanTheFirst,
DecimalOrDiscIsNotAllowedInACounterStyleIdentInACounterStyleAtRule,
NoneIsNotAllowedInACounterStyleIdent,
DocumentAtRuleUrlMatchingFunctionWasInvalid,
BadUrlInDeclarationValueBlock(CowRcStr<'i>),
BadStringInDeclarationValueBlock(CowRcStr<'i>),
UnbalancedCloseParenthesisInDeclarationValueBlock,
UnbalancedCloseSquareBracketInDeclarationValueBlock,
UnbalancedCloseCurlyBracketInDeclarationValueBlock,
UnsupportedFontFaceProperty(CowRcStr<'i>),
InvalidFontLanguageOverrideIdentifier(CowRcStr<'i>),
InvalidFontLanguageOverrideOpenTypeLanguageTag(CowRcStr<'i>),
FontFeatureSettingOpenTypeFeatureTagMustBeFourCharacters(CowRcStr<'i>),
FontFeatureSettingOpenTypeFeatureTagMustBePrintableAscii(CowRcStr<'i>),
FontFeatureSettingIfNotAnIntegerMustBeOnOrOff(CowRcStr<'i>),
FontFeatureSettingIntegerMustBePositive(i32),
FontFaceAtRuleFontWeightWasNotAValidIdentifierOrInteger,
FontFaceAtRuleFontFamilyCanNotBeGeneric,
AtRuleImportMustBeBeforeAnyRuleExceptAtRuleCharset,
KeyframePercentageWasNotBetweenZeroAndOneInclusive(f32),
ImportantIsNotAllowedInKeyframePropertyDeclarationValues,
UnexpectedTokenWhenParsingZoom(Token<'i>),
InvalidMediaType(CowRcStr<'i>),
DeprecatedMediaType(CowRcStr<'i>),
UnrecognisedMediaType(CowRcStr<'i>),
DeprecatedMediaQueryExpression(CowRcStr<'i>),
UnsupportedMediaQueryExpression(CowRcStr<'i>),
RatioNumeratorCanNotBeNegativeOrZero(i32),
RatioDivisorCanNotBeNegativeOrZero(i32),
MediaGridMustBeEitherZeroOrOne(i32),
MediaTransform3DMustBeEitherZeroOrOne(i32),
MediaTypeIsOnlyOptionalIfQualifiedIsNotSpecified,
AtRuleNamespaceMustBeBeforeAnyRuleExceptAtRuleCharsetAndAtRuleImport,
UnexpectedTokenForAtNamespaceRuleNamespaceValue(Token<'i>),
InvalidPageSelectorPseudoClass(CowRcStr<'i>),
FontRelativeLengthsAreNotAllowedInAPageAtRule,
ViewportLengthsAreNotAllowedInAPageAtRule,
InvalidSupportsCondition(CowRcStr<'i>),
UnexpectedViewportProperty(CowRcStr<'i>),
SpecificSelectorParseError(Box<SelectorParseError<'i>>),
ThereAreNoSelectors,
SelectorIsInvalidInContext(String),
UnsupportedPseudoClassOrElement(String),
NonTreeStructuralPseudoClassScopeIsObsoleteAsOfFirefox55,
UnexpectedCustomIdent(CowRcStr<'i>),
CustomIdentWasExcluded(CowRcStr<'i>),
CouldNotParseCssSignedNumber(
crate::domain::numbers::CssNumberConversionError,
f32,
),
CouldNotParseCssUnsignedNumber(
crate::domain::numbers::CssNumberConversionError,
f32,
),
CouldNotParseDimensionLessNumber(f32),
CouldNotParseDimension(f32, CowRcStr<'i>),
UnsignedIntegersCanNotBeNegative(i32),
UnsignedIntegersCanNotBeFloats(f32),
UnknownFunctionInValueExpression(CowRcStr<'i>),
CssVariablesInVarExpressionsMustStartWithTwoDashes(CowRcStr<'i>),
SelectorParseErrorKind(SelectorParseErrorKind<'i>),
}
impl<'i> CustomParseError<'i> {
#[inline(always)]
pub(crate) fn unexpectedToken<T>(
unexpectedToken: &Token<'i>,
) -> Result<T, ParseError<'i, CustomParseError<'i>>> {
Err(ParseError {
kind: ParseErrorKind::Basic(BasicParseErrorKind::UnexpectedToken(
unexpectedToken.clone(),
)),
location: SourceLocation { line: 0, column: 0 },
})
}
#[inline(always)]
pub(crate) fn dimensionless<T>(
value: f32,
) -> Result<T, ParseError<'i, CustomParseError<'i>>> {
Err(ParseError {
kind: ParseErrorKind::Custom(
CustomParseError::CouldNotParseDimensionLessNumber(value),
),
location: SourceLocation {
line: value as u32,
column: 0,
},
})
}
}
impl<'i> From<CustomParseError<'i>> for ParseError<'i, CustomParseError<'i>> {
fn from(error: CustomParseError) -> ParseError<CustomParseError> {
ParseError {
kind: ParseErrorKind::Custom(error),
location: SourceLocation { line: 0, column: 0 },
}
}
}
impl<'i> From<SelectorParseErrorKind<'i>> for CustomParseError<'i> {
fn from(error: SelectorParseErrorKind) -> CustomParseError {
CustomParseError::SelectorParseErrorKind(error)
}
}