branch: elpa/typst-ts-mode
commit ba70e660606bcb84f57ae5e04858b314a96baead
Merge: 0b0d4bf211 58ccee5b05
Author: Huan Thieu Nguyen <nguyenthieuh...@gmail.com>
Commit: Huan Thieu Nguyen <nguyenthieuh...@gmail.com>

    Merge branch 'develop' into 42-nongnu-patch
---
 typst-ts-editing.el |  285 ++++++++-
 typst-ts-mode.el    |    4 +
 typst-ts-symbols.el | 1743 +++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 2022 insertions(+), 10 deletions(-)

diff --git a/typst-ts-editing.el b/typst-ts-editing.el
index 750e2efeaf..8f64f9c648 100644
--- a/typst-ts-editing.el
+++ b/typst-ts-editing.el
@@ -24,6 +24,7 @@
 
 (require 'outline)
 (require 'typst-ts-core)
+(require 'seq)
 
 (defun typst-ts-mode-heading-up ()
   "Switch the current heading with the heading above."
@@ -57,6 +58,198 @@ Return the heading node when yes otherwise nil."
         node
       nil)))
 
+(defun typst-ts-mode-grid-cell--index (cell grid-cells amount-of-columns)
+  "Return a list in form of (row-index column-index) of CELL in GRID-CELLS.
+AMOUNT-OF-COLUMNS specifies how many columns one row has.
+Indeces are given in 0 index."
+  (let ((index (seq-position grid-cells cell #'treesit-node-eq)))
+    (list (/ index amount-of-columns)
+          (mod index amount-of-columns))))
+
+(defun typts-ts-mode-grid-row--move (direction)
+  "Move grid row at point depending on DIRECTION up/down.
+DIRECTION is one of following symbols:
+`up', `down'."
+  (let (to-switch current grid grid-cells row-index rows amount-of-columns 
cell)
+    (seq-setq (grid cell grid-cells) (typst-ts-mode-grid-cell--at-point-p))
+    (unless (and grid cell)
+      (user-error "Not inside a grid with rows"))
+    (setq amount-of-columns (typst-ts-mode-grid--column-number grid))
+    (setq row-index
+          (car (typst-ts-mode-grid-cell--index
+                cell grid-cells amount-of-columns)))
+    (setq rows (seq-partition grid-cells amount-of-columns))
+    (setq current (seq-elt rows row-index))
+    (setq to-switch
+          (pcase direction
+            ('up
+             (progn
+               (when (= row-index 0)
+                 (user-error "Already on first row"))
+               (seq-elt rows (1- row-index))))
+            ('down
+             (progn
+               (when (= (length rows) (1+ row-index))
+                 (user-error "Already on last row"))
+               (seq-elt rows (1+ row-index))))
+            (_
+             (error "DIRECTION: %s is not one of: `up', `down'" direction))))
+    (let ((start1 (treesit-node-start (car current)))
+          (end1 (treesit-node-end (car (last current))))
+          (start2 (treesit-node-start (car to-switch)))
+          (end2 (treesit-node-end (car (last to-switch)))))
+      (typst-ts-mode--swap-regions start1 end1 start2 end2))))
+
+(defun typst-ts-mode-grid-cell--move (direction)
+  "Move grid cell at point depending on DIRECTION up/down, left/right.
+DIRECTION is one of following symbols:
+`left', `right', `up', `down'.
+
+Up/down means moving the cell to another row while keeping the column index."
+  ;; inside table.header is different from the rest
+  (let (grid grid-cells cell to-switch)
+    (seq-setq (grid cell grid-cells) (typst-ts-mode-grid-cell--at-point-p))
+    (unless (and grid cell)
+      (user-error "Not inside a grid cell"))
+    (setq to-switch
+          (pcase direction
+            ((guard (and (memq direction '(down up))
+                         (string= "table.header"
+                                  (treesit-node-text
+                                   (treesit-node-child-by-field-name grid 
"item")))))
+             (user-error "A table.header only has one row"))
+            ('left
+             ;; skip the , prev twice
+             (treesit-node-prev-sibling (treesit-node-prev-sibling cell)))
+            ('right
+             ;; skip the , that's why next twice
+             (treesit-node-next-sibling (treesit-node-next-sibling cell)))
+            ((or 'up 'down)
+             (let ((amount-of-columns
+                    (typst-ts-mode-grid--column-number grid))
+                   (select-cell
+                    (lambda (row column)
+                      (seq-elt
+                       (seq-elt
+                        (seq-partition
+                         grid-cells
+                         (typst-ts-mode-grid--column-number grid))
+                        row)
+                       column)))
+                   row column)
+               (seq-setq (row column)
+                         (typst-ts-mode-grid-cell--index
+                          cell grid-cells amount-of-columns))
+               (if (eq direction 'up)
+                   (progn
+                     (when (= 0 row)
+                       (user-error "Already on first row"))
+                     (funcall select-cell (1- row) column))
+                 (when (= row amount-of-columns)
+                   (user-error "Already on last row"))
+                 (funcall select-cell (1+ row) column))))
+            (_ (error "DIRECTION: %s is not one of: `right' `left', `up', 
`down'"
+                      direction))))
+    (when (or (not to-switch)
+              (string= "tagged" (treesit-node-type to-switch))
+              (string= "(" (treesit-node-text to-switch))
+              (string= ")" (treesit-node-text to-switch)))
+      (user-error "There is no cell in the %s direction" direction))
+    (typst-ts-mode--swap-regions (treesit-node-start cell) (treesit-node-end 
cell)
+                                 (treesit-node-start to-switch) 
(treesit-node-end to-switch))))
+
+(defun typst-ts-mode-grid--at-point-p ()
+  "Whether the current point is on a grid/table.
+Return the call node if yes, otherwise return nil."
+  (treesit-parent-until
+   (treesit-node-at (point))
+   (lambda (n)
+     (and (string= "call" (treesit-node-type n))
+          (let ((ident (treesit-node-text
+                        (treesit-node-child-by-field-name
+                         n "item"))))
+            (or (string= "table" ident)
+                (string= "grid" ident)
+                (string= "table.header" ident)))))
+   t))
+
+(defun typst-ts-mode-grid-cell--at-point-p ()
+  "Whether the current point is on a grid cell or not.
+Return a list (grid-node cell-node grid-cells) if yes, otherwise return nil."
+  ;; A grid cell is a node inside a grid node that is not a tagged node.
+  (let* ((node (treesit-node-at (point)))
+         (node-begin (treesit-node-start node))
+         (node-end (treesit-node-end node))
+         (inside-grid-p (typst-ts-mode-grid--at-point-p))
+         (grid-cells
+          (treesit-filter-child
+           ;; the child number 1 is the argument list
+           (treesit-node-child inside-grid-p 1)
+           ;; a cell is not a tagged node, a comma or a parenthesis
+           (lambda (n)
+             (let ((type (treesit-node-type n)))
+               (and (not (string= "tagged" type))
+                    (not (string= "(" type))
+                    (not (string= ")" type))
+                    (not (string= "," type)))))))
+         ;; a list of (cell-begin cell-end)
+         (grid-cell-regions
+          (mapcar
+           (lambda (n)
+             (list (treesit-node-start n) (treesit-node-end n) n))
+           grid-cells))
+         (cell-at-point
+          ;; (begin end node)
+          (caddr (seq-find (lambda (range)
+                             (let (begin end _)
+                               (seq-setq (begin end _) range)
+                               (and (>= node-begin begin)
+                                    (<= node-end end))))
+                           grid-cell-regions))))
+    (when (and inside-grid-p cell-at-point)
+      (list inside-grid-p cell-at-point grid-cells))))
+
+(defun typst-ts-mode-grid--column-number (node)
+  "Return the number of columns the grid has.
+NODE must be a call node with ident being grid or table.
+When there is no columns field or the semantic meaning makes no sense return 
1."
+  (let* (
+         ;; grammar guarantees that the child number 1 is group
+         (group (treesit-node-child node 1))
+         (columns-node (car (treesit-filter-child
+                             group
+                             (lambda (n)
+                               (string= (treesit-node-text
+                                         (treesit-node-child-by-field-name n 
"field"))
+                                        "columns")))))
+         ;; 0:field 1:':' 2:value from grammar
+         (columns-value (treesit-node-child columns-node 2))
+         (columns-value-type (treesit-node-type columns-value))
+         (column-number nil))
+    (cond
+     ((and (string= "number" columns-value-type)
+           (= (treesit-node-child-count columns-value) 0))
+      (progn
+        (setq column-number (string-to-number (treesit-node-text 
columns-value)))
+        ;; it makes no sense to have columns: 0 or columns: 23% unit whatever
+        (when (or (not (integerp column-number))
+                  (= column-number 0))
+          (setq column-number 1))))
+     ((string= "group" columns-value-type)
+      (setq column-number
+            ;; discard punctuation nodes
+            (length
+             (treesit-filter-child columns-value
+                                   (lambda (n)
+                                     (let ((text (treesit-node-text n)))
+                                       (and (not (string= "," text))
+                                            (not (string= ":" text))
+                                            (not (string= "(" text))
+                                            (not (string= ")" text)))))))))
+     ;; when there is no columns field or the column value is a number with 
fraction
+     (t (setq column-number 1)))
+    column-number))
+
 (defun typst-ts-mode-item--at-point-p ()
   "Return item node when point is on item.
 Otherwise nil."
@@ -107,18 +300,19 @@ When point is not on an item node return nil."
                  node-numbered-p)))))
 
 (defun typst-ts-mode--swap-regions (start1 end1 start2 end2)
-  "Swap region between START1 and END1 with region between START2 and END2."
+  "Swap region between START1 and END1 with region between START2 and END2.
+START1 END1 is the region where the point should be after swapping."
   (let ((text1 (buffer-substring start1 end1))
         (text2 (buffer-substring start2 end2))
         (marker1-start (make-marker))
         (marker1-end (make-marker))
         (marker2-start (make-marker))
-        (marker2-end (make-marker)))
+        (marker2-end (make-marker))
+        (point (point)))
     (set-marker marker1-start start1)
     (set-marker marker1-end end1)
     (set-marker marker2-start start2)
     (set-marker marker2-end end2)
-
     (delete-region marker1-start marker1-end)
     (delete-region marker2-start marker2-end)
 
@@ -127,7 +321,11 @@ When point is not on an item node return nil."
 
     (goto-char marker2-start)
     (insert text1)
-
+    ;; move point to original position if possible
+    (when (and (<= start1 point)
+               (>= end1 point))
+      (forward-char (- point end1)))
+    ;; clean markers
     (set-marker marker1-start nil)
     (set-marker marker1-end nil)
     (set-marker marker2-start nil)
@@ -448,13 +646,80 @@ When there is no section it will insert a heading below 
point."
      ;; execute default action if not successful
      (call-interactively (global-key-binding (kbd "TAB"))))))
 
-(defun typst-ts-mode-auto-fill-function () ;FIXME: Unused?
-  "Function for `auto-fill-mode'.
-
-Inserts newline and indents according to context."
+(defun typst-ts-editing-calculate-fill-prefix ()
+  "Calculate fill prefix."
+  ;; see `do-auto-fill' function and `;; Choose a fill-prefix automatically.'
+  ;; for default automatical fill-prefix finding algorithm
+  (let ((fill-prefix nil))
+    (setq
+     fill-prefix
+     (catch 'fill-prefix
+       (let* ((cur-pos (point))
+              (cur-node (treesit-node-at cur-pos))
+              (cur-node-type (treesit-node-type cur-node))
+              (parent-node (treesit-node-parent cur-node))  ; could be nil
+              (parent-node-type (treesit-node-type parent-node))
+              node)
+         (cond
+          ;; for condition that there are closely aligned line above
+          ((setq node (typst-ts-core-parent-util-type
+                       (typst-ts-core-get-parent-of-node-at-bol-nonwhite)
+                       "item" t t))
+           (throw 'fill-prefix (fill-context-prefix (line-beginning-position) 
(line-end-position)))))
+         )))
+    fill-prefix))
+
+(defun typst-ts-editing-auto-fill-function ()
+  "Auto Fill Function for `auto-fill-mode'."
   (when (>= (current-column) (current-fill-column))
-    (insert "\n")
-    (indent-according-to-mode)))
+    (let* ((fill-prefix (typst-ts-editing-calculate-fill-prefix))
+           (adaptive-fill-mode (null fill-prefix)))
+      (when fill-prefix (do-auto-fill)))))
+
+(defun typst-ts-mode-symbol-picker ()
+  "Insert elements from `typst-ts-mode-symbol-alist' 
`typst-ts-mode-emoji-alist'.
+
+In markup mode, it will prefix the selection with \"#\"
+and its corresponding module (\"sym.\", \"emoji.\").
+In math mode, symbols do not need a \"#\" prefix and \"sym.\" prefix.
+In code mode, the selection needs to be prefixed with the module."
+  (interactive)
+  (let* ((all-symbols (append typst-ts-mode-symbol-alist 
typst-ts-mode-emoji-alist))
+         (completion-extra-properties
+          '(:annotation-function
+            (lambda (key)
+              (concat " " (cdr (assoc key minibuffer-completion-table))))))
+         (value (completing-read
+                 "Pick: " all-symbols
+                 nil t))
+         (node (treesit-node-at (point)))
+         (inside-math (treesit-parent-until node
+                                            (lambda (x)
+                                              (string= (treesit-node-type x)
+                                                       "math"))))
+         (inside-code (treesit-parent-until node
+                                            (lambda (x)
+                                              (or
+                                               (string= (treesit-node-type x)
+                                                        "code")
+                                               (string= (treesit-node-type x)
+                                                        "content")))))
+         (is-symbol-p (assoc value typst-ts-mode-symbol-alist))
+         (is-emoji-p (assoc value typst-ts-mode-emoji-alist))
+         (to-insert value))
+    (cond
+     ((string= (treesit-node-type inside-code) "code")
+      (setq to-insert (concat
+                       (if is-symbol-p "sym." "emoji.")
+                       to-insert)))
+     ((and is-symbol-p
+           (not inside-math)
+           (not (string= (treesit-node-type inside-code) "code")))
+      (setq to-insert (concat "#sym." to-insert)))
+     ((and is-emoji-p
+           (not (string= (treesit-node-type inside-code) "code")))
+      (setq to-insert (concat "#emoji." to-insert))))
+    (insert to-insert)))
 
 (provide 'typst-ts-editing)
 
diff --git a/typst-ts-mode.el b/typst-ts-mode.el
index 17d7b42701..c0635614de 100644
--- a/typst-ts-mode.el
+++ b/typst-ts-mode.el
@@ -626,6 +626,10 @@ typst tree sitter grammar (at least %s)!" 
(current-time-string min-time))
     (setq-local outline-level #'typst-ts-mode-outline-level))
   (setq-local outline-heading-alist typst-ts-mode-outline-heading-alist)
 
+
+  ;; auto fill function
+  (setq-local normal-auto-fill-function 'typst-ts-editing-auto-fill-function)
+
   (treesit-major-mode-setup)
 
   (setq-local indent-line-function #'typst-ts-mode-indent-line-function))
diff --git a/typst-ts-symbols.el b/typst-ts-symbols.el
new file mode 100644
index 0000000000..f19b5e2519
--- /dev/null
+++ b/typst-ts-symbols.el
@@ -0,0 +1,1743 @@
+;;; typst-ts-symbols.el --- Symbol and Emoji menu -*- lexical-binding: t; -*-
+;; Copyright (C) 2023-2024 The typst-ts-mode Project Contributors
+
+;; This file is NOT part of Emacs.
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(defcustom typst-ts-mode-symbol-alist
+  '(("wj" . "wjoin") ("zwj" . "zwj") ("zwnj" . "zwnj") ("zws" . "zwsp")
+    ("lrm" . "‎") ("rlm" . "‏") ("space" . "␣")
+    ("space.nobreak" . "nbsp") ("space.nobreak.narrow" . " ")
+    ("space.en" . "ensp") ("space.quad" . "emsp")
+    ("space.third" . "⅓emsp") ("space.quarter" . "¼emsp")
+    ("space.sixth" . "⅙emsp") ("space.med" . "mmsp")
+    ("space.fig" . "numsp") ("space.punct" . "puncsp")
+    ("space.thin" . "thinsp") ("space.hair" . "hairsp") ("paren.l" . "(")
+    ("paren.l.double" . "⦅") ("paren.r" . ")") ("paren.r.double" . "⦆")
+    ("paren.t" . "⏜") ("paren.b" . "⏝") ("brace.l" . "{")
+    ("brace.l.double" . "⦃") ("brace.r" . "}") ("brace.r.double" . "⦄")
+    ("brace.t" . "⏞") ("brace.b" . "⏟") ("bracket.l" . "[")
+    ("bracket.l.double" . "⟦") ("bracket.r" . "]")
+    ("bracket.r.double" . "⟧") ("bracket.t" . "⎴") ("bracket.b" . "⎵")
+    ("shell.l" . "❲") ("shell.l.double" . "⟬") ("shell.r" . "❳")
+    ("shell.r.double" . "⟭") ("shell.t" . "⏠") ("shell.b" . "⏡")
+    ("bar.v" . "|") ("bar.v.double" . "‖") ("bar.v.triple" . "⦀")
+    ("bar.v.broken" . "¦") ("bar.v.circle" . "⦶") ("bar.h" . "―")
+    ("fence.l" . "⧘") ("fence.l.double" . "⧚") ("fence.r" . "⧙")
+    ("fence.r.double" . "⧛") ("fence.dotted" . "⦙") ("angle" . "∠")
+    ("angle.l" . "⟨") ("angle.l.curly" . "⧼") ("angle.l.dot" . "⦑")
+    ("angle.l.double" . "《") ("angle.r" . "⟩") ("angle.r.curly" . "⧽")
+    ("angle.r.dot" . "⦒") ("angle.r.double" . "》") ("angle.acute" . "⦟")
+    ("angle.arc" . "∡") ("angle.arc.rev" . "⦛") ("angle.oblique" . "⦦")
+    ("angle.rev" . "⦣") ("angle.right" . "∟") ("angle.right.rev" . "⯾")
+    ("angle.right.arc" . "⊾") ("angle.right.dot" . "⦝")
+    ("angle.right.sq" . "⦜") ("angle.s" . "⦞") ("angle.spatial" . "⟀")
+    ("angle.spheric" . "∢") ("angle.spheric.rev" . "⦠")
+    ("angle.spheric.top" . "⦡") ("ceil.l" . "⌈") ("ceil.r" . "⌉")
+    ("floor.l" . "⌊") ("floor.r" . "⌋") ("amp" . "&") ("amp.inv" . "⅋")
+    ("ast.op" . "∗") ("ast.basic" . "*") ("ast.low" . "⁎")
+    ("ast.double" . "⁑") ("ast.triple" . "⁂") ("ast.small" . "﹡")
+    ("ast.circle" . "⊛") ("ast.square" . "⧆") ("at" . "@")
+    ("backslash" . "\\") ("backslash.circle" . "⦸")
+    ("backslash.not" . "⧷") ("co" . "℅") ("colon" . ":")
+    ("colon.double" . "∷") ("colon.eq" . "≔") ("colon.double.eq" . "⩴")
+    ("comma" . " .") ("dagger" . "†") ("dagger.double" . "‡")
+    ("dash.en" . "–") ("dash.em" . "—") ("dash.em.two" . "⸺")
+    ("dash.em.three" . "⸻") ("dash.fig" . "‒") ("dash.wave" . "〜")
+    ("dash.colon" . "∹") ("dash.circle" . "⊝")
+    ("dash.wave.double" . "〰") ("dot.op" . "⋅") ("dot.basic" . ".")
+    ("dot.c" . "·") ("dot.circle" . "⊙") ("dot.circle.big" . "⨀")
+    ("dot.square" . "⊡") ("dot.double" . "¨") ("dot.triple" . "⃛")
+    ("dot.quad" . "⃜") ("excl" . "!") ("excl.double" . "‼")
+    ("excl.inv" . "¡") ("excl.quest" . "⁉") ("quest" . "?")
+    ("quest.double" . "⁇") ("quest.excl" . "⁈") ("quest.inv" . "¿")
+    ("interrobang" . "‽") ("hash" . "#") ("hyph" . "‐")
+    ("hyph.minus" . "-") ("hyph.nobreak" . "‑") ("hyph.point" . "‧")
+    ("hyph.soft" . "shy") ("percent" . "%") ("permille" . "‰")
+    ("pilcrow" . "¶") ("pilcrow.rev" . "⁋") ("section" . "§")
+    ("semi" . ";") ("semi.rev" . "⁏") ("slash" . "/")
+    ("slash.double" . "⫽") ("slash.triple" . "⫻") ("slash.big" . "⧸")
+    ("dots.h.c" . "⋯") ("dots.h" . "…") ("dots.v" . "⋮")
+    ("dots.down" . "⋱") ("dots.up" . "⋰") ("tilde.op" . "∼")
+    ("tilde.basic" . "~") ("tilde.dot" . "⩪") ("tilde.eq" . "≃")
+    ("tilde.eq.not" . "≄") ("tilde.eq.rev" . "⋍") ("tilde.equiv" . "≅")
+    ("tilde.equiv.not" . "≇") ("tilde.nequiv" . "≆") ("tilde.not" . "≁")
+    ("tilde.rev" . "∽") ("tilde.rev.equiv" . "≌") ("tilde.triple" . "≋")
+    ("acute" . "´") ("acute.double" . "˝") ("breve" . "˘")
+    ("caret" . "‸") ("caron" . "ˇ") ("hat" . "^") ("diaer" . "¨")
+    ("grave" . "`") ("macron" . "¯") ("quote.double" . "\"")
+    ("quote.single" . "'") ("quote.l.double" . "“")
+    ("quote.l.single" . "‘") ("quote.r.double" . "”")
+    ("quote.r.single" . "’") ("quote.angle.l.double" . "«")
+    ("quote.angle.l.single" . "‹") ("quote.angle.r.double" . "»")
+    ("quote.angle.r.single" . "›") ("quote.high.double" . "‟")
+    ("quote.high.single" . "‛") ("quote.low.double" . "„")
+    ("quote.low.single" . "‚") ("prime" . "′") ("prime.rev" . "‵")
+    ("prime.double" . "″") ("prime.double.rev" . "‶")
+    ("prime.triple" . "‴") ("prime.triple.rev" . "‷")
+    ("prime.quad" . "⁗") ("plus" . "+") ("plus.circle" . "⊕")
+    ("plus.circle.arrow" . "⟴") ("plus.circle.big" . "⨁")
+    ("plus.dot" . "∔") ("plus.double" . "⧺") ("plus.minus" . "±")
+    ("plus.small" . "﹢") ("plus.square" . "⊞") ("plus.triangle" . "⨹")
+    ("plus.triple" . "⧻") ("minus" . "−") ("minus.circle" . "⊖")
+    ("minus.dot" . "∸") ("minus.plus" . "∓") ("minus.square" . "⊟")
+    ("minus.tilde" . "≂") ("minus.triangle" . "⨺") ("div" . "÷")
+    ("div.circle" . "⨸") ("times" . "×") ("times.big" . "⨉")
+    ("times.circle" . "⊗") ("times.circle.big" . "⨂") ("times.div" . "⋇")
+    ("times.three.l" . "⋋") ("times.three.r" . "⋌") ("times.l" . "⋉")
+    ("times.r" . "⋊") ("times.square" . "⊠") ("times.triangle" . "⨻")
+    ("ratio" . "∶") ("eq" . "=") ("eq.star" . "≛") ("eq.circle" . "⊜")
+    ("eq.colon" . "≕") ("eq.def" . "≝") ("eq.delta" . "≜")
+    ("eq.equi" . "≚") ("eq.est" . "≙") ("eq.gt" . "⋝") ("eq.lt" . "⋜")
+    ("eq.m" . "≞") ("eq.not" . "≠") ("eq.prec" . "⋞") ("eq.quest" . "≟")
+    ("eq.small" . "﹦") ("eq.succ" . "⋟") ("eq.triple" . "≡")
+    ("eq.quad" . "≣") ("gt" . ">") ("gt.circle" . "⧁") ("gt.dot" . "⋗")
+    ("gt.approx" . "⪆") ("gt.double" . "≫") ("gt.eq" . "≥")
+    ("gt.eq.slant" . "⩾") ("gt.eq.lt" . "⋛") ("gt.eq.not" . "≱")
+    ("gt.equiv" . "≧") ("gt.lt" . "≷") ("gt.lt.not" . "≹")
+    ("gt.neq" . "⪈") ("gt.napprox" . "⪊") ("gt.nequiv" . "≩")
+    ("gt.not" . "≯") ("gt.ntilde" . "⋧") ("gt.small" . "﹥")
+    ("gt.tilde" . "≳") ("gt.tilde.not" . "≵") ("gt.tri" . "⊳")
+    ("gt.tri.eq" . "⊵") ("gt.tri.eq.not" . "⋭") ("gt.tri.not" . "⋫")
+    ("gt.triple" . "⋙") ("gt.triple.nested" . "⫸") ("lt" . "<")
+    ("lt.circle" . "⧀") ("lt.dot" . "⋖") ("lt.approx" . "⪅")
+    ("lt.double" . "≪") ("lt.eq" . "≤") ("lt.eq.slant" . "⩽")
+    ("lt.eq.gt" . "⋚") ("lt.eq.not" . "≰") ("lt.equiv" . "≦")
+    ("lt.gt" . "≶") ("lt.gt.not" . "≸") ("lt.neq" . "⪇")
+    ("lt.napprox" . "⪉") ("lt.nequiv" . "≨") ("lt.not" . "≮")
+    ("lt.ntilde" . "⋦") ("lt.small" . "﹤") ("lt.tilde" . "≲")
+    ("lt.tilde.not" . "≴") ("lt.tri" . "⊲") ("lt.tri.eq" . "⊴")
+    ("lt.tri.eq.not" . "⋬") ("lt.tri.not" . "⋪") ("lt.triple" . "⋘")
+    ("lt.triple.nested" . "⫷") ("approx" . "≈") ("approx.eq" . "≊")
+    ("approx.not" . "≉") ("prec" . "≺") ("prec.approx" . "⪷")
+    ("prec.curly.eq" . "≼") ("prec.curly.eq.not" . "⋠")
+    ("prec.double" . "⪻") ("prec.eq" . "⪯") ("prec.equiv" . "⪳")
+    ("prec.napprox" . "⪹") ("prec.neq" . "⪱") ("prec.nequiv" . "⪵")
+    ("prec.not" . "⊀") ("prec.ntilde" . "⋨") ("prec.tilde" . "≾")
+    ("succ" . "≻") ("succ.approx" . "⪸") ("succ.curly.eq" . "≽")
+    ("succ.curly.eq.not" . "⋡") ("succ.double" . "⪼") ("succ.eq" . "⪰")
+    ("succ.equiv" . "⪴") ("succ.napprox" . "⪺") ("succ.neq" . "⪲")
+    ("succ.nequiv" . "⪶") ("succ.not" . "⊁") ("succ.ntilde" . "⋩")
+    ("succ.tilde" . "≿") ("equiv" . "≡") ("equiv.not" . "≢")
+    ("prop" . "∝") ("original" . "⊶") ("image" . "⊷") ("emptyset" . "∅")
+    ("emptyset.arrow.r" . "⦳") ("emptyset.arrow.l" . "⦴")
+    ("emptyset.bar" . "⦱") ("emptyset.circle" . "⦲")
+    ("emptyset.rev" . "⦰") ("nothing" . "∅") ("nothing.arrow.r" . "⦳")
+    ("nothing.arrow.l" . "⦴") ("nothing.bar" . "⦱")
+    ("nothing.circle" . "⦲") ("nothing.rev" . "⦰") ("without" . "∖")
+    ("complement" . "∁") ("in" . "∈") ("in.not" . "∉") ("in.rev" . "∋")
+    ("in.rev.not" . "∌") ("in.rev.small" . "∍") ("in.small" . "∊")
+    ("subset" . "⊂") ("subset.dot" . "⪽") ("subset.double" . "⋐")
+    ("subset.eq" . "⊆") ("subset.eq.not" . "⊈") ("subset.eq.sq" . "⊑")
+    ("subset.eq.sq.not" . "⋢") ("subset.neq" . "⊊") ("subset.not" . "⊄")
+    ("subset.sq" . "⊏") ("subset.sq.neq" . "⋤") ("supset" . "⊃")
+    ("supset.dot" . "⪾") ("supset.double" . "⋑") ("supset.eq" . "⊇")
+    ("supset.eq.not" . "⊉") ("supset.eq.sq" . "⊒")
+    ("supset.eq.sq.not" . "⋣") ("supset.neq" . "⊋") ("supset.not" . "⊅")
+    ("supset.sq" . "⊐") ("supset.sq.neq" . "⋥") ("union" . "∪")
+    ("union.arrow" . "⊌") ("union.big" . "⋃") ("union.dot" . "⊍")
+    ("union.dot.big" . "⨃") ("union.double" . "⋓") ("union.minus" . "⩁")
+    ("union.or" . "⩅") ("union.plus" . "⊎") ("union.plus.big" . "⨄")
+    ("union.sq" . "⊔") ("union.sq.big" . "⨆") ("union.sq.double" . "⩏")
+    ("sect" . "∩") ("sect.and" . "⩄") ("sect.big" . "⋂")
+    ("sect.dot" . "⩀") ("sect.double" . "⋒") ("sect.sq" . "⊓")
+    ("sect.sq.big" . "⨅") ("sect.sq.double" . "⩎") ("infinity" . "∞")
+    ("infinity.bar" . "⧞") ("infinity.incomplete" . "⧜")
+    ("infinity.tie" . "⧝") ("oo" . "∞") ("diff" . "∂") ("partial" . "∂")
+    ("gradient" . "∇") ("nabla" . "∇") ("sum" . "∑")
+    ("sum.integral" . "⨋") ("product" . "∏") ("product.co" . "∐")
+    ("integral" . "∫") ("integral.arrow.hook" . "⨗")
+    ("integral.ccw" . "⨑") ("integral.cont" . "∮")
+    ("integral.cont.ccw" . "∳") ("integral.cont.cw" . "∲")
+    ("integral.cw" . "∱") ("integral.dash" . "⨍")
+    ("integral.dash.double" . "⨎") ("integral.double" . "∬")
+    ("integral.quad" . "⨌") ("integral.sect" . "⨙")
+    ("integral.slash" . "⨏") ("integral.square" . "⨖")
+    ("integral.surf" . "∯") ("integral.times" . "⨘")
+    ("integral.triple" . "∭") ("integral.union" . "⨚")
+    ("integral.vol" . "∰") ("laplace" . "∆") ("forall" . "∀")
+    ("exists" . "∃") ("exists.not" . "∄") ("top" . "⊤") ("bot" . "⊥")
+    ("not" . "¬") ("and" . "∧") ("and.big" . "⋀") ("and.curly" . "⋏")
+    ("and.dot" . "⟑") ("and.double" . "⩓") ("or" . "∨") ("or.big" . "⋁")
+    ("or.curly" . "⋎") ("or.dot" . "⟇") ("or.double" . "⩔") ("xor" . "⊕")
+    ("xor.big" . "⨁") ("models" . "⊧") ("forces" . "⊩")
+    ("forces.not" . "⊮") ("therefore" . "∴") ("because" . "∵")
+    ("qed" . "∎") ("compose" . "∘") ("convolve" . "∗") ("multimap" . "⊸")
+    ("multimap.double" . "⧟") ("tiny" . "⧾") ("miny" . "⧿")
+    ("divides" . "∣") ("divides.not" . "∤") ("wreath" . "≀")
+    ("parallel" . "∥") ("parallel.struck" . "⫲")
+    ("parallel.circle" . "⦷") ("parallel.eq" . "⋕")
+    ("parallel.equiv" . "⩨") ("parallel.not" . "∦")
+    ("parallel.slanted.eq" . "⧣") ("parallel.slanted.eq.tilde" . "⧤")
+    ("parallel.slanted.equiv" . "⧥") ("parallel.tilde" . "⫳")
+    ("perp" . "⟂") ("perp.circle" . "⦹") ("diameter" . "⌀")
+    ("join" . "⨝") ("join.r" . "⟖") ("join.l" . "⟕") ("join.l.r" . "⟗")
+    ("degree" . "°") ("degree.c" . "℃") ("degree.f" . "℉")
+    ("smash" . "⨳") ("bitcoin" . "₿") ("dollar" . "$") ("euro" . "€")
+    ("franc" . "₣") ("lira" . "₺") ("peso" . "₱") ("pound" . "£")
+    ("ruble" . "₽") ("rupee" . "₹") ("won" . "₩") ("yen" . "¥")
+    ("ballot" . "☐") ("ballot.cross" . "☒") ("ballot.check" . "☑")
+    ("ballot.check.heavy" . "🗹") ("checkmark" . "✓")
+    ("checkmark.light" . "🗸") ("checkmark.heavy" . "✔")
+    ("crossmark" . "✗") ("crossmark.heavy" . "✘") ("floral" . "❦")
+    ("floral.l" . "☙") ("floral.r" . "❧") ("refmark" . "※")
+    ("copyright" . "©") ("copyright.sound" . "℗") ("copyleft" . "🄯")
+    ("trademark" . "™") ("trademark.registered" . "®")
+    ("trademark.service" . "℠") ("maltese" . "✠")
+    ("suit.club.filled" . "♣") ("suit.club.stroked" . "♧")
+    ("suit.diamond.filled" . "♦") ("suit.diamond.stroked" . "♢")
+    ("suit.heart.filled" . "♥") ("suit.heart.stroked" . "♡")
+    ("suit.spade.filled" . "♠") ("suit.spade.stroked" . "♤")
+    ("note.up" . "🎜") ("note.down" . "🎝") ("note.whole" . "𝅝")
+    ("note.half" . "𝅗𝅥") ("note.quarter" . "𝅘𝅥") ("note.quarter.alt" . "♩")
+    ("note.eighth" . "𝅘𝅥𝅮") ("note.eighth.alt" . "♪")
+    ("note.eighth.beamed" . "♫") ("note.sixteenth" . "𝅘𝅥𝅯")
+    ("note.sixteenth.beamed" . "♬") ("note.grace" . "𝆕")
+    ("note.grace.slash" . "𝆔") ("rest.whole" . "𝄻")
+    ("rest.multiple" . "𝄺") ("rest.multiple.measure" . "𝄩")
+    ("rest.half" . "𝄼") ("rest.quarter" . "𝄽") ("rest.eighth" . "𝄾")
+    ("rest.sixteenth" . "𝄿") ("natural" . "♮") ("natural.t" . "𝄮")
+    ("natural.b" . "𝄯") ("flat" . "♭") ("flat.t" . "𝄬") ("flat.b" . "𝄭")
+    ("flat.double" . "𝄫") ("flat.quarter" . "𝄳") ("sharp" . "♯")
+    ("sharp.t" . "𝄰") ("sharp.b" . "𝄱") ("sharp.double" . "𝄪")
+    ("sharp.quarter" . "𝄲") ("bullet" . "•") ("circle.stroked" . "○")
+    ("circle.stroked.tiny" . "∘") ("circle.stroked.small" . "⚬")
+    ("circle.stroked.big" . "◯") ("circle.filled" . "●")
+    ("circle.filled.tiny" . "⦁") ("circle.filled.small" . "∙")
+    ("circle.filled.big" . "⬤") ("circle.dotted" . "◌")
+    ("circle.nested" . "⊚") ("ellipse.stroked.h" . "⬭")
+    ("ellipse.stroked.v" . "⬯") ("ellipse.filled.h" . "⬬")
+    ("ellipse.filled.v" . "⬮") ("triangle.stroked.t" . "△")
+    ("triangle.stroked.b" . "▽") ("triangle.stroked.r" . "▷")
+    ("triangle.stroked.l" . "◁") ("triangle.stroked.bl" . "◺")
+    ("triangle.stroked.br" . "◿") ("triangle.stroked.tl" . "◸")
+    ("triangle.stroked.tr" . "◹") ("triangle.stroked.small.t" . "▵")
+    ("triangle.stroked.small.b" . "▿") ("triangle.stroked.small.r" . "▹")
+    ("triangle.stroked.small.l" . "◃") ("triangle.stroked.rounded" . "🛆")
+    ("triangle.stroked.nested" . "⟁") ("triangle.stroked.dot" . "◬")
+    ("triangle.filled.t" . "▲") ("triangle.filled.b" . "▼")
+    ("triangle.filled.r" . "▶") ("triangle.filled.l" . "◀")
+    ("triangle.filled.bl" . "◣") ("triangle.filled.br" . "◢")
+    ("triangle.filled.tl" . "◤") ("triangle.filled.tr" . "◥")
+    ("triangle.filled.small.t" . "▴") ("triangle.filled.small.b" . "▾")
+    ("triangle.filled.small.r" . "▸") ("triangle.filled.small.l" . "◂")
+    ("square.stroked" . "□") ("square.stroked.tiny" . "▫")
+    ("square.stroked.small" . "◽") ("square.stroked.medium" . "◻")
+    ("square.stroked.big" . "⬜") ("square.stroked.dotted" . "⬚")
+    ("square.stroked.rounded" . "▢") ("square.filled" . "■")
+    ("square.filled.tiny" . "▪") ("square.filled.small" . "◾")
+    ("square.filled.medium" . "◼") ("square.filled.big" . "⬛")
+    ("rect.stroked.h" . "▭") ("rect.stroked.v" . "▯")
+    ("rect.filled.h" . "▬") ("rect.filled.v" . "▮")
+    ("penta.stroked" . "⬠") ("penta.filled" . "⬟") ("hexa.stroked" . "⬡")
+    ("hexa.filled" . "⬢") ("diamond.stroked" . "◇")
+    ("diamond.stroked.small" . "⋄") ("diamond.stroked.medium" . "⬦")
+    ("diamond.stroked.dot" . "⟐") ("diamond.filled" . "◆")
+    ("diamond.filled.medium" . "⬥") ("diamond.filled.small" . "⬩")
+    ("lozenge.stroked" . "◊") ("lozenge.stroked.small" . "⬫")
+    ("lozenge.stroked.medium" . "⬨") ("lozenge.filled" . "⧫")
+    ("lozenge.filled.small" . "⬪") ("lozenge.filled.medium" . "⬧")
+    ("parallelogram.stroked" . "▱") ("parallelogram.filled" . "▰")
+    ("star.op" . "⋆") ("star.stroked" . "☆") ("star.filled" . "★")
+    ("arrow.r" . "→") ("arrow.r.long.bar" . "⟼") ("arrow.r.bar" . "↦")
+    ("arrow.r.curve" . "⤷") ("arrow.r.turn" . "⮎")
+    ("arrow.r.dashed" . "⇢") ("arrow.r.dotted" . "⤑")
+    ("arrow.r.double" . "⇒") ("arrow.r.double.bar" . "⤇")
+    ("arrow.r.double.long" . "⟹") ("arrow.r.double.long.bar" . "⟾")
+    ("arrow.r.double.not" . "⇏") ("arrow.r.filled" . "➡")
+    ("arrow.r.hook" . "↪") ("arrow.r.long" . "⟶")
+    ("arrow.r.long.squiggly" . "⟿") ("arrow.r.loop" . "↬")
+    ("arrow.r.not" . "↛") ("arrow.r.quad" . "⭆")
+    ("arrow.r.squiggly" . "⇝") ("arrow.r.stop" . "⇥")
+    ("arrow.r.stroked" . "⇨") ("arrow.r.tail" . "↣")
+    ("arrow.r.tilde" . "⥲") ("arrow.r.triple" . "⇛")
+    ("arrow.r.twohead.bar" . "⤅") ("arrow.r.twohead" . "↠")
+    ("arrow.r.wave" . "↝") ("arrow.l" . "←") ("arrow.l.bar" . "↤")
+    ("arrow.l.curve" . "⤶") ("arrow.l.turn" . "⮌")
+    ("arrow.l.dashed" . "⇠") ("arrow.l.dotted" . "⬸")
+    ("arrow.l.double" . "⇐") ("arrow.l.double.bar" . "⤆")
+    ("arrow.l.double.long" . "⟸") ("arrow.l.double.long.bar" . "⟽")
+    ("arrow.l.double.not" . "⇍") ("arrow.l.filled" . "⬅")
+    ("arrow.l.hook" . "↩") ("arrow.l.long" . "⟵")
+    ("arrow.l.long.bar" . "⟻") ("arrow.l.long.squiggly" . "⬳")
+    ("arrow.l.loop" . "↫") ("arrow.l.not" . "↚") ("arrow.l.quad" . "⭅")
+    ("arrow.l.squiggly" . "⇜") ("arrow.l.stop" . "⇤")
+    ("arrow.l.stroked" . "⇦") ("arrow.l.tail" . "↢")
+    ("arrow.l.tilde" . "⭉") ("arrow.l.triple" . "⇚")
+    ("arrow.l.twohead.bar" . "⬶") ("arrow.l.twohead" . "↞")
+    ("arrow.l.wave" . "↜") ("arrow.t" . "↑") ("arrow.t.bar" . "↥")
+    ("arrow.t.curve" . "⤴") ("arrow.t.turn" . "⮍")
+    ("arrow.t.dashed" . "⇡") ("arrow.t.double" . "⇑")
+    ("arrow.t.filled" . "⬆") ("arrow.t.quad" . "⟰")
+    ("arrow.t.stop" . "⤒") ("arrow.t.stroked" . "⇧")
+    ("arrow.t.triple" . "⤊") ("arrow.t.twohead" . "↟") ("arrow.b" . "↓")
+    ("arrow.b.bar" . "↧") ("arrow.b.curve" . "⤵") ("arrow.b.turn" . "⮏")
+    ("arrow.b.dashed" . "⇣") ("arrow.b.double" . "⇓")
+    ("arrow.b.filled" . "⬇") ("arrow.b.quad" . "⟱")
+    ("arrow.b.stop" . "⤓") ("arrow.b.stroked" . "⇩")
+    ("arrow.b.triple" . "⤋") ("arrow.b.twohead" . "↡")
+    ("arrow.l.r" . "↔") ("arrow.l.r.double" . "⇔")
+    ("arrow.l.r.double.long" . "⟺") ("arrow.l.r.double.not" . "⇎")
+    ("arrow.l.r.filled" . "⬌") ("arrow.l.r.long" . "⟷")
+    ("arrow.l.r.not" . "↮") ("arrow.l.r.stroked" . "⬄")
+    ("arrow.l.r.wave" . "↭") ("arrow.t.b" . "↕")
+    ("arrow.t.b.double" . "⇕") ("arrow.t.b.filled" . "⬍")
+    ("arrow.t.b.stroked" . "⇳") ("arrow.tr" . "↗")
+    ("arrow.tr.double" . "⇗") ("arrow.tr.filled" . "⬈")
+    ("arrow.tr.hook" . "⤤") ("arrow.tr.stroked" . "⬀") ("arrow.br" . "↘")
+    ("arrow.br.double" . "⇘") ("arrow.br.filled" . "⬊")
+    ("arrow.br.hook" . "⤥") ("arrow.br.stroked" . "⬂") ("arrow.tl" . "↖")
+    ("arrow.tl.double" . "⇖") ("arrow.tl.filled" . "⬉")
+    ("arrow.tl.hook" . "⤣") ("arrow.tl.stroked" . "⬁") ("arrow.bl" . "↙")
+    ("arrow.bl.double" . "⇙") ("arrow.bl.filled" . "⬋")
+    ("arrow.bl.hook" . "⤦") ("arrow.bl.stroked" . "⬃")
+    ("arrow.tl.br" . "⤡") ("arrow.tr.bl" . "⤢") ("arrow.ccw" . "↺")
+    ("arrow.ccw.half" . "↶") ("arrow.cw" . "↻") ("arrow.cw.half" . "↷")
+    ("arrow.zigzag" . "↯") ("arrows.rr" . "⇉") ("arrows.ll" . "⇇")
+    ("arrows.tt" . "⇈") ("arrows.bb" . "⇊") ("arrows.lr" . "⇆")
+    ("arrows.lr.stop" . "↹") ("arrows.rl" . "⇄") ("arrows.tb" . "⇅")
+    ("arrows.bt" . "⇵") ("arrows.rrr" . "⇶") ("arrows.lll" . "⬱")
+    ("arrowhead.t" . "⌃") ("arrowhead.b" . "⌄") ("harpoon.rt" . "⇀")
+    ("harpoon.rt.bar" . "⥛") ("harpoon.rt.stop" . "⥓")
+    ("harpoon.rb" . "⇁") ("harpoon.rb.bar" . "⥟")
+    ("harpoon.rb.stop" . "⥗") ("harpoon.lt" . "↼")
+    ("harpoon.lt.bar" . "⥚") ("harpoon.lt.stop" . "⥒")
+    ("harpoon.lb" . "↽") ("harpoon.lb.bar" . "⥞")
+    ("harpoon.lb.stop" . "⥖") ("harpoon.tl" . "↿")
+    ("harpoon.tl.bar" . "⥠") ("harpoon.tl.stop" . "⥘")
+    ("harpoon.tr" . "↾") ("harpoon.tr.bar" . "⥜")
+    ("harpoon.tr.stop" . "⥔") ("harpoon.bl" . "⇃")
+    ("harpoon.bl.bar" . "⥡") ("harpoon.bl.stop" . "⥙")
+    ("harpoon.br" . "⇂") ("harpoon.br.bar" . "⥝")
+    ("harpoon.br.stop" . "⥕") ("harpoon.lt.rt" . "⥎")
+    ("harpoon.lb.rb" . "⥐") ("harpoon.lb.rt" . "⥋")
+    ("harpoon.lt.rb" . "⥊") ("harpoon.tl.bl" . "⥑")
+    ("harpoon.tr.br" . "⥏") ("harpoon.tl.br" . "⥍")
+    ("harpoon.tr.bl" . "⥌") ("harpoons.rtrb" . "⥤")
+    ("harpoons.blbr" . "⥥") ("harpoons.bltr" . "⥯")
+    ("harpoons.lbrb" . "⥧") ("harpoons.ltlb" . "⥢")
+    ("harpoons.ltrb" . "⇋") ("harpoons.ltrt" . "⥦")
+    ("harpoons.rblb" . "⥩") ("harpoons.rtlb" . "⇌")
+    ("harpoons.rtlt" . "⥨") ("harpoons.tlbr" . "⥮")
+    ("harpoons.tltr" . "⥣") ("tack.r" . "⊢") ("tack.r.not" . "⊬")
+    ("tack.r.long" . "⟝") ("tack.r.short" . "⊦") ("tack.r.double" . "⊨")
+    ("tack.r.double.not" . "⊭") ("tack.l" . "⊣") ("tack.l.long" . "⟞")
+    ("tack.l.short" . "⫞") ("tack.l.double" . "⫤") ("tack.t" . "⊥")
+    ("tack.t.big" . "⟘") ("tack.t.double" . "⫫") ("tack.t.short" . "⫠")
+    ("tack.b" . "⊤") ("tack.b.big" . "⟙") ("tack.b.double" . "⫪")
+    ("tack.b.short" . "⫟") ("tack.l.r" . "⟛") ("alpha" . "α")
+    ("beta" . "β") ("beta.alt" . "ϐ") ("chi" . "χ") ("delta" . "δ")
+    ("epsilon" . "ε") ("epsilon.alt" . "ϵ") ("eta" . "η") ("gamma" . "γ")
+    ("iota" . "ι") ("kai" . "ϗ") ("kappa" . "κ") ("kappa.alt" . "ϰ")
+    ("lambda" . "λ") ("mu" . "μ") ("nu" . "ν") ("ohm" . "Ω")
+    ("ohm.inv" . "℧") ("omega" . "ω") ("omicron" . "ο") ("phi" . "φ")
+    ("phi.alt" . "ϕ") ("pi" . "π") ("pi.alt" . "ϖ") ("psi" . "ψ")
+    ("rho" . "ρ") ("rho.alt" . "ϱ") ("sigma" . "σ") ("sigma.alt" . "ς")
+    ("tau" . "τ") ("theta" . "θ") ("theta.alt" . "ϑ") ("upsilon" . "υ")
+    ("xi" . "ξ") ("zeta" . "ζ") ("Alpha" . "Α") ("Beta" . "Β")
+    ("Chi" . "Χ") ("Delta" . "Δ") ("Epsilon" . "Ε") ("Eta" . "Η")
+    ("Gamma" . "Γ") ("Iota" . "Ι") ("Kai" . "Ϗ") ("Kappa" . "Κ")
+    ("Lambda" . "Λ") ("Mu" . "Μ") ("Nu" . "Ν") ("Omega" . "Ω")
+    ("Omicron" . "Ο") ("Phi" . "Φ") ("Pi" . "Π") ("Psi" . "Ψ")
+    ("Rho" . "Ρ") ("Sigma" . "Σ") ("Tau" . "Τ") ("Theta" . "Θ")
+    ("Upsilon" . "Υ") ("Xi" . "Ξ") ("Zeta" . "Ζ") ("aleph" . "א")
+    ("alef" . "א") ("beth" . "ב") ("bet" . "ב") ("gimmel" . "ג")
+    ("gimel" . "ג") ("daleth" . "ד") ("dalet" . "ד") ("shin" . "ש")
+    ("AA" . "𝔸") ("BB" . "𝔹") ("CC" . "ℂ") ("DD" . "𝔻") ("EE" . "𝔼")
+    ("FF" . "𝔽") ("GG" . "𝔾") ("HH" . "ℍ") ("II" . "𝕀") ("JJ" . "𝕁")
+    ("KK" . "𝕂") ("LL" . "𝕃") ("MM" . "𝕄") ("NN" . "ℕ") ("OO" . "𝕆")
+    ("PP" . "ℙ") ("QQ" . "ℚ") ("RR" . "ℝ") ("SS" . "𝕊") ("TT" . "𝕋")
+    ("UU" . "𝕌") ("VV" . "𝕍") ("WW" . "𝕎") ("XX" . "𝕏") ("YY" . "𝕐")
+    ("ZZ" . "ℤ") ("ell" . "ℓ") ("planck" . "ℎ") ("planck.reduce" . "ℏ")
+    ("angstrom" . "Å") ("kelvin" . "K") ("Re" . "ℜ") ("Im" . "ℑ")
+    ("dotless.i" . "𝚤") ("dotless.j" . "𝚥"))
+  "An alist of names and their corresponding symbol.
+
+https://typst.app/docs/reference/symbols/sym/";
+  :group 'typst-ts-editing
+  :type '(repeat
+          (cons (string :tag "Name")
+                (string :tag "Symbol"))))
+
+(defcustom typst-ts-mode-emoji-alist
+  '(("abacus" . "🧮")
+    ("abc" . "🔤")
+    ("abcd" . "🔡")
+    ("ABCD" . "🔠")
+    ("accordion" . "🪗")
+    ("aesculapius" . "⚕")
+    ("airplane" . "✈")
+    ("airplane.landing" . "🛬")
+    ("airplane.small" . "🛩")
+    ("airplane.takeoff" . "🛫")
+    ("alembic" . "⚗")
+    ("alien" . "👽")
+    ("alien.monster" . "👾")
+    ("ambulance" . "🚑")
+    ("amphora" . "🏺")
+    ("anchor" . "⚓")
+    ("anger" . "💢")
+    ("ant" . "🐜")
+    ("apple.green" . "🍏")
+    ("apple.red" . "🍎")
+    ("arm.mech" . "🦾")
+    ("arm.muscle" . "💪")
+    ("arm.selfie" . "🤳")
+    ("arrow.r.filled" . "➡")
+    ("arrow.r.hook" . "↪")
+    ("arrow.r.soon" . "🔜")
+    ("arrow.l.filled" . "⬅")
+    ("arrow.l.hook" . "↩")
+    ("arrow.l.back" . "🔙")
+    ("arrow.l.end" . "🔚")
+    ("arrow.t.filled" . "⬆")
+    ("arrow.t.curve" . "⤴")
+    ("arrow.t.top" . "🔝")
+    ("arrow.b.filled" . "⬇")
+    ("arrow.b.curve" . "⤵")
+    ("arrow.l.r" . "↔")
+    ("arrow.l.r.on" . "🔛")
+    ("arrow.t.b" . "↕")
+    ("arrow.bl" . "↙")
+    ("arrow.br" . "↘")
+    ("arrow.tl" . "↖")
+    ("arrow.tr" . "↗")
+    ("arrows.cycle" . "🔄")
+    ("ast" . "*")
+    ("ast.box" . "✳")
+    ("atm" . "🏧")
+    ("atom" . "⚛")
+    ("aubergine" . "🍆")
+    ("avocado" . "🥑")
+    ("axe" . "🪓")
+    ("baby" . "👶")
+    ("baby.angel" . "👼")
+    ("baby.box" . "🚼")
+    ("babybottle" . "🍼")
+    ("backpack" . "🎒")
+    ("bacon" . "🥓")
+    ("badger" . "🦡")
+    ("badminton" . "🏸")
+    ("bagel" . "🥯")
+    ("baggageclaim" . "🛄")
+    ("baguette" . "🥖")
+    ("balloon" . "🎈")
+    ("ballot.check" . "☑")
+    ("ballotbox" . "🗳")
+    ("banana" . "🍌")
+    ("banjo" . "🪕")
+    ("bank" . "🏦")
+    ("barberpole" . "💈")
+    ("baseball" . "⚾")
+    ("basecap" . "🧢")
+    ("basket" . "🧺")
+    ("basketball" . "⛹")
+    ("basketball.ball" . "🏀")
+    ("bat" . "🦇")
+    ("bathtub" . "🛀")
+    ("bathtub.foam" . "🛁")
+    ("battery" . "🔋")
+    ("battery.low" . "🪫")
+    ("beach.palm" . "🏝")
+    ("beach.umbrella" . "🏖")
+    ("beads" . "📿")
+    ("beans" . "🫘")
+    ("bear" . "🐻")
+    ("beaver" . "🦫")
+    ("bed" . "🛏")
+    ("bed.person" . "🛌")
+    ("bee" . "🐝")
+    ("beer" . "🍺")
+    ("beer.clink" . "🍻")
+    ("beet" . "🫜")
+    ("beetle" . "🪲")
+    ("beetle.lady" . "🐞")
+    ("bell" . "🔔")
+    ("bell.ding" . "🛎")
+    ("bell.not" . "🔕")
+    ("bento" . "🍱")
+    ("bicyclist" . "🚴")
+    ("bicyclist.mountain" . "🚵")
+    ("bike" . "🚲")
+    ("bike.not" . "🚳")
+    ("bikini" . "👙")
+    ("billiards" . "🎱")
+    ("bin" . "🗑")
+    ("biohazard" . "☣")
+    ("bird" . "🐦")
+    ("bison" . "🦬")
+    ("blood" . "🩸")
+    ("blouse" . "👚")
+    ("blowfish" . "🐡")
+    ("blueberries" . "🫐")
+    ("boar" . "🐗")
+    ("boat.sail" . "⛵")
+    ("boat.row" . "🚣")
+    ("boat.motor" . "🛥")
+    ("boat.speed" . "🚤")
+    ("boat.canoe" . "🛶")
+    ("bolt" . "🔩")
+    ("bomb" . "💣")
+    ("bone" . "🦴")
+    ("book.red" . "📕")
+    ("book.blue" . "📘")
+    ("book.green" . "📗")
+    ("book.orange" . "📙")
+    ("book.spiral" . "📒")
+    ("book.open" . "📖")
+    ("bookmark" . "🔖")
+    ("books" . "📚")
+    ("boomerang" . "🪃")
+    ("bordercontrol" . "🛂")
+    ("bouquet" . "💐")
+    ("bow" . "🏹")
+    ("bowl.spoon" . "🥣")
+    ("bowl.steam" . "🍜")
+    ("bowling" . "🎳")
+    ("boxing" . "🥊")
+    ("boy" . "👦")
+    ("brain" . "🧠")
+    ("bread" . "🍞")
+    ("brick" . "🧱")
+    ("bride" . "👰")
+    ("bridge.fog" . "🌁")
+    ("bridge.night" . "🌉")
+    ("briefcase" . "💼")
+    ("briefs" . "🩲")
+    ("brightness.high" . "🔆")
+    ("brightness.low" . "🔅")
+    ("broccoli" . "🥦")
+    ("broom" . "🧹")
+    ("brush" . "🖌")
+    ("bubble.speech.r" . "💬")
+    ("bubble.speech.l" . "🗨")
+    ("bubble.thought" . "💭")
+    ("bubble.anger.r" . "🗯")
+    ("bubbles" . "🫧")
+    ("bubbletea" . "🧋")
+    ("bucket" . "🪣")
+    ("buffalo.water" . "🐃")
+    ("bug" . "🐛")
+    ("builder" . "👷")
+    ("burger" . "🍔")
+    ("burrito" . "🌯")
+    ("bus" . "🚌")
+    ("bus.front" . "🚍")
+    ("bus.small" . "🚐")
+    ("bus.stop" . "🚏")
+    ("bus.trolley" . "🚎")
+    ("butter" . "🧈")
+    ("butterfly" . "🦋")
+    ("button" . "🔲")
+    ("button.alt" . "🔳")
+    ("button.radio" . "🔘")
+    ("cabinet.file" . "🗄")
+    ("cablecar" . "🚠")
+    ("cablecar.small" . "🚡")
+    ("cactus" . "🌵")
+    ("cake" . "🎂")
+    ("cake.fish" . "🍥")
+    ("cake.moon" . "🥮")
+    ("cake.slice" . "🍰")
+    ("calendar" . "📅")
+    ("calendar.spiral" . "🗓")
+    ("calendar.tearoff" . "📆")
+    ("camel" . "🐫")
+    ("camel.dromedar" . "🐪")
+    ("camera" . "📷")
+    ("camera.flash" . "📸")
+    ("camera.movie" . "🎥")
+    ("camera.movie.box" . "🎦")
+    ("camera.video" . "📹")
+    ("camping" . "🏕")
+    ("can" . "🥫")
+    ("candle" . "🕯")
+    ("candy" . "🍬")
+    ("cane" . "🦯")
+    ("car" . "🚗")
+    ("car.front" . "🚘")
+    ("car.pickup" . "🛻")
+    ("car.police" . "🚓")
+    ("car.police.front" . "🚔")
+    ("car.racing" . "🏎")
+    ("car.rickshaw" . "🛺")
+    ("car.suv" . "🚙")
+    ("card.credit" . "💳")
+    ("card.id" . "🪪")
+    ("cardindex" . "📇")
+    ("carrot" . "🥕")
+    ("cart" . "🛒")
+    ("cassette" . "📼")
+    ("castle.eu" . "🏰")
+    ("castle.jp" . "🏯")
+    ("cat" . "🐈")
+    ("cat.face" . "🐱")
+    ("cat.face.angry" . "😾")
+    ("cat.face.cry" . "😿")
+    ("cat.face.heart" . "😻")
+    ("cat.face.joy" . "😹")
+    ("cat.face.kiss" . "😽")
+    ("cat.face.laugh" . "😸")
+    ("cat.face.shock" . "🙀")
+    ("cat.face.smile" . "😺")
+    ("cat.face.smirk" . "😼")
+    ("chain" . "🔗")
+    ("chains" . "⛓")
+    ("chair" . "🪑")
+    ("champagne" . "🍾")
+    ("chart.bar" . "📊")
+    ("chart.up" . "📈")
+    ("chart.down" . "📉")
+    ("chart.yen.up" . "💹")
+    ("checkmark.heavy" . "✔")
+    ("checkmark.box" . "✅")
+    ("cheese" . "🧀")
+    ("cherries" . "🍒")
+    ("chess" . "♟")
+    ("chestnut" . "🌰")
+    ("chicken" . "🐔")
+    ("chicken.baby" . "🐥")
+    ("chicken.baby.egg" . "🐣")
+    ("chicken.baby.head" . "🐤")
+    ("chicken.leg" . "🍗")
+    ("chicken.male" . "🐓")
+    ("child" . "🧒")
+    ("chipmunk" . "🐿")
+    ("chocolate" . "🍫")
+    ("chopsticks" . "🥢")
+    ("church" . "⛪")
+    ("church.love" . "💒")
+    ("cigarette" . "🚬")
+    ("cigarette.not" . "🚭")
+    ("circle.black" . "⚫")
+    ("circle.blue" . "🔵")
+    ("circle.brown" . "🟤")
+    ("circle.green" . "🟢")
+    ("circle.orange" . "🟠")
+    ("circle.purple" . "🟣")
+    ("circle.white" . "⚪")
+    ("circle.red" . "🔴")
+    ("circle.yellow" . "🟡")
+    ("circle.stroked" . "⭕")
+    ("circus" . "🎪")
+    ("city" . "🏙")
+    ("city.dusk" . "🌆")
+    ("city.night" . "🌃")
+    ("city.sunset" . "🌇")
+    ("clamp" . "🗜")
+    ("clapperboard" . "🎬")
+    ("climbing" . "🧗")
+    ("clip" . "📎")
+    ("clipboard" . "📋")
+    ("clips" . "🖇")
+    ("clock.one" . "🕐")
+    ("clock.one.thirty" . "🕜")
+    ("clock.two" . "🕑")
+    ("clock.two.thirty" . "🕝")
+    ("clock.three" . "🕒")
+    ("clock.three.thirty" . "🕞")
+    ("clock.four" . "🕓")
+    ("clock.four.thirty" . "🕟")
+    ("clock.five" . "🕔")
+    ("clock.five.thirty" . "🕠")
+    ("clock.six" . "🕕")
+    ("clock.six.thirty" . "🕡")
+    ("clock.seven" . "🕖")
+    ("clock.seven.thirty" . "🕢")
+    ("clock.eight" . "🕗")
+    ("clock.eight.thirty" . "🕣")
+    ("clock.nine" . "🕘")
+    ("clock.nine.thirty" . "🕤")
+    ("clock.ten" . "🕙")
+    ("clock.ten.thirty" . "🕥")
+    ("clock.eleven" . "🕚")
+    ("clock.eleven.thirty" . "🕦")
+    ("clock.twelve" . "🕛")
+    ("clock.twelve.thirty" . "🕧")
+    ("clock.alarm" . "⏰")
+    ("clock.old" . "🕰")
+    ("clock.timer" . "⏲")
+    ("cloud" . "☁")
+    ("cloud.dust" . "💨")
+    ("cloud.rain" . "🌧")
+    ("cloud.snow" . "🌨")
+    ("cloud.storm" . "⛈")
+    ("cloud.sun" . "⛅")
+    ("cloud.sun.hidden" . "🌥")
+    ("cloud.sun.rain" . "🌦")
+    ("cloud.thunder" . "🌩")
+    ("coat" . "🧥")
+    ("coat.lab" . "🥼")
+    ("cockroach" . "🪳")
+    ("cocktail.martini" . "🍸")
+    ("cocktail.tropical" . "🍹")
+    ("coconut" . "🥥")
+    ("coffee" . "☕")
+    ("coffin" . "⚰")
+    ("coin" . "🪙")
+    ("comet" . "☄")
+    ("compass" . "🧭")
+    ("computer" . "🖥")
+    ("computermouse" . "🖱")
+    ("confetti" . "🎊")
+    ("construction" . "🚧")
+    ("controller" . "🎮")
+    ("cookie" . "🍪")
+    ("cookie.fortune" . "🥠")
+    ("cooking" . "🍳")
+    ("cool" . "🆒")
+    ("copyright" . "©")
+    ("coral" . "🪸")
+    ("corn" . "🌽")
+    ("couch" . "🛋")
+    ("couple" . "💑")
+    ("cow" . "🐄")
+    ("cow.face" . "🐮")
+    ("crab" . "🦀")
+    ("crane" . "🏗")
+    ("crayon" . "🖍")
+    ("cricket" . "🦗")
+    ("cricketbat" . "🏏")
+    ("crocodile" . "🐊")
+    ("croissant" . "🥐")
+    ("crossmark" . "❌")
+    ("crossmark.box" . "❎")
+    ("crown" . "👑")
+    ("crutch" . "🩼")
+    ("crystal" . "🔮")
+    ("cucumber" . "🥒")
+    ("cup.straw" . "🥤")
+    ("cupcake" . "🧁")
+    ("curling" . "🥌")
+    ("curry" . "🍛")
+    ("custard" . "🍮")
+    ("customs" . "🛃")
+    ("cutlery" . "🍴")
+    ("cyclone" . "🌀")
+    ("dancing.man" . "🕺")
+    ("dancing.woman" . "💃")
+    ("dancing.women.bunny" . "👯")
+    ("darts" . "🎯")
+    ("dash.wave.double" . "〰")
+    ("deer" . "🦌")
+    ("desert" . "🏜")
+    ("detective" . "🕵")
+    ("diamond.blue" . "🔷")
+    ("diamond.blue.small" . "🔹")
+    ("diamond.orange" . "🔶")
+    ("diamond.orange.small" . "🔸")
+    ("diamond.dot" . "💠")
+    ("die" . "🎲")
+    ("dino.pod" . "🦕")
+    ("dino.rex" . "🦖")
+    ("disc.cd" . "💿")
+    ("disc.dvd" . "📀")
+    ("disc.mini" . "💽")
+    ("discoball" . "🪩")
+    ("diving" . "🤿")
+    ("dodo" . "🦤")
+    ("dog" . "🐕")
+    ("dog.face" . "🐶")
+    ("dog.guide" . "🦮")
+    ("dog.poodle" . "🐩")
+    ("dollar" . "💲")
+    ("dolphin" . "🐬")
+    ("donut" . "🍩")
+    ("door" . "🚪")
+    ("dove.peace" . "🕊")
+    ("dragon" . "🐉")
+    ("dragon.face" . "🐲")
+    ("dress" . "👗")
+    ("dress.kimono" . "👘")
+    ("dress.sari" . "🥻")
+    ("drop" . "💧")
+    ("drops" . "💦")
+    ("drum" . "🥁")
+    ("drum.big" . "🪘")
+    ("duck" . "🦆")
+    ("dumpling" . "🥟")
+    ("eagle" . "🦅")
+    ("ear" . "👂")
+    ("ear.aid" . "🦻")
+    ("egg" . "🥚")
+    ("eighteen.not" . "🔞")
+    ("elephant" . "🐘")
+    ("elevator" . "🛗")
+    ("elf" . "🧝")
+    ("email" . "📧")
+    ("excl" . "❗")
+    ("excl.white" . "❕")
+    ("excl.double" . "‼")
+    ("excl.quest" . "⁉")
+    ("explosion" . "💥")
+    ("extinguisher" . "🧯")
+    ("eye" . "👁")
+    ("eyes" . "👀")
+    ("face.grin" . "😀")
+    ("face.angry" . "😠")
+    ("face.angry.red" . "😡")
+    ("face.anguish" . "😧")
+    ("face.astonish" . "😲")
+    ("face.bandage" . "🤕")
+    ("face.beam" . "😁")
+    ("face.blank" . "😶")
+    ("face.clown" . "🤡")
+    ("face.cold" . "🥶")
+    ("face.concern" . "😦")
+    ("face.cool" . "😎")
+    ("face.cover" . "🤭")
+    ("face.cowboy" . "🤠")
+    ("face.cry" . "😭")
+    ("face.devil.smile" . "😈")
+    ("face.devil.frown" . "👿")
+    ("face.diagonal" . "🫤")
+    ("face.disguise" . "🥸")
+    ("face.distress" . "😫")
+    ("face.dizzy" . "😵")
+    ("face.dotted" . "🫥")
+    ("face.down" . "😞")
+    ("face.down.sweat" . "😓")
+    ("face.drool" . "🤤")
+    ("face.explode" . "🤯")
+    ("face.eyeroll" . "🙄")
+    ("face.friendly" . "☺")
+    ("face.fear" . "😨")
+    ("face.fear.sweat" . "😰")
+    ("face.fever" . "🤒")
+    ("face.flush" . "😳")
+    ("face.frown" . "☹")
+    ("face.frown.slight" . "🙁")
+    ("face.frust" . "😣")
+    ("face.goofy" . "🤪")
+    ("face.halo" . "😇")
+    ("face.happy" . "😊")
+    ("face.heart" . "😍")
+    ("face.hearts" . "🥰")
+    ("face.heat" . "🥵")
+    ("face.hug" . "🤗")
+    ("face.inv" . "🙃")
+    ("face.joy" . "😂")
+    ("face.kiss" . "😗")
+    ("face.kiss.smile" . "😙")
+    ("face.kiss.heart" . "😘")
+    ("face.kiss.blush" . "😚")
+    ("face.lick" . "😋")
+    ("face.lie" . "🤥")
+    ("face.mask" . "😷")
+    ("face.meh" . "😒")
+    ("face.melt" . "🫠")
+    ("face.money" . "🤑")
+    ("face.monocle" . "🧐")
+    ("face.nausea" . "🤢")
+    ("face.nerd" . "🤓")
+    ("face.neutral" . "😐")
+    ("face.open" . "😃")
+    ("face.party" . "🥳")
+    ("face.peek" . "🫣")
+    ("face.plead" . "🥺")
+    ("face.relief" . "😌")
+    ("face.rofl" . "🤣")
+    ("face.sad" . "😔")
+    ("face.salute" . "🫡")
+    ("face.shock" . "😱")
+    ("face.shush" . "🤫")
+    ("face.skeptic" . "🤨")
+    ("face.sleep" . "😴")
+    ("face.sleepy" . "😪")
+    ("face.smile" . "😄")
+    ("face.smile.slight" . "🙂")
+    ("face.smile.sweat" . "😅")
+    ("face.smile.tear" . "🥲")
+    ("face.smirk" . "😏")
+    ("face.sneeze" . "🤧")
+    ("face.speak.not" . "🫢")
+    ("face.squint" . "😆")
+    ("face.stars" . "🤩")
+    ("face.straight" . "😑")
+    ("face.suffer" . "😖")
+    ("face.surprise" . "😯")
+    ("face.symbols" . "🤬")
+    ("face.tear" . "😢")
+    ("face.tear.relief" . "😥")
+    ("face.tear.withheld" . "🥹")
+    ("face.teeth" . "😬")
+    ("face.think" . "🤔")
+    ("face.tired" . "🫩")
+    ("face.tongue" . "😛")
+    ("face.tongue.squint" . "😝")
+    ("face.tongue.wink" . "😜")
+    ("face.triumph" . "😤")
+    ("face.unhappy" . "😕")
+    ("face.vomit" . "🤮")
+    ("face.weary" . "😩")
+    ("face.wink" . "😉")
+    ("face.woozy" . "🥴")
+    ("face.worry" . "😟")
+    ("face.wow" . "😮")
+    ("face.yawn" . "🥱")
+    ("face.zip" . "🤐")
+    ("factory" . "🏭")
+    ("fairy" . "🧚")
+    ("faith.christ" . "✝")
+    ("faith.dharma" . "☸")
+    ("faith.islam" . "☪")
+    ("faith.judaism" . "✡")
+    ("faith.menorah" . "🕎")
+    ("faith.om" . "🕉")
+    ("faith.orthodox" . "☦")
+    ("faith.peace" . "☮")
+    ("faith.star.dot" . "🔯")
+    ("faith.worship" . "🛐")
+    ("faith.yinyang" . "☯")
+    ("falafel" . "🧆")
+    ("family" . "👪")
+    ("fax" . "📠")
+    ("feather" . "🪶")
+    ("feeding.breast" . "🤱")
+    ("fencing" . "🤺")
+    ("ferriswheel" . "🎡")
+    ("filebox" . "🗃")
+    ("filedividers" . "🗂")
+    ("film" . "🎞")
+    ("finger.r" . "👉")
+    ("finger.l" . "👈")
+    ("finger.t" . "👆")
+    ("finger.t.alt" . "☝")
+    ("finger.b" . "👇")
+    ("finger.front" . "🫵")
+    ("finger.m" . "🖕")
+    ("fingerprint" . "🫆")
+    ("fingers.cross" . "🤞")
+    ("fingers.pinch" . "🤌")
+    ("fingers.snap" . "🫰")
+    ("fire" . "🔥")
+    ("firecracker" . "🧨")
+    ("fireengine" . "🚒")
+    ("fireworks" . "🎆")
+    ("fish" . "🐟")
+    ("fish.tropical" . "🐠")
+    ("fishing" . "🎣")
+    ("fist.front" . "👊")
+    ("fist.r" . "🤜")
+    ("fist.l" . "🤛")
+    ("fist.raised" . "✊")
+    ("flag.black" . "🏴")
+    ("flag.white" . "🏳")
+    ("flag.goal" . "🏁")
+    ("flag.golf" . "⛳")
+    ("flag.red" . "🚩")
+    ("flags.jp.crossed" . "🎌")
+    ("flamingo" . "🦩")
+    ("flashlight" . "🔦")
+    ("flatbread" . "🫓")
+    ("fleur" . "⚜")
+    ("floppy" . "💾")
+    ("flower.hibiscus" . "🌺")
+    ("flower.lotus" . "🪷")
+    ("flower.pink" . "🌸")
+    ("flower.rose" . "🌹")
+    ("flower.sun" . "🌻")
+    ("flower.tulip" . "🌷")
+    ("flower.white" . "💮")
+    ("flower.wilted" . "🥀")
+    ("flower.yellow" . "🌼")
+    ("fly" . "🪰")
+    ("fog" . "🌫")
+    ("folder" . "📁")
+    ("folder.open" . "📂")
+    ("fondue" . "🫕")
+    ("foot" . "🦶")
+    ("football" . "⚽")
+    ("football.am" . "🏈")
+    ("forex" . "💱")
+    ("fountain" . "⛲")
+    ("fox" . "🦊")
+    ("free" . "🆓")
+    ("fries" . "🍟")
+    ("frisbee" . "🥏")
+    ("frog.face" . "🐸")
+    ("fuelpump" . "⛽")
+    ("garlic" . "🧄")
+    ("gear" . "⚙")
+    ("gem" . "💎")
+    ("genie" . "🧞")
+    ("ghost" . "👻")
+    ("giraffe" . "🦒")
+    ("girl" . "👧")
+    ("glass.clink" . "🥂")
+    ("glass.milk" . "🥛")
+    ("glass.pour" . "🫗")
+    ("glass.tumbler" . "🥃")
+    ("glasses" . "👓")
+    ("glasses.sun" . "🕶")
+    ("globe.am" . "🌎")
+    ("globe.as.au" . "🌏")
+    ("globe.eu.af" . "🌍")
+    ("globe.meridian" . "🌐")
+    ("gloves" . "🧤")
+    ("goal" . "🥅")
+    ("goat" . "🐐")
+    ("goggles" . "🥽")
+    ("golfing" . "🏌")
+    ("gorilla" . "🦍")
+    ("grapes" . "🍇")
+    ("guard.man" . "💂")
+    ("guitar" . "🎸")
+    ("gymnastics" . "🤸")
+    ("haircut" . "💇")
+    ("hammer" . "🔨")
+    ("hammer.pick" . "⚒")
+    ("hammer.wrench" . "🛠")
+    ("hamsa" . "🪬")
+    ("hamster.face" . "🐹")
+    ("hand.raised" . "✋")
+    ("hand.raised.alt" . "🤚")
+    ("hand.r" . "🫱")
+    ("hand.l" . "🫲")
+    ("hand.t" . "🫴")
+    ("hand.b" . "🫳")
+    ("hand.ok" . "👌")
+    ("hand.call" . "🤙")
+    ("hand.love" . "🤟")
+    ("hand.part" . "🖖")
+    ("hand.peace" . "✌")
+    ("hand.pinch" . "🤏")
+    ("hand.rock" . "🤘")
+    ("hand.splay" . "🖐")
+    ("hand.wave" . "👋")
+    ("hand.write" . "✍")
+    ("handbag" . "👜")
+    ("handball" . "🤾")
+    ("handholding.man.man" . "👬")
+    ("handholding.woman.man" . "👫")
+    ("handholding.woman.woman" . "👭")
+    ("hands.folded" . "🙏")
+    ("hands.palms" . "🤲")
+    ("hands.clap" . "👏")
+    ("hands.heart" . "🫶")
+    ("hands.open" . "👐")
+    ("hands.raised" . "🙌")
+    ("hands.shake" . "🤝")
+    ("harp" . "🪉")
+    ("hash" . "#")
+    ("hat.ribbon" . "👒")
+    ("hat.top" . "🎩")
+    ("headphone" . "🎧")
+    ("heart" . "❤")
+    ("heart.arrow" . "💘")
+    ("heart.beat" . "💓")
+    ("heart.black" . "🖤")
+    ("heart.blue" . "💙")
+    ("heart.box" . "💟")
+    ("heart.broken" . "💔")
+    ("heart.brown" . "🤎")
+    ("heart.double" . "💕")
+    ("heart.excl" . "❣")
+    ("heart.green" . "💚")
+    ("heart.grow" . "💗")
+    ("heart.orange" . "🧡")
+    ("heart.purple" . "💜")
+    ("heart.real" . "🫀")
+    ("heart.revolve" . "💞")
+    ("heart.ribbon" . "💝")
+    ("heart.spark" . "💖")
+    ("heart.white" . "🤍")
+    ("heart.yellow" . "💛")
+    ("hedgehog" . "🦔")
+    ("helicopter" . "🚁")
+    ("helix" . "🧬")
+    ("helmet.cross" . "⛑")
+    ("helmet.military" . "🪖")
+    ("hippo" . "🦛")
+    ("hockey" . "🏑")
+    ("hole" . "🕳")
+    ("honey" . "🍯")
+    ("hongbao" . "🧧")
+    ("hook" . "🪝")
+    ("horn.postal" . "📯")
+    ("horse" . "🐎")
+    ("horse.carousel" . "🎠")
+    ("horse.face" . "🐴")
+    ("horse.race" . "🏇")
+    ("hospital" . "🏥")
+    ("hotdog" . "🌭")
+    ("hotel" . "🏨")
+    ("hotel.love" . "🏩")
+    ("hotspring" . "♨")
+    ("hourglass" . "⌛")
+    ("hourglass.flow" . "⏳")
+    ("house" . "🏠")
+    ("house.derelict" . "🏚")
+    ("house.garden" . "🏡")
+    ("house.multiple" . "🏘")
+    ("hundred" . "💯")
+    ("hut" . "🛖")
+    ("ice" . "🧊")
+    ("icecream" . "🍨")
+    ("icecream.shaved" . "🍧")
+    ("icecream.soft" . "🍦")
+    ("icehockey" . "🏒")
+    ("id" . "🆔")
+    ("info" . "ℹ")
+    ("izakaya" . "🏮")
+    ("jar" . "🫙")
+    ("jeans" . "👖")
+    ("jigsaw" . "🧩")
+    ("joystick" . "🕹")
+    ("juggling" . "🤹")
+    ("juice" . "🧃")
+    ("kaaba" . "🕋")
+    ("kadomatsu" . "🎍")
+    ("kangaroo" . "🦘")
+    ("gachi" . "🈷")
+    ("go" . "🈴")
+    ("hi" . "㊙")
+    ("ka" . "🉑")
+    ("kachi" . "🈹")
+    ("kara" . "🈳")
+    ("kon" . "🈲")
+    ("man" . "👨")
+    ("man.box" . "🚹")
+    ("man.crown" . "🤴")
+    ("man.guapimao" . "👲")
+    ("man.levitate" . "🕴")
+    ("man.old" . "👴")
+    ("man.pregnant" . "🫃")
+    ("man.turban" . "👳")
+    ("man.tuxedo" . "🤵")
+    ("muryo" . "🈚")
+    ("shin" . "🈸")
+    ("shuku" . "㊗")
+    ("toku" . "🉐")
+    ("yo" . "🈺")
+    ("yubi" . "🈯")
+    ("yuryo" . "🈶")
+    ("koko" . "🈁")
+    ("sa" . "🈂")
+    ("kebab" . "🥙")
+    ("key" . "🔑")
+    ("key.old" . "🗝")
+    ("keyboard" . "⌨")
+    ("kiss" . "💏")
+    ("kissmark" . "💋")
+    ("kite" . "🪁")
+    ("kiwi" . "🥝")
+    ("knife" . "🔪")
+    ("knife.dagger" . "🗡")
+    ("knot" . "🪢")
+    ("koala" . "🐨")
+    ("koinobori" . "🎏")
+    ("label" . "🏷")
+    ("lacrosse" . "🥍")
+    ("ladder" . "🪜")
+    ("lamp.diya" . "🪔")
+    ("laptop" . "💻")
+    ("a" . "🅰")
+    ("ab" . "🆎")
+    ("b" . "🅱")
+    ("cl" . "🆑")
+    ("o" . "🅾")
+    ("leaf.clover.three" . "☘")
+    ("leaf.clover.four" . "🍀")
+    ("leaf.fall" . "🍂")
+    ("leaf.herb" . "🌿")
+    ("leaf.maple" . "🍁")
+    ("leaf.wind" . "🍃")
+    ("leftluggage" . "🛅")
+    ("leg" . "🦵")
+    ("leg.mech" . "🦿")
+    ("lemon" . "🍋")
+    ("leopard" . "🐆")
+    ("letter.love" . "💌")
+    ("liberty" . "🗽")
+    ("lightbulb" . "💡")
+    ("lightning" . "⚡")
+    ("lion" . "🦁")
+    ("lipstick" . "💄")
+    ("litter" . "🚮")
+    ("litter.not" . "🚯")
+    ("lizard" . "🦎")
+    ("llama" . "🦙")
+    ("lobster" . "🦞")
+    ("lock" . "🔒")
+    ("lock.key" . "🔐")
+    ("lock.open" . "🔓")
+    ("lock.pen" . "🔏")
+    ("lollipop" . "🍭")
+    ("lotion" . "🧴")
+    ("luggage" . "🧳")
+    ("lungs" . "🫁")
+    ("mage" . "🧙")
+    ("magnet" . "🧲")
+    ("magnify.r" . "🔎")
+    ("magnify.l" . "🔍")
+    ("mahjong.dragon.red" . "🀄")
+    ("mail" . "✉")
+    ("mail.arrow" . "📩")
+    ("mailbox.closed.empty" . "📪")
+    ("mailbox.closed.full" . "📫")
+    ("mailbox.open.empty" . "📭")
+    ("mailbox.open.full" . "📬")
+    ("mammoth" . "🦣")
+    ("mango" . "🥭")
+    ("map.world" . "🗺")
+    ("map.jp" . "🗾")
+    ("martialarts" . "🥋")
+    ("masks" . "🎭")
+    ("mate" . "🧉")
+    ("matryoshka" . "🪆")
+    ("meat" . "🥩")
+    ("meat.bone" . "🍖")
+    ("medal.first" . "🥇")
+    ("medal.second" . "🥈")
+    ("medal.third" . "🥉")
+    ("medal.sports" . "🏅")
+    ("medal.military" . "🎖")
+    ("megaphone" . "📢")
+    ("megaphone.simple" . "📣")
+    ("melon" . "🍈")
+    ("merperson" . "🧜")
+    ("metro" . "Ⓜ")
+    ("microbe" . "🦠")
+    ("microphone" . "🎤")
+    ("microphone.studio" . "🎙")
+    ("microscope" . "🔬")
+    ("milkyway" . "🌌")
+    ("mirror" . "🪞")
+    ("mixer" . "🎛")
+    ("money.bag" . "💰")
+    ("money.dollar" . "💵")
+    ("money.euro" . "💶")
+    ("money.pound" . "💷")
+    ("money.yen" . "💴")
+    ("money.wings" . "💸")
+    ("monkey" . "🐒")
+    ("monkey.face" . "🐵")
+    ("monkey.hear.not" . "🙉")
+    ("monkey.see.not" . "🙈")
+    ("monkey.speak.not" . "🙊")
+    ("moon.crescent" . "🌙")
+    ("moon.full" . "🌕")
+    ("moon.full.face" . "🌝")
+    ("moon.new" . "🌑")
+    ("moon.new.face" . "🌚")
+    ("moon.wane.one" . "🌖")
+    ("moon.wane.two" . "🌗")
+    ("moon.wane.three.face" . "🌜")
+    ("moon.wane.three" . "🌘")
+    ("moon.wax.one" . "🌒")
+    ("moon.wax.two" . "🌓")
+    ("moon.wax.two.face" . "🌛")
+    ("moon.wax.three" . "🌔")
+    ("mortarboard" . "🎓")
+    ("mosque" . "🕌")
+    ("mosquito" . "🦟")
+    ("motorcycle" . "🏍")
+    ("motorway" . "🛣")
+    ("mountain" . "⛰")
+    ("mountain.fuji" . "🗻")
+    ("mountain.snow" . "🏔")
+    ("mountain.sunrise" . "🌄")
+    ("mouse" . "🐁")
+    ("mouse.face" . "🐭")
+    ("mousetrap" . "🪤")
+    ("mouth" . "👄")
+    ("mouth.bite" . "🫦")
+    ("moyai" . "🗿")
+    ("museum" . "🏛")
+    ("mushroom" . "🍄")
+    ("musicalscore" . "🎼")
+    ("nails.polish" . "💅")
+    ("namebadge" . "📛")
+    ("nazar" . "🧿")
+    ("necktie" . "👔")
+    ("needle" . "🪡")
+    ("nest.empty" . "🪹")
+    ("nest.eggs" . "🪺")
+    ("new" . "🆕")
+    ("newspaper" . "📰")
+    ("newspaper.rolled" . "🗞")
+    ("ng" . "🆖")
+    ("ningyo" . "🎎")
+    ("ninja" . "🥷")
+    ("noentry" . "⛔")
+    ("nose" . "👃")
+    ("notebook" . "📓")
+    ("notebook.deco" . "📔")
+    ("notepad" . "🗒")
+    ("notes" . "🎵")
+    ("notes.triple" . "🎶")
+    ("numbers" . "🔢")
+    ("octopus" . "🐙")
+    ("office" . "🏢")
+    ("oil" . "🛢")
+    ("ok" . "🆗")
+    ("olive" . "🫒")
+    ("oni" . "👹")
+    ("onion" . "🧅")
+    ("orangutan" . "🦧")
+    ("otter" . "🦦")
+    ("owl" . "🦉")
+    ("ox" . "🐂")
+    ("oyster" . "🦪")
+    ("package" . "📦")
+    ("paella" . "🥘")
+    ("page" . "📄")
+    ("page.curl" . "📃")
+    ("page.pencil" . "📝")
+    ("pager" . "📟")
+    ("pages.tabs" . "📑")
+    ("painting" . "🖼")
+    ("palette" . "🎨")
+    ("pancakes" . "🥞")
+    ("panda" . "🐼")
+    ("parachute" . "🪂")
+    ("park" . "🏞")
+    ("parking" . "🅿")
+    ("parrot" . "🦜")
+    ("partalteration" . "〽")
+    ("party" . "🎉")
+    ("peach" . "🍑")
+    ("peacock" . "🦚")
+    ("peanuts" . "🥜")
+    ("pear" . "🍐")
+    ("pedestrian" . "🚶")
+    ("pedestrian.not" . "🚷")
+    ("pen.ball" . "🖊")
+    ("pen.fountain" . "🖋")
+    ("pencil" . "✏")
+    ("penguin" . "🐧")
+    ("pepper" . "🫑")
+    ("pepper.hot" . "🌶")
+    ("person" . "🧑")
+    ("person.angry" . "🙎")
+    ("person.beard" . "🧔")
+    ("person.blonde" . "👱")
+    ("person.bow" . "🙇")
+    ("person.crown" . "🫅")
+    ("person.deaf" . "🧏")
+    ("person.facepalm" . "🤦")
+    ("person.frown" . "🙍")
+    ("person.hijab" . "🧕")
+    ("person.kneel" . "🧎")
+    ("person.lotus" . "🧘")
+    ("person.massage" . "💆")
+    ("person.no" . "🙅")
+    ("person.ok" . "🙆")
+    ("person.old" . "🧓")
+    ("person.pregnant" . "🫄")
+    ("person.raise" . "🙋")
+    ("person.sassy" . "💁")
+    ("person.shrug" . "🤷")
+    ("person.stand" . "🧍")
+    ("person.steam" . "🧖")
+    ("petri" . "🧫")
+    ("phone" . "📱")
+    ("phone.arrow" . "📲")
+    ("phone.classic" . "☎")
+    ("phone.not" . "📵")
+    ("phone.off" . "📴")
+    ("phone.receiver" . "📞")
+    ("phone.signal" . "📶")
+    ("phone.vibrate" . "📳")
+    ("piano" . "🎹")
+    ("pick" . "⛏")
+    ("pie" . "🥧")
+    ("pig" . "🐖")
+    ("pig.face" . "🐷")
+    ("pig.nose" . "🐽")
+    ("pill" . "💊")
+    ("pin" . "📌")
+    ("pin.round" . "📍")
+    ("pinata" . "🪅")
+    ("pineapple" . "🍍")
+    ("pingpong" . "🏓")
+    ("pistol" . "🔫")
+    ("pizza" . "🍕")
+    ("placard" . "🪧")
+    ("planet" . "🪐")
+    ("plant" . "🪴")
+    ("plaster" . "🩹")
+    ("plate.cutlery" . "🍽")
+    ("playback.down" . "⏬")
+    ("playback.eject" . "⏏")
+    ("playback.forward" . "⏩")
+    ("playback.pause" . "⏸")
+    ("playback.record" . "⏺")
+    ("playback.repeat" . "🔁")
+    ("playback.repeat.once" . "🔂")
+    ("playback.repeat.v" . "🔃")
+    ("playback.restart" . "⏮")
+    ("playback.rewind" . "⏪")
+    ("playback.shuffle" . "🔀")
+    ("playback.skip" . "⏭")
+    ("playback.stop" . "⏹")
+    ("playback.toggle" . "⏯")
+    ("playback.up" . "⏫")
+    ("playingcard.flower" . "🎴")
+    ("playingcard.joker" . "🃏")
+    ("plunger" . "🪠")
+    ("policeofficer" . "👮")
+    ("poo" . "💩")
+    ("popcorn" . "🍿")
+    ("post.eu" . "🏤")
+    ("post.jp" . "🏣")
+    ("postbox" . "📮")
+    ("potato" . "🥔")
+    ("potato.sweet" . "🍠")
+    ("pouch" . "👝")
+    ("powerplug" . "🔌")
+    ("present" . "🎁")
+    ("pretzel" . "🥨")
+    ("printer" . "🖨")
+    ("prints.foot" . "👣")
+    ("prints.paw" . "🐾")
+    ("prohibited" . "🚫")
+    ("projector" . "📽")
+    ("pumpkin.lantern" . "🎃")
+    ("purse" . "👛")
+    ("quest" . "❓")
+    ("quest.white" . "❔")
+    ("rabbit" . "🐇")
+    ("rabbit.face" . "🐰")
+    ("raccoon" . "🦝")
+    ("radio" . "📻")
+    ("radioactive" . "☢")
+    ("railway" . "🛤")
+    ("rainbow" . "🌈")
+    ("ram" . "🐏")
+    ("rat" . "🐀")
+    ("razor" . "🪒")
+    ("receipt" . "🧾")
+    ("recycling" . "♻")
+    ("reg" . "®")
+    ("restroom" . "🚻")
+    ("rhino" . "🦏")
+    ("ribbon" . "🎀")
+    ("ribbon.remind" . "🎗")
+    ("rice" . "🍚")
+    ("rice.cracker" . "🍘")
+    ("rice.ear" . "🌾")
+    ("rice.onigiri" . "🍙")
+    ("ring" . "💍")
+    ("ringbuoy" . "🛟")
+    ("robot" . "🤖")
+    ("rock" . "🪨")
+    ("rocket" . "🚀")
+    ("rollercoaster" . "🎢")
+    ("rosette" . "🏵")
+    ("rugby" . "🏉")
+    ("ruler" . "📏")
+    ("ruler.triangle" . "📐")
+    ("running" . "🏃")
+    ("safetypin" . "🧷")
+    ("safetyvest" . "🦺")
+    ("sake" . "🍶")
+    ("salad" . "🥗")
+    ("salt" . "🧂")
+    ("sandwich" . "🥪")
+    ("santa.man" . "🎅")
+    ("santa.woman" . "🤶")
+    ("satdish" . "📡")
+    ("satellite" . "🛰")
+    ("saw" . "🪚")
+    ("saxophone" . "🎷")
+    ("scales" . "⚖")
+    ("scarf" . "🧣")
+    ("school" . "🏫")
+    ("scissors" . "✂")
+    ("scooter" . "🛴")
+    ("scooter.motor" . "🛵")
+    ("scorpion" . "🦂")
+    ("screwdriver" . "🪛")
+    ("scroll" . "📜")
+    ("seal" . "🦭")
+    ("seat" . "💺")
+    ("seedling" . "🌱")
+    ("shark" . "🦈")
+    ("sheep" . "🐑")
+    ("shell.spiral" . "🐚")
+    ("shield" . "🛡")
+    ("ship" . "🚢")
+    ("ship.cruise" . "🛳")
+    ("ship.ferry" . "⛴")
+    ("shirt.sports" . "🎽")
+    ("shirt.t" . "👕")
+    ("shoe" . "👞")
+    ("shoe.ballet" . "🩰")
+    ("shoe.flat" . "🥿")
+    ("shoe.heel" . "👠")
+    ("shoe.hike" . "🥾")
+    ("shoe.ice" . "⛸")
+    ("shoe.roller" . "🛼")
+    ("shoe.sandal.heel" . "👡")
+    ("shoe.ski" . "🎿")
+    ("shoe.sneaker" . "👟")
+    ("shoe.tall" . "👢")
+    ("shoe.thong" . "🩴")
+    ("shopping" . "🛍")
+    ("shorts" . "🩳")
+    ("shoshinsha" . "🔰")
+    ("shovel" . "🪏")
+    ("shower" . "🚿")
+    ("shrimp" . "🦐")
+    ("shrimp.fried" . "🍤")
+    ("shrine" . "⛩")
+    ("sign.crossing" . "🚸")
+    ("sign.stop" . "🛑")
+    ("silhouette" . "👤")
+    ("silhouette.double" . "👥")
+    ("silhouette.hug" . "🫂")
+    ("silhouette.speak" . "🗣")
+    ("siren" . "🚨")
+    ("skateboard" . "🛹")
+    ("skewer.dango" . "🍡")
+    ("skewer.oden" . "🍢")
+    ("skiing" . "⛷")
+    ("skull" . "💀")
+    ("skull.bones" . "☠")
+    ("skunk" . "🦨")
+    ("sled" . "🛷")
+    ("slide" . "🛝")
+    ("slider" . "🎚")
+    ("sloth" . "🦥")
+    ("slots" . "🎰")
+    ("snail" . "🐌")
+    ("snake" . "🐍")
+    ("snowboarding" . "🏂")
+    ("snowflake" . "❄")
+    ("snowman" . "⛄")
+    ("snowman.snow" . "☃")
+    ("soap" . "🧼")
+    ("socks" . "🧦")
+    ("softball" . "🥎")
+    ("sos" . "🆘")
+    ("soup" . "🍲")
+    ("spaghetti" . "🍝")
+    ("sparkle.box" . "❇")
+    ("sparkler" . "🎇")
+    ("sparkles" . "✨")
+    ("speaker" . "🔈")
+    ("speaker.not" . "🔇")
+    ("speaker.wave" . "🔉")
+    ("speaker.waves" . "🔊")
+    ("spider" . "🕷")
+    ("spiderweb" . "🕸")
+    ("spinach" . "🥬")
+    ("splatter" . "🫟")
+    ("sponge" . "🧽")
+    ("spoon" . "🥄")
+    ("square.black" . "⬛")
+    ("square.black.tiny" . "▪")
+    ("square.black.small" . "◾")
+    ("square.black.medium" . "◼")
+    ("square.white" . "⬜")
+    ("square.white.tiny" . "▫")
+    ("square.white.small" . "◽")
+    ("square.white.medium" . "◻")
+    ("square.blue" . "🟦")
+    ("square.brown" . "🟫")
+    ("square.green" . "🟩")
+    ("square.orange" . "🟧")
+    ("square.purple" . "🟪")
+    ("square.red" . "🟥")
+    ("square.yellow" . "🟨")
+    ("squid" . "🦑")
+    ("stadium" . "🏟")
+    ("star" . "⭐")
+    ("star.arc" . "💫")
+    ("star.box" . "✴")
+    ("star.glow" . "🌟")
+    ("star.shoot" . "🌠")
+    ("stethoscope" . "🩺")
+    ("store.big" . "🏬")
+    ("store.small" . "🏪")
+    ("strawberry" . "🍓")
+    ("suit.club" . "♣")
+    ("suit.diamond" . "♦")
+    ("suit.heart" . "♥")
+    ("suit.spade" . "♠")
+    ("sun" . "☀")
+    ("sun.cloud" . "🌤")
+    ("sun.face" . "🌞")
+    ("sunrise" . "🌅")
+    ("superhero" . "🦸")
+    ("supervillain" . "🦹")
+    ("surfing" . "🏄")
+    ("sushi" . "🍣")
+    ("swan" . "🦢")
+    ("swimming" . "🏊")
+    ("swimsuit" . "🩱")
+    ("swords" . "⚔")
+    ("symbols" . "🔣")
+    ("synagogue" . "🕍")
+    ("syringe" . "💉")
+    ("taco" . "🌮")
+    ("takeout" . "🥡")
+    ("tamale" . "🫔")
+    ("tanabata" . "🎋")
+    ("tangerine" . "🍊")
+    ("tap" . "🚰")
+    ("tap.not" . "🚱")
+    ("taxi" . "🚕")
+    ("taxi.front" . "🚖")
+    ("teacup" . "🍵")
+    ("teapot" . "🫖")
+    ("teddy" . "🧸")
+    ("telescope" . "🔭")
+    ("temple" . "🛕")
+    ("ten" . "🔟")
+    ("tengu" . "👺")
+    ("tennis" . "🎾")
+    ("tent" . "⛺")
+    ("testtube" . "🧪")
+    ("thermometer" . "🌡")
+    ("thread" . "🧵")
+    ("thumb.up" . "👍")
+    ("thumb.down" . "👎")
+    ("ticket.event" . "🎟")
+    ("ticket.travel" . "🎫")
+    ("tiger" . "🐅")
+    ("tiger.face" . "🐯")
+    ("tm" . "™")
+    ("toilet" . "🚽")
+    ("toiletpaper" . "🧻")
+    ("tomato" . "🍅")
+    ("tombstone" . "🪦")
+    ("tongue" . "👅")
+    ("toolbox" . "🧰")
+    ("tooth" . "🦷")
+    ("toothbrush" . "🪥")
+    ("tornado" . "🌪")
+    ("tower.tokyo" . "🗼")
+    ("trackball" . "🖲")
+    ("tractor" . "🚜")
+    ("trafficlight.v" . "🚦")
+    ("trafficlight.h" . "🚥")
+    ("train" . "🚆")
+    ("train.car" . "🚃")
+    ("train.light" . "🚈")
+    ("train.metro" . "🚇")
+    ("train.mono" . "🚝")
+    ("train.mountain" . "🚞")
+    ("train.speed" . "🚄")
+    ("train.speed.bullet" . "🚅")
+    ("train.steam" . "🚂")
+    ("train.stop" . "🚉")
+    ("train.suspend" . "🚟")
+    ("train.tram" . "🚊")
+    ("train.tram.car" . "🚋")
+    ("transgender" . "⚧")
+    ("tray.inbox" . "📥")
+    ("tray.mail" . "📨")
+    ("tray.outbox" . "📤")
+    ("tree.deciduous" . "🌳")
+    ("tree.evergreen" . "🌲")
+    ("tree.leafless" . "🪾")
+    ("tree.palm" . "🌴")
+    ("tree.xmas" . "🎄")
+    ("triangle.r" . "▶")
+    ("triangle.l" . "◀")
+    ("triangle.t" . "🔼")
+    ("triangle.b" . "🔽")
+    ("triangle.t.red" . "🔺")
+    ("triangle.b.red" . "🔻")
+    ("trident" . "🔱")
+    ("troll" . "🧌")
+    ("trophy" . "🏆")
+    ("truck" . "🚚")
+    ("truck.trailer" . "🚛")
+    ("trumpet" . "🎺")
+    ("tsukimi" . "🎑")
+    ("turkey" . "🦃")
+    ("turtle" . "🐢")
+    ("tv" . "📺")
+    ("ufo" . "🛸")
+    ("umbrella.open" . "☂")
+    ("umbrella.closed" . "🌂")
+    ("umbrella.rain" . "☔")
+    ("umbrella.sun" . "⛱")
+    ("unicorn" . "🦄")
+    ("unknown" . "🦳")
+    ("up" . "🆙")
+    ("urn" . "⚱")
+    ("vampire" . "🧛")
+    ("violin" . "🎻")
+    ("volcano" . "🌋")
+    ("volleyball" . "🏐")
+    ("vs" . "🆚")
+    ("waffle" . "🧇")
+    ("wand" . "🪄")
+    ("warning" . "⚠")
+    ("watch" . "⌚")
+    ("watch.stop" . "⏱")
+    ("watermelon" . "🍉")
+    ("waterpolo" . "🤽")
+    ("wave" . "🌊")
+    ("wc" . "🚾")
+    ("weightlifting" . "🏋")
+    ("whale" . "🐋")
+    ("whale.spout" . "🐳")
+    ("wheel" . "🛞")
+    ("wheelchair" . "🦽")
+    ("wheelchair.box" . "♿")
+    ("wheelchair.motor" . "🦼")
+    ("wind" . "🌬")
+    ("windchime" . "🎐")
+    ("window" . "🪟")
+    ("wine" . "🍷")
+    ("wolf" . "🐺")
+    ("woman" . "👩")
+    ("woman.box" . "🚺")
+    ("woman.crown" . "👸")
+    ("woman.old" . "👵")
+    ("woman.pregnant" . "🤰")
+    ("wood" . "🪵")
+    ("worm" . "🪱")
+    ("wrench" . "🔧")
+    ("wrestling" . "🤼")
+    ("xray" . "🩻")
+    ("yarn" . "🧶")
+    ("yoyo" . "🪀")
+    ("zebra" . "🦓")
+    ("zodiac.aquarius" . "♒")
+    ("zodiac.aries" . "♈")
+    ("zodiac.cancer" . "♋")
+    ("zodiac.capri" . "♑")
+    ("zodiac.gemini" . "♊")
+    ("zodiac.leo" . "♌")
+    ("zodiac.libra" . "♎")
+    ("zodiac.ophi" . "⛎")
+    ("zodiac.pisces" . "♓")
+    ("zodiac.sagit" . "♐")
+    ("zodiac.scorpio" . "♏")
+    ("zodiac.taurus" . "♉")
+    ("zodiac.virgo" . "♍")
+    ("zombie" . "🧟")
+    ("zzz" . "💤"))
+  "An alist of name and corresponding emoji.
+
+Emojis: https://typst.app/docs/reference/symbols/emoji/";
+  :group 'typst-ts-editing
+  :type '(repeat
+          (cons (string :tag "Name")
+                (string :tag "Emoji"))))
+
+(provide 'typst-ts-symbols)
+
+;;; typst-ts-symbols.el ends here

Reply via email to