diff --git a/src/syntax/ast.rs b/src/syntax/ast.rs index 1d2ebe178..1cc29b04b 100644 --- a/src/syntax/ast.rs +++ b/src/syntax/ast.rs @@ -424,35 +424,41 @@ node! { } impl Shorthand { + /// A list of all shorthands. + pub const LIST: &[(&'static str, char)] = &[ + ("~", '\u{00A0}'), + ("--", '\u{2013}'), + ("---", '\u{2014}'), + ("-?", '\u{00AD}'), + ("...", '…'), + ("*", '∗'), + ("!=", '≠'), + ("<<", '≪'), + ("<<<", '⋘'), + (">>", '≫'), + (">>>", '⋙'), + ("<=", '≤'), + (">=", '≥'), + ("<-", '←'), + ("->", '→'), + ("=>", '⇒'), + ("|->", '↦'), + ("|=>", '⤇'), + ("<->", '↔'), + ("<=>", '⇔'), + (":=", '≔'), + ("[|", '⟦'), + ("|]", '⟧'), + ("||", '‖'), + ]; + /// Get the shorthanded character. pub fn get(&self) -> char { - match self.0.text().as_str() { - "~" => '\u{00A0}', - "--" => '\u{2013}', - "---" => '\u{2014}', - "-?" => '\u{00AD}', - "..." => '…', - "*" => '∗', - "!=" => '≠', - "<<" => '≪', - "<<<" => '⋘', - ">>" => '≫', - ">>>" => '⋙', - "<=" => '≤', - ">=" => '≥', - "<-" => '←', - "->" => '→', - "=>" => '⇒', - "|->" => '↦', - "|=>" => '⤇', - "<->" => '↔', - "<=>" => '⇔', - ":=" => '≔', - "[|" => '⟦', - "|]" => '⟧', - "||" => '‖', - _ => char::default(), - } + let text = self.0.text().as_str(); + Self::LIST + .iter() + .find(|&&(s, _)| s == text) + .map_or_else(char::default, |&(_, c)| c) } }