Allow units to contain spaces

This commit is contained in:
Juhani Krekelä 2023-05-29 21:43:02 +03:00
parent 1842d480e1
commit fbbafcd2ec
1 changed files with 16 additions and 14 deletions

View File

@ -164,16 +164,12 @@ fn tokenize(input: &str) -> Vec<Token> {
}
TokState::Unit => {
if c.is_ascii_digit() || c == '-' {
tokens.push(Token::Unit(token));
tokens.push(Token::Unit(token.trim().to_string()));
state = TokState::Number;
token = String::new();
token.push(c);
} else if !c.is_whitespace() {
token.push(c);
} else {
tokens.push(Token::Unit(token));
state = TokState::Neutral;
token = String::new();
token.push(c);
}
}
}
@ -182,7 +178,7 @@ fn tokenize(input: &str) -> Vec<Token> {
match state {
TokState::Neutral => { assert!(token.len() == 0); }
TokState::Number => { tokens.push(Token::Number(token.trim().to_string())); }
TokState::Unit => { tokens.push(Token::Unit(token)); }
TokState::Unit => { tokens.push(Token::Unit(token.trim().to_string())); }
}
tokens
@ -304,13 +300,6 @@ mod test {
Token::Unit("ft".to_string()),
]
);
assert_eq!(
tokenize("ft in"),
vec![
Token::Unit("ft".to_string()),
Token::Unit("in".to_string()),
]
);
assert_eq!(
tokenize("5 ft 7 in"),
vec![
@ -336,5 +325,18 @@ mod test {
Token::Unit("lbs".to_string()),
]
);
assert_eq!(
tokenize("sq ft"),
vec![
Token::Unit("sq ft".to_string()),
]
);
assert_eq!(
tokenize("sq ft2"),
vec![
Token::Unit("sq ft".to_string()),
Token::Number("2".to_string()),
]
);
}
}