aboutsummaryrefslogtreecommitdiffstats
path: root/components/style/servo/selector_parser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/style/servo/selector_parser.rs')
-rw-r--r--components/style/servo/selector_parser.rs31
1 files changed, 29 insertions, 2 deletions
diff --git a/components/style/servo/selector_parser.rs b/components/style/servo/selector_parser.rs
index 2403e702063..9da80b05253 100644
--- a/components/style/servo/selector_parser.rs
+++ b/components/style/servo/selector_parser.rs
@@ -2,6 +2,10 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+#![deny(missing_docs)]
+
+//! Servo's selector parser.
+
use {Atom, Prefix, Namespace, LocalName};
use attr::{AttrIdentifier, AttrValue};
use cssparser::ToCss;
@@ -15,9 +19,12 @@ use std::borrow::Cow;
use std::fmt;
use std::fmt::Debug;
+/// A pseudo-element, both public and private.
+///
/// NB: If you add to this list, be sure to update `each_pseudo_element` too.
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[allow(missing_docs)]
pub enum PseudoElement {
Before,
After,
@@ -55,6 +62,7 @@ impl ToCss for PseudoElement {
impl PseudoElement {
+ /// Whether the current pseudo element is :before or :after.
#[inline]
pub fn is_before_or_after(&self) -> bool {
match *self {
@@ -64,6 +72,9 @@ impl PseudoElement {
}
}
+ /// Returns which kind of cascade type has this pseudo.
+ ///
+ /// For more info on cascade types, see docs/components/style.md
#[inline]
pub fn cascade_type(&self) -> PseudoElementCascadeType {
match *self {
@@ -83,8 +94,11 @@ impl PseudoElement {
}
}
+/// 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 {
AnyLink,
Link,
@@ -129,6 +143,8 @@ impl ToCss for NonTSPseudoClass {
}
impl NonTSPseudoClass {
+ /// Gets a given state flag for this pseudo-class. This is used to do
+ /// selector matching, and it's set from the DOM.
pub fn state_flag(&self) -> ElementState {
use element_state::*;
use self::NonTSPseudoClass::*;
@@ -153,6 +169,8 @@ impl NonTSPseudoClass {
}
}
+/// The abstract struct we implement the selector parser implementation on top
+/// of.
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
pub struct SelectorImpl;
@@ -289,14 +307,17 @@ impl<'a> ::selectors::Parser for SelectorParser<'a> {
}
impl SelectorImpl {
+ /// Returns the pseudo-element cascade type of the given `pseudo`.
#[inline]
pub fn pseudo_element_cascade_type(pseudo: &PseudoElement) -> PseudoElementCascadeType {
pseudo.cascade_type()
}
+ /// Executes `fun` for each pseudo-element.
#[inline]
pub fn each_pseudo_element<F>(mut fun: F)
- where F: FnMut(PseudoElement) {
+ where F: FnMut(PseudoElement),
+ {
fun(PseudoElement::Before);
fun(PseudoElement::After);
fun(PseudoElement::DetailsContent);
@@ -311,11 +332,13 @@ impl SelectorImpl {
fun(PseudoElement::ServoAnonymousBlock);
}
+ /// Returns the pseudo-class state flag for selector matching.
#[inline]
pub fn pseudo_class_state_flag(pc: &NonTSPseudoClass) -> ElementState {
pc.state_flag()
}
+ /// Returns whether this pseudo is either :before or :after.
#[inline]
pub fn pseudo_is_before_or_after(pseudo: &PseudoElement) -> bool {
pseudo.is_before_or_after()
@@ -326,12 +349,16 @@ impl SelectorImpl {
#[derive(Debug)]
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
pub struct ServoElementSnapshot {
+ /// The stored state of the element.
pub state: Option<ElementState>,
+ /// The set of stored attributes and its values.
pub attrs: Option<Vec<(AttrIdentifier, AttrValue)>>,
+ /// Whether this element is an HTML element in an HTML document.
pub is_html_element_in_html_document: bool,
}
impl ServoElementSnapshot {
+ /// Create an empty element snapshot.
pub fn new(is_html_element_in_html_document: bool) -> Self {
ServoElementSnapshot {
state: None,
@@ -373,7 +400,7 @@ impl ElementSnapshot for ServoElementSnapshot {
}
fn each_class<F>(&self, mut callback: F)
- where F: FnMut(&Atom)
+ where F: FnMut(&Atom),
{
if let Some(v) = self.get_attr(&ns!(), &local_name!("class")) {
for class in v.as_tokens() {