use crate::{CompoundSelector, CssAtomSet, CssDiagnostic};
use css_parse::{Cursor, Diagnostic, Parse, Parser, Result as ParserResult, T, pseudo_class, pseudo_element};
use csskit_derives::{SemanticEq, ToCursors, ToSpan};
pseudo_element!(
#[derive(ToCursors, ToSpan, SemanticEq, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
#[derive(csskit_derives::NodeWithMetadata)]
pub enum WebkitPseudoElement {
CalendarDatePickerIndicator: CssAtomSet::_WebkitCalendarPickerIndicator,
CapsLockIndicator: CssAtomSet::_WebkitCapsLockIndicator,
ColorSwatch: CssAtomSet::_WebkitColorSwatch,
ColorSwatchWrapper: CssAtomSet::_WebkitColorSwatchWrapper,
ContactsAutoFillButton: CssAtomSet::_WebkitContactsAutoFillButton,
CredentialsAutoFillButton: CssAtomSet::_WebkitCredentialsAutoFillButton,
CreditCardAutoFillButton: CssAtomSet::_WebkitCreditCardAutoFillButton,
DateAndTimeValue: CssAtomSet::_WebkitDateAndTimeValue,
DatetimeEdit: CssAtomSet::_WebkitDatetimeEdit,
DatetimeEditDayField: CssAtomSet::_WebkitDatetimeEditDayField,
DatetimeEditFieldsWrapper: CssAtomSet::_WebkitDatetimeEditFieldsWrapper,
DatetimeEditHourField: CssAtomSet::_WebkitDatetimeEditHourField,
DatetimeEditMeridiemField: CssAtomSet::_WebkitDatetimeEditMeridiemField,
DatetimeEditMillisecondField: CssAtomSet::_WebkitDatetimeEditMillisecondField,
DatetimeEditMinute: CssAtomSet::_WebkitDatetimeEditMinute,
DatetimeEditMinuteField: CssAtomSet::_WebkitDatetimeEditMinuteField,
DatetimeEditMonthField: CssAtomSet::_WebkitDatetimeEditMonthField,
DatetimeEditSecondField: CssAtomSet::_WebkitDatetimeEditSecondField,
DatetimeEditText: CssAtomSet::_WebkitDatetimeEditText,
DatetimeEditYearField: CssAtomSet::_WebkitDatetimeEditYearField,
DetailsMarker: CssAtomSet::_WebkitDetailsMarker,
FileUploadButton: CssAtomSet::_WebkitFileUploadButton, GenericCueRoot: CssAtomSet::_WebkitGenericCueRoot,
InputPlaceholder: CssAtomSet::_WebkitInputPlaceholder, InnerSpinButton: CssAtomSet::_WebkitInnerSpinButton,
ListButton: CssAtomSet::_WebkitListButton,
MediaTextTrackContainer: CssAtomSet::_WebkitMediaTextTrackContainer,
MediaTextTrackDisplay: CssAtomSet::_WebkitMediaTextTrackDisplay,
MediaTextTrackDisplayBackdrop: CssAtomSet::_WebkitMediaTextTrackDisplayBackdrop,
MediaTextTrackRegion: CssAtomSet::_WebkitMediaTextTrackRegion,
MediaTextTrackRegionContainer: CssAtomSet::_WebkitMediaTextTrackRegionContainer,
MeterBar: CssAtomSet::_WebkitMeterBar,
MeterEvenLessGoodValue: CssAtomSet::_WebkitMeterEvenLessGoodValue,
MeterInnerElement: CssAtomSet::_WebkitMeterInnerElement,
MeterOptimumValue: CssAtomSet::_WebkitMeterOptimumValue,
MeterSuboptimumValue: CssAtomSet::_WebkitMeterSuboptimumValue,
OuterSpinButton: CssAtomSet::_WebkitOuterSpinButton, ProgressBar: CssAtomSet::_WebkitProgressBar,
ProgressInnerElement: CssAtomSet::_WebkitProgressInnerElement,
ProgressValue: CssAtomSet::_WebkitProgressValue,
Resizer: CssAtomSet::_WebkitResizer,
Scrollbar: CssAtomSet::_WebkitScrollbar,
ScrollbarButton: CssAtomSet::_WebkitScrollbarButton,
ScrollbarCorner: CssAtomSet::_WebkitScrollbarCorner,
ScrollbarThumb: CssAtomSet::_WebkitScrollbarThumb,
ScrollbarTrack: CssAtomSet::_WebkitScrollbarTrack,
ScrollbarTrackPiece: CssAtomSet::_WebkitScrollbarTrackPiece,
SearchCancelButton: CssAtomSet::_WebkitSearchCancelButton,
SearchDecoration: CssAtomSet::_WebkitSearchDecoration,
SearchResultsButton: CssAtomSet::_WebkitSearchResultsButton,
SliderContainer: CssAtomSet::_WebkitSliderContainer,
SliderRunnableTrack: CssAtomSet::_WebkitSliderRunnableTrack,
SliderThumb: CssAtomSet::_WebkitSliderThumb,
PasswordAutoFillButton: CssAtomSet::_WebkitPasswordAutoFillButton,
TextfieldDecorationContainer: CssAtomSet::_WebkitTextfieldDecorationContainer,
ValidationBubble: CssAtomSet::_WebkitValidationBubble,
ValidationBubbleArrow: CssAtomSet::_WebkitValidationBubbleArrow,
ValidationBubbleArrowClipper: CssAtomSet::_WebkitValidationBubbleArrowClipper,
ValidationBubbleBody: CssAtomSet::_WebkitValidationBubbleBody,
ValidationBubbleHeading: CssAtomSet::_WebkitValidationBubbleHeading,
ValidationBubbleIcon: CssAtomSet::_WebkitValidationBubbleIcon,
ValidationBubbleMessage: CssAtomSet::_WebkitValidationBubbleMessage,
ValidationBubbleTextBlock: CssAtomSet::_WebkitValidationBubbleTextBlock,
}
);
#[derive(ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit)]
#[derive(csskit_derives::NodeWithMetadata)]
pub enum WebkitFunctionalPseudoElement<'a> {
Distributed(WebkitDistrubutedFunctionalPseudoElement<'a>),
}
impl<'a> Parse<'a> for WebkitFunctionalPseudoElement<'a> {
fn parse<I>(p: &mut Parser<'a, I>) -> ParserResult<Self>
where
I: Iterator<Item = Cursor> + Clone,
{
let colons = p.parse::<T![::]>()?;
let function = p.parse::<T![Function]>()?;
let c: Cursor = function.into();
if p.equals_atom(c, &CssAtomSet::_WebkitDistributed) {
let value = p.parse::<CompoundSelector>()?;
let close = p.parse_if_peek::<T![')']>()?;
Ok(Self::Distributed(WebkitDistrubutedFunctionalPseudoElement { colons, function, value, close }))
} else {
Err(Diagnostic::new(c, Diagnostic::unexpected_function))?
}
}
}
#[derive(ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit)]
#[derive(csskit_derives::NodeWithMetadata)]
pub struct WebkitDistrubutedFunctionalPseudoElement<'a> {
#[cfg_attr(feature = "visitable", visit(skip))]
pub colons: T![::],
#[cfg_attr(feature = "visitable", visit(skip))]
pub function: T![Function],
pub value: CompoundSelector<'a>,
#[cfg_attr(feature = "visitable", visit(skip))]
pub close: Option<T![')']>,
}
#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable))]
#[derive(ToCursors, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
pub enum WebkitFunctionalPseudoClass<'a> {
Any(WebkitAnyFunctionalPseudoClass<'a>),
}
impl<'a> Parse<'a> for WebkitFunctionalPseudoClass<'a> {
fn parse<I>(p: &mut Parser<'a, I>) -> ParserResult<Self>
where
I: Iterator<Item = Cursor> + Clone,
{
let colon = p.parse::<T![:]>()?;
let function = p.parse::<T![Function]>()?;
let c: Cursor = function.into();
if p.equals_atom(c, &CssAtomSet::_WebkitAny) {
let value = p.parse::<CompoundSelector>()?;
let close = p.parse_if_peek::<T![')']>()?;
Ok(Self::Any(WebkitAnyFunctionalPseudoClass { colon, function, value, close }))
} else {
Err(Diagnostic::new(c, Diagnostic::unexpected_function))?
}
}
}
#[derive(ToCursors, ToSpan, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
#[derive(csskit_derives::NodeWithMetadata)]
pub struct WebkitAnyFunctionalPseudoClass<'a> {
pub colon: T![:],
pub function: T![Function],
pub value: CompoundSelector<'a>,
pub close: Option<T![')']>,
}
pseudo_class!(
#[derive(ToCursors, ToSpan, SemanticEq, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
#[derive(csskit_derives::NodeWithMetadata)]
pub enum WebkitPseudoClass {
AnimatingFullScreenTransition: CssAtomSet::_WebkitAnimatingFullScreenTransition,
AnyLink: CssAtomSet::_WebkitAnyLink, Autofill: CssAtomSet::_WebkitAutofill, AutofillAndObscured: CssAtomSet::_WebkitAutofillAndObscured,
AutofillStrongPassword: CssAtomSet::_WebkitAutofillStrongPassword,
AutofillStrongPasswordViewable: CssAtomSet::_WebkitAutofillStrongPasswordViewable,
Drag: CssAtomSet::_WebkitDrag,
FullPageMedia: CssAtomSet::_WebkitFullPageMedia,
FullScreen: CssAtomSet::_WebkitFullScreen,
FullScreenAncestor: CssAtomSet::_WebkitFullScreenAncestor,
FullScreenControlsHidden: CssAtomSet::_WebkitFullScreenControlsHidden,
FullScreenDocument: CssAtomSet::_WebkitFullScreenDocument,
}
);