Handle utf8 input (a bit)

This commit is contained in:
ConnorSkees 2020-02-23 07:52:14 -05:00
parent ef4a9e9ded
commit 4c3f5e24ee
4 changed files with 8 additions and 1 deletions

View File

@ -134,7 +134,10 @@ impl<'a> Iterator for Lexer<'a> {
'<' => symbol!(self, Lt), '<' => symbol!(self, Lt),
'>' => symbol!(self, Gt), '>' => symbol!(self, Gt),
'\0' => return None, '\0' => return None,
_ => todo!("unknown char"), &v => {
self.buf.next();
TokenKind::Unknown(v.clone())
}
}; };
self.pos.next_char(); self.pos.next_char();
Some(Token { Some(Token {

View File

@ -151,6 +151,7 @@ pub(crate) enum TokenKind {
Op(Op), Op(Op),
MultilineComment(String), MultilineComment(String),
Interpolation, Interpolation,
Unknown(char),
} }
impl TokenKind { impl TokenKind {
@ -172,6 +173,7 @@ impl Display for TokenKind {
TokenKind::Keyword(kw) => write!(f, "{}", kw), TokenKind::Keyword(kw) => write!(f, "{}", kw),
TokenKind::MultilineComment(s) => write!(f, "/*{}*/", s), TokenKind::MultilineComment(s) => write!(f, "/*{}*/", s),
TokenKind::Variable(s) => write!(f, "{}", s), TokenKind::Variable(s) => write!(f, "{}", s),
TokenKind::Unknown(s) => write!(f, "{}", s),
TokenKind::Interpolation => { TokenKind::Interpolation => {
panic!("we don't want to format TokenKind::Interpolation using Display") panic!("we don't want to format TokenKind::Interpolation using Display")
} }

View File

@ -343,6 +343,7 @@ impl Value {
TokenKind::Keyword(Keyword::True) => Ok(Value::True), TokenKind::Keyword(Keyword::True) => Ok(Value::True),
TokenKind::Keyword(Keyword::False) => Ok(Value::False), TokenKind::Keyword(Keyword::False) => Ok(Value::False),
TokenKind::Keyword(Keyword::Null) => Ok(Value::Null), TokenKind::Keyword(Keyword::Null) => Ok(Value::Null),
TokenKind::Unknown(c) => Ok(Value::Ident(c.to_string(), QuoteKind::None)),
_ => Err("Unexpected token in value parsing".into()), _ => Err("Unexpected token in value parsing".into()),
} }
} }

View File

@ -27,3 +27,4 @@ test!(
"$a-b: red; $a_b: green; a {\n color: $a-b;\n}\n", "$a-b: red; $a_b: green; a {\n color: $a-b;\n}\n",
"a {\n color: green;\n}\n" "a {\n color: green;\n}\n"
); );
test!(utf8_input, "a {\n color: 🦆;\n}\n");