Skip to main content

oni_comb_parser/text/
lexeme.rs

1use crate::combinator::zip_left::ZipLeft;
2use crate::parser::Parser;
3use crate::parser_ext::ParserExt;
4use crate::str_input::StrInput;
5use crate::text::take_while0::{take_while0, TakeWhile0};
6
7fn is_ws(c: char) -> bool {
8  c.is_ascii_whitespace()
9}
10
11/// パーサーを実行した後に後続の空白を消費するトークンラッパー。
12///
13/// ```ignore
14/// let lbrace = lexeme(char('{'));
15/// let number = lexeme(integer());
16/// ```
17pub fn lexeme<'a, P>(parser: P) -> ZipLeft<P, TakeWhile0<fn(char) -> bool>>
18where
19  P: Parser<StrInput<'a>, Error = crate::error::ParseError>, {
20  parser.zip_left(take_while0(is_ws as fn(char) -> bool))
21}