diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-12-06 15:37:17 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-12-06 15:37:17 +0100 |
| commit | b2572f9d48a8f0efd30014302dcc271cd89fa91e (patch) | |
| tree | d355df33cd125389b582274ae3fed6e7bcabcacb /src/syntax | |
| parent | 3ecb0c754bc1777e002a43e4c34b27e676f9a95c (diff) | |
Math shorthands
Diffstat (limited to 'src/syntax')
| -rw-r--r-- | src/syntax/ast.rs | 5 | ||||
| -rw-r--r-- | src/syntax/parsing.rs | 1 | ||||
| -rw-r--r-- | src/syntax/tokens.rs | 12 |
3 files changed, 18 insertions, 0 deletions
diff --git a/src/syntax/ast.rs b/src/syntax/ast.rs index 55586feb..3661c156 100644 --- a/src/syntax/ast.rs +++ b/src/syntax/ast.rs @@ -441,6 +441,9 @@ pub enum MathNode { Linebreak(Linebreak), /// An escape sequence: `\#`, `\u{1F5FA}`. Escape(Escape), + /// A shorthand for a unicode codepoint. For example, `->` for a right + /// arrow. + Shorthand(Shorthand), /// An atom: `x`, `+`, `12`. Atom(Atom), /// Symbol notation: `:arrow:l:` or `arrow:l`. Notations without any colons @@ -464,6 +467,7 @@ impl AstNode for MathNode { SyntaxKind::Space { .. } => node.cast().map(Self::Space), SyntaxKind::Linebreak => node.cast().map(Self::Linebreak), SyntaxKind::Escape(_) => node.cast().map(Self::Escape), + SyntaxKind::Shorthand(_) => node.cast().map(Self::Shorthand), SyntaxKind::Atom(_) => node.cast().map(Self::Atom), SyntaxKind::Symbol(_) => node.cast().map(Self::Symbol), SyntaxKind::Script => node.cast().map(Self::Script), @@ -479,6 +483,7 @@ impl AstNode for MathNode { Self::Space(v) => v.as_untyped(), Self::Linebreak(v) => v.as_untyped(), Self::Escape(v) => v.as_untyped(), + Self::Shorthand(v) => v.as_untyped(), Self::Atom(v) => v.as_untyped(), Self::Symbol(v) => v.as_untyped(), Self::Script(v) => v.as_untyped(), diff --git a/src/syntax/parsing.rs b/src/syntax/parsing.rs index 5bd5e63b..97570950 100644 --- a/src/syntax/parsing.rs +++ b/src/syntax/parsing.rs @@ -442,6 +442,7 @@ fn math_primary(p: &mut Parser) { | SyntaxKind::Linebreak | SyntaxKind::Escape(_) | SyntaxKind::Str(_) + | SyntaxKind::Shorthand(_) | SyntaxKind::Symbol(_) => p.eat(), // Atoms. diff --git a/src/syntax/tokens.rs b/src/syntax/tokens.rs index 57188096..ff6a1a96 100644 --- a/src/syntax/tokens.rs +++ b/src/syntax/tokens.rs @@ -439,6 +439,18 @@ impl Tokens<'_> { impl Tokens<'_> { fn math(&mut self, start: usize, c: char) -> SyntaxKind { match c { + // Symbol shorthands. + '|' if self.s.eat_if("->") => SyntaxKind::Shorthand('\u{21A6}'), + '<' if self.s.eat_if("->") => SyntaxKind::Shorthand('\u{2194}'), + '<' if self.s.eat_if("=>") => SyntaxKind::Shorthand('\u{21D4}'), + '!' if self.s.eat_if('=') => SyntaxKind::Shorthand('\u{2260}'), + '<' if self.s.eat_if('=') => SyntaxKind::Shorthand('\u{2264}'), + '>' if self.s.eat_if('=') => SyntaxKind::Shorthand('\u{2265}'), + '<' if self.s.eat_if('-') => SyntaxKind::Shorthand('\u{2190}'), + '-' if self.s.eat_if('>') => SyntaxKind::Shorthand('\u{2192}'), + '=' if self.s.eat_if('>') => SyntaxKind::Shorthand('\u{21D2}'), + ':' if self.s.eat_if('=') => SyntaxKind::Shorthand('\u{2254}'), + // Multi-char things. '#' => self.hash(start), |
