diff options
| author | Laurenz <laurmaedje@gmail.com> | 2020-08-27 21:21:23 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-27 21:21:23 +0200 |
| commit | ad8e391c69fdcfc18fccd448c7bfc2d78d482ada (patch) | |
| tree | 01d4e84f61e44939cccf7207c79541f1c616b209 /src/syntax/tokens.rs | |
| parent | 141d69cb60d4f565f06ccd4ebeb353e748fadb7f (diff) | |
| parent | c099b8b9b453485d85d1bc85b5402cc43886bf14 (diff) | |
Merge pull request #10 from typst/multi-invocation
Add Multi-Invokation ๐จโ๐ฉโ๐งโ๐ง
Diffstat (limited to 'src/syntax/tokens.rs')
| -rw-r--r-- | src/syntax/tokens.rs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/syntax/tokens.rs b/src/syntax/tokens.rs index 50eea455..24d8ecfb 100644 --- a/src/syntax/tokens.rs +++ b/src/syntax/tokens.rs @@ -34,6 +34,8 @@ pub enum Token<'s> { LeftBrace, /// A right brace in a function header: `}`. RightBrace, + /// A double forward chevron in a function header: `>>`. + Chain, /// A colon in a function header: `:`. Colon, @@ -108,6 +110,7 @@ impl<'s> Token<'s> { RightParen => "closing paren", LeftBrace => "opening brace", RightBrace => "closing brace", + Chain => "function chain operator", Colon => "colon", Comma => "comma", Equals => "equals sign", @@ -218,6 +221,8 @@ impl<'s> Iterator for Tokens<'s> { ':' if self.mode == Header => Colon, ',' if self.mode == Header => Comma, '=' if self.mode == Header => Equals, + '>' if self.mode == Header && self.peek() == Some('>') => + self.read_chain(), // Expression operators. '+' if self.mode == Header => Plus, @@ -308,6 +313,11 @@ impl<'s> Tokens<'s> { }, true, 0, -2).0) } + fn read_chain(&mut self) -> Token<'s> { + assert!(self.eat() == Some('>')); + Chain + } + fn read_whitespace(&mut self, start: Pos) -> Token<'s> { self.read_string_until(|n| !n.is_whitespace(), false, 0, 0); let end = self.pos(); @@ -490,6 +500,7 @@ mod tests { LeftBracket as L, RightBracket as R, LeftParen as LP, RightParen as RP, LeftBrace as LB, RightBrace as RB, + Chain, Ident as Id, Bool, Number as Num, @@ -576,8 +587,10 @@ mod tests { t!(Header, "120%" => Num(1.2)); t!(Header, "12e4%" => Num(1200.0)); t!(Header, "__main__" => Id("__main__")); + t!(Header, ">main" => Invalid(">main")); t!(Header, ".func.box" => Id(".func.box")); t!(Header, "arg, _b, _1" => Id("arg"), Comma, S(0), Id("_b"), Comma, S(0), Id("_1")); + t!(Header, "f: arg >> g" => Id("f"), Colon, S(0), Id("arg"), S(0), Chain, S(0), Id("g")); t!(Header, "12_pt, 12pt" => Invalid("12_pt"), Comma, S(0), Len(Length::pt(12.0))); t!(Header, "1e5in" => Len(Length::inches(100000.0))); t!(Header, "2.3cm" => Len(Length::cm(2.3))); |
