Skip to content

Commit 5d5ac9f

Browse files
committed
Fill in some simple bits.
1 parent 8629038 commit 5d5ac9f

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

src/lib.rs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ pub enum ParseError {
1717
InvalidCustomIdent,
1818
InvalidNameStart,
1919
EmptyName,
20+
UnclosedDataTypeName,
21+
UnknownDataTypeName,
2022
}
2123

2224
/// https://drafts.css-houdini.org/css-properties-values-api-1/#multipliers
@@ -74,6 +76,13 @@ impl ComponentName {
7476
#[derive(Debug, PartialEq)]
7577
pub enum DataType {}
7678

79+
impl DataType {
80+
fn from_bytes(_: &[u8]) -> Option<Self> {
81+
// TODO
82+
None
83+
}
84+
}
85+
7786
/// Parse a syntax descriptor or universal syntax descriptor.
7887
pub fn parse_descriptor(input: &str) -> Result<Descriptor, ParseError> {
7988
let input = input.as_bytes();
@@ -214,7 +223,22 @@ impl<'a, 'b> Parser<'a, 'b> {
214223

215224
/// https://drafts.css-houdini.org/css-properties-values-api-1/#consume-data-type-name
216225
fn parse_data_type_name(&mut self) -> Result<DataType, ParseError> {
217-
unimplemented!()
226+
let start = self.position;
227+
loop {
228+
let byte = match self.peek() {
229+
Some(b) => b,
230+
None => return Err(ParseError::UnclosedDataTypeName),
231+
};
232+
if byte != b'>' {
233+
continue;
234+
}
235+
let ty = match DataType::from_bytes(&self.input[start..self.position]) {
236+
Some(ty) => ty,
237+
None => return Err(ParseError::UnknownDataTypeName),
238+
};
239+
self.position += 1;
240+
return Ok(ty)
241+
}
218242
}
219243

220244
/// https://drafts.csswg.org/css-syntax-3/#consume-a-name

0 commit comments

Comments
 (0)