Allow units to contain spaces
This commit is contained in:
parent
1842d480e1
commit
fbbafcd2ec
1 changed files with 16 additions and 14 deletions
30
src/parse.rs
30
src/parse.rs
|
@ -164,16 +164,12 @@ fn tokenize(input: &str) -> Vec<Token> {
|
||||||
}
|
}
|
||||||
TokState::Unit => {
|
TokState::Unit => {
|
||||||
if c.is_ascii_digit() || c == '-' {
|
if c.is_ascii_digit() || c == '-' {
|
||||||
tokens.push(Token::Unit(token));
|
tokens.push(Token::Unit(token.trim().to_string()));
|
||||||
state = TokState::Number;
|
state = TokState::Number;
|
||||||
token = String::new();
|
token = String::new();
|
||||||
token.push(c);
|
token.push(c);
|
||||||
} else if !c.is_whitespace() {
|
|
||||||
token.push(c);
|
|
||||||
} else {
|
} else {
|
||||||
tokens.push(Token::Unit(token));
|
token.push(c);
|
||||||
state = TokState::Neutral;
|
|
||||||
token = String::new();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -182,7 +178,7 @@ fn tokenize(input: &str) -> Vec<Token> {
|
||||||
match state {
|
match state {
|
||||||
TokState::Neutral => { assert!(token.len() == 0); }
|
TokState::Neutral => { assert!(token.len() == 0); }
|
||||||
TokState::Number => { tokens.push(Token::Number(token.trim().to_string())); }
|
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
|
tokens
|
||||||
|
@ -304,13 +300,6 @@ mod test {
|
||||||
Token::Unit("ft".to_string()),
|
Token::Unit("ft".to_string()),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
assert_eq!(
|
|
||||||
tokenize("ft in"),
|
|
||||||
vec![
|
|
||||||
Token::Unit("ft".to_string()),
|
|
||||||
Token::Unit("in".to_string()),
|
|
||||||
]
|
|
||||||
);
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
tokenize("5 ft 7 in"),
|
tokenize("5 ft 7 in"),
|
||||||
vec![
|
vec![
|
||||||
|
@ -336,5 +325,18 @@ mod test {
|
||||||
Token::Unit("lbs".to_string()),
|
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()),
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue