diff --git a/components/style/values/specified/grid.rs b/components/style/values/specified/grid.rs index 92dbc4fbcaa..82acf232298 100644 --- a/components/style/values/specified/grid.rs +++ b/components/style/values/specified/grid.rs @@ -9,7 +9,7 @@ use parser::{Parse, ParserContext}; use std::ascii::AsciiExt; use std::fmt; use style_traits::ToCss; -use values::{CSSFloat, HasViewportPercentage}; +use values::{CSSFloat, CustomIdent, HasViewportPercentage}; use values::computed::{ComputedValueAsSpecified, Context, ToComputedValue}; use values::specified::LengthOrPercentage; @@ -18,7 +18,6 @@ use values::specified::LengthOrPercentage; /// A `` type. /// /// https://drafts.csswg.org/css-grid/#typedef-grid-row-start-grid-line -#[allow(missing_docs)] pub struct GridLine { /// Flag to check whether it's a `span` keyword. pub is_span: bool, @@ -306,3 +305,22 @@ impl ToComputedValue for TrackSize { } } } + +/// Parse the grid line names into a vector of owned strings. +/// +/// https://drafts.csswg.org/css-grid/#typedef-line-names +pub fn parse_line_names(input: &mut Parser) -> Result, ()> { + input.expect_square_bracket_block()?; + input.parse_nested_block(|input| { + let mut values = vec![]; + while let Ok(ident) = input.try(|i| i.expect_ident()) { + if CustomIdent::from_ident((&*ident).into(), &["span"]).is_err() { + return Err(()) + } + + values.push(ident.into_owned()); + } + + Ok(values) + }) +}