style: Define types for pseudo-class string argument storage.
draft
style: Define types for pseudo-class string argument storage.
MozReview-Commit-ID: GH1vHGbR7Bz
--- a/servo/components/style/gecko/selector_parser.rs
+++ b/servo/components/style/gecko/selector_parser.rs
@@ -19,30 +19,33 @@ pub use gecko::snapshot::SnapshotMap;
bitflags! {
flags NonTSPseudoClassFlag: u8 {
// See NonTSPseudoClass::is_internal()
const PSEUDO_CLASS_INTERNAL = 0x01,
}
}
+/// The type used for storing pseudo-class string arguments.
+pub type PseudoClassStringArg = Box<[u16]>;
+
macro_rules! pseudo_class_name {
(bare: [$(($css:expr, $name:ident, $gecko_type:tt, $state:tt, $flags:tt),)*],
string: [$(($s_css:expr, $s_name:ident, $s_gecko_type:tt, $s_state:tt, $s_flags:tt),)*],
keyword: [$(($k_css:expr, $k_name:ident, $k_gecko_type:tt, $k_state:tt, $k_flags:tt),)*]) => {
#[doc = "Our representation of a non tree-structural pseudo-class."]
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum NonTSPseudoClass {
$(
#[doc = $css]
$name,
)*
$(
#[doc = $s_css]
- $s_name(Box<[u16]>),
+ $s_name(PseudoClassStringArg),
)*
$(
#[doc = $k_css]
$k_name(Box<[u16]>),
)*
/// The non-standard `:-moz-any` pseudo-class.
///
/// TODO(emilio): We disallow combinators and pseudos here, so we
--- a/servo/components/style/servo/selector_parser.rs
+++ b/servo/components/style/servo/selector_parser.rs
@@ -155,32 +155,35 @@ impl PseudoElement {
/// Covert non-canonical pseudo-element to canonical one, and keep a
/// canonical one as it is.
pub fn canonical(&self) -> PseudoElement {
self.clone()
}
}
+/// The type used for storing pseudo-class string arguments.
+pub type PseudoClassStringArg = Box<str>;
+
/// A non tree-structural pseudo-class.
/// See https://drafts.csswg.org/selectors-4/#structural-pseudos
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[allow(missing_docs)]
pub enum NonTSPseudoClass {
Active,
AnyLink,
Checked,
Disabled,
Enabled,
Focus,
Fullscreen,
Hover,
Indeterminate,
- Lang(Box<str>),
+ Lang(PseudoClassStringArg),
Link,
PlaceholderShown,
ReadWrite,
ReadOnly,
ServoNonZeroBorder,
ServoCaseSensitiveTypeAttr(Atom),
Target,
Visited,