use super::*;
pub fn groupenize(tokens: &mut PeekableTokenStream<impl TokenStream>, delimiter: Option<Symbol>) -> PeekableTokenStream<impl TokenStream + '_> {
std::iter::from_fn(move || {
match tokens.next() {
Some(Token {
content: TokenContent::Symbol(
symbol @ (
Symbol::ParenLeft |
Symbol::CurlyLeft |
Symbol::BraketLeft
)
),
start,
end
}) => {
let group: Vec<Token> = groupenize(tokens, symbol.get_delimiter()).collect();
let end = group.last().map(|t| t.end).unwrap_or_else(|| end+1);
let group = TokenContent::Group(symbol, group);
Some(Token {
content: group,
start,
end
})
},
Some(Token {
content: TokenContent::Symbol(
symbol
),
..
}) if delimiter.map(|d| d == symbol).unwrap_or(false) => {
None },
Some(token) => Some(token),
None => None, }
}).peekmore()
}