summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/syntax/ast.rs28
-rw-r--r--src/syntax/lexer.rs38
2 files changed, 49 insertions, 17 deletions
diff --git a/src/syntax/ast.rs b/src/syntax/ast.rs
index 9b76d292..73aa41e1 100644
--- a/src/syntax/ast.rs
+++ b/src/syntax/ast.rs
@@ -427,6 +427,8 @@ node! {
impl Shorthand {
/// A list of all shorthands.
pub const LIST: &[(&'static str, char)] = &[
+ // Both.
+ ("...", '…'),
// Text only.
("~", '\u{00A0}'),
("--", '\u{2013}'),
@@ -437,25 +439,39 @@ impl Shorthand {
("'", '′'),
("*", '∗'),
("!=", '≠'),
+ (":=", '≔'),
+ ("::=", '⩴'),
+ ("=:", '≕'),
("<<", '≪'),
("<<<", '⋘'),
(">>", '≫'),
(">>>", '⋙'),
("<=", '≤'),
(">=", '≥'),
- ("<-", '←'),
("->", '→'),
- ("=>", '⇒'),
+ ("-->", '⟶'),
("|->", '↦'),
- ("|=>", '⤇'),
+ (">->", '↣'),
+ ("->>", '↠'),
+ ("<-", '←'),
+ ("<--", '⟵'),
+ ("<-<", '↢'),
+ ("<<-", '↞'),
("<->", '↔'),
+ ("<-->", '⟷'),
+ ("~>", '⇝'),
+ ("~~>", '⟿'),
+ ("<~", '⇜'),
+ ("<~~", '⬳'),
+ ("=>", '⇒'),
+ ("|=>", '⤇'),
+ ("==>", '⟹'),
+ ("<==", '⟸'),
("<=>", '⇔'),
- (":=", '≔'),
+ ("<==>", '⟺'),
("[|", '⟦'),
("|]", '⟧'),
("||", '‖'),
- // Both.
- ("...", '…'),
];
/// Get the shorthanded character.
diff --git a/src/syntax/lexer.rs b/src/syntax/lexer.rs
index 3fea3fe1..90a10f52 100644
--- a/src/syntax/lexer.rs
+++ b/src/syntax/lexer.rs
@@ -375,25 +375,41 @@ impl Lexer<'_> {
'\\' => self.backslash(),
'"' => self.string(),
+ '-' if self.s.eat_if(">>") => SyntaxKind::Shorthand,
+ '-' if self.s.eat_if('>') => SyntaxKind::Shorthand,
+ '-' if self.s.eat_if("->") => SyntaxKind::Shorthand,
+ ':' if self.s.eat_if('=') => SyntaxKind::Shorthand,
+ ':' if self.s.eat_if(":=") => SyntaxKind::Shorthand,
+ '!' if self.s.eat_if('=') => SyntaxKind::Shorthand,
'.' if self.s.eat_if("..") => SyntaxKind::Shorthand,
- '|' if self.s.eat_if("->") => SyntaxKind::Shorthand,
- '|' if self.s.eat_if("=>") => SyntaxKind::Shorthand,
+ '[' if self.s.eat_if('|') => SyntaxKind::Shorthand,
+ '<' if self.s.eat_if("==>") => SyntaxKind::Shorthand,
+ '<' if self.s.eat_if("-->") => SyntaxKind::Shorthand,
+ '<' if self.s.eat_if("--") => SyntaxKind::Shorthand,
+ '<' if self.s.eat_if("-<") => SyntaxKind::Shorthand,
+ '<' if self.s.eat_if("->") => SyntaxKind::Shorthand,
+ '<' if self.s.eat_if("<-") => SyntaxKind::Shorthand,
'<' if self.s.eat_if("<<") => SyntaxKind::Shorthand,
- '>' if self.s.eat_if(">>") => SyntaxKind::Shorthand,
'<' if self.s.eat_if("=>") => SyntaxKind::Shorthand,
- '<' if self.s.eat_if("->") => SyntaxKind::Shorthand,
- '!' if self.s.eat_if('=') => SyntaxKind::Shorthand,
- '<' if self.s.eat_if('<') => SyntaxKind::Shorthand,
- '>' if self.s.eat_if('>') => SyntaxKind::Shorthand,
+ '<' if self.s.eat_if("==") => SyntaxKind::Shorthand,
+ '<' if self.s.eat_if("~~") => SyntaxKind::Shorthand,
'<' if self.s.eat_if('=') => SyntaxKind::Shorthand,
- '>' if self.s.eat_if('=') => SyntaxKind::Shorthand,
+ '<' if self.s.eat_if('<') => SyntaxKind::Shorthand,
'<' if self.s.eat_if('-') => SyntaxKind::Shorthand,
- '-' if self.s.eat_if('>') => SyntaxKind::Shorthand,
+ '<' if self.s.eat_if('~') => SyntaxKind::Shorthand,
+ '>' if self.s.eat_if("->") => SyntaxKind::Shorthand,
+ '>' if self.s.eat_if(">>") => SyntaxKind::Shorthand,
+ '=' if self.s.eat_if("=>") => SyntaxKind::Shorthand,
'=' if self.s.eat_if('>') => SyntaxKind::Shorthand,
- ':' if self.s.eat_if('=') => SyntaxKind::Shorthand,
- '[' if self.s.eat_if('|') => SyntaxKind::Shorthand,
+ '=' if self.s.eat_if(':') => SyntaxKind::Shorthand,
+ '>' if self.s.eat_if('=') => SyntaxKind::Shorthand,
+ '>' if self.s.eat_if('>') => SyntaxKind::Shorthand,
+ '|' if self.s.eat_if("->") => SyntaxKind::Shorthand,
+ '|' if self.s.eat_if("=>") => SyntaxKind::Shorthand,
'|' if self.s.eat_if(']') => SyntaxKind::Shorthand,
'|' if self.s.eat_if('|') => SyntaxKind::Shorthand,
+ '~' if self.s.eat_if("~>") => SyntaxKind::Shorthand,
+ '~' if self.s.eat_if('>') => SyntaxKind::Shorthand,
'*' | '\'' | '-' => SyntaxKind::Shorthand,
'#' => SyntaxKind::Hashtag,