summaryrefslogtreecommitdiffstats
path: root/autoload
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2017-12-06 13:05:56 +0100
committerAdam Stankiewicz <sheerun@sher.pl>2017-12-06 13:05:56 +0100
commit9fe009095afdb86f6f771109ac454ccfc5340f31 (patch)
tree1bb6b2fd7e2ff2b94bd3dd8ce6fdb735e873237b /autoload
parentdce9e8dec5ef51730291c7bbff3e3997433eabbd (diff)
downloadvim-polyglot-9fe009095afdb86f6f771109ac454ccfc5340f31.tar.gz
vim-polyglot-9fe009095afdb86f6f771109ac454ccfc5340f31.zip
Change julia provider to JuliaEditorSupport/julia-vim, closes #253
Diffstat (limited to 'autoload')
-rw-r--r--autoload/LaTeXtoUnicode.vim625
-rw-r--r--autoload/fish.vim71
-rw-r--r--autoload/julia.vim188
-rw-r--r--autoload/julia_blocks.vim798
-rw-r--r--autoload/julia_latex_symbols.vim3316
5 files changed, 4927 insertions, 71 deletions
diff --git a/autoload/LaTeXtoUnicode.vim b/autoload/LaTeXtoUnicode.vim
new file mode 100644
index 00000000..581dec1e
--- /dev/null
+++ b/autoload/LaTeXtoUnicode.vim
@@ -0,0 +1,625 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" Support for LaTex-to-Unicode conversion as in the Julia REPL "
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! s:L2U_Setup()
+
+ call s:L2U_SetupGlobal()
+
+ " Keep track of whether LaTeX-to-Unicode is activated
+ " (used when filetype changes)
+ if !has_key(b:, "l2u_enabled")
+ let b:l2u_enabled = 0
+ endif
+
+ " Did we install the L2U tab mappings?
+ if !has_key(b:, "l2u_tab_set")
+ let b:l2u_tab_set = 0
+ endif
+ if !has_key(b:, "l2u_cmdtab_set")
+ let b:l2u_cmdtab_set = 0
+ endif
+
+ " Did we activate the L2U as-you-type substitutions?
+ if !has_key(b:, "l2u_autosub_set")
+ let b:l2u_autosub_set = 0
+ endif
+
+ " Following are some flags used to pass information between the function which
+ " attempts the LaTeX-to-Unicode completion and the fallback function
+
+ " Was a (possibly partial) completion found?
+ let b:l2u_found_completion = 0
+ " Is the cursor just after a single backslash
+ let b:l2u_singlebslash = 0
+ " Backup value of the completeopt settings
+ " (since we temporarily add the 'longest' setting while
+ " attempting LaTeX-to-Unicode)
+ let b:l2u_backup_commpleteopt = &completeopt
+ " Are we in the middle of a L2U tab completion?
+ let b:l2u_tab_completing = 0
+ " Are we calling the tab fallback?
+ let b:l2u_in_fallback = 0
+
+endfunction
+
+function! s:L2U_SetupGlobal()
+
+ " Initialization of global and script-local variables
+ " is only performed once
+ if get(g:, "l2u_did_global_setup", 0)
+ return
+ endif
+
+ let g:l2u_did_global_setup = 1
+
+ let g:l2u_symbols_dict = julia_latex_symbols#get_dict()
+
+ call s:L2U_deprecated_options()
+
+ if v:version < 704
+ let g:latex_to_unicode_tab = 0
+ let g:latex_to_unicode_auto = 0
+ endif
+
+ " YouCompleteMe and neocomplcache/neocomplete/deoplete plug-ins do not work well
+ " with LaTeX symbols suggestions
+ if exists("g:loaded_youcompleteme") ||
+ \ exists("g:loaded_neocomplcache") ||
+ \ exists("g:loaded_neocomplete") ||
+ \ exists("g:loaded_deoplete")
+ let g:latex_to_unicode_suggestions = 0
+ endif
+
+ " A hack to forcibly get out of completion mode: feed
+ " this string with feedkeys()
+ if has("win32") || has("win64")
+ if has("gui_running")
+ let s:l2u_esc_sequence = "\u0006"
+ else
+ let s:l2u_esc_sequence = "\u0006\b"
+ endif
+ else
+ let s:l2u_esc_sequence = "\u0091\b"
+ end
+
+ " Trigger for the previous mapping of <Tab>
+ let s:l2u_fallback_trigger = "\u0091L2UFallbackTab"
+
+endfunction
+
+" Each time the filetype changes, we may need to enable or
+" disable the LaTeX-to-Unicode functionality
+function! LaTeXtoUnicode#Refresh()
+
+ call s:L2U_Setup()
+
+ " by default, LaTeX-to-Unicode is only active on julia files
+ let file_types = s:L2U_file_type_regex(get(g:, "latex_to_unicode_file_types", "julia"))
+ let file_types_blacklist = s:L2U_file_type_regex(get(g:, "latex_to_unicode_file_types_blacklist", "$^"))
+
+ if match(&filetype, file_types) < 0 || match(&filetype, file_types_blacklist) >= 0
+ if b:l2u_enabled
+ call LaTeXtoUnicode#Disable()
+ else
+ return
+ endif
+ elseif !b:l2u_enabled
+ call LaTeXtoUnicode#Enable()
+ endif
+
+endfunction
+
+function! LaTeXtoUnicode#Enable()
+
+ if b:l2u_enabled
+ return
+ end
+
+ call s:L2U_ResetLastCompletionInfo()
+
+ let b:l2u_enabled = 1
+
+ " If we're editing the first file upon opening vim, this will only init the
+ " command line mode mapping, and the full initialization will be performed by
+ " the autocmd triggered by InsertEnter, defined in /ftdetect.vim.
+ " Otherwise, if we're opening a file from within a running vim session, this
+ " will actually initialize all the LaTeX-to-Unicode substitutions.
+ call LaTeXtoUnicode#Init()
+
+ return
+
+endfunction
+
+function! LaTeXtoUnicode#Disable()
+ if !b:l2u_enabled
+ return
+ endif
+ let b:l2u_enabled = 0
+ call LaTeXtoUnicode#Init()
+ return
+endfunction
+
+" Translate old options to their new equivalents
+function! s:L2U_deprecated_options()
+ for [new, old] in [["latex_to_unicode_tab", "julia_latex_to_unicode"],
+ \ ["latex_to_unicode_auto", "julia_auto_latex_to_unicode"],
+ \ ["latex_to_unicode_suggestions", "julia_latex_suggestions_enabled"],
+ \ ["latex_to_unicode_eager", "julia_latex_to_unicode_eager"]]
+ if !has_key(g:, new) && has_key(g:, old)
+ exec "let g:" . new . " = g:" . old
+ endif
+ endfor
+endfunction
+
+function! s:L2U_file_type_regex(ft)
+ if type(a:ft) == 3
+ let file_types = "\\%(" . join(a:ft, "\\|") . "\\)"
+ elseif type(a:ft) == 1
+ let file_types = a:ft
+ else
+ echoerr "invalid file_type specification"
+ endif
+ return "^" . file_types . "$"
+endfunction
+
+" Some data used to keep track of the previous completion attempt.
+" Used to detect
+" 1) if we just attempted the same completion, or
+" 2) if backspace was just pressed while completing
+" This function initializes and resets the required info
+
+function! s:L2U_ResetLastCompletionInfo()
+ let b:l2u_completed_once = 0
+ let b:l2u_bs_while_completing = 0
+ let b:l2u_last_compl = {
+ \ 'line': '',
+ \ 'col0': -1,
+ \ 'col1': -1,
+ \ }
+endfunction
+
+" This function only detects whether an exact match is found for a LaTeX
+" symbol in front of the cursor
+function! s:L2U_ismatch()
+ let col1 = col('.')
+ let l = getline('.')
+ let col0 = match(l[0:col1-2], '\\[^[:space:]\\]\+$')
+ if col0 == -1
+ return 0
+ endif
+ let base = l[col0 : col1-1]
+ return has_key(g:l2u_symbols_dict, base)
+endfunction
+
+" Helper function to sort suggestion entries
+function! s:L2U_partmatches_sort(p1, p2)
+ return a:p1.word > a:p2.word ? 1 : a:p1.word < a:p2.word ? -1 : 0
+endfunction
+
+" Helper function to fix display of Unicode compose characters
+" in the suggestions menu (they are displayed on top of '◌')
+function! s:L2U_fix_compose_chars(uni)
+ let u = matchstr(a:uni, '^.')
+ let isc = ("\u0300" <= u && u <= "\u036F") ||
+ \ ("\u1DC0" <= u && u <= "\u1DFF") ||
+ \ ("\u20D0" <= u && u <= "\u20FF") ||
+ \ ("\uFE20" <= u && u <= "\uFE2F")
+ return isc ? "\u25CC" . a:uni : a:uni
+endfunction
+
+" Helper function to find the longest common prefix among
+" partial completion matches (used when suggestions are disabled
+" and in command line mode)
+function! s:L2U_longest_common_prefix(partmatches)
+ let common = a:partmatches[0]
+ for i in range(1, len(a:partmatches)-1)
+ let p = a:partmatches[i]
+ if len(p) < len(common)
+ let common = common[0 : len(p)-1]
+ endif
+ for j in range(1, len(common)-1)
+ if p[j] != common[j]
+ let common = common[0 : j-1]
+ break
+ endif
+ endfor
+ endfor
+ return common
+endfunction
+
+" Omnicompletion function. Besides the usual two-stage omnifunc behaviour,
+" it has the following peculiar features:
+" *) keeps track of the previous completion attempt
+" *) sets some info to be used by the fallback function
+" *) either returns a list of completions if a partial match is found, or a
+" Unicode char if an exact match is found
+" *) forces its way out of completion mode through a hack in some cases
+function! LaTeXtoUnicode#omnifunc(findstart, base)
+ if a:findstart
+ " first stage
+ " avoid infinite loop if the fallback happens to call omnicompletion
+ if b:l2u_in_fallback
+ let b:l2u_in_fallback = 0
+ return -3
+ endif
+ let b:l2u_in_fallback = 0
+ " set info for the callback
+ let b:l2u_tab_completing = 1
+ let b:l2u_found_completion = 1
+ " analyse current line
+ let col1 = col('.')
+ let l = getline('.')
+ let col0 = match(l[0:col1-2], '\\[^[:space:]\\]\+$')
+ " compare with previous completion attempt
+ let b:l2u_bs_while_completing = 0
+ let b:l2u_completed_once = 0
+ if col0 == b:l2u_last_compl['col0']
+ let prevl = b:l2u_last_compl['line']
+ if col1 == b:l2u_last_compl['col1'] && l ==# prevl
+ let b:l2u_completed_once = 1
+ elseif col1 == b:l2u_last_compl['col1'] - 1 && l ==# prevl[0 : col1-2] . prevl[col1 : -1]
+ let b:l2u_bs_while_completing = 1
+ endif
+ endif
+ " store completion info for next attempt
+ let b:l2u_last_compl['col0'] = col0
+ let b:l2u_last_compl['col1'] = col1
+ let b:l2u_last_compl['line'] = l
+ " is the cursor right after a backslash?
+ let b:l2u_singlebslash = (match(l[0:col1-2], '\\$') >= 0)
+ " completion not found
+ if col0 == -1
+ let b:l2u_found_completion = 0
+ call feedkeys(s:l2u_esc_sequence, 'n')
+ let col0 = -2
+ endif
+ return col0
+ else
+ " read settings (eager mode is implicit when suggestions are disabled)
+ let suggestions = get(g:, "latex_to_unicode_suggestions", 1)
+ let eager = get(g:, "latex_to_unicode_eager", 1) || !suggestions
+ " search for matches
+ let partmatches = []
+ let exact_match = 0
+ for k in keys(g:l2u_symbols_dict)
+ if k ==# a:base
+ let exact_match = 1
+ endif
+ if len(k) >= len(a:base) && k[0 : len(a:base)-1] ==# a:base
+ let menu = s:L2U_fix_compose_chars(g:l2u_symbols_dict[k])
+ if suggestions
+ call add(partmatches, {'word': k, 'menu': menu})
+ else
+ call add(partmatches, k)
+ endif
+ endif
+ endfor
+ " exact matches are replaced with Unicode
+ " exceptions:
+ " *) we reached an exact match by pressing backspace while completing
+ " *) the exact match is one among many, and the eager setting is
+ " disabled, and it's the first time this completion is attempted
+ if exact_match && !b:l2u_bs_while_completing && (len(partmatches) == 1 || eager || b:l2u_completed_once)
+ " the completion is successful: reset the last completion info...
+ call s:L2U_ResetLastCompletionInfo()
+ " ...force our way out of completion mode...
+ call feedkeys(s:l2u_esc_sequence, 'n')
+ " ...return the Unicode symbol
+ return [g:l2u_symbols_dict[a:base]]
+ endif
+ if !empty(partmatches)
+ " here, only partial matches were found; either keep just the longest
+ " common prefix, or pass them on
+ if !suggestions
+ let partmatches = [s:L2U_longest_common_prefix(partmatches)]
+ else
+ call sort(partmatches, "s:L2U_partmatches_sort")
+ endif
+ endif
+ if empty(partmatches)
+ call feedkeys(s:l2u_esc_sequence, 'n')
+ let b:l2u_found_completion = 0
+ endif
+ return partmatches
+ endif
+endfunction
+
+function! LaTeXtoUnicode#PutLiteral(k)
+ call feedkeys(a:k, 'ni')
+ return ''
+endfunction
+
+" Function which saves the current insert-mode mapping of a key sequence `s`
+" and associates it with another key sequence `k` (e.g. stores the current
+" <Tab> mapping into the Fallback trigger)
+function! s:L2U_SetFallbackMapping(s, k)
+ let mmdict = maparg(a:s, 'i', 0, 1)
+ if empty(mmdict)
+ exe 'inoremap <buffer> ' . a:k . ' ' . a:s
+ return
+ endif
+ let rhs = mmdict["rhs"]
+ if rhs =~# '^<Plug>L2U'
+ return
+ endif
+ let pre = '<buffer>'
+ if mmdict["silent"]
+ let pre = pre . '<silent>'
+ endif
+ if mmdict["expr"]
+ let pre = pre . '<expr>'
+ endif
+ if mmdict["noremap"]
+ let cmd = 'inoremap '
+ else
+ let cmd = 'imap '
+ " This is a nasty hack used to prevent infinite recursion. It's not a
+ " general solution.
+ if mmdict["expr"]
+ let rhs = substitute(rhs, '\c' . a:s, "\<C-R>=LaTeXtoUnicode#PutLiteral('" . a:s . "')\<CR>", 'g')
+ endif
+ endif
+ exe cmd . pre . ' ' . a:k . ' ' . rhs
+endfunction
+
+" This is the function which is mapped to <Tab>
+function! LaTeXtoUnicode#Tab()
+ " the <Tab> is passed through to the fallback mapping if the completion
+ " menu is present, and it hasn't been raised by the L2U tab, and there
+ " isn't an exact match before the cursor when suggestions are disabled
+ if pumvisible() && !b:l2u_tab_completing && (get(g:, "latex_to_unicode_suggestions", 1) || !s:L2U_ismatch())
+ call feedkeys(s:l2u_fallback_trigger)
+ return ''
+ endif
+ " reset the in_fallback info
+ let b:l2u_in_fallback = 0
+ " temporary change to completeopt to use the `longest` setting, which is
+ " probably the only one which makes sense given that the goal of the
+ " completion is to substitute the final string
+ let b:l2u_backup_commpleteopt = &completeopt
+ set completeopt+=longest
+ set completeopt-=noinsert
+ " invoke omnicompletion; failure to perform LaTeX-to-Unicode completion is
+ " handled by the CompleteDone autocommand.
+ return "\<C-X>\<C-O>"
+endfunction
+
+" This function is called at every CompleteDone event, and is meant to handle
+" the failures of LaTeX-to-Unicode completion by calling a fallback
+function! LaTeXtoUnicode#FallbackCallback()
+ if !b:l2u_tab_completing
+ " completion was not initiated by L2U, nothing to do
+ return
+ else
+ " completion was initiated by L2U, restore completeopt
+ let &completeopt = b:l2u_backup_commpleteopt
+ endif
+ " at this point L2U tab completion is over
+ let b:l2u_tab_completing = 0
+ " if the completion was successful do nothing
+ if b:l2u_found_completion == 1 || b:l2u_singlebslash == 1
+ return
+ endif
+ " fallback
+ let b:l2u_in_fallback = 1
+ call feedkeys(s:l2u_fallback_trigger)
+ return
+endfunction
+
+" This is the function which is mapped to <S-Tab> in command-line mode
+function! LaTeXtoUnicode#CmdTab()
+ " first stage
+ " analyse command line
+ let col1 = getcmdpos() - 1
+ let l = getcmdline()
+ let col0 = match(l[0:col1-1], '\\[^[:space:]\\]\+$')
+ let b:l2u_singlebslash = (match(l[0:col1-1], '\\$') >= 0)
+ " completion not found
+ if col0 == -1
+ return l
+ endif
+ let base = l[col0 : col1-1]
+ " search for matches
+ let partmatches = []
+ let exact_match = 0
+ for k in keys(g:l2u_symbols_dict)
+ if k ==# base
+ let exact_match = 1
+ endif
+ if len(k) >= len(base) && k[0 : len(base)-1] ==# base
+ call add(partmatches, k)
+ endif
+ endfor
+ if len(partmatches) == 0
+ return l
+ endif
+ " exact matches are replaced with Unicode
+ if exact_match
+ let unicode = g:l2u_symbols_dict[base]
+ if col0 > 0
+ let pre = l[0 : col0 - 1]
+ else
+ let pre = ''
+ endif
+ let posdiff = col1-col0 - len(unicode)
+ call setcmdpos(col1 - posdiff + 1)
+ return pre . unicode . l[col1 : -1]
+ endif
+ " no exact match: complete with the longest common prefix
+ let common = s:L2U_longest_common_prefix(partmatches)
+ if col0 > 0
+ let pre = l[0 : col0 - 1]
+ else
+ let pre = ''
+ endif
+ let posdiff = col1-col0 - len(common)
+ call setcmdpos(col1 - posdiff + 1)
+ return pre . common . l[col1 : -1]
+endfunction
+
+" Setup the L2U tab mapping
+function! s:L2U_SetTab(wait_insert_enter)
+ if !b:l2u_cmdtab_set && get(g:, "latex_to_unicode_tab", 1) && b:l2u_enabled
+ cmap <buffer> <S-Tab> <Plug>L2UCmdTab
+ cnoremap <buffer> <Plug>L2UCmdTab <C-\>eLaTeXtoUnicode#CmdTab()<CR>
+ let b:l2u_cmdtab_set = 1
+ endif
+ if b:l2u_tab_set
+ return
+ endif
+ " g:did_insert_enter is set from an autocommand in ftdetect
+ if a:wait_insert_enter && !get(g:, "did_insert_enter", 0)
+ return
+ endif
+ if !get(g:, "latex_to_unicode_tab", 1) || !b:l2u_enabled
+ return
+ endif
+
+ " Backup the previous omnifunc (the check is probably not really needed)
+ if get(b:, "prev_omnifunc", "") != "LaTeXtoUnicode#omnifunc"
+ let b:prev_omnifunc = &omnifunc
+ endif
+ setlocal omnifunc=LaTeXtoUnicode#omnifunc
+
+ call s:L2U_SetFallbackMapping('<Tab>', s:l2u_fallback_trigger)
+ imap <buffer> <Tab> <Plug>L2UTab
+ inoremap <buffer><expr> <Plug>L2UTab LaTeXtoUnicode#Tab()
+
+ augroup L2UTab
+ autocmd! * <buffer>
+ " Every time a completion finishes, the fallback may be invoked
+ autocmd CompleteDone <buffer> call LaTeXtoUnicode#FallbackCallback()
+ augroup END
+
+ let b:l2u_tab_set = 1
+endfunction
+
+" Revert the LaTeX-to-Unicode tab mapping settings
+function! s:L2U_UnsetTab()
+ if b:l2u_cmdtab_set
+ cunmap <buffer> <S-Tab>
+ let b:l2u_cmdtab_set = 0
+ endif
+ if !b:l2u_tab_set
+ return
+ endif
+ exec "setlocal omnifunc=" . get(b:, "prev_omnifunc", "")
+ iunmap <buffer> <Tab>
+ if empty(maparg("<Tab>", "i"))
+ call s:L2U_SetFallbackMapping(s:l2u_fallback_trigger, '<Tab>')
+ endif
+ iunmap <buffer> <Plug>L2UTab
+ exe 'iunmap <buffer> ' . s:l2u_fallback_trigger
+ augroup L2UTab
+ autocmd! * <buffer>
+ augroup END
+ let b:l2u_tab_set = 0
+endfunction
+
+" Function which looks for viable LaTeX-to-Unicode supstitutions as you type
+function! LaTeXtoUnicode#AutoSub(...)
+ let vc = a:0 == 0 ? v:char : a:1
+ let col1 = col('.')
+ let lnum = line('.')
+ if col1 == 1
+ if a:0 > 1
+ call feedkeys(a:2, 'n')
+ endif
+ return ''
+ endif
+ let bs = (vc != "\n")
+ let l = getline(lnum)[0 : col1-1-bs] . v:char
+ let col0 = match(l, '\\\%([_^]\?[A-Za-z]\+\%' . col1 . 'c\%([^A-Za-z]\|$\)\|[_^]\%([0-9()=+-]\)\%' . col1 .'c\%(.\|$\)\)')
+ if col0 == -1
+ if a:0 > 1
+ call feedkeys(a:2, 'n')
+ endif
+ return ''
+ endif
+ let base = l[col0 : -1-bs]
+ let unicode = get(g:l2u_symbols_dict, base, '')
+ if empty(unicode)
+ if a:0 > 1
+ call feedkeys(a:2, 'n')
+ endif
+ return ''
+ endif
+ call feedkeys("\<C-G>u", 'n')
+ call feedkeys(repeat("\b", len(base) + bs) . unicode . vc . s:l2u_esc_sequence, 'nt')
+ call feedkeys("\<C-G>u", 'n')
+ return ''
+endfunction
+
+" Setup the auto as-you-type LaTeX-to-Unicode substitution
+function! s:L2U_SetAutoSub(wait_insert_enter)
+ if b:l2u_autosub_set
+ return
+ endif
+ " g:did_insert_enter is set from an autocommand in ftdetect
+ if a:wait_insert_enter && !get(g:, "did_insert_enter", 0)
+ return
+ endif
+ if !get(g:, "latex_to_unicode_auto", 0) || !b:l2u_enabled
+ return
+ endif
+ " Viable substitutions are searched at every character insertion via the
+ " autocmd InsertCharPre. The <Enter> key does not seem to be catched in
+ " this way though, so we use a mapping for that case.
+ imap <buffer> <CR> <Plug>L2UAutoSub
+ inoremap <buffer><expr> <Plug>L2UAutoSub LaTeXtoUnicode#AutoSub("\n", "\<CR>")
+
+ augroup L2UAutoSub
+ autocmd! * <buffer>
+ autocmd InsertCharPre <buffer> call LaTeXtoUnicode#AutoSub()
+ augroup END
+
+ let b:l2u_autosub_set = 1
+endfunction
+
+" Revert the auto LaTeX-to-Unicode settings
+function! s:L2U_UnsetAutoSub()
+ if !b:l2u_autosub_set
+ return
+ endif
+
+ iunmap <buffer> <CR>
+ iunmap <buffer> <Plug>L2UAutoSub
+ augroup L2UAutoSub
+ autocmd! * <buffer>
+ augroup END
+ let b:l2u_autosub_set = 0
+endfunction
+
+" Initialization. Can be used to re-init when global settings have changed.
+function! LaTeXtoUnicode#Init(...)
+ let wait_insert_enter = a:0 > 0 ? a:1 : 1
+
+ if !wait_insert_enter
+ augroup L2UInit
+ autocmd!
+ augroup END
+ endif
+
+ call s:L2U_UnsetTab()
+ call s:L2U_UnsetAutoSub()
+
+ call s:L2U_SetTab(wait_insert_enter)
+ call s:L2U_SetAutoSub(wait_insert_enter)
+endfunction
+
+function! LaTeXtoUnicode#Toggle()
+ call s:L2U_Setup()
+ if b:l2u_enabled
+ call LaTeXtoUnicode#Disable()
+ echo "LaTeX-to-Unicode disabled"
+ else
+ call LaTeXtoUnicode#Enable()
+ echo "LaTeX-to-Unicode enabled"
+ endif
+ return
+endfunction
+
+endif
diff --git a/autoload/fish.vim b/autoload/fish.vim
deleted file mode 100644
index d4e63cdc..00000000
--- a/autoload/fish.vim
+++ /dev/null
@@ -1,71 +0,0 @@
-if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fish') == -1
-
-function! fish#Indent()
- let l:shiftwidth = shiftwidth()
- let l:prevlnum = prevnonblank(v:lnum - 1)
- if l:prevlnum ==# 0
- return 0
- endif
- let l:indent = 0
- let l:prevline = getline(l:prevlnum)
- if l:prevline =~# '\v^\s*switch>'
- let l:indent = l:shiftwidth * 2
- elseif l:prevline =~# '\v^\s*%(begin|if|else|while|for|function|case)>'
- let l:indent = l:shiftwidth
- endif
- let l:line = getline(v:lnum)
- if l:line =~# '\v^\s*end>'
- return indent(v:lnum) - (l:indent ==# 0 ? l:shiftwidth : l:indent)
- elseif l:line =~# '\v^\s*%(case|else)>'
- return indent(v:lnum) - l:shiftwidth
- endif
- return indent(l:prevlnum) + l:indent
-endfunction
-
-function! fish#Format()
- if mode() =~# '\v^%(i|R)$'
- return 1
- else
- let l:command = v:lnum.','.(v:lnum+v:count-1).'!fish_indent'
- echo l:command
- execute l:command
- endif
-endfunction
-
-function! fish#Fold()
- let l:line = getline(v:lnum)
- if l:line =~# '\v^\s*%(begin|if|while|for|function|switch)>'
- return 'a1'
- elseif l:line =~# '\v^\s*end>'
- return 's1'
- else
- return '='
- end
-endfunction
-
-function! fish#Complete(findstart, base)
- if a:findstart
- return getline('.') =~# '\v^\s*$' ? -1 : 0
- else
- if empty(a:base)
- return []
- endif
- let l:results = []
- let l:completions =
- \ system('fish -c "complete -C'.shellescape(a:base).'"')
- let l:cmd = substitute(a:base, '\v\S+$', '', '')
- for l:line in split(l:completions, '\n')
- let l:tokens = split(l:line, '\t')
- call add(l:results, {'word': l:cmd.l:tokens[0],
- \'abbr': l:tokens[0],
- \'menu': get(l:tokens, 1, '')})
- endfor
- return l:results
- endif
-endfunction
-
-function! fish#errorformat()
- return '%Afish: %m,%-G%*\\ ^,%-Z%f (line %l):%s'
-endfunction
-
-endif
diff --git a/autoload/julia.vim b/autoload/julia.vim
new file mode 100644
index 00000000..695a6b78
--- /dev/null
+++ b/autoload/julia.vim
@@ -0,0 +1,188 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
+
+function! julia#set_syntax_version(jvers)
+ if &filetype != "julia"
+ echo "Not a Julia file"
+ return
+ endif
+ syntax clear
+ let b:julia_syntax_version = a:jvers
+ set filetype=julia
+endfunction
+
+function! julia#toggle_deprecated_syntax()
+ if &filetype != "julia"
+ echo "Not a Julia file"
+ return
+ endif
+ syntax clear
+ let hd = get(b:, "julia_syntax_highlight_deprecated",
+ \ get(g:, "julia_syntax_highlight_deprecated", 0))
+ let b:julia_syntax_highlight_deprecated = hd ? 0 : 1
+ set filetype=julia
+ if b:julia_syntax_highlight_deprecated
+ echo "Highlighting of deprecated syntax enabled"
+ else
+ echo "Highlighting of deprecated syntax disabled"
+ endif
+endfunction
+
+if exists("loaded_matchit")
+
+function! julia#toggle_function_blockassign()
+ let sav_pos = getcurpos()
+ let l = getline('.')
+ let c = match(l, '\C\m\<function\s\+.\+(')
+ if c != -1
+ return julia#function_block2assign()
+ endif
+ let c = match(l, '\C\m)\%(::\S\+\)\?\%(\s\+where\s\+.*\)\?\s*=\s*')
+ if c == -1
+ echohl WarningMsg | echo "Not on a function definition or assignment line" | echohl None
+ return
+ endif
+ return julia#function_assign2block()
+endfunction
+
+function! julia#function_block2assign()
+ let sav_pos = getcurpos()
+ let l = getline('.')
+ let c = match(l, '\C\m\<function\s\+.\+(')
+ if c == -1
+ echohl WarningMsg | echo "Not on a function definition line" | echohl None
+ return
+ endif
+ let fpos = copy(sav_pos)
+ let fpos[2] = c+1
+ call setpos('.', fpos)
+ normal %
+ if line('.') != fpos[1]+2 || match(getline('.'), '\C\m^\s*end\s*$') == -1
+ echohl WarningMsg | echo "Only works with 3-lines functions" | echohl None
+ call setpos('.', sav_pos)
+ return
+ endif
+ call setpos('.', fpos)
+ normal! f(
+ normal %
+ while line('.') == fpos[1] && match(l[col('.')-1:], '\C\m)(') == 0
+ normal! l
+ normal %
+ endwhile
+ if line('.') != fpos[1] || match(l[(col('.')-1):], '\C\m)\%(::\S\+\)\?\%(\s\+where\s\+.*\)\?\s*$') != 0
+ echohl WarningMsg | echo "Unrecognized function definition format" | echohl None
+ call setpos('.', sav_pos)
+ return
+ endif
+
+ call setpos('.', fpos)
+ normal! dwA = J
+ if match(getline('.')[(col('.')-1):], '\C\mreturn\>') == 0
+ normal! dw
+ endif
+ if match(getline('.')[(col('.')-1):], '\C\m\s*$') == 0
+ normal! F=C= nothing
+ endif
+ normal! jddk^
+ return
+endfunction
+
+function! julia#function_assign2block()
+ let sav_pos = getcurpos()
+ let l = getline('.')
+ let c = match(l, '\C\m)\%(::\S\+\)\?\%(\s\+where\s\+.*\)\?\s*=\s*')
+ if c == -1
+ echohl WarningMsg | echo "Not on a function assignment-definition line" | echohl None
+ return
+ endif
+ normal ^
+ while match(l[(col('.')-1):], '\%(\S\+\.\)*@') == 0
+ normal! W
+ endwhile
+ normal! ifunction 
+ let l = getline('.')
+ let c = match(l, '\C\m)\%(::\S\+\)\?\%(\s\+where\s\+.*\)\?\s*\zs=\s*')
+ let eqpos = copy(sav_pos)
+ let eqpos[2] = c+1
+ call setpos('.', eqpos)
+ normal! cw oend
+ normal %
+ s/\s*$// | noh
+ return
+endfunction
+
+
+let s:nonid_chars = "\U01-\U07" . "\U0E-\U1F" .
+ \ "\"#$'(,.:;=?@`\\U5B{" .
+ \ "\U80-\UA1" . "\UA7\UA8\UAB\UAD\UAF\UB4" . "\UB6-\UB8" . "\UBB\UBF"
+
+let s:nonidS_chars = "[:space:])\\U5D}" . s:nonid_chars
+
+" the following excludes '!' since it can be used as an identifier,
+" and '$' since it can be used in interpolations
+" note that \U2D is '-'
+let s:uniop_chars = "+\\U2D~¬√∛∜"
+
+let s:binop_chars = "=+\\U2D*/\\%÷^&|⊻<>≤≥≡≠≢∈∉⋅×∪∩⊆⊈⊂⊄⊊←→∋∌⊕⊖⊞⊟∘∧⊗⊘↑↓∨⊠±"
+
+" the following is a list of all remainig valid operator chars,
+" but it's more efficient when expressed with ranges (see below)
+" let s:binop_chars_extra = "↔↚↛↠↣↦↮⇎⇏⇒⇔⇴⇶⇷⇸⇹⇺⇻⇼⇽⇾⇿⟵⟶⟷⟷⟹⟺⟻⟼⟽⟾⟿⤀⤁⤂⤃⤄⤅⤆⤇⤌⤍⤎⤏⤐⤑⤔⤕⤖⤗⤘⤝⤞⤟⤠⥄⥅⥆⥇⥈⥊⥋⥎⥐⥒⥓⥖⥗⥚⥛⥞⥟⥢⥤⥦⥧⥨⥩⥪⥫⥬⥭⥰⧴⬱⬰⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿⭀⭁⭂⭃⭄⭇⭈⭉⭊⭋⭌←→" .
+" \ "∝∊∍∥∦∷∺∻∽∾≁≃≄≅≆≇≈≉≊≋≌≍≎≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≣≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊃⊅⊇⊉⊋⊏⊐⊑⊒⊜⊩⊬⊮⊰⊱⊲⊳⊴⊵⊶⊷⋍⋐⋑⋕⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿⟈⟉⟒⦷⧀⧁⧡⧣⧤⧥⩦⩧⩪⩫⩬⩭⩮⩯⩰⩱⩲⩳⩴⩵⩶⩷⩸⩹⩺⩻⩼⩽⩾⩿⪀⪁⪂⪃⪄⪅⪆⪇⪈⪉⪊⪋⪌⪍⪎⪏⪐⪑⪒⪓⪔⪕⪖⪗⪘⪙⪚⪛⪜⪝⪞⪟⪠⪡⪢⪣⪤⪥⪦⪧⪨⪩⪪⪫⪬⪭⪮⪯⪰⪱⪲⪳⪴⪵⪶⪷⪸⪹⪺⪻⪼⪽⪾⪿⫀⫁⫂⫃⫄⫅⫆⫇⫈⫉⫊⫋⫌⫍⫎⫏⫐⫑⫒⫓⫔⫕⫖⫗⫘⫙⫷⫸⫹⫺⊢⊣" .
+" \ "⊔∓∔∸≂≏⊎⊽⋎⋓⧺⧻⨈⨢⨣⨤⨥⨦⨧⨨⨩⨪⨫⨬⨭⨮⨹⨺⩁⩂⩅⩊⩌⩏⩐⩒⩔⩖⩗⩛⩝⩡⩢⩣" .
+" \ "⊙⊚⊛⊡⊓∗∙∤⅋≀⊼⋄⋆⋇⋉⋊⋋⋌⋏⋒⟑⦸⦼⦾⦿⧶⧷⨇⨰⨱⨲⨳⨴⨵⨶⨷⨸⨻⨼⨽⩀⩃⩄⩋⩍⩎⩑⩓⩕⩘⩚⩜⩞⩟⩠⫛⊍▷⨝⟕⟖⟗" .
+" \ "⇵⟰⟱⤈⤉⤊⤋⤒⤓⥉⥌⥍⥏⥑⥔⥕⥘⥙⥜⥝⥠⥡⥣⥥⥮⥯↑↓"
+
+" same as above, but with character ranges, for performance
+let s:binop_chars_extra = "\\U214B\\U2190-\\U2194\\U219A\\U219B\\U21A0\\U21A3\\U21A6\\U21AE\\U21CE\\U21CF\\U21D2\\U21D4\\U21F4-\\U21FF\\U2208-\\U220D\\U2213\\U2214\\U2217-\\U2219\\U221D\\U2224-\\U222A\\U2237\\U2238\\U223A\\U223B\\U223D\\U223E\\U2240-\\U228B\\U228D-\\U229C\\U229E-\\U22A3\\U22A9\\U22AC\\U22AE\\U22B0-\\U22B7\\U22BB-\\U22BD\\U22C4-\\U22C7\\U22C9-\\U22D3\\U22D5-\\U22ED\\U22F2-\\U22FF\\U25B7\\U27C8\\U27C9\\U27D1\\U27D2\\U27D5-\\U27D7\\U27F0\\U27F1\\U27F5-\\U27F7\\U27F7\\U27F9-\\U27FF\\U2900-\\U2918\\U291D-\\U2920\\U2944-\\U2970\\U29B7\\U29B8\\U29BC\\U29BE-\\U29C1\\U29E1\\U29E3-\\U29E5\\U29F4\\U29F6\\U29F7\\U29FA\\U29FB\\U2A07\\U2A08\\U2A1D\\U2A22-\\U2A2E\\U2A30-\\U2A3D\\U2A40-\\U2A45\\U2A4A-\\U2A58\\U2A5A-\\U2A63\\U2A66\\U2A67\\U2A6A-\\U2AD9\\U2ADB\\U2AF7-\\U2AFA\\U2B30-\\U2B44\\U2B47-\\U2B4C\\UFFE9-\\UFFEC"
+
+" a Julia identifier, sort of
+let s:idregex = '[^' . s:nonidS_chars . '0-9!' . s:uniop_chars . s:binop_chars . '][^' . s:nonidS_chars . s:uniop_chars . s:binop_chars . s:binop_chars_extra . ']*'
+
+let s:operators = '\%(' . '\.\%([-+*/^÷%|&!]\|//\|\\\|<<\|>>>\?\)\?=' .
+ \ '\|' . '[:$<>]=\|||\|&&\||>\|<|\|<:\|:>\|::\|<<\|>>>\?\|//\|[-=]>\|\.\{3\}' .
+ \ '\|' . '[' . s:uniop_chars . '!$]' .
+ \ '\|' . '\.\?[' . s:binop_chars . s:binop_chars_extra . ']' .
+ \ '\)'
+
+function! julia#idundercursor()
+ " TODO...
+ let w = expand('<cword>')
+ " let [l,c] = [line('.'),col('.')]
+ " let ll = getline(l)
+ return w
+endfunction
+
+function! julia#gotodefinition()
+ let w = julia#idundercursor()
+ if empty(w)
+ return ''
+ endif
+ let [l,c] = [line('.'),col('.')]
+ let st = map(synstack(l,c), 'synIDattr(v:val, "name")')
+ let n = len(st)
+ if n > 0 && st[-1] =~# '^julia\%(\%(Range\|Ternary\|CTrans\)\?Operator\|\%(Possible\)\?SymbolS\?\|\%(Bl\|Rep\)\?Keyword\|Conditional\|ParDelim\|Char\|Colon\|Typedef\|Number\|Float\|Const\%(Generic\|Bool\)\|ComplexUnit\|\%(Special\|\%(Octal\|Hex\)Escape\)Char\|UniChar\%(Small\|Large\)\|Comment[LM]\|Todo\|Semicolon\)$'
+ return ''
+ endif
+
+ let comprehension = 0
+ let indollar = 0
+ for i in range(n-1, 0, -1)
+ if st[i] =~# '^juliaDollar\%(Var\|Par\|SqBra\)$'
+ let indollar = 1
+ endif
+ if !indollar && st[i] =~# '^julia\%(\a*String\|QuotedParBlockS\?\)$'
+ return ''
+ endif
+ if st[i] =~# '^julia\%(ParBlock\%(InRange\)\?\|SqBraBlock\|\%(Dollar\|StringVars\)\%(Par\|SqBra\)\)$'
+ let comprehension = 1
+ endif
+ endfor
+
+ let s1 = search('\C\<' . w . '\s*=[^=]', 'bcWzs')
+
+ return
+endfunction
+
+endif
+
+endif
diff --git a/autoload/julia_blocks.vim b/autoload/julia_blocks.vim
new file mode 100644
index 00000000..ef7cf016
--- /dev/null
+++ b/autoload/julia_blocks.vim
@@ -0,0 +1,798 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
+
+" Facilities for moving around Julia blocks (e.g. if/end, function/end etc.)
+" (AKA a collection of horrible hacks)
+
+let s:default_mappings = {
+ \ "moveblock_n" : "]]",
+ \ "moveblock_N" : "][",
+ \ "moveblock_p" : "[[",
+ \ "moveblock_P" : "[]",
+ \
+ \ "move_n" : "]j",
+ \ "move_N" : "]J",
+ \ "move_p" : "[j",
+ \ "move_P" : "[J",
+ \
+ \ "select_a" : "aj",
+ \ "select_i" : "ij",
+ \
+ \ "whereami" : "",
+ \ }
+
+function! s:getmapchars(function)
+ if exists("g:julia_blocks_mappings") && has_key(g:julia_blocks_mappings, a:function)
+ return s:escape(g:julia_blocks_mappings[a:function])
+ else
+ return s:escape(s:default_mappings[a:function])
+ endif
+endfunction
+
+function! s:map_move(function, toend, backwards)
+ let chars = s:getmapchars(a:function)
+ if empty(chars)
+ return
+ endif
+ let fn = "julia_blocks#" . a:function
+ let lhs = "<buffer> <nowait> <silent> " . chars . " "
+ let cnt = ":<C-U>let b:jlblk_count=v:count1"
+ exe "nnoremap " . lhs . cnt
+ \ . " <Bar> call " . fn . "()<CR>"
+ exe "onoremap " . lhs . cnt
+ \ . "<CR><Esc>:call julia_blocks#owrapper_move(v:operator, \"" . fn . "\", " . a:toend . ", " . a:backwards . ")<CR>"
+ exe "xnoremap " . lhs . cnt
+ \ . "<CR>gv<Esc>:call julia_blocks#vwrapper_move(\"" . fn . "\")<CR>"
+ let b:jlblk_mapped[a:function] = 1
+endfunction
+
+function! julia_blocks#owrapper_move(oper, function, toend, backwards)
+ let F = function(a:function)
+
+ let save_redraw = &lazyredraw
+ let save_select = &selection
+
+ let restore_cmds = "\<Esc>"
+ \ . ":let &l:selection = \"" . save_select . "\"\<CR>"
+ \ . ":let &l:lazyredraw = " . save_redraw . "\<CR>"
+ \ . ":\<BS>"
+
+ setlocal lazyredraw
+
+ let start_pos = getpos('.')
+ let b:jlblk_abort_calls_esc = 0
+ call F()
+ let b:jlblk_abort_calls_esc = 1
+ let end_pos = getpos('.')
+ if start_pos == end_pos
+ call feedkeys(restore_cmds, 'n')
+ endif
+
+ let &l:selection = "inclusive"
+ if a:backwards || !a:toend
+ let &l:selection = "exclusive"
+ endif
+ if a:toend && a:backwards
+ let end_pos[2] += 1
+ endif
+
+ if s:compare_pos(start_pos, end_pos) > 0
+ let [start_pos, end_pos] = [end_pos, start_pos]
+ endif
+
+ call setpos("'<", start_pos)
+ call setpos("'>", end_pos)
+
+ " NOTE: the 'c' operator behaves differently, for mysterious reasons. We
+ " simulate it with 'd' followed by 'i' instead
+ call feedkeys("gv" . (a:oper == "c" ? "d" : a:oper) . restore_cmds . (a:oper == "c" ? "i" : ""), 'n')
+endfunction
+
+function! julia_blocks#vwrapper_move(function)
+ let F = function(a:function)
+
+ let s = getpos('.')
+ let b1 = getpos("'<")
+ let b2 = getpos("'>")
+
+ let b = b1 == s ? b2 : b1
+ call setpos('.', s)
+ let b:jlblk_abort_calls_esc = 0
+ call F()
+ let b:jlblk_abort_calls_esc = 1
+ let e = getpos('.')
+ call setpos('.', b)
+ exe "normal " . visualmode()
+ call setpos('.', e)
+endfunction
+
+function! s:unmap(function)
+ if !get(b:jlblk_mapped, a:function, 0)
+ return
+ endif
+ let chars = s:getmapchars(a:function)
+ if empty(chars)
+ " shouldn't happen
+ return
+ endif
+ let mapids = a:function =~# "^move" ? ["n", "x", "o"] :
+ \ a:function =~# "^select" ? ["x", "o"] :
+ \ ["n"]
+ let fn = "julia_blocks#" . a:function
+ let cmd = "<buffer> " . chars
+ for m in mapids
+ exe m . "unmap " . cmd
+ endfor
+ let b:jlblk_mapped[a:function] = 0
+endfunction
+
+function! s:escape(chars)
+ let c = a:chars
+ let c = substitute(c, '|', '<Bar>', 'g')
+ return c
+endfunction
+
+function! s:map_select(function)
+ let chars = s:getmapchars(a:function)
+ if empty(chars)
+ return
+ endif
+ let fn = "julia_blocks#" . a:function
+ let lhs = "<buffer> <nowait> <silent> " . chars . " "
+ let cnt = ":<C-U>let b:jlblk_inwrapper=1<CR>:let b:jlblk_count=max([v:prevcount,1])<CR>"
+ exe "onoremap " . lhs . "<Esc>" . cnt
+ \ . ":call julia_blocks#owrapper_select(v:operator, \"" . fn . "\")<CR>"
+ exe "xnoremap " . lhs . cnt
+ \ . ":call julia_blocks#vwrapper_select(\"" . fn . "\")<CR>"
+ let b:jlblk_mapped[a:function] = 1
+endfunction
+
+function! julia_blocks#owrapper_select(oper, function) ", toend, backwards)
+ let F = function(a:function)
+
+ let save_redraw = &lazyredraw
+ let save_select = &selection
+
+ let restore_cmds = "\<Esc>"
+ \ . ":let &l:selection = \"" . save_select . "\"\<CR>"
+ \ . ":let &l:lazyredraw = " . save_redraw . "\<CR>"
+ \ . ":\<BS>"
+
+ setlocal lazyredraw
+
+ let b:jlblk_abort_calls_esc = 0
+ let retF = F()
+ let b:jlblk_abort_calls_esc = 1
+ if empty(retF)
+ let b:jlblk_inwrapper = 0
+ call feedkeys(restore_cmds, 'n')
+ return
+ end
+ let [start_pos, end_pos] = retF
+
+ if start_pos == end_pos
+ call feedkeys(restore_cmds, 'n')
+ endif
+
+ let &l:selection = "inclusive"
+
+ call setpos("'<", start_pos)
+ call setpos("'>", end_pos)
+
+ let b:jlblk_inwrapper = 0
+ " NOTE: the 'c' operator behaves differently, for mysterious reasons. We
+ " simulate it with 'd' followed by 'i' instead
+ call feedkeys("gv" . (a:oper == "c" ? "d" : a:oper) . restore_cmds . (a:oper == "c" ? "i" : ""), 'n')
+endfunction
+
+function! julia_blocks#vwrapper_select(function)
+ let F = function(a:function)
+
+ let b:jlblk_abort_calls_esc = 0
+ let retF = F()
+ let b:jlblk_abort_calls_esc = 1
+ if empty(retF)
+ let b:jlblk_inwrapper = 0
+ return
+ end
+ let [start_pos, end_pos] = retF
+ call setpos("'<", start_pos)
+ call setpos("'>", end_pos)
+ normal! gv
+ let b:jlblk_inwrapper = 0
+endfunction
+
+function! s:map_aux(function)
+ let chars = s:getmapchars(a:function)
+ if empty(chars)
+ return
+ endif
+ let fn = "julia_blocks#" . a:function
+ let lhs = "<buffer> <nowait> <silent> " . chars . " "
+ exe "nnoremap " . lhs . ":<C-U>echo " . fn . "()<CR>"
+ let b:jlblk_mapped[a:function] = 1
+endfunction
+
+let s:julia_blocks_functions = {
+ \ "moveblock_N": [1, 0],
+ \ "moveblock_n": [0, 0],
+ \ "moveblock_p": [0, 1],
+ \ "moveblock_P": [1, 1],
+ \
+ \ "move_N": [1, 0],
+ \ "move_n": [0, 0],
+ \ "move_p": [0, 1],
+ \ "move_P": [1, 1],
+ \
+ \ "select_a": [],
+ \ "select_i": [],
+ \
+ \ "whereami": [],
+ \ }
+
+function! julia_blocks#init_mappings()
+ let b:jlblk_mapped = {}
+ for f in keys(s:julia_blocks_functions)
+ if f =~# "^move"
+ let [te, bw] = s:julia_blocks_functions[f]
+ call s:map_move(f, te, bw)
+ elseif f =~# "^select"
+ call s:map_select(f)
+ else
+ call s:map_aux(f)
+ endif
+ endfor
+ call julia_blocks#select_reset()
+ augroup JuliaBlocks
+ au!
+ au InsertEnter *.jl call julia_blocks#select_reset()
+ au CursorMoved *.jl call s:cursor_moved()
+ augroup END
+
+ " we would need some autocmd event associated with exiting from
+ " visual mode, but there isn't any, so we resort to this crude
+ " hack
+ " ACTUALLY this creates more problems than it solves, so the crude hack
+ " is just disabled
+ "vnoremap <buffer><silent><unique> <Esc> <Esc>:call julia_blocks#select_reset()<CR>
+endfunction
+
+function! julia_blocks#remove_mappings()
+ if exists("b:jlblk_mapped")
+ for f in keys(s:julia_blocks_functions)
+ call s:unmap(f)
+ endfor
+ endif
+ unlet! b:jlblk_save_pos b:jlblk_view b:jlblk_count b:jlblk_abort_calls_esc
+ unlet! b:jlblk_inwrapper b:jlblk_did_select b:jlblk_doing_select
+ unlet! b:jlblk_last_start_pos b:jlblk_last_end_pos b:jlblk_last_mode
+ augroup JuliaBlocks
+ au!
+ augroup END
+ augroup! JuliaBlocks
+ let md = maparg("<Esc>", "x", 0, 1)
+ if !empty(md) && md["buffer"]
+ vunmap <buffer> <Esc>
+ endif
+endfunction
+
+function! s:restore_view()
+ "redraw! " would ensure correct behaviour, but is annoying
+ let pos = getpos('.')
+ if pos == b:jlblk_save_pos
+ call winrestview(b:jlblk_view)
+ return
+ endif
+ let oldtopline = b:jlblk_view["topline"]
+ let newtopline = winsaveview()["topline"]
+ let l = pos[1]
+ if l >= oldtopline + &l:scrolloff && l <= oldtopline + winheight(0) - 1 - &l:scrolloff
+ if newtopline > oldtopline
+ exe ":normal! " . (newtopline - oldtopline) . "\<C-Y>"
+ elseif newtopline < oldtopline
+ exe ":normal! " . (oldtopline - newtopline) . "\<C-E>"
+ endif
+ " these reduce the scrolling to the minimum (which is maybe not
+ " standard ViM behaviour?)
+ elseif newtopline < oldtopline && (l - newtopline - &l:scrolloff) > 0
+ exe ":normal! " . (l - newtopline - &l:scrolloff) . "\<C-E>"
+ elseif newtopline > oldtopline && (newtopline + &l:scrolloff - l) > 0
+ exe ":normal! " . (l - newtopline - &l:scrolloff) . "\<C-E>"
+ endif
+ call setpos('.', pos) " make sure we didn't screw up
+ " (since winsaveview may not be up to date)
+endfunction
+
+function! s:abort()
+ call setpos('.', b:jlblk_save_pos)
+ call s:restore_view()
+ if get(b:, "jlblk_abort_calls_esc", 1)
+ call feedkeys("\<Esc>", 'n')
+ endif
+ return 0
+endfunction
+
+function! s:set_mark_tick(...)
+ " This could be a one-liner:
+ " call setpos("''", b:jlblk_save_pos)
+ " but we want to append to the jumplist,
+ " which setpos doesn't do
+ let p = getpos('.')
+ call setpos('.', b:jlblk_save_pos)
+ normal! m'
+ call setpos('.', p)
+endfunction
+
+function! s:get_save_pos(...)
+ if !exists("b:jlblk_save_pos") || (a:0 == 0) || (a:0 > 0 && a:1)
+ let b:jlblk_save_pos = getpos('.')
+ endif
+ let b:jlblk_view = winsaveview()
+endfunction
+
+function! s:on_end()
+ return getline('.')[col('.')-1] =~# '\k' && expand("<cword>") =~# b:julia_end_keywords
+endfunction
+
+function! s:on_begin()
+ let [l,c] = [line('.'), col('.')]
+ normal! ^
+ let patt = '\%<'.(c+1).'c\(' . b:julia_begin_keywordsm . '\)\%>'.(c-1).'c'
+ let n = search(patt, 'Wnc', l)
+ call cursor(l, c)
+ return n > 0
+endfunction
+
+function! s:matchit()
+ let lkj = exists(":lockjumps") == 2 ? "lockjumps " : ""
+ exe lkj . "normal %"
+endfunction
+
+function! s:move_before_begin()
+ call search(b:julia_begin_keywordsm, 'Wbc')
+ normal! h
+endfunction
+
+function! s:cycle_until_end()
+ let pos = getpos('.')
+ while !s:on_end()
+ call s:matchit()
+ let c = 0
+ if getpos('.') == pos || c > 1000
+ " shouldn't happen, but let's avoid infinite loops anyway
+ return 0
+ endif
+ let c += 1
+ endwhile
+ return 1
+endfunction
+
+function! s:moveto_block_delim(toend, backwards, ...)
+ let pattern = a:toend ? b:julia_end_keywords : b:julia_begin_keywordsm
+ let flags = a:backwards ? 'Wb' : 'W'
+ let cnt = a:0 > 0 ? a:1 : b:jlblk_count
+ if !a:toend && a:backwards && s:on_begin()
+ call s:move_before_begin()
+ endif
+ let ret = 0
+ for c in range(cnt)
+ if a:toend && a:backwards && s:on_end()
+ normal! l
+ normal! bh
+ endif
+ while 1
+ let searchret = search(pattern, flags)
+ if !searchret
+ return ret
+ endif
+ exe "let skip = " . b:match_skip
+ if !skip
+ let ret = 1
+ break
+ endif
+ endwhile
+ endfor
+ return ret
+endfunction
+
+function! s:compare_pos(pos1, pos2)
+ if a:pos1[1] < a:pos2[1]
+ return -1
+ elseif a:pos1[1] > a:pos2[1]
+ return 1
+ elseif a:pos1[2] < a:pos2[2]
+ return -1
+ elseif a:pos1[2] > a:pos2[2]
+ return 1
+ else
+ return 0
+ endif
+endfunction
+
+function! julia_blocks#move_N()
+ call s:get_save_pos()
+
+ let ret = s:moveto_block_delim(1, 0)
+ if !ret
+ return s:abort()
+ endif
+
+ normal! e
+ call s:set_mark_tick()
+
+ return 1
+endfunction
+
+function! julia_blocks#move_n()
+ call s:get_save_pos()
+
+ let ret = s:moveto_block_delim(0, 0)
+ if !ret
+ return s:abort()
+ endif
+
+ call s:set_mark_tick()
+
+ return 1
+endfunction
+
+function! julia_blocks#move_p()
+ call s:get_save_pos()
+
+ let ret = s:moveto_block_delim(0, 1)
+ if !ret
+ return s:abort()
+ endif
+
+ call s:set_mark_tick()
+
+ return 1
+endfunction
+
+function! julia_blocks#move_P()
+ call s:get_save_pos()
+
+ let ret = s:moveto_block_delim(1, 1)
+ if !ret
+ return s:abort()
+ endif
+
+ normal! e
+ call s:set_mark_tick()
+
+ return 1
+endfunction
+
+function! s:moveto_currentblock_end()
+ let flags = 'W'
+ if s:on_end()
+ let flags .= 'c'
+ " NOTE: using "normal! lb" fails at the end of the file (?!)
+ normal! l
+ normal! b
+ endif
+
+ let ret = searchpair(b:julia_begin_keywordsm, '', b:julia_end_keywords, flags, b:match_skip)
+ if ret <= 0
+ return s:abort()
+ endif
+
+ normal! e
+ return 1
+endfunction
+
+function! julia_blocks#moveblock_N()
+ call s:get_save_pos()
+
+ let ret = 0
+ for c in range(b:jlblk_count)
+ let last_seen_pos = getpos('.')
+ if s:on_end()
+ normal! hel
+ let save_pos = getpos('.')
+ let ret_start = s:moveto_block_delim(0, 0, 1)
+ let start1_pos = ret_start ? getpos('.') : [0,0,0,0]
+ call setpos('.', save_pos)
+ if s:on_end()
+ normal! h
+ endif
+ let ret_end = s:moveto_block_delim(1, 0, 1)
+ let end1_pos = ret_end ? getpos('.') : [0,0,0,0]
+
+ if ret_start && (!ret_end || s:compare_pos(start1_pos, end1_pos) < 0)
+ call setpos('.', start1_pos)
+ else
+ call setpos('.', save_pos)
+ endif
+ endif
+
+ let moveret = s:moveto_currentblock_end()
+ if !moveret && c == 0
+ let moveret = s:moveto_block_delim(0, 0, 1) && s:cycle_until_end()
+ if moveret
+ normal! e
+ endif
+ endif
+ if !moveret
+ call setpos('.', last_seen_pos)
+ break
+ endif
+
+ let ret = 1
+ endfor
+ if !ret
+ return s:abort()
+ endif
+
+ call s:set_mark_tick()
+
+ return 1
+endfunction
+
+function! julia_blocks#moveblock_n()
+ call s:get_save_pos()
+
+ let ret = 0
+ for c in range(b:jlblk_count)
+ let last_seen_pos = getpos('.')
+
+ call s:moveto_currentblock_end()
+ if s:moveto_block_delim(0, 0, 1)
+ let ret = 1
+ else
+ call setpos('.', last_seen_pos)
+ break
+ endif
+ endfor
+
+ if !ret
+ return s:abort()
+ endif
+
+ call s:set_mark_tick()
+
+ return 1
+endfunction
+
+function! julia_blocks#moveblock_p()
+ call s:get_save_pos()
+
+ let ret = 0
+ for c in range(b:jlblk_count)
+ let last_seen_pos = getpos('.')
+ if s:on_begin()
+ call s:move_before_begin()
+ if s:on_end()
+ normal! l
+ endif
+ let save_pos = getpos('.')
+ let ret_start = s:moveto_block_delim(0, 1, 1)
+ let start1_pos = ret_start ? getpos('.') : [0,0,0,0]
+ call setpos('.', save_pos)
+ let ret_end = s:moveto_block_delim(1, 1, 1)
+ let end1_pos = ret_end ? getpos('.') : [0,0,0,0]
+
+ if ret_end && (!ret_start || s:compare_pos(start1_pos, end1_pos) < 0)
+ call setpos('.', end1_pos)
+ else
+ call setpos('.', save_pos)
+ endif
+ endif
+
+ let moveret = s:moveto_currentblock_end()
+ if !moveret && c == 0
+ let moveret = s:moveto_block_delim(1, 1, 1)
+ endif
+ if !moveret
+ call setpos('.', last_seen_pos)
+ break
+ endif
+
+ call s:matchit()
+ let ret = 1
+ endfor
+ if !ret
+ return s:abort()
+ endif
+
+ call s:set_mark_tick()
+ call s:restore_view()
+
+ return 1
+endfunction
+
+function! julia_blocks#moveblock_P()
+ call s:get_save_pos()
+
+ let ret = 0
+ for c in range(b:jlblk_count)
+ let last_seen_pos = getpos('.')
+
+ call s:moveto_currentblock_end()
+ if s:on_end()
+ call s:matchit()
+ endif
+
+ if s:moveto_block_delim(1, 1, 1)
+ " NOTE: normal! he does not work unless &whichwrap inlcudes h
+ normal! h
+ normal! e
+ let ret = 1
+ else
+ call setpos('.', last_seen_pos)
+ endif
+ endfor
+
+ if !ret
+ return s:abort()
+ endif
+
+ call s:set_mark_tick()
+ call s:restore_view()
+
+ return 1
+endfunction
+
+function! julia_blocks#whereami()
+ let b:jlblk_count = v:count1
+ let save_redraw = &lazyredraw
+ setlocal lazyredraw
+ let pos = getpos('.')
+ let ret = julia_blocks#select_a('w')
+ if empty(ret)
+ call setpos('.', pos)
+ let &l:lazyredraw = save_redraw
+ return ""
+ end
+ let [start_pos, end_pos] = ret
+ let m = getline(start_pos[1])[start_pos[2]-1:]
+
+ " If cursor_moved was not forced from select_a, we force it now
+ " (TODO: this is *really* ugly)
+ if end_pos != pos
+ call s:cursor_moved(1)
+ endif
+ call setpos('.', pos)
+ call s:restore_view()
+ let &l:lazyredraw = save_redraw
+ return m
+endfunction
+
+" Block text objects
+
+function! s:find_block(current_mode)
+
+ let flags = 'W'
+
+ if b:jlblk_did_select
+ call setpos('.', b:jlblk_last_start_pos)
+ if !s:cycle_until_end()
+ return s:abort()
+ endif
+ if !(a:current_mode[0] == 'a' && a:current_mode == b:jlblk_last_mode)
+ let flags .= 'c'
+ endif
+ elseif s:on_end()
+ let flags .= 'c'
+ " NOTE: using "normal! lb" fails at the end of the file (?!)
+ normal! l
+ normal! b
+ endif
+ let searchret = searchpair(b:julia_begin_keywordsm, '', b:julia_end_keywords, flags, b:match_skip)
+ if searchret <= 0
+ if !b:jlblk_did_select
+ return s:abort()
+ else
+ call setpos('.', b:jlblk_last_end_pos)
+ endif
+ endif
+
+ let end_pos = getpos('.')
+ " Jump to match
+ call s:matchit()
+ let start_pos = getpos('.')
+
+ let b:jlblk_last_start_pos = copy(start_pos)
+ let b:jlblk_last_end_pos = copy(end_pos)
+
+ return [start_pos, end_pos]
+endfunction
+
+function! s:repeated_find(ai_mode)
+ let repeat = b:jlblk_count + (a:ai_mode == 'i' && v:count1 > 1 ? 1 : 0)
+ for c in range(repeat)
+ let current_mode = (c < repeat - 1 ? 'a' : a:ai_mode)
+ let ret_find_block = s:find_block(current_mode)
+ if empty(ret_find_block)
+ return 0
+ endif
+ let [start_pos, end_pos] = ret_find_block
+ call setpos('.', end_pos)
+ let b:jlblk_last_mode = current_mode
+ if c < repeat - 1
+ let b:jlblk_doing_select = 0
+ let b:jlblk_did_select = 1
+ endif
+ endfor
+ return [start_pos, end_pos]
+endfunction
+
+function! julia_blocks#select_a(...)
+ let mode_flag = a:0 > 0 ? a:1 : ''
+ call s:get_save_pos(!b:jlblk_did_select)
+ let current_pos = getpos('.')
+ let ret_find_block = s:repeated_find('a' . mode_flag)
+ if empty(ret_find_block)
+ return 0
+ endif
+ let [start_pos, end_pos] = ret_find_block
+
+ call setpos('.', end_pos)
+ normal! e
+ let end_pos = getpos('.')
+
+ let b:jlblk_doing_select = 1
+
+ " CursorMove is only triggered if end_pos
+ " end_pos is different than the staring position;
+ " so when starting from the 'd' in 'end' we need to
+ " force it
+ if current_pos == end_pos
+ call s:cursor_moved(1)
+ endif
+
+ call s:set_mark_tick()
+ return [start_pos, end_pos]
+endfunction
+
+function! julia_blocks#select_i()
+ call s:get_save_pos(!b:jlblk_did_select)
+ let current_pos = getpos('.')
+ let ret_find_block = s:repeated_find('i')
+ if empty(ret_find_block)
+ return 0
+ endif
+ let [start_pos, end_pos] = ret_find_block
+
+ if end_pos[1] <= start_pos[1]+1
+ return s:abort()
+ endif
+
+ call setpos('.', end_pos)
+
+ let b:jlblk_doing_select = 1
+
+ let start_pos[1] += 1
+ call setpos('.', start_pos)
+ normal! ^
+ let start_pos = getpos('.')
+ let end_pos[1] -= 1
+ let end_pos[2] = len(getline(end_pos[1]))
+
+ " CursorMove is only triggered if end_pos
+ " end_pos is different than the staring position;
+ " so when starting from the 'd' in 'end' we need to
+ " force it
+ if current_pos == end_pos
+ call s:cursor_moved(1)
+ endif
+
+ call s:set_mark_tick()
+ return [start_pos, end_pos]
+endfunction
+
+function julia_blocks#select_reset()
+ let b:jlblk_did_select = 0
+ let b:jlblk_doing_select = 0
+ let b:jlblk_inwrapper = 0
+ let b:jlblk_last_mode = ""
+endfunction
+
+function! s:cursor_moved(...)
+ if b:jlblk_inwrapper && !(a:0 > 0 && a:1)
+ return
+ endif
+ let b:jlblk_did_select = b:jlblk_doing_select
+ let b:jlblk_doing_select = 0
+endfunction
+
+endif
diff --git a/autoload/julia_latex_symbols.vim b/autoload/julia_latex_symbols.vim
new file mode 100644
index 00000000..8fdb856a
--- /dev/null
+++ b/autoload/julia_latex_symbols.vim
@@ -0,0 +1,3316 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
+
+" This file is autogenerated from the script 'generate_latex_symbols_table.jl'
+" The symbols are based on Julia version 0.7.0-DEV.2011
+
+scriptencoding utf-8
+
+function! julia_latex_symbols#get_dict()
+ return {
+ \ '\textexclamdown': '¡',
+ \ '\sterling': '£',
+ \ '\yen': '¥',
+ \ '\textbrokenbar': '¦',
+ \ '\S': '§',
+ \ '\textasciidieresis': '¨',
+ \ '\copyright': '©',
+ \ '\:copyright:': '©',
+ \ '\textordfeminine': 'ª',
+ \ '\neg': '¬',
+ \ '\circledR': '®',
+ \ '\:registered:': '®',
+ \ '\textasciimacron': '¯',
+ \ '\degree': '°',
+ \ '\pm': '±',
+ \ '\^2': '²',
+ \ '\^3': '³',
+ \ '\textasciiacute': '´',
+ \ '\P': '¶',
+ \ '\cdotp': '·',
+ \ '\^1': '¹',
+ \ '\textordmasculine': 'º',
+ \ '\textonequarter': '¼',
+ \ '\textonehalf': '½',
+ \ '\textthreequarters': '¾',
+ \ '\textquestiondown': '¿',
+ \ '\AA': 'Å',
+ \ '\AE': 'Æ',
+ \ '\DH': 'Ð',
+ \ '\times': '×',
+ \ '\O': 'Ø',
+ \ '\TH': 'Þ',
+ \ '\ss': 'ß',
+ \ '\aa': 'å',
+ \ '\ae': 'æ',
+ \ '\eth': 'ð',
+ \ '\div': '÷',
+ \ '\o': 'ø',
+ \ '\th': 'þ',
+ \ '\DJ': 'Đ',
+ \ '\dj': 'đ',
+ \ '\Elzxh': 'ħ',
+ \ '\hbar': 'ħ',
+ \ '\L': 'Ł',
+ \ '\l': 'ł',
+ \ '\NG': 'Ŋ',
+ \ '\ng': 'ŋ',
+ \ '\OE': 'Œ',
+ \ '\oe': 'œ',
+ \ '\texthvlig': 'ƕ',
+ \ '\textnrleg': 'ƞ',
+ \ '\Zbar': 'Ƶ',
+ \ '\textdoublepipe': 'ǂ',
+ \ '\Elztrna': 'ɐ',
+ \ '\Elztrnsa': 'ɒ',
+ \ '\Elzopeno': 'ɔ',
+ \ '\Elzrtld': 'ɖ',
+ \ '\Elzschwa': 'ə',
+ \ '\Elzpgamma': 'ɣ',
+ \ '\Elzpbgam': 'ɤ',
+ \ '\Elztrnh': 'ɥ',
+ \ '\Elzbtdl': 'ɬ',
+ \ '\Elzrtll': 'ɭ',
+ \ '\Elztrnm': 'ɯ',
+ \ '\Elztrnmlr': 'ɰ',
+ \ '\Elzltlmr': 'ɱ',
+ \ '\Elzltln': 'ɲ',
+ \ '\Elzrtln': 'ɳ',
+ \ '\Elzclomeg': 'ɷ',
+ \ '\textphi': 'ɸ',
+ \ '\Elztrnr': 'ɹ',
+ \ '\Elztrnrl': 'ɺ',
+ \ '\Elzrttrnr': 'ɻ',
+ \ '\Elzrl': 'ɼ',
+ \ '\Elzrtlr': 'ɽ',
+ \ '\Elzfhr': 'ɾ',
+ \ '\Elzrtls': 'ʂ',
+ \ '\Elzesh': 'ʃ',
+ \ '\Elztrnt': 'ʇ',
+ \ '\Elzrtlt': 'ʈ',
+ \ '\Elzpupsil': 'ʊ',
+ \ '\Elzpscrv': 'ʋ',
+ \ '\Elzinvv': 'ʌ',
+ \ '\Elzinvw': 'ʍ',
+ \ '\Elztrny': 'ʎ',
+ \ '\Elzrtlz': 'ʐ',
+ \ '\Elzyogh': 'ʒ',
+ \ '\Elzglst': 'ʔ',
+ \ '\Elzreglst': 'ʕ',
+ \ '\Elzinglst': 'ʖ',
+ \ '\textturnk': 'ʞ',
+ \ '\Elzdyogh': 'ʤ',
+ \ '\Elztesh': 'ʧ',
+ \ '\^h': 'ʰ',
+ \ '\^j': 'ʲ',
+ \ '\^r': 'ʳ',
+ \ '\^w': 'ʷ',
+ \ '\^y': 'ʸ',
+ \ '\rasp': 'ʼ',
+ \ '\textasciicaron': 'ˇ',
+ \ '\Elzverts': 'ˈ',
+ \ '\Elzverti': 'ˌ',
+ \ '\Elzlmrk': 'ː',
+ \ '\Elzhlmrk': 'ˑ',
+ \ '\Elzsbrhr': '˒',
+ \ '\Elzsblhr': '˓',
+ \ '\Elzrais': '˔',
+ \ '\Elzlow': '˕',
+ \ '\u': '˘',
+ \ '\texttildelow': '˜',
+ \ '\^l': 'ˡ',
+ \ '\^s': 'ˢ',
+ \ '\^x': 'ˣ',
+ \ '\grave': '̀',
+ \ '\acute': '́',
+ \ '\hat': '̂',
+ \ '\tilde': '̃',
+ \ '\bar': '̄',
+ \ '\overbar': '̅',
+ \ '\breve': '̆',
+ \ '\dot': '̇',
+ \ '\ddot': '̈',
+ \ '\ovhook': '̉',
+ \ '\ocirc': '̊',
+ \ '\H': '̋',
+ \ '\check': '̌',
+ \ '\candra': '̐',
+ \ '\oturnedcomma': '̒',
+ \ '\ocommatopright': '̕',
+ \ '\droang': '̚',
+ \ '\Elzpalh': '̡',
+ \ '\Elzrh': '̢',
+ \ '\c': '̧',
+ \ '\k': '̨',
+ \ '\Elzsbbrg': '̪',
+ \ '\wideutilde': '̰',
+ \ '\underbar': '̲',
+ \ '\Elzxl': '̵',
+ \ '\Elzbar': '̶',
+ \ '\sout': '̶',
+ \ '\not': '̸',
+ \ '\underleftrightarrow': '͍',
+ \ '\Alpha': 'Α',
+ \ '\Beta': 'Β',
+ \ '\Gamma': 'Γ',
+ \ '\Delta': 'Δ',
+ \ '\Epsilon': 'Ε',
+ \ '\Zeta': 'Ζ',
+ \ '\Eta': 'Η',
+ \ '\Theta': 'Θ',
+ \ '\Iota': 'Ι',
+ \ '\Kappa': 'Κ',
+ \ '\Lambda': 'Λ',
+ \ '\upMu': 'Μ',
+ \ '\upNu': 'Ν',
+ \ '\Xi': 'Ξ',
+ \ '\upOmicron': 'Ο',
+ \ '\Pi': 'Π',
+ \ '\Rho': 'Ρ',
+ \ '\Sigma': 'Σ',
+ \ '\Tau': 'Τ',
+ \ '\Upsilon': 'Υ',
+ \ '\Phi': 'Φ',
+ \ '\Chi': 'Χ',
+ \ '\Psi': 'Ψ',
+ \ '\Omega': 'Ω',
+ \ '\alpha': 'α',
+ \ '\beta': 'β',
+ \ '\gamma': 'γ',
+ \ '\delta': 'δ',
+ \ '\upepsilon': 'ε',
+ \ '\varepsilon': 'ε',
+ \ '\zeta': 'ζ',
+ \ '\eta': 'η',
+ \ '\theta': 'θ',
+ \ '\iota': 'ι',
+ \ '\kappa': 'κ',
+ \ '\lambda': 'λ',
+ \ '\mu': 'μ',
+ \ '\nu': 'ν',
+ \ '\xi': 'ξ',
+ \ '\upomicron': 'ο',
+ \ '\pi': 'π',
+ \ '\rho': 'ρ',
+ \ '\varsigma': 'ς',
+ \ '\sigma': 'σ',
+ \ '\tau': 'τ',
+ \ '\upsilon': 'υ',
+ \ '\varphi': 'φ',
+ \ '\chi': 'χ',
+ \ '\psi': 'ψ',
+ \ '\omega': 'ω',
+ \ '\upvarbeta': 'ϐ',
+ \ '\vartheta': 'ϑ',
+ \ '\phi': 'ϕ',
+ \ '\varpi': 'ϖ',
+ \ '\upoldKoppa': 'Ϙ',
+ \ '\upoldkoppa': 'ϙ',
+ \ '\Stigma': 'Ϛ',
+ \ '\upstigma': 'ϛ',
+ \ '\Digamma': 'Ϝ',
+ \ '\digamma': 'ϝ',
+ \ '\Koppa': 'Ϟ',
+ \ '\upkoppa': 'ϟ',
+ \ '\Sampi': 'Ϡ',
+ \ '\upsampi': 'ϡ',
+ \ '\varkappa': 'ϰ',
+ \ '\varrho': 'ϱ',
+ \ '\textTheta': 'ϴ',
+ \ '\epsilon': 'ϵ',
+ \ '\backepsilon': '϶',
+ \ '\^A': 'ᴬ',
+ \ '\^B': 'ᴮ',
+ \ '\^D': 'ᴰ',
+ \ '\^E': 'ᴱ',
+ \ '\^G': 'ᴳ',
+ \ '\^H': 'ᴴ',
+ \ '\^I': 'ᴵ',
+ \ '\^J': 'ᴶ',
+ \ '\^K': 'ᴷ',
+ \ '\^L': 'ᴸ',
+ \ '\^M': 'ᴹ',
+ \ '\^N': 'ᴺ',
+ \ '\^O': 'ᴼ',
+ \ '\^P': 'ᴾ',
+ \ '\^R': 'ᴿ',
+ \ '\^T': 'ᵀ',
+ \ '\^U': 'ᵁ',
+ \ '\^W': 'ᵂ',
+ \ '\^a': 'ᵃ',
+ \ '\^alpha': 'ᵅ',
+ \ '\^b': 'ᵇ',
+ \ '\^d': 'ᵈ',
+ \ '\^e': 'ᵉ',
+ \ '\^epsilon': 'ᵋ',
+ \ '\^g': 'ᵍ',
+ \ '\^k': 'ᵏ',
+ \ '\^m': 'ᵐ',
+ \ '\^o': 'ᵒ',
+ \ '\^p': 'ᵖ',
+ \ '\^t': 'ᵗ',
+ \ '\^u': 'ᵘ',
+ \ '\^v': 'ᵛ',
+ \ '\^beta': 'ᵝ',
+ \ '\^gamma': 'ᵞ',
+ \ '\^delta': 'ᵟ',
+ \ '\^phi': 'ᵠ',
+ \ '\^chi': 'ᵡ',
+ \ '\_i': 'ᵢ',
+ \ '\_r': 'ᵣ',
+ \ '\_u': 'ᵤ',
+ \ '\_v': 'ᵥ',
+ \ '\_beta': 'ᵦ',
+ \ '\_gamma': 'ᵧ',
+ \ '\_rho': 'ᵨ',
+ \ '\_phi': 'ᵩ',
+ \ '\_chi': 'ᵪ',
+ \ '\^c': 'ᶜ',
+ \ '\^f': 'ᶠ',
+ \ '\^iota': 'ᶥ',
+ \ '\^Phi': 'ᶲ',
+ \ '\^z': 'ᶻ',
+ \ '\^theta': 'ᶿ',
+ \ '\enspace': ' ',
+ \ '\quad': ' ',
+ \ '\thickspace': ' ',
+ \ '\thinspace': ' ',
+ \ '\hspace': ' ',
+ \ '\endash': '–',
+ \ '\emdash': '—',
+ \ '\Vert': '‖',
+ \ '\lq': '‘',
+ \ '\rq': '’',
+ \ '\Elzreapos': '‛',
+ \ '\textquotedblleft': '“',
+ \ '\textquotedblright': '”',
+ \ '\dagger': '†',
+ \ '\ddagger': '‡',
+ \ '\bullet': '•',
+ \ '\dots': '…',
+ \ '\ldots': '…',
+ \ '\textperthousand': '‰',
+ \ '\textpertenthousand': '‱',
+ \ '\prime': '′',
+ \ '\pprime': '″',
+ \ '\ppprime': '‴',
+ \ '\backprime': '‵',
+ \ '\backpprime': '‶',
+ \ '\backppprime': '‷',
+ \ '\guilsinglleft': '‹',
+ \ '\guilsinglright': '›',
+ \ '\:bangbang:': '‼',
+ \ '\tieconcat': '⁀',
+ \ '\:interrobang:': '⁉',
+ \ '\pppprime': '⁗',
+ \ '\nolinebreak': '⁠',
+ \ '\^0': '⁰',
+ \ '\^i': 'ⁱ',
+ \ '\^4': '⁴',
+ \ '\^5': '⁵',
+ \ '\^6': '⁶',
+ \ '\^7': '⁷',
+ \ '\^8': '⁸',
+ \ '\^9': '⁹',
+ \ '\^+': '⁺',
+ \ '\^-': '⁻',
+ \ '\^=': '⁼',
+ \ '\^(': '⁽',
+ \ '\^)': '⁾',
+ \ '\^n': 'ⁿ',
+ \ '\_0': '₀',
+ \ '\_1': '₁',
+ \ '\_2': '₂',
+ \ '\_3': '₃',
+ \ '\_4': '₄',
+ \ '\_5': '₅',
+ \ '\_6': '₆',
+ \ '\_7': '₇',
+ \ '\_8': '₈',
+ \ '\_9': '₉',
+ \ '\_+': '₊',
+ \ '\_-': '₋',
+ \ '\_=': '₌',
+ \ '\_(': '₍',
+ \ '\_)': '₎',
+ \ '\_a': 'ₐ',
+ \ '\_e': 'ₑ',
+ \ '\_o': 'ₒ',
+ \ '\_x': 'ₓ',
+ \ '\_schwa': 'ₔ',
+ \ '\_h': 'ₕ',
+ \ '\_k': 'ₖ',
+ \ '\_l': 'ₗ',
+ \ '\_m': 'ₘ',
+ \ '\_n': 'ₙ',
+ \ '\_p': 'ₚ',
+ \ '\_s': 'ₛ',
+ \ '\_t': 'ₜ',
+ \ '\Elzpes': '₧',
+ \ '\euro': '€',
+ \ '\leftharpoonaccent': '⃐',
+ \ '\rightharpoonaccent': '⃑',
+ \ '\vertoverlay': '⃒',
+ \ '\overleftarrow': '⃖',
+ \ '\vec': '⃗',
+ \ '\dddot': '⃛',
+ \ '\ddddot': '⃜',
+ \ '\enclosecircle': '⃝',
+ \ '\enclosesquare': '⃞',
+ \ '\enclosediamond': '⃟',
+ \ '\overleftrightarrow': '⃡',
+ \ '\enclosetriangle': '⃤',
+ \ '\annuity': '⃧',
+ \ '\threeunderdot': '⃨',
+ \ '\widebridgeabove': '⃩',
+ \ '\underrightharpoondown': '⃬',
+ \ '\underleftharpoondown': '⃭',
+ \ '\underleftarrow': '⃮',
+ \ '\underrightarrow': '⃯',
+ \ '\asteraccent': '⃰',
+ \ '\BbbC': 'ℂ',
+ \ '\Eulerconst': 'ℇ',
+ \ '\mscrg': 'ℊ',
+ \ '\mscrH': 'ℋ',
+ \ '\mfrakH': 'ℌ',
+ \ '\BbbH': 'ℍ',
+ \ '\Planckconst': 'ℎ',
+ \ '\hslash': 'ℏ',
+ \ '\mscrI': 'ℐ',
+ \ '\Im': 'ℑ',
+ \ '\mscrL': 'ℒ',
+ \ '\ell': 'ℓ',
+ \ '\BbbN': 'ℕ',
+ \ '\textnumero': '№',
+ \ '\wp': '℘',
+ \ '\BbbP': 'ℙ',
+ \ '\BbbQ': 'ℚ',
+ \ '\mscrR': 'ℛ',
+ \ '\Re': 'ℜ',
+ \ '\BbbR': 'ℝ',
+ \ '\Elzxrat': '℞',
+ \ '\texttrademark': '™',
+ \ '\:tm:': '™',
+ \ '\BbbZ': 'ℤ',
+ \ '\mho': '℧',
+ \ '\mfrakZ': 'ℨ',
+ \ '\turnediota': '℩',
+ \ '\Angstrom': 'Å',
+ \ '\mscrB': 'ℬ',
+ \ '\mfrakC': 'ℭ',
+ \ '\mscre': 'ℯ',
+ \ '\euler': 'ℯ',
+ \ '\mscrE': 'ℰ',
+ \ '\mscrF': 'ℱ',
+ \ '\Finv': 'Ⅎ',
+ \ '\mscrM': 'ℳ',
+ \ '\mscro': 'ℴ',
+ \ '\aleph': 'ℵ',
+ \ '\beth': 'ℶ',
+ \ '\gimel': 'ℷ',
+ \ '\daleth': 'ℸ',
+ \ '\:information_source:': 'ℹ',
+ \ '\Bbbpi': 'ℼ',
+ \ '\Bbbgamma': 'ℽ',
+ \ '\BbbGamma': 'ℾ',
+ \ '\BbbPi': 'ℿ',
+ \ '\bbsum': '⅀',
+ \ '\Game': '⅁',
+ \ '\sansLturned': '⅂',
+ \ '\sansLmirrored': '⅃',
+ \ '\Yup': '⅄',
+ \ '\mitBbbD': 'ⅅ',
+ \ '\mitBbbd': 'ⅆ',
+ \ '\mitBbbe': 'ⅇ',
+ \ '\mitBbbi': 'ⅈ',
+ \ '\mitBbbj': 'ⅉ',
+ \ '\PropertyLine': '⅊',
+ \ '\upand': '⅋',
+ \ '\leftarrow': '←',
+ \ '\uparrow': '↑',
+ \ '\to': '→',
+ \ '\rightarrow': '→',
+ \ '\downarrow': '↓',
+ \ '\leftrightarrow': '↔',
+ \ '\:left_right_arrow:': '↔',
+ \ '\updownarrow': '↕',
+ \ '\:arrow_up_down:': '↕',
+ \ '\nwarrow': '↖',
+ \ '\:arrow_upper_left:': '↖',
+ \ '\nearrow': '↗',
+ \ '\:arrow_upper_right:': '↗',
+ \ '\searrow': '↘',
+ \ '\:arrow_lower_right:': '↘',
+ \ '\swarrow': '↙',
+ \ '\:arrow_lower_left:': '↙',
+ \ '\nleftarrow': '↚',
+ \ '\nrightarrow': '↛',
+ \ '\leftwavearrow': '↜',
+ \ '\rightwavearrow': '↝',
+ \ '\twoheadleftarrow': '↞',
+ \ '\twoheaduparrow': '↟',
+ \ '\twoheadrightarrow': '↠',
+ \ '\twoheaddownarrow': '↡',
+ \ '\leftarrowtail': '↢',
+ \ '\rightarrowtail': '↣',
+ \ '\mapsfrom': '↤',
+ \ '\mapsup': '↥',
+ \ '\mapsto': '↦',
+ \ '\mapsdown': '↧',
+ \ '\updownarrowbar': '↨',
+ \ '\hookleftarrow': '↩',
+ \ '\:leftwards_arrow_with_hook:': '↩',
+ \ '\hookrightarrow': '↪',
+ \ '\:arrow_right_hook:': '↪',
+ \ '\looparrowleft': '↫',
+ \ '\looparrowright': '↬',
+ \ '\leftrightsquigarrow': '↭',
+ \ '\nleftrightarrow': '↮',
+ \ '\downzigzagarrow': '↯',
+ \ '\Lsh': '↰',
+ \ '\Rsh': '↱',
+ \ '\Ldsh': '↲',
+ \ '\Rdsh': '↳',
+ \ '\linefeed': '↴',
+ \ '\carriagereturn': '↵',
+ \ '\curvearrowleft': '↶',
+ \ '\curvearrowright': '↷',
+ \ '\barovernorthwestarrow': '↸',
+ \ '\barleftarrowrightarrowbar': '↹',
+ \ '\circlearrowleft': '↺',
+ \ '\circlearrowright': '↻',
+ \ '\leftharpoonup': '↼',
+ \ '\leftharpoondown': '↽',
+ \ '\upharpoonleft': '↾',
+ \ '\upharpoonright': '↿',
+ \ '\rightharpoonup': '⇀',
+ \ '\rightharpoondown': '⇁',
+ \ '\downharpoonright': '⇂',
+ \ '\downharpoonleft': '⇃',
+ \ '\rightleftarrows': '⇄',
+ \ '\dblarrowupdown': '⇅',
+ \ '\leftrightarrows': '⇆',
+ \ '\leftleftarrows': '⇇',
+ \ '\upuparrows': '⇈',
+ \ '\rightrightarrows': '⇉',
+ \ '\downdownarrows': '⇊',
+ \ '\leftrightharpoons': '⇋',
+ \ '\rightleftharpoons': '⇌',
+ \ '\nLeftarrow': '⇍',
+ \ '\nLeftrightarrow': '⇎',
+ \ '\nRightarrow': '⇏',
+ \ '\Leftarrow': '⇐',
+ \ '\Uparrow': '⇑',
+ \ '\Rightarrow': '⇒',
+ \ '\Downarrow': '⇓',
+ \ '\Leftrightarrow': '⇔',
+ \ '\Updownarrow': '⇕',
+ \ '\Nwarrow': '⇖',
+ \ '\Nearrow': '⇗',
+ \ '\Searrow': '⇘',
+ \ '\Swarrow': '⇙',
+ \ '\Lleftarrow': '⇚',
+ \ '\Rrightarrow': '⇛',
+ \ '\leftsquigarrow': '⇜',
+ \ '\rightsquigarrow': '⇝',
+ \ '\nHuparrow': '⇞',
+ \ '\nHdownarrow': '⇟',
+ \ '\leftdasharrow': '⇠',
+ \ '\updasharrow': '⇡',
+ \ '\rightdasharrow': '⇢',
+ \ '\downdasharrow': '⇣',
+ \ '\barleftarrow': '⇤',
+ \ '\rightarrowbar': '⇥',
+ \ '\leftwhitearrow': '⇦',
+ \ '\upwhitearrow': '⇧',
+ \ '\rightwhitearrow': '⇨',
+ \ '\downwhitearrow': '⇩',
+ \ '\whitearrowupfrombar': '⇪',
+ \ '\circleonrightarrow': '⇴',
+ \ '\DownArrowUpArrow': '⇵',
+ \ '\rightthreearrows': '⇶',
+ \ '\nvleftarrow': '⇷',
+ \ '\nvrightarrow': '⇸',
+ \ '\nvleftrightarrow': '⇹',
+ \ '\nVleftarrow': '⇺',
+ \ '\nVrightarrow': '⇻',
+ \ '\nVleftrightarrow': '⇼',
+ \ '\leftarrowtriangle': '⇽',
+ \ '\rightarrowtriangle': '⇾',
+ \ '\leftrightarrowtriangle': '⇿',
+ \ '\forall': '∀',
+ \ '\complement': '∁',
+ \ '\partial': '∂',
+ \ '\exists': '∃',
+ \ '\nexists': '∄',
+ \ '\varnothing': '∅',
+ \ '\emptyset': '∅',
+ \ '\increment': '∆',
+ \ '\del': '∇',
+ \ '\nabla': '∇',
+ \ '\in': '∈',
+ \ '\notin': '∉',
+ \ '\smallin': '∊',
+ \ '\ni': '∋',
+ \ '\nni': '∌',
+ \ '\smallni': '∍',
+ \ '\QED': '∎',
+ \ '\prod': '∏',
+ \ '\coprod': '∐',
+ \ '\sum': '∑',
+ \ '\minus': '−',
+ \ '\mp': '∓',
+ \ '\dotplus': '∔',
+ \ '\setminus': '∖',
+ \ '\ast': '∗',
+ \ '\circ': '∘',
+ \ '\vysmblkcircle': '∙',
+ \ '\surd': '√',
+ \ '\sqrt': '√',
+ \ '\cbrt': '∛',
+ \ '\fourthroot': '∜',
+ \ '\propto': '∝',
+ \ '\infty': '∞',
+ \ '\rightangle': '∟',
+ \ '\angle': '∠',
+ \ '\measuredangle': '∡',
+ \ '\sphericalangle': '∢',
+ \ '\mid': '∣',
+ \ '\nmid': '∤',
+ \ '\parallel': '∥',
+ \ '\nparallel': '∦',
+ \ '\wedge': '∧',
+ \ '\vee': '∨',
+ \ '\cap': '∩',
+ \ '\cup': '∪',
+ \ '\int': '∫',
+ \ '\iint': '∬',
+ \ '\iiint': '∭',
+ \ '\oint': '∮',
+ \ '\oiint': '∯',
+ \ '\oiiint': '∰',
+ \ '\clwintegral': '∱',
+ \ '\varointclockwise': '∲',
+ \ '\ointctrclockwise': '∳',
+ \ '\therefore': '∴',
+ \ '\because': '∵',
+ \ '\Colon': '∷',
+ \ '\dotminus': '∸',
+ \ '\dotsminusdots': '∺',
+ \ '\kernelcontraction': '∻',
+ \ '\sim': '∼',
+ \ '\backsim': '∽',
+ \ '\lazysinv': '∾',
+ \ '\sinewave': '∿',
+ \ '\wr': '≀',
+ \ '\nsim': '≁',
+ \ '\eqsim': '≂',
+ \ '\neqsim': '≂̸',
+ \ '\simeq': '≃',
+ \ '\nsime': '≄',
+ \ '\cong': '≅',
+ \ '\approxnotequal': '≆',
+ \ '\ncong': '≇',
+ \ '\approx': '≈',
+ \ '\napprox': '≉',
+ \ '\approxeq': '≊',
+ \ '\tildetrpl': '≋',
+ \ '\allequal': '≌',
+ \ '\asymp': '≍',
+ \ '\Bumpeq': '≎',
+ \ '\nBumpeq': '≎̸',
+ \ '\bumpeq': '≏',
+ \ '\nbumpeq': '≏̸',
+ \ '\doteq': '≐',
+ \ '\Doteq': '≑',
+ \ '\fallingdotseq': '≒',
+ \ '\risingdotseq': '≓',
+ \ '\coloneq': '≔',
+ \ '\eqcolon': '≕',
+ \ '\eqcirc': '≖',
+ \ '\circeq': '≗',
+ \ '\arceq': '≘',
+ \ '\wedgeq': '≙',
+ \ '\veeeq': '≚',
+ \ '\starequal': '≛',
+ \ '\triangleq': '≜',
+ \ '\eqdef': '≝',
+ \ '\measeq': '≞',
+ \ '\questeq': '≟',
+ \ '\ne': '≠',
+ \ '\equiv': '≡',
+ \ '\nequiv': '≢',
+ \ '\Equiv': '≣',
+ \ '\le': '≤',
+ \ '\ge': '≥',
+ \ '\leqq': '≦',
+ \ '\geqq': '≧',
+ \ '\lneqq': '≨',
+ \ '\lvertneqq': '≨︀',
+ \ '\gneqq': '≩',
+ \ '\gvertneqq': '≩︀',
+ \ '\ll': '≪',
+ \ '\NotLessLess': '≪̸',
+ \ '\gg': '≫',
+ \ '\NotGreaterGreater': '≫̸',
+ \ '\between': '≬',
+ \ '\nasymp': '≭',
+ \ '\nless': '≮',
+ \ '\ngtr': '≯',
+ \ '\nleq': '≰',
+ \ '\ngeq': '≱',
+ \ '\lesssim': '≲',
+ \ '\gtrsim': '≳',
+ \ '\nlesssim': '≴',
+ \ '\ngtrsim': '≵',
+ \ '\lessgtr': '≶',
+ \ '\gtrless': '≷',
+ \ '\notlessgreater': '≸',
+ \ '\notgreaterless': '≹',
+ \ '\prec': '≺',
+ \ '\succ': '≻',
+ \ '\preccurlyeq': '≼',
+ \ '\succcurlyeq': '≽',
+ \ '\precsim': '≾',
+ \ '\nprecsim': '≾̸',
+ \ '\succsim': '≿',
+ \ '\nsuccsim': '≿̸',
+ \ '\nprec': '⊀',
+ \ '\nsucc': '⊁',
+ \ '\subset': '⊂',
+ \ '\supset': '⊃',
+ \ '\nsubset': '⊄',
+ \ '\nsupset': '⊅',
+ \ '\subseteq': '⊆',
+ \ '\supseteq': '⊇',
+ \ '\nsubseteq': '⊈',
+ \ '\nsupseteq': '⊉',
+ \ '\subsetneq': '⊊',
+ \ '\varsubsetneqq': '⊊︀',
+ \ '\supsetneq': '⊋',
+ \ '\varsupsetneq': '⊋︀',
+ \ '\cupdot': '⊍',
+ \ '\uplus': '⊎',
+ \ '\sqsubset': '⊏',
+ \ '\NotSquareSubset': '⊏̸',
+ \ '\sqsupset': '⊐',
+ \ '\NotSquareSuperset': '⊐̸',
+ \ '\sqsubseteq': '⊑',
+ \ '\sqsupseteq': '⊒',
+ \ '\sqcap': '⊓',
+ \ '\sqcup': '⊔',
+ \ '\oplus': '⊕',
+ \ '\ominus': '⊖',
+ \ '\otimes': '⊗',
+ \ '\oslash': '⊘',
+ \ '\odot': '⊙',
+ \ '\circledcirc': '⊚',
+ \ '\circledast': '⊛',
+ \ '\circledequal': '⊜',
+ \ '\circleddash': '⊝',
+ \ '\boxplus': '⊞',
+ \ '\boxminus': '⊟',
+ \ '\boxtimes': '⊠',
+ \ '\boxdot': '⊡',
+ \ '\vdash': '⊢',
+ \ '\dashv': '⊣',
+ \ '\top': '⊤',
+ \ '\bot': '⊥',
+ \ '\models': '⊧',
+ \ '\vDash': '⊨',
+ \ '\Vdash': '⊩',
+ \ '\Vvdash': '⊪',
+ \ '\VDash': '⊫',
+ \ '\nvdash': '⊬',
+ \ '\nvDash': '⊭',
+ \ '\nVdash': '⊮',
+ \ '\nVDash': '⊯',
+ \ '\prurel': '⊰',
+ \ '\scurel': '⊱',
+ \ '\vartriangleleft': '⊲',
+ \ '\vartriangleright': '⊳',
+ \ '\trianglelefteq': '⊴',
+ \ '\trianglerighteq': '⊵',
+ \ '\original': '⊶',
+ \ '\image': '⊷',
+ \ '\multimap': '⊸',
+ \ '\hermitconjmatrix': '⊹',
+ \ '\intercal': '⊺',
+ \ '\veebar': '⊻',
+ \ '\xor': '⊻',
+ \ '\barwedge': '⊼',
+ \ '\barvee': '⊽',
+ \ '\rightanglearc': '⊾',
+ \ '\varlrtriangle': '⊿',
+ \ '\bigwedge': '⋀',
+ \ '\bigvee': '⋁',
+ \ '\bigcap': '⋂',
+ \ '\bigcup': '⋃',
+ \ '\diamond': '⋄',
+ \ '\cdot': '⋅',
+ \ '\star': '⋆',
+ \ '\divideontimes': '⋇',
+ \ '\bowtie': '⋈',
+ \ '\ltimes': '⋉',
+ \ '\rtimes': '⋊',
+ \ '\leftthreetimes': '⋋',
+ \ '\rightthreetimes': '⋌',
+ \ '\backsimeq': '⋍',
+ \ '\curlyvee': '⋎',
+ \ '\curlywedge': '⋏',
+ \ '\Subset': '⋐',
+ \ '\Supset': '⋑',
+ \ '\Cap': '⋒',
+ \ '\Cup': '⋓',
+ \ '\pitchfork': '⋔',
+ \ '\equalparallel': '⋕',
+ \ '\lessdot': '⋖',
+ \ '\gtrdot': '⋗',
+ \ '\verymuchless': '⋘',
+ \ '\ggg': '⋙',
+ \ '\lesseqgtr': '⋚',
+ \ '\gtreqless': '⋛',
+ \ '\eqless': '⋜',
+ \ '\eqgtr': '⋝',
+ \ '\curlyeqprec': '⋞',
+ \ '\curlyeqsucc': '⋟',
+ \ '\npreccurlyeq': '⋠',
+ \ '\nsucccurlyeq': '⋡',
+ \ '\nsqsubseteq': '⋢',
+ \ '\nsqsupseteq': '⋣',
+ \ '\sqsubsetneq': '⋤',
+ \ '\Elzsqspne': '⋥',
+ \ '\lnsim': '⋦',
+ \ '\gnsim': '⋧',
+ \ '\precnsim': '⋨',
+ \ '\succnsim': '⋩',
+ \ '\ntriangleleft': '⋪',
+ \ '\ntriangleright': '⋫',
+ \ '\ntrianglelefteq': '⋬',
+ \ '\ntrianglerighteq': '⋭',
+ \ '\vdots': '⋮',
+ \ '\cdots': '⋯',
+ \ '\adots': '⋰',
+ \ '\ddots': '⋱',
+ \ '\disin': '⋲',
+ \ '\varisins': '⋳',
+ \ '\isins': '⋴',
+ \ '\isindot': '⋵',
+ \ '\varisinobar': '⋶',
+ \ '\isinobar': '⋷',
+ \ '\isinvb': '⋸',
+ \ '\isinE': '⋹',
+ \ '\nisd': '⋺',
+ \ '\varnis': '⋻',
+ \ '\nis': '⋼',
+ \ '\varniobar': '⋽',
+ \ '\niobar': '⋾',
+ \ '\bagmember': '⋿',
+ \ '\diameter': '⌀',
+ \ '\house': '⌂',
+ \ '\varbarwedge': '⌅',
+ \ '\vardoublebarwedge': '⌆',
+ \ '\lceil': '⌈',
+ \ '\rceil': '⌉',
+ \ '\lfloor': '⌊',
+ \ '\rfloor': '⌋',
+ \ '\invnot': '⌐',
+ \ '\sqlozenge': '⌑',
+ \ '\profline': '⌒',
+ \ '\profsurf': '⌓',
+ \ '\recorder': '⌕',
+ \ '\viewdata': '⌗',
+ \ '\turnednot': '⌙',
+ \ '\:watch:': '⌚',
+ \ '\:hourglass:': '⌛',
+ \ '\ulcorner': '⌜',
+ \ '\urcorner': '⌝',
+ \ '\llcorner': '⌞',
+ \ '\lrcorner': '⌟',
+ \ '\frown': '⌢',
+ \ '\smile': '⌣',
+ \ '\varhexagonlrbonds': '⌬',
+ \ '\conictaper': '⌲',
+ \ '\topbot': '⌶',
+ \ '\obar': '⌽',
+ \ '\APLnotslash': '⌿',
+ \ '\APLnotbackslash': '⍀',
+ \ '\APLboxupcaret': '⍓',
+ \ '\APLboxquestion': '⍰',
+ \ '\hexagon': '⎔',
+ \ '\Elzdlcorn': '⎣',
+ \ '\lmoustache': '⎰',
+ \ '\rmoustache': '⎱',
+ \ '\overbracket': '⎴',
+ \ '\underbracket': '⎵',
+ \ '\bbrktbrk': '⎶',
+ \ '\sqrtbottom': '⎷',
+ \ '\lvboxline': '⎸',
+ \ '\rvboxline': '⎹',
+ \ '\varcarriagereturn': '⏎',
+ \ '\overbrace': '⏞',
+ \ '\underbrace': '⏟',
+ \ '\trapezium': '⏢',
+ \ '\benzenr': '⏣',
+ \ '\strns': '⏤',
+ \ '\fltns': '⏥',
+ \ '\accurrent': '⏦',
+ \ '\elinters': '⏧',
+ \ '\:fast_forward:': '⏩',
+ \ '\:rewind:': '⏪',
+ \ '\:arrow_double_up:': '⏫',
+ \ '\:arrow_double_down:': '⏬',
+ \ '\:alarm_clock:': '⏰',
+ \ '\:hourglass_flowing_sand:': '⏳',
+ \ '\blanksymbol': '␢',
+ \ '\textvisiblespace': '␣',
+ \ '\:m:': 'Ⓜ',
+ \ '\circledS': 'Ⓢ',
+ \ '\Elzdshfnc': '┆',
+ \ '\Elzsqfnw': '┙',
+ \ '\diagup': '╱',
+ \ '\diagdown': '╲',
+ \ '\blockuphalf': '▀',
+ \ '\blocklowhalf': '▄',
+ \ '\blockfull': '█',
+ \ '\blocklefthalf': '▌',
+ \ '\blockrighthalf': '▐',
+ \ '\blockqtrshaded': '░',
+ \ '\blockhalfshaded': '▒',
+ \ '\blockthreeqtrshaded': '▓',
+ \ '\blacksquare': '■',
+ \ '\square': '□',
+ \ '\squoval': '▢',
+ \ '\blackinwhitesquare': '▣',
+ \ '\squarehfill': '▤',
+ \ '\squarevfill': '▥',
+ \ '\squarehvfill': '▦',
+ \ '\squarenwsefill': '▧',
+ \ '\squareneswfill': '▨',
+ \ '\squarecrossfill': '▩',
+ \ '\smblksquare': '▪',
+ \ '\:black_small_square:': '▪',
+ \ '\smwhtsquare': '▫',
+ \ '\:white_small_square:': '▫',
+ \ '\hrectangleblack': '▬',
+ \ '\hrectangle': '▭',
+ \ '\vrectangleblack': '▮',
+ \ '\Elzvrecto': '▯',
+ \ '\parallelogramblack': '▰',
+ \ '\parallelogram': '▱',
+ \ '\bigblacktriangleup': '▲',
+ \ '\bigtriangleup': '△',
+ \ '\blacktriangle': '▴',
+ \ '\vartriangle': '▵',
+ \ '\blacktriangleright': '▶',
+ \ '\:arrow_forward:': '▶',
+ \ '\triangleright': '▷',
+ \ '\smallblacktriangleright': '▸',
+ \ '\smalltriangleright': '▹',
+ \ '\blackpointerright': '►',
+ \ '\whitepointerright': '▻',
+ \ '\bigblacktriangledown': '▼',
+ \ '\bigtriangledown': '▽',
+ \ '\blacktriangledown': '▾',
+ \ '\triangledown': '▿',
+ \ '\blacktriangleleft': '◀',
+ \ '\:arrow_backward:': '◀',
+ \ '\triangleleft': '◁',
+ \ '\smallblacktriangleleft': '◂',
+ \ '\smalltriangleleft': '◃',
+ \ '\blackpointerleft': '◄',
+ \ '\whitepointerleft': '◅',
+ \ '\mdlgblkdiamond': '◆',
+ \ '\mdlgwhtdiamond': '◇',
+ \ '\blackinwhitediamond': '◈',
+ \ '\fisheye': '◉',
+ \ '\lozenge': '◊',
+ \ '\bigcirc': '○',
+ \ '\dottedcircle': '◌',
+ \ '\circlevertfill': '◍',
+ \ '\bullseye': '◎',
+ \ '\mdlgblkcircle': '●',
+ \ '\Elzcirfl': '◐',
+ \ '\Elzcirfr': '◑',
+ \ '\Elzcirfb': '◒',
+ \ '\circletophalfblack': '◓',
+ \ '\circleurquadblack': '◔',
+ \ '\blackcircleulquadwhite': '◕',
+ \ '\blacklefthalfcircle': '◖',
+ \ '\blackrighthalfcircle': '◗',
+ \ '\Elzrvbull': '◘',
+ \ '\inversewhitecircle': '◙',
+ \ '\invwhiteupperhalfcircle': '◚',
+ \ '\invwhitelowerhalfcircle': '◛',
+ \ '\ularc': '◜',
+ \ '\urarc': '◝',
+ \ '\lrarc': '◞',
+ \ '\llarc': '◟',
+ \ '\topsemicircle': '◠',
+ \ '\botsemicircle': '◡',
+ \ '\lrblacktriangle': '◢',
+ \ '\llblacktriangle': '◣',
+ \ '\ulblacktriangle': '◤',
+ \ '\urblacktriangle': '◥',
+ \ '\smwhtcircle': '◦',
+ \ '\Elzsqfl': '◧',
+ \ '\Elzsqfr': '◨',
+ \ '\squareulblack': '◩',
+ \ '\Elzsqfse': '◪',
+ \ '\boxbar': '◫',
+ \ '\trianglecdot': '◬',
+ \ '\triangleleftblack': '◭',
+ \ '\trianglerightblack': '◮',
+ \ '\lgwhtcircle': '◯',
+ \ '\squareulquad': '◰',
+ \ '\squarellquad': '◱',
+ \ '\squarelrquad': '◲',
+ \ '\squareurquad': '◳',
+ \ '\circleulquad': '◴',
+ \ '\circlellquad': '◵',
+ \ '\circlelrquad': '◶',
+ \ '\circleurquad': '◷',
+ \ '\ultriangle': '◸',
+ \ '\urtriangle': '◹',
+ \ '\lltriangle': '◺',
+ \ '\mdwhtsquare': '◻',
+ \ '\:white_medium_square:': '◻',
+ \ '\mdblksquare': '◼',
+ \ '\:black_medium_square:': '◼',
+ \ '\mdsmwhtsquare': '◽',
+ \ '\:white_medium_small_square:': '◽',
+ \ '\mdsmblksquare': '◾',
+ \ '\:black_medium_small_square:': '◾',
+ \ '\lrtriangle': '◿',
+ \ '\:sunny:': '☀',
+ \ '\:cloud:': '☁',
+ \ '\bigstar': '★',
+ \ '\bigwhitestar': '☆',
+ \ '\astrosun': '☉',
+ \ '\:phone:': '☎',
+ \ '\:ballot_box_with_check:': '☑',
+ \ '\:umbrella:': '☔',
+ \ '\:coffee:': '☕',
+ \ '\:point_up:': '☝',
+ \ '\danger': '☡',
+ \ '\:relaxed:': '☺',
+ \ '\blacksmiley': '☻',
+ \ '\sun': '☼',
+ \ '\rightmoon': '☽',
+ \ '\leftmoon': '☾',
+ \ '\mercury': '☿',
+ \ '\venus': '♀',
+ \ '\female': '♀',
+ \ '\male': '♂',
+ \ '\mars': '♂',
+ \ '\jupiter': '♃',
+ \ '\saturn': '♄',
+ \ '\uranus': '♅',
+ \ '\neptune': '♆',
+ \ '\pluto': '♇',
+ \ '\aries': '♈',
+ \ '\:aries:': '♈',
+ \ '\taurus': '♉',
+ \ '\:taurus:': '♉',
+ \ '\gemini': '♊',
+ \ '\:gemini:': '♊',
+ \ '\cancer': '♋',
+ \ '\:cancer:': '♋',
+ \ '\leo': '♌',
+ \ '\:leo:': '♌',
+ \ '\virgo': '♍',
+ \ '\:virgo:': '♍',
+ \ '\libra': '♎',
+ \ '\:libra:': '♎',
+ \ '\scorpio': '♏',
+ \ '\:scorpius:': '♏',
+ \ '\sagittarius': '♐',
+ \ '\:sagittarius:': '♐',
+ \ '\capricornus': '♑',
+ \ '\:capricorn:': '♑',
+ \ '\aquarius': '♒',
+ \ '\:aquarius:': '♒',
+ \ '\pisces': '♓',
+ \ '\:pisces:': '♓',
+ \ '\spadesuit': '♠',
+ \ '\:spades:': '♠',
+ \ '\heartsuit': '♡',
+ \ '\diamondsuit': '♢',
+ \ '\clubsuit': '♣',
+ \ '\:clubs:': '♣',
+ \ '\varspadesuit': '♤',
+ \ '\varheartsuit': '♥',
+ \ '\:hearts:': '♥',
+ \ '\vardiamondsuit': '♦',
+ \ '\:diamonds:': '♦',
+ \ '\varclubsuit': '♧',
+ \ '\:hotsprings:': '♨',
+ \ '\quarternote': '♩',
+ \ '\eighthnote': '♪',
+ \ '\twonotes': '♫',
+ \ '\flat': '♭',
+ \ '\natural': '♮',
+ \ '\sharp': '♯',
+ \ '\:recycle:': '♻',
+ \ '\acidfree': '♾',
+ \ '\:wheelchair:': '♿',
+ \ '\dicei': '⚀',
+ \ '\diceii': '⚁',
+ \ '\diceiii': '⚂',
+ \ '\diceiv': '⚃',
+ \ '\dicev': '⚄',
+ \ '\dicevi': '⚅',
+ \ '\circledrightdot': '⚆',
+ \ '\circledtwodots': '⚇',
+ \ '\blackcircledrightdot': '⚈',
+ \ '\blackcircledtwodots': '⚉',
+ \ '\:anchor:': '⚓',
+ \ '\:warning:': '⚠',
+ \ '\:zap:': '⚡',
+ \ '\Hermaphrodite': '⚥',
+ \ '\mdwhtcircle': '⚪',
+ \ '\:white_circle:': '⚪',
+ \ '\mdblkcircle': '⚫',
+ \ '\:black_circle:': '⚫',
+ \ '\mdsmwhtcircle': '⚬',
+ \ '\neuter': '⚲',
+ \ '\:soccer:': '⚽',
+ \ '\:baseball:': '⚾',
+ \ '\:snowman:': '⛄',
+ \ '\:partly_sunny:': '⛅',
+ \ '\:ophiuchus:': '⛎',
+ \ '\:no_entry:': '⛔',
+ \ '\:church:': '⛪',
+ \ '\:fountain:': '⛲',
+ \ '\:golf:': '⛳',
+ \ '\:boat:': '⛵',
+ \ '\:tent:': '⛺',
+ \ '\:fuelpump:': '⛽',
+ \ '\:scissors:': '✂',
+ \ '\:white_check_mark:': '✅',
+ \ '\:airplane:': '✈',
+ \ '\:email:': '✉',
+ \ '\:fist:': '✊',
+ \ '\:hand:': '✋',
+ \ '\:v:': '✌',
+ \ '\:pencil2:': '✏',
+ \ '\:black_nib:': '✒',
+ \ '\checkmark': '✓',
+ \ '\:heavy_check_mark:': '✔',
+ \ '\:heavy_multiplication_x:': '✖',
+ \ '\maltese': '✠',
+ \ '\:sparkles:': '✨',
+ \ '\circledstar': '✪',
+ \ '\:eight_spoked_asterisk:': '✳',
+ \ '\:eight_pointed_black_star:': '✴',
+ \ '\varstar': '✶',
+ \ '\dingasterisk': '✽',
+ \ '\:snowflake:': '❄',
+ \ '\:sparkle:': '❇',
+ \ '\:x:': '❌',
+ \ '\:negative_squared_cross_mark:': '❎',
+ \ '\:question:': '❓',
+ \ '\:grey_question:': '❔',
+ \ '\:grey_exclamation:': '❕',
+ \ '\:exclamation:': '❗',
+ \ '\:heart:': '❤',
+ \ '\:heavy_plus_sign:': '➕',
+ \ '\:heavy_minus_sign:': '➖',
+ \ '\:heavy_division_sign:': '➗',
+ \ '\draftingarrow': '➛',
+ \ '\:arrow_right:': '➡',
+ \ '\:curly_loop:': '➰',
+ \ '\:loop:': '➿',
+ \ '\threedangle': '⟀',
+ \ '\whiteinwhitetriangle': '⟁',
+ \ '\perp': '⟂',
+ \ '\bsolhsub': '⟈',
+ \ '\suphsol': '⟉',
+ \ '\wedgedot': '⟑',
+ \ '\upin': '⟒',
+ \ '\leftouterjoin': '⟕',
+ \ '\rightouterjoin': '⟖',
+ \ '\fullouterjoin': '⟗',
+ \ '\bigbot': '⟘',
+ \ '\bigtop': '⟙',
+ \ '\llbracket': '⟦',
+ \ '\openbracketleft': '⟦',
+ \ '\openbracketright': '⟧',
+ \ '\rrbracket': '⟧',
+ \ '\langle': '⟨',
+ \ '\rangle': '⟩',
+ \ '\UUparrow': '⟰',
+ \ '\DDownarrow': '⟱',
+ \ '\longleftarrow': '⟵',
+ \ '\longrightarrow': '⟶',
+ \ '\longleftrightarrow': '⟷',
+ \ '\impliedby': '⟸',
+ \ '\Longleftarrow': '⟸',
+ \ '\implies': '⟹',
+ \ '\Longrightarrow': '⟹',
+ \ '\Longleftrightarrow': '⟺',
+ \ '\iff': '⟺',
+ \ '\longmapsfrom': '⟻',
+ \ '\longmapsto': '⟼',
+ \ '\Longmapsfrom': '⟽',
+ \ '\Longmapsto': '⟾',
+ \ '\longrightsquigarrow': '⟿',
+ \ '\nvtwoheadrightarrow': '⤀',
+ \ '\nVtwoheadrightarrow': '⤁',
+ \ '\nvLeftarrow': '⤂',
+ \ '\nvRightarrow': '⤃',
+ \ '\nvLeftrightarrow': '⤄',
+ \ '\twoheadmapsto': '⤅',
+ \ '\Mapsfrom': '⤆',
+ \ '\Mapsto': '⤇',
+ \ '\downarrowbarred': '⤈',
+ \ '\uparrowbarred': '⤉',
+ \ '\Uuparrow': '⤊',
+ \ '\Ddownarrow': '⤋',
+ \ '\leftbkarrow': '⤌',
+ \ '\bkarow': '⤍',
+ \ '\leftdbkarrow': '⤎',
+ \ '\dbkarow': '⤏',
+ \ '\drbkarrow': '⤐',
+ \ '\rightdotarrow': '⤑',
+ \ '\UpArrowBar': '⤒',
+ \ '\DownArrowBar': '⤓',
+ \ '\nvrightarrowtail': '⤔',
+ \ '\nVrightarrowtail': '⤕',
+ \ '\twoheadrightarrowtail': '⤖',
+ \ '\nvtwoheadrightarrowtail': '⤗',
+ \ '\nVtwoheadrightarrowtail': '⤘',
+ \ '\diamondleftarrow': '⤝',
+ \ '\rightarrowdiamond': '⤞',
+ \ '\diamondleftarrowbar': '⤟',
+ \ '\barrightarrowdiamond': '⤠',
+ \ '\hksearow': '⤥',
+ \ '\hkswarow': '⤦',
+ \ '\tona': '⤧',
+ \ '\toea': '⤨',
+ \ '\tosa': '⤩',
+ \ '\towa': '⤪',
+ \ '\rdiagovfdiag': '⤫',
+ \ '\fdiagovrdiag': '⤬',
+ \ '\seovnearrow': '⤭',
+ \ '\neovsearrow': '⤮',
+ \ '\fdiagovnearrow': '⤯',
+ \ '\rdiagovsearrow': '⤰',
+ \ '\neovnwarrow': '⤱',
+ \ '\nwovnearrow': '⤲',
+ \ '\:arrow_heading_up:': '⤴',
+ \ '\:arrow_heading_down:': '⤵',
+ \ '\ElzRlarr': '⥂',
+ \ '\ElzrLarr': '⥄',
+ \ '\rightarrowplus': '⥅',
+ \ '\leftarrowplus': '⥆',
+ \ '\Elzrarrx': '⥇',
+ \ '\leftrightarrowcircle': '⥈',
+ \ '\twoheaduparrowcircle': '⥉',
+ \ '\leftrightharpoonupdown': '⥊',
+ \ '\leftrightharpoondownup': '⥋',
+ \ '\updownharpoonrightleft': '⥌',
+ \ '\updownharpoonleftright': '⥍',
+ \ '\LeftRightVector': '⥎',
+ \ '\RightUpDownVector': '⥏',
+ \ '\DownLeftRightVector': '⥐',
+ \ '\LeftUpDownVector': '⥑',
+ \ '\LeftVectorBar': '⥒',
+ \ '\RightVectorBar': '⥓',
+ \ '\RightUpVectorBar': '⥔',
+ \ '\RightDownVectorBar': '⥕',
+ \ '\DownLeftVectorBar': '⥖',
+ \ '\DownRightVectorBar': '⥗',
+ \ '\LeftUpVectorBar': '⥘',
+ \ '\LeftDownVectorBar': '⥙',
+ \ '\LeftTeeVector': '⥚',
+ \ '\RightTeeVector': '⥛',
+ \ '\RightUpTeeVector': '⥜',
+ \ '\RightDownTeeVector': '⥝',
+ \ '\DownLeftTeeVector': '⥞',
+ \ '\DownRightTeeVector': '⥟',
+ \ '\LeftUpTeeVector': '⥠',
+ \ '\LeftDownTeeVector': '⥡',
+ \ '\leftharpoonsupdown': '⥢',
+ \ '\upharpoonsleftright': '⥣',
+ \ '\rightharpoonsupdown': '⥤',
+ \ '\downharpoonsleftright': '⥥',
+ \ '\leftrightharpoonsup': '⥦',
+ \ '\leftrightharpoonsdown': '⥧',
+ \ '\rightleftharpoonsup': '⥨',
+ \ '\rightleftharpoonsdown': '⥩',
+ \ '\leftharpoonupdash': '⥪',
+ \ '\dashleftharpoondown': '⥫',
+ \ '\rightharpoonupdash': '⥬',
+ \ '\dashrightharpoondown': '⥭',
+ \ '\UpEquilibrium': '⥮',
+ \ '\ReverseUpEquilibrium': '⥯',
+ \ '\RoundImplies': '⥰',
+ \ '\Vvert': '⦀',
+ \ '\Elroang': '⦆',
+ \ '\Elzddfnc': '⦙',
+ \ '\measuredangleleft': '⦛',
+ \ '\Angle': '⦜',
+ \ '\rightanglemdot': '⦝',
+ \ '\angles': '⦞',
+ \ '\angdnr': '⦟',
+ \ '\Elzlpargt': '⦠',
+ \ '\sphericalangleup': '⦡',
+ \ '\turnangle': '⦢',
+ \ '\revangle': '⦣',
+ \ '\angleubar': '⦤',
+ \ '\revangleubar': '⦥',
+ \ '\wideangledown': '⦦',
+ \ '\wideangleup': '⦧',
+ \ '\measanglerutone': '⦨',
+ \ '\measanglelutonw': '⦩',
+ \ '\measanglerdtose': '⦪',
+ \ '\measangleldtosw': '⦫',
+ \ '\measangleurtone': '⦬',
+ \ '\measangleultonw': '⦭',
+ \ '\measangledrtose': '⦮',
+ \ '\measangledltosw': '⦯',
+ \ '\revemptyset': '⦰',
+ \ '\emptysetobar': '⦱',
+ \ '\emptysetocirc': '⦲',
+ \ '\emptysetoarr': '⦳',
+ \ '\emptysetoarrl': '⦴',
+ \ '\circledparallel': '⦷',
+ \ '\obslash': '⦸',
+ \ '\odotslashdot': '⦼',
+ \ '\circledwhitebullet': '⦾',
+ \ '\circledbullet': '⦿',
+ \ '\olessthan': '⧀',
+ \ '\ogreaterthan': '⧁',
+ \ '\boxdiag': '⧄',
+ \ '\boxbslash': '⧅',
+ \ '\boxast': '⧆',
+ \ '\boxcircle': '⧇',
+ \ '\ElzLap': '⧊',
+ \ '\Elzdefas': '⧋',
+ \ '\LeftTriangleBar': '⧏',
+ \ '\NotLeftTriangleBar': '⧏̸',
+ \ '\RightTriangleBar': '⧐',
+ \ '\NotRightTriangleBar': '⧐̸',
+ \ '\dualmap': '⧟',
+ \ '\lrtriangleeq': '⧡',
+ \ '\shuffle': '⧢',
+ \ '\eparsl': '⧣',
+ \ '\smeparsl': '⧤',
+ \ '\eqvparsl': '⧥',
+ \ '\blacklozenge': '⧫',
+ \ '\RuleDelayed': '⧴',
+ \ '\dsol': '⧶',
+ \ '\rsolbar': '⧷',
+ \ '\doubleplus': '⧺',
+ \ '\tripleplus': '⧻',
+ \ '\bigodot': '⨀',
+ \ '\bigoplus': '⨁',
+ \ '\bigotimes': '⨂',
+ \ '\bigcupdot': '⨃',
+ \ '\biguplus': '⨄',
+ \ '\bigsqcap': '⨅',
+ \ '\bigsqcup': '⨆',
+ \ '\conjquant': '⨇',
+ \ '\disjquant': '⨈',
+ \ '\bigtimes': '⨉',
+ \ '\modtwosum': '⨊',
+ \ '\sumint': '⨋',
+ \ '\iiiint': '⨌',
+ \ '\intbar': '⨍',
+ \ '\intBar': '⨎',
+ \ '\clockoint': '⨏',
+ \ '\cirfnint': '⨐',
+ \ '\awint': '⨑',
+ \ '\rppolint': '⨒',
+ \ '\scpolint': '⨓',
+ \ '\npolint': '⨔',
+ \ '\pointint': '⨕',
+ \ '\sqrint': '⨖',
+ \ '\intx': '⨘',
+ \ '\intcap': '⨙',
+ \ '\intcup': '⨚',
+ \ '\upint': '⨛',
+ \ '\lowint': '⨜',
+ \ '\Join': '⨝',
+ \ '\ringplus': '⨢',
+ \ '\plushat': '⨣',
+ \ '\simplus': '⨤',
+ \ '\plusdot': '⨥',
+ \ '\plussim': '⨦',
+ \ '\plussubtwo': '⨧',
+ \ '\plustrif': '⨨',
+ \ '\commaminus': '⨩',
+ \ '\minusdot': '⨪',
+ \ '\minusfdots': '⨫',
+ \ '\minusrdots': '⨬',
+ \ '\opluslhrim': '⨭',
+ \ '\oplusrhrim': '⨮',
+ \ '\ElzTimes': '⨯',
+ \ '\dottimes': '⨰',
+ \ '\timesbar': '⨱',
+ \ '\btimes': '⨲',
+ \ '\smashtimes': '⨳',
+ \ '\otimeslhrim': '⨴',
+ \ '\otimesrhrim': '⨵',
+ \ '\otimeshat': '⨶',
+ \ '\Otimes': '⨷',
+ \ '\odiv': '⨸',
+ \ '\triangleplus': '⨹',
+ \ '\triangleminus': '⨺',
+ \ '\triangletimes': '⨻',
+ \ '\intprod': '⨼',
+ \ '\intprodr': '⨽',
+ \ '\amalg': '⨿',
+ \ '\capdot': '⩀',
+ \ '\uminus': '⩁',
+ \ '\barcup': '⩂',
+ \ '\barcap': '⩃',
+ \ '\capwedge': '⩄',
+ \ '\cupvee': '⩅',
+ \ '\twocups': '⩊',
+ \ '\twocaps': '⩋',
+ \ '\closedvarcup': '⩌',
+ \ '\closedvarcap': '⩍',
+ \ '\Sqcap': '⩎',
+ \ '\Sqcup': '⩏',
+ \ '\closedvarcupsmashprod': '⩐',
+ \ '\wedgeodot': '⩑',
+ \ '\veeodot': '⩒',
+ \ '\ElzAnd': '⩓',
+ \ '\ElzOr': '⩔',
+ \ '\wedgeonwedge': '⩕',
+ \ '\ElOr': '⩖',
+ \ '\bigslopedvee': '⩗',
+ \ '\bigslopedwedge': '⩘',
+ \ '\wedgemidvert': '⩚',
+ \ '\veemidvert': '⩛',
+ \ '\midbarwedge': '⩜',
+ \ '\midbarvee': '⩝',
+ \ '\perspcorrespond': '⩞',
+ \ '\Elzminhat': '⩟',
+ \ '\wedgedoublebar': '⩠',
+ \ '\varveebar': '⩡',
+ \ '\doublebarvee': '⩢',
+ \ '\veedoublebar': '⩣',
+ \ '\eqdot': '⩦',
+ \ '\dotequiv': '⩧',
+ \ '\dotsim': '⩪',
+ \ '\simrdots': '⩫',
+ \ '\simminussim': '⩬',
+ \ '\congdot': '⩭',
+ \ '\asteq': '⩮',
+ \ '\hatapprox': '⩯',
+ \ '\approxeqq': '⩰',
+ \ '\eqqplus': '⩱',
+ \ '\pluseqq': '⩲',
+ \ '\eqqsim': '⩳',
+ \ '\Coloneq': '⩴',
+ \ '\Equal': '⩵',
+ \ '\eqeqeq': '⩶',
+ \ '\ddotseq': '⩷',
+ \ '\equivDD': '⩸',
+ \ '\ltcir': '⩹',
+ \ '\gtcir': '⩺',
+ \ '\ltquest': '⩻',
+ \ '\gtquest': '⩼',
+ \ '\leqslant': '⩽',
+ \ '\nleqslant': '⩽̸',
+ \ '\geqslant': '⩾',
+ \ '\ngeqslant': '⩾̸',
+ \ '\lesdot': '⩿',
+ \ '\gesdot': '⪀',
+ \ '\lesdoto': '⪁',
+ \ '\gesdoto': '⪂',
+ \ '\lesdotor': '⪃',
+ \ '\gesdotol': '⪄',
+ \ '\lessapprox': '⪅',
+ \ '\gtrapprox': '⪆',
+ \ '\lneq': '⪇',
+ \ '\gneq': '⪈',
+ \ '\lnapprox': '⪉',
+ \ '\gnapprox': '⪊',
+ \ '\lesseqqgtr': '⪋',
+ \ '\gtreqqless': '⪌',
+ \ '\lsime': '⪍',
+ \ '\gsime': '⪎',
+ \ '\lsimg': '⪏',
+ \ '\gsiml': '⪐',
+ \ '\lgE': '⪑',
+ \ '\glE': '⪒',
+ \ '\lesges': '⪓',
+ \ '\gesles': '⪔',
+ \ '\eqslantless': '⪕',
+ \ '\eqslantgtr': '⪖',
+ \ '\elsdot': '⪗',
+ \ '\egsdot': '⪘',
+ \ '\eqqless': '⪙',
+ \ '\eqqgtr': '⪚',
+ \ '\eqqslantless': '⪛',
+ \ '\eqqslantgtr': '⪜',
+ \ '\simless': '⪝',
+ \ '\simgtr': '⪞',
+ \ '\simlE': '⪟',
+ \ '\simgE': '⪠',
+ \ '\NestedLessLess': '⪡',
+ \ '\NotNestedLessLess': '⪡̸',
+ \ '\NestedGreaterGreater': '⪢',
+ \ '\NotNestedGreaterGreater': '⪢̸',
+ \ '\partialmeetcontraction': '⪣',
+ \ '\glj': '⪤',
+ \ '\gla': '⪥',
+ \ '\ltcc': '⪦',
+ \ '\gtcc': '⪧',
+ \ '\lescc': '⪨',
+ \ '\gescc': '⪩',
+ \ '\smt': '⪪',
+ \ '\lat': '⪫',
+ \ '\smte': '⪬',
+ \ '\late': '⪭',
+ \ '\bumpeqq': '⪮',
+ \ '\preceq': '⪯',
+ \ '\npreceq': '⪯̸',
+ \ '\succeq': '⪰',
+ \ '\nsucceq': '⪰̸',
+ \ '\precneq': '⪱',
+ \ '\succneq': '⪲',
+ \ '\preceqq': '⪳',
+ \ '\succeqq': '⪴',
+ \ '\precneqq': '⪵',
+ \ '\succneqq': '⪶',
+ \ '\precapprox': '⪷',
+ \ '\succapprox': '⪸',
+ \ '\precnapprox': '⪹',
+ \ '\succnapprox': '⪺',
+ \ '\Prec': '⪻',
+ \ '\Succ': '⪼',
+ \ '\subsetdot': '⪽',
+ \ '\supsetdot': '⪾',
+ \ '\subsetplus': '⪿',
+ \ '\supsetplus': '⫀',
+ \ '\submult': '⫁',
+ \ '\supmult': '⫂',
+ \ '\subedot': '⫃',
+ \ '\supedot': '⫄',
+ \ '\subseteqq': '⫅',
+ \ '\nsubseteqq': '⫅̸',
+ \ '\supseteqq': '⫆',
+ \ '\nsupseteqq': '⫆̸',
+ \ '\subsim': '⫇',
+ \ '\supsim': '⫈',
+ \ '\subsetapprox': '⫉',
+ \ '\supsetapprox': '⫊',
+ \ '\subsetneqq': '⫋',
+ \ '\supsetneqq': '⫌',
+ \ '\lsqhook': '⫍',
+ \ '\rsqhook': '⫎',
+ \ '\csub': '⫏',
+ \ '\csup': '⫐',
+ \ '\csube': '⫑',
+ \ '\csupe': '⫒',
+ \ '\subsup': '⫓',
+ \ '\supsub': '⫔',
+ \ '\subsub': '⫕',
+ \ '\supsup': '⫖',
+ \ '\suphsub': '⫗',
+ \ '\supdsub': '⫘',
+ \ '\forkv': '⫙',
+ \ '\mlcp': '⫛',
+ \ '\forks': '⫝̸',
+ \ '\forksnot': '⫝',
+ \ '\dashV': '⫣',
+ \ '\Dashv': '⫤',
+ \ '\interleave': '⫴',
+ \ '\Elztdcol': '⫶',
+ \ '\lllnest': '⫷',
+ \ '\gggnest': '⫸',
+ \ '\leqqslant': '⫹',
+ \ '\geqqslant': '⫺',
+ \ '\:arrow_left:': '⬅',
+ \ '\:arrow_up:': '⬆',
+ \ '\:arrow_down:': '⬇',
+ \ '\squaretopblack': '⬒',
+ \ '\squarebotblack': '⬓',
+ \ '\squareurblack': '⬔',
+ \ '\squarellblack': '⬕',
+ \ '\diamondleftblack': '⬖',
+ \ '\diamondrightblack': '⬗',
+ \ '\diamondtopblack': '⬘',
+ \ '\diamondbotblack': '⬙',
+ \ '\dottedsquare': '⬚',
+ \ '\lgblksquare': '⬛',
+ \ '\:black_large_square:': '⬛',
+ \ '\lgwhtsquare': '⬜',
+ \ '\:white_large_square:': '⬜',
+ \ '\vysmblksquare': '⬝',
+ \ '\vysmwhtsquare': '⬞',
+ \ '\pentagonblack': '⬟',
+ \ '\pentagon': '⬠',
+ \ '\varhexagon': '⬡',
+ \ '\varhexagonblack': '⬢',
+ \ '\hexagonblack': '⬣',
+ \ '\lgblkcircle': '⬤',
+ \ '\mdblkdiamond': '⬥',
+ \ '\mdwhtdiamond': '⬦',
+ \ '\mdblklozenge': '⬧',
+ \ '\mdwhtlozenge': '⬨',
+ \ '\smblkdiamond': '⬩',
+ \ '\smblklozenge': '⬪',
+ \ '\smwhtlozenge': '⬫',
+ \ '\blkhorzoval': '⬬',
+ \ '\whthorzoval': '⬭',
+ \ '\blkvertoval': '⬮',
+ \ '\whtvertoval': '⬯',
+ \ '\circleonleftarrow': '⬰',
+ \ '\leftthreearrows': '⬱',
+ \ '\leftarrowonoplus': '⬲',
+ \ '\longleftsquigarrow': '⬳',
+ \ '\nvtwoheadleftarrow': '⬴',
+ \ '\nVtwoheadleftarrow': '⬵',
+ \ '\twoheadmapsfrom': '⬶',
+ \ '\twoheadleftdbkarrow': '⬷',
+ \ '\leftdotarrow': '⬸',
+ \ '\nvleftarrowtail': '⬹',
+ \ '\nVleftarrowtail': '⬺',
+ \ '\twoheadleftarrowtail': '⬻',
+ \ '\nvtwoheadleftarrowtail': '⬼',
+ \ '\nVtwoheadleftarrowtail': '⬽',
+ \ '\leftarrowx': '⬾',
+ \ '\leftcurvedarrow': '⬿',
+ \ '\equalleftarrow': '⭀',
+ \ '\bsimilarleftarrow': '⭁',
+ \ '\leftarrowbackapprox': '⭂',
+ \ '\rightarrowgtr': '⭃',
+ \ '\rightarrowsupset': '⭄',
+ \ '\LLeftarrow': '⭅',
+ \ '\RRightarrow': '⭆',
+ \ '\bsimilarrightarrow': '⭇',
+ \ '\rightarrowbackapprox': '⭈',
+ \ '\similarleftarrow': '⭉',
+ \ '\leftarrowapprox': '⭊',
+ \ '\leftarrowbsimilar': '⭋',
+ \ '\rightarrowbsimilar': '⭌',
+ \ '\medwhitestar': '⭐',
+ \ '\:star:': '⭐',
+ \ '\medblackstar': '⭑',
+ \ '\smwhitestar': '⭒',
+ \ '\rightpentagonblack': '⭓',
+ \ '\rightpentagon': '⭔',
+ \ '\:o:': '⭕',
+ \ '\_j': 'ⱼ',
+ \ '\^V': 'ⱽ',
+ \ '\postalmark': '〒',
+ \ '\:wavy_dash:': '〰',
+ \ '\:part_alternation_mark:': '〽',
+ \ '\:congratulations:': '㊗',
+ \ '\:secret:': '㊙',
+ \ '\mbfA': '𝐀',
+ \ '\mbfB': '𝐁',
+ \ '\mbfC': '𝐂',
+ \ '\mbfD': '𝐃',
+ \ '\mbfE': '𝐄',
+ \ '\mbfF': '𝐅',
+ \ '\mbfG': '𝐆',
+ \ '\mbfH': '𝐇',
+ \ '\mbfI': '𝐈',
+ \ '\mbfJ': '𝐉',
+ \ '\mbfK': '𝐊',
+ \ '\mbfL': '𝐋',
+ \ '\mbfM': '𝐌',
+ \ '\mbfN': '𝐍',
+ \ '\mbfO': '𝐎',
+ \ '\mbfP': '𝐏',
+ \ '\mbfQ': '𝐐',
+ \ '\mbfR': '𝐑',
+ \ '\mbfS': '𝐒',
+ \ '\mbfT': '𝐓',
+ \ '\mbfU': '𝐔',
+ \ '\mbfV': '𝐕',
+ \ '\mbfW': '𝐖',
+ \ '\mbfX': '𝐗',
+ \ '\mbfY': '𝐘',
+ \ '\mbfZ': '𝐙',
+ \ '\mbfa': '𝐚',
+ \ '\mbfb': '𝐛',
+ \ '\mbfc': '𝐜',
+ \ '\mbfd': '𝐝',
+ \ '\mbfe': '𝐞',
+ \ '\mbff': '𝐟',
+ \ '\mbfg': '𝐠',
+ \ '\mbfh': '𝐡',
+ \ '\mbfi': '𝐢',
+ \ '\mbfj': '𝐣',
+ \ '\mbfk': '𝐤',
+ \ '\mbfl': '𝐥',
+ \ '\mbfm': '𝐦',
+ \ '\mbfn': '𝐧',
+ \ '\mbfo': '𝐨',
+ \ '\mbfp': '𝐩',
+ \ '\mbfq': '𝐪',
+ \ '\mbfr': '𝐫',
+ \ '\mbfs': '𝐬',
+ \ '\mbft': '𝐭',
+ \ '\mbfu': '𝐮',
+ \ '\mbfv': '𝐯',
+ \ '\mbfw': '𝐰',
+ \ '\mbfx': '𝐱',
+ \ '\mbfy': '𝐲',
+ \ '\mbfz': '𝐳',
+ \ '\mitA': '𝐴',
+ \ '\mitB': '𝐵',
+ \ '\mitC': '𝐶',
+ \ '\mitD': '𝐷',
+ \ '\mitE': '𝐸',
+ \ '\mitF': '𝐹',
+ \ '\mitG': '𝐺',
+ \ '\mitH': '𝐻',
+ \ '\mitI': '𝐼',
+ \ '\mitJ': '𝐽',
+ \ '\mitK': '𝐾',
+ \ '\mitL': '𝐿',
+ \ '\mitM': '𝑀',
+ \ '\mitN': '𝑁',
+ \ '\mitO': '𝑂',
+ \ '\mitP': '𝑃',
+ \ '\mitQ': '𝑄',
+ \ '\mitR': '𝑅',
+ \ '\mitS': '𝑆',
+ \ '\mitT': '𝑇',
+ \ '\mitU': '𝑈',
+ \ '\mitV': '𝑉',
+ \ '\mitW': '𝑊',
+ \ '\mitX': '𝑋',
+ \ '\mitY': '𝑌',
+ \ '\mitZ': '𝑍',
+ \ '\mita': '𝑎',
+ \ '\mitb': '𝑏',
+ \ '\mitc': '𝑐',
+ \ '\mitd': '𝑑',
+ \ '\mite': '𝑒',
+ \ '\mitf': '𝑓',
+ \ '\mitg': '𝑔',
+ \ '\miti': '𝑖',
+ \ '\mitj': '𝑗',
+ \ '\mitk': '𝑘',
+ \ '\mitl': '𝑙',
+ \ '\mitm': '𝑚',
+ \ '\mitn': '𝑛',
+ \ '\mito': '𝑜',
+ \ '\mitp': '𝑝',
+ \ '\mitq': '𝑞',
+ \ '\mitr': '𝑟',
+ \ '\mits': '𝑠',
+ \ '\mitt': '𝑡',
+ \ '\mitu': '𝑢',
+ \ '\mitv': '𝑣',
+ \ '\mitw': '𝑤',
+ \ '\mitx': '𝑥',
+ \ '\mity': '𝑦',
+ \ '\mitz': '𝑧',
+ \ '\mbfitA': '𝑨',
+ \ '\mbfitB': '𝑩',
+ \ '\mbfitC': '𝑪',
+ \ '\mbfitD': '𝑫',
+ \ '\mbfitE': '𝑬',
+ \ '\mbfitF': '𝑭',
+ \ '\mbfitG': '𝑮',
+ \ '\mbfitH': '𝑯',
+ \ '\mbfitI': '𝑰',
+ \ '\mbfitJ': '𝑱',
+ \ '\mbfitK': '𝑲',
+ \ '\mbfitL': '𝑳',
+ \ '\mbfitM': '𝑴',
+ \ '\mbfitN': '𝑵',
+ \ '\mbfitO': '𝑶',
+ \ '\mbfitP': '𝑷',
+ \ '\mbfitQ': '𝑸',
+ \ '\mbfitR': '𝑹',
+ \ '\mbfitS': '𝑺',
+ \ '\mbfitT': '𝑻',
+ \ '\mbfitU': '𝑼',
+ \ '\mbfitV': '𝑽',
+ \ '\mbfitW': '𝑾',
+ \ '\mbfitX': '𝑿',
+ \ '\mbfitY': '𝒀',
+ \ '\mbfitZ': '𝒁',
+ \ '\mbfita': '𝒂',
+ \ '\mbfitb': '𝒃',
+ \ '\mbfitc': '𝒄',
+ \ '\mbfitd': '𝒅',
+ \ '\mbfite': '𝒆',
+ \ '\mbfitf': '𝒇',
+ \ '\mbfitg': '𝒈',
+ \ '\mbfith': '𝒉',
+ \ '\mbfiti': '𝒊',
+ \ '\mbfitj': '𝒋',
+ \ '\mbfitk': '𝒌',
+ \ '\mbfitl': '𝒍',
+ \ '\mbfitm': '𝒎',
+ \ '\mbfitn': '𝒏',
+ \ '\mbfito': '𝒐',
+ \ '\mbfitp': '𝒑',
+ \ '\mbfitq': '𝒒',
+ \ '\mbfitr': '𝒓',
+ \ '\mbfits': '𝒔',
+ \ '\mbfitt': '𝒕',
+ \ '\mbfitu': '𝒖',
+ \ '\mbfitv': '𝒗',
+ \ '\mbfitw': '𝒘',
+ \ '\mbfitx': '𝒙',
+ \ '\mbfity': '𝒚',
+ \ '\mbfitz': '𝒛',
+ \ '\mscrA': '𝒜',
+ \ '\mscrC': '𝒞',
+ \ '\mscrD': '𝒟',
+ \ '\mscrG': '𝒢',
+ \ '\mscrJ': '𝒥',
+ \ '\mscrK': '𝒦',
+ \ '\mscrN': '𝒩',
+ \ '\mscrO': '𝒪',
+ \ '\mscrP': '𝒫',
+ \ '\mscrQ': '𝒬',
+ \ '\mscrS': '𝒮',
+ \ '\mscrT': '𝒯',
+ \ '\mscrU': '𝒰',
+ \ '\mscrV': '𝒱',
+ \ '\mscrW': '𝒲',
+ \ '\mscrX': '𝒳',
+ \ '\mscrY': '𝒴',
+ \ '\mscrZ': '𝒵',
+ \ '\mscra': '𝒶',
+ \ '\mscrb': '𝒷',
+ \ '\mscrc': '𝒸',
+ \ '\mscrd': '𝒹',
+ \ '\mscrf': '𝒻',
+ \ '\mscrh': '𝒽',
+ \ '\mscri': '𝒾',
+ \ '\mscrj': '𝒿',
+ \ '\mscrk': '𝓀',
+ \ '\mscrl': '𝓁',
+ \ '\mscrm': '𝓂',
+ \ '\mscrn': '𝓃',
+ \ '\mscrp': '𝓅',
+ \ '\mscrq': '𝓆',
+ \ '\mscrr': '𝓇',
+ \ '\mscrs': '𝓈',
+ \ '\mscrt': '𝓉',
+ \ '\mscru': '𝓊',
+ \ '\mscrv': '𝓋',
+ \ '\mscrw': '𝓌',
+ \ '\mscrx': '𝓍',
+ \ '\mscry': '𝓎',
+ \ '\mscrz': '𝓏',
+ \ '\mbfscrA': '𝓐',
+ \ '\mbfscrB': '𝓑',
+ \ '\mbfscrC': '𝓒',
+ \ '\mbfscrD': '𝓓',
+ \ '\mbfscrE': '𝓔',
+ \ '\mbfscrF': '𝓕',
+ \ '\mbfscrG': '𝓖',
+ \ '\mbfscrH': '𝓗',
+ \ '\mbfscrI': '𝓘',
+ \ '\mbfscrJ': '𝓙',
+ \ '\mbfscrK': '𝓚',
+ \ '\mbfscrL': '𝓛',
+ \ '\mbfscrM': '𝓜',
+ \ '\mbfscrN': '𝓝',
+ \ '\mbfscrO': '𝓞',
+ \ '\mbfscrP': '𝓟',
+ \ '\mbfscrQ': '𝓠',
+ \ '\mbfscrR': '𝓡',
+ \ '\mbfscrS': '𝓢',
+ \ '\mbfscrT': '𝓣',
+ \ '\mbfscrU': '𝓤',
+ \ '\mbfscrV': '𝓥',
+ \ '\mbfscrW': '𝓦',
+ \ '\mbfscrX': '𝓧',
+ \ '\mbfscrY': '𝓨',
+ \ '\mbfscrZ': '𝓩',
+ \ '\mbfscra': '𝓪',
+ \ '\mbfscrb': '𝓫',
+ \ '\mbfscrc': '𝓬',
+ \ '\mbfscrd': '𝓭',
+ \ '\mbfscre': '𝓮',
+ \ '\mbfscrf': '𝓯',
+ \ '\mbfscrg': '𝓰',
+ \ '\mbfscrh': '𝓱',
+ \ '\mbfscri': '𝓲',
+ \ '\mbfscrj': '𝓳',
+ \ '\mbfscrk': '𝓴',
+ \ '\mbfscrl': '𝓵',
+ \ '\mbfscrm': '𝓶',
+ \ '\mbfscrn': '𝓷',
+ \ '\mbfscro': '𝓸',
+ \ '\mbfscrp': '𝓹',
+ \ '\mbfscrq': '𝓺',
+ \ '\mbfscrr': '𝓻',
+ \ '\mbfscrs': '𝓼',
+ \ '\mbfscrt': '𝓽',
+ \ '\mbfscru': '𝓾',
+ \ '\mbfscrv': '𝓿',
+ \ '\mbfscrw': '𝔀',
+ \ '\mbfscrx': '𝔁',
+ \ '\mbfscry': '𝔂',
+ \ '\mbfscrz': '𝔃',
+ \ '\mfrakA': '𝔄',
+ \ '\mfrakB': '𝔅',
+ \ '\mfrakD': '𝔇',
+ \ '\mfrakE': '𝔈',
+ \ '\mfrakF': '𝔉',
+ \ '\mfrakG': '𝔊',
+ \ '\mfrakJ': '𝔍',
+ \ '\mfrakK': '𝔎',
+ \ '\mfrakL': '𝔏',
+ \ '\mfrakM': '𝔐',
+ \ '\mfrakN': '𝔑',
+ \ '\mfrakO': '𝔒',
+ \ '\mfrakP': '𝔓',
+ \ '\mfrakQ': '𝔔',
+ \ '\mfrakS': '𝔖',
+ \ '\mfrakT': '𝔗',
+ \ '\mfrakU': '𝔘',
+ \ '\mfrakV': '𝔙',
+ \ '\mfrakW': '𝔚',
+ \ '\mfrakX': '𝔛',
+ \ '\mfrakY': '𝔜',
+ \ '\mfraka': '𝔞',
+ \ '\mfrakb': '𝔟',
+ \ '\mfrakc': '𝔠',
+ \ '\mfrakd': '𝔡',
+ \ '\mfrake': '𝔢',
+ \ '\mfrakf': '𝔣',
+ \ '\mfrakg': '𝔤',
+ \ '\mfrakh': '𝔥',
+ \ '\mfraki': '𝔦',
+ \ '\mfrakj': '𝔧',
+ \ '\mfrakk': '𝔨',
+ \ '\mfrakl': '𝔩',
+ \ '\mfrakm': '𝔪',
+ \ '\mfrakn': '𝔫',
+ \ '\mfrako': '𝔬',
+ \ '\mfrakp': '𝔭',
+ \ '\mfrakq': '𝔮',
+ \ '\mfrakr': '𝔯',
+ \ '\mfraks': '𝔰',
+ \ '\mfrakt': '𝔱',
+ \ '\mfraku': '𝔲',
+ \ '\mfrakv': '𝔳',
+ \ '\mfrakw': '𝔴',
+ \ '\mfrakx': '𝔵',
+ \ '\mfraky': '𝔶',
+ \ '\mfrakz': '𝔷',
+ \ '\BbbA': '𝔸',
+ \ '\BbbB': '𝔹',
+ \ '\BbbD': '𝔻',
+ \ '\BbbE': '𝔼',
+ \ '\BbbF': '𝔽',
+ \ '\BbbG': '𝔾',
+ \ '\BbbI': '𝕀',
+ \ '\BbbJ': '𝕁',
+ \ '\BbbK': '𝕂',
+ \ '\BbbL': '𝕃',
+ \ '\BbbM': '𝕄',
+ \ '\BbbO': '𝕆',
+ \ '\BbbS': '𝕊',
+ \ '\BbbT': '𝕋',
+ \ '\BbbU': '𝕌',
+ \ '\BbbV': '𝕍',
+ \ '\BbbW': '𝕎',
+ \ '\BbbX': '𝕏',
+ \ '\BbbY': '𝕐',
+ \ '\Bbba': '𝕒',
+ \ '\Bbbb': '𝕓',
+ \ '\Bbbc': '𝕔',
+ \ '\Bbbd': '𝕕',
+ \ '\Bbbe': '𝕖',
+ \ '\Bbbf': '𝕗',
+ \ '\Bbbg': '𝕘',
+ \ '\Bbbh': '𝕙',
+ \ '\Bbbi': '𝕚',
+ \ '\Bbbj': '𝕛',
+ \ '\Bbbk': '𝕜',
+ \ '\Bbbl': '𝕝',
+ \ '\Bbbm': '𝕞',
+ \ '\Bbbn': '𝕟',
+ \ '\Bbbo': '𝕠',
+ \ '\Bbbp': '𝕡',
+ \ '\Bbbq': '𝕢',
+ \ '\Bbbr': '𝕣',
+ \ '\Bbbs': '𝕤',
+ \ '\Bbbt': '𝕥',
+ \ '\Bbbu': '𝕦',
+ \ '\Bbbv': '𝕧',
+ \ '\Bbbw': '𝕨',
+ \ '\Bbbx': '𝕩',
+ \ '\Bbby': '𝕪',
+ \ '\Bbbz': '𝕫',
+ \ '\mbffrakA': '𝕬',
+ \ '\mbffrakB': '𝕭',
+ \ '\mbffrakC': '𝕮',
+ \ '\mbffrakD': '𝕯',
+ \ '\mbffrakE': '𝕰',
+ \ '\mbffrakF': '𝕱',
+ \ '\mbffrakG': '𝕲',
+ \ '\mbffrakH': '𝕳',
+ \ '\mbffrakI': '𝕴',
+ \ '\mbffrakJ': '𝕵',
+ \ '\mbffrakK': '𝕶',
+ \ '\mbffrakL': '𝕷',
+ \ '\mbffrakM': '𝕸',
+ \ '\mbffrakN': '𝕹',
+ \ '\mbffrakO': '𝕺',
+ \ '\mbffrakP': '𝕻',
+ \ '\mbffrakQ': '𝕼',
+ \ '\mbffrakR': '𝕽',
+ \ '\mbffrakS': '𝕾',
+ \ '\mbffrakT': '𝕿',
+ \ '\mbffrakU': '𝖀',
+ \ '\mbffrakV': '𝖁',
+ \ '\mbffrakW': '𝖂',
+ \ '\mbffrakX': '𝖃',
+ \ '\mbffrakY': '𝖄',
+ \ '\mbffrakZ': '𝖅',
+ \ '\mbffraka': '𝖆',
+ \ '\mbffrakb': '𝖇',
+ \ '\mbffrakc': '𝖈',
+ \ '\mbffrakd': '𝖉',
+ \ '\mbffrake': '𝖊',
+ \ '\mbffrakf': '𝖋',
+ \ '\mbffrakg': '𝖌',
+ \ '\mbffrakh': '𝖍',
+ \ '\mbffraki': '𝖎',
+ \ '\mbffrakj': '𝖏',
+ \ '\mbffrakk': '𝖐',
+ \ '\mbffrakl': '𝖑',
+ \ '\mbffrakm': '𝖒',
+ \ '\mbffrakn': '𝖓',
+ \ '\mbffrako': '𝖔',
+ \ '\mbffrakp': '𝖕',
+ \ '\mbffrakq': '𝖖',
+ \ '\mbffrakr': '𝖗',
+ \ '\mbffraks': '𝖘',
+ \ '\mbffrakt': '𝖙',
+ \ '\mbffraku': '𝖚',
+ \ '\mbffrakv': '𝖛',
+ \ '\mbffrakw': '𝖜',
+ \ '\mbffrakx': '𝖝',
+ \ '\mbffraky': '𝖞',
+ \ '\mbffrakz': '𝖟',
+ \ '\msansA': '𝖠',
+ \ '\msansB': '𝖡',
+ \ '\msansC': '𝖢',
+ \ '\msansD': '𝖣',
+ \ '\msansE': '𝖤',
+ \ '\msansF': '𝖥',
+ \ '\msansG': '𝖦',
+ \ '\msansH': '𝖧',
+ \ '\msansI': '𝖨',
+ \ '\msansJ': '𝖩',
+ \ '\msansK': '𝖪',
+ \ '\msansL': '𝖫',
+ \ '\msansM': '𝖬',
+ \ '\msansN': '𝖭',
+ \ '\msansO': '𝖮',
+ \ '\msansP': '𝖯',
+ \ '\msansQ': '𝖰',
+ \ '\msansR': '𝖱',
+ \ '\msansS': '𝖲',
+ \ '\msansT': '𝖳',
+ \ '\msansU': '𝖴',
+ \ '\msansV': '𝖵',
+ \ '\msansW': '𝖶',
+ \ '\msansX': '𝖷',
+ \ '\msansY': '𝖸',
+ \ '\msansZ': '𝖹',
+ \ '\msansa': '𝖺',
+ \ '\msansb': '𝖻',
+ \ '\msansc': '𝖼',
+ \ '\msansd': '𝖽',
+ \ '\msanse': '𝖾',
+ \ '\msansf': '𝖿',
+ \ '\msansg': '𝗀',
+ \ '\msansh': '𝗁',
+ \ '\msansi': '𝗂',
+ \ '\msansj': '𝗃',
+ \ '\msansk': '𝗄',
+ \ '\msansl': '𝗅',
+ \ '\msansm': '𝗆',
+ \ '\msansn': '𝗇',
+ \ '\msanso': '𝗈',
+ \ '\msansp': '𝗉',
+ \ '\msansq': '𝗊',
+ \ '\msansr': '𝗋',
+ \ '\msanss': '𝗌',
+ \ '\msanst': '𝗍',
+ \ '\msansu': '𝗎',
+ \ '\msansv': '𝗏',
+ \ '\msansw': '𝗐',
+ \ '\msansx': '𝗑',
+ \ '\msansy': '𝗒',
+ \ '\msansz': '𝗓',
+ \ '\mbfsansA': '𝗔',
+ \ '\mbfsansB': '𝗕',
+ \ '\mbfsansC': '𝗖',
+ \ '\mbfsansD': '𝗗',
+ \ '\mbfsansE': '𝗘',
+ \ '\mbfsansF': '𝗙',
+ \ '\mbfsansG': '𝗚',
+ \ '\mbfsansH': '𝗛',
+ \ '\mbfsansI': '𝗜',
+ \ '\mbfsansJ': '𝗝',
+ \ '\mbfsansK': '𝗞',
+ \ '\mbfsansL': '𝗟',
+ \ '\mbfsansM': '𝗠',
+ \ '\mbfsansN': '𝗡',
+ \ '\mbfsansO': '𝗢',
+ \ '\mbfsansP': '𝗣',
+ \ '\mbfsansQ': '𝗤',
+ \ '\mbfsansR': '𝗥',
+ \ '\mbfsansS': '𝗦',
+ \ '\mbfsansT': '𝗧',
+ \ '\mbfsansU': '𝗨',
+ \ '\mbfsansV': '𝗩',
+ \ '\mbfsansW': '𝗪',
+ \ '\mbfsansX': '𝗫',
+ \ '\mbfsansY': '𝗬',
+ \ '\mbfsansZ': '𝗭',
+ \ '\mbfsansa': '𝗮',
+ \ '\mbfsansb': '𝗯',
+ \ '\mbfsansc': '𝗰',
+ \ '\mbfsansd': '𝗱',
+ \ '\mbfsanse': '𝗲',
+ \ '\mbfsansf': '𝗳',
+ \ '\mbfsansg': '𝗴',
+ \ '\mbfsansh': '𝗵',
+ \ '\mbfsansi': '𝗶',
+ \ '\mbfsansj': '𝗷',
+ \ '\mbfsansk': '𝗸',
+ \ '\mbfsansl': '𝗹',
+ \ '\mbfsansm': '𝗺',
+ \ '\mbfsansn': '𝗻',
+ \ '\mbfsanso': '𝗼',
+ \ '\mbfsansp': '𝗽',
+ \ '\mbfsansq': '𝗾',
+ \ '\mbfsansr': '𝗿',
+ \ '\mbfsanss': '𝘀',
+ \ '\mbfsanst': '𝘁',
+ \ '\mbfsansu': '𝘂',
+ \ '\mbfsansv': '𝘃',
+ \ '\mbfsansw': '𝘄',
+ \ '\mbfsansx': '𝘅',
+ \ '\mbfsansy': '𝘆',
+ \ '\mbfsansz': '𝘇',
+ \ '\mitsansA': '𝘈',
+ \ '\mitsansB': '𝘉',
+ \ '\mitsansC': '𝘊',
+ \ '\mitsansD': '𝘋',
+ \ '\mitsansE': '𝘌',
+ \ '\mitsansF': '𝘍',
+ \ '\mitsansG': '𝘎',
+ \ '\mitsansH': '𝘏',
+ \ '\mitsansI': '𝘐',
+ \ '\mitsansJ': '𝘑',
+ \ '\mitsansK': '𝘒',
+ \ '\mitsansL': '𝘓',
+ \ '\mitsansM': '𝘔',
+ \ '\mitsansN': '𝘕',
+ \ '\mitsansO': '𝘖',
+ \ '\mitsansP': '𝘗',
+ \ '\mitsansQ': '𝘘',
+ \ '\mitsansR': '𝘙',
+ \ '\mitsansS': '𝘚',
+ \ '\mitsansT': '𝘛',
+ \ '\mitsansU': '𝘜',
+ \ '\mitsansV': '𝘝',
+ \ '\mitsansW': '𝘞',
+ \ '\mitsansX': '𝘟',
+ \ '\mitsansY': '𝘠',
+ \ '\mitsansZ': '𝘡',
+ \ '\mitsansa': '𝘢',
+ \ '\mitsansb': '𝘣',
+ \ '\mitsansc': '𝘤',
+ \ '\mitsansd': '𝘥',
+ \ '\mitsanse': '𝘦',
+ \ '\mitsansf': '𝘧',
+ \ '\mitsansg': '𝘨',
+ \ '\mitsansh': '𝘩',
+ \ '\mitsansi': '𝘪',
+ \ '\mitsansj': '𝘫',
+ \ '\mitsansk': '𝘬',
+ \ '\mitsansl': '𝘭',
+ \ '\mitsansm': '𝘮',
+ \ '\mitsansn': '𝘯',
+ \ '\mitsanso': '𝘰',
+ \ '\mitsansp': '𝘱',
+ \ '\mitsansq': '𝘲',
+ \ '\mitsansr': '𝘳',
+ \ '\mitsanss': '𝘴',
+ \ '\mitsanst': '𝘵',
+ \ '\mitsansu': '𝘶',
+ \ '\mitsansv': '𝘷',
+ \ '\mitsansw': '𝘸',
+ \ '\mitsansx': '𝘹',
+ \ '\mitsansy': '𝘺',
+ \ '\mitsansz': '𝘻',
+ \ '\mbfitsansA': '𝘼',
+ \ '\mbfitsansB': '𝘽',
+ \ '\mbfitsansC': '𝘾',
+ \ '\mbfitsansD': '𝘿',
+ \ '\mbfitsansE': '𝙀',
+ \ '\mbfitsansF': '𝙁',
+ \ '\mbfitsansG': '𝙂',
+ \ '\mbfitsansH': '𝙃',
+ \ '\mbfitsansI': '𝙄',
+ \ '\mbfitsansJ': '𝙅',
+ \ '\mbfitsansK': '𝙆',
+ \ '\mbfitsansL': '𝙇',
+ \ '\mbfitsansM': '𝙈',
+ \ '\mbfitsansN': '𝙉',
+ \ '\mbfitsansO': '𝙊',
+ \ '\mbfitsansP': '𝙋',
+ \ '\mbfitsansQ': '𝙌',
+ \ '\mbfitsansR': '𝙍',
+ \ '\mbfitsansS': '𝙎',
+ \ '\mbfitsansT': '𝙏',
+ \ '\mbfitsansU': '𝙐',
+ \ '\mbfitsansV': '𝙑',
+ \ '\mbfitsansW': '𝙒',
+ \ '\mbfitsansX': '𝙓',
+ \ '\mbfitsansY': '𝙔',
+ \ '\mbfitsansZ': '𝙕',
+ \ '\mbfitsansa': '𝙖',
+ \ '\mbfitsansb': '𝙗',
+ \ '\mbfitsansc': '𝙘',
+ \ '\mbfitsansd': '𝙙',
+ \ '\mbfitsanse': '𝙚',
+ \ '\mbfitsansf': '𝙛',
+ \ '\mbfitsansg': '𝙜',
+ \ '\mbfitsansh': '𝙝',
+ \ '\mbfitsansi': '𝙞',
+ \ '\mbfitsansj': '𝙟',
+ \ '\mbfitsansk': '𝙠',
+ \ '\mbfitsansl': '𝙡',
+ \ '\mbfitsansm': '𝙢',
+ \ '\mbfitsansn': '𝙣',
+ \ '\mbfitsanso': '𝙤',
+ \ '\mbfitsansp': '𝙥',
+ \ '\mbfitsansq': '𝙦',
+ \ '\mbfitsansr': '𝙧',
+ \ '\mbfitsanss': '𝙨',
+ \ '\mbfitsanst': '𝙩',
+ \ '\mbfitsansu': '𝙪',
+ \ '\mbfitsansv': '𝙫',
+ \ '\mbfitsansw': '𝙬',
+ \ '\mbfitsansx': '𝙭',
+ \ '\mbfitsansy': '𝙮',
+ \ '\mbfitsansz': '𝙯',
+ \ '\mttA': '𝙰',
+ \ '\mttB': '𝙱',
+ \ '\mttC': '𝙲',
+ \ '\mttD': '𝙳',
+ \ '\mttE': '𝙴',
+ \ '\mttF': '𝙵',
+ \ '\mttG': '𝙶',
+ \ '\mttH': '𝙷',
+ \ '\mttI': '𝙸',
+ \ '\mttJ': '𝙹',
+ \ '\mttK': '𝙺',
+ \ '\mttL': '𝙻',
+ \ '\mttM': '𝙼',
+ \ '\mttN': '𝙽',
+ \ '\mttO': '𝙾',
+ \ '\mttP': '𝙿',
+ \ '\mttQ': '𝚀',
+ \ '\mttR': '𝚁',
+ \ '\mttS': '𝚂',
+ \ '\mttT': '𝚃',
+ \ '\mttU': '𝚄',
+ \ '\mttV': '𝚅',
+ \ '\mttW': '𝚆',
+ \ '\mttX': '𝚇',
+ \ '\mttY': '𝚈',
+ \ '\mttZ': '𝚉',
+ \ '\mtta': '𝚊',
+ \ '\mttb': '𝚋',
+ \ '\mttc': '𝚌',
+ \ '\mttd': '𝚍',
+ \ '\mtte': '𝚎',
+ \ '\mttf': '𝚏',
+ \ '\mttg': '𝚐',
+ \ '\mtth': '𝚑',
+ \ '\mtti': '𝚒',
+ \ '\mttj': '𝚓',
+ \ '\mttk': '𝚔',
+ \ '\mttl': '𝚕',
+ \ '\mttm': '𝚖',
+ \ '\mttn': '𝚗',
+ \ '\mtto': '𝚘',
+ \ '\mttp': '𝚙',
+ \ '\mttq': '𝚚',
+ \ '\mttr': '𝚛',
+ \ '\mtts': '𝚜',
+ \ '\mttt': '𝚝',
+ \ '\mttu': '𝚞',
+ \ '\mttv': '𝚟',
+ \ '\mttw': '𝚠',
+ \ '\mttx': '𝚡',
+ \ '\mtty': '𝚢',
+ \ '\mttz': '𝚣',
+ \ '\imath': '𝚤',
+ \ '\jmath': '𝚥',
+ \ '\mbfAlpha': '𝚨',
+ \ '\mbfBeta': '𝚩',
+ \ '\mbfGamma': '𝚪',
+ \ '\mbfDelta': '𝚫',
+ \ '\mbfEpsilon': '𝚬',
+ \ '\mbfZeta': '𝚭',
+ \ '\mbfEta': '𝚮',
+ \ '\mbfTheta': '𝚯',
+ \ '\mbfIota': '𝚰',
+ \ '\mbfKappa': '𝚱',
+ \ '\mbfLambda': '𝚲',
+ \ '\mbfMu': '𝚳',
+ \ '\mbfNu': '𝚴',
+ \ '\mbfXi': '𝚵',
+ \ '\mbfOmicron': '𝚶',
+ \ '\mbfPi': '𝚷',
+ \ '\mbfRho': '𝚸',
+ \ '\mbfvarTheta': '𝚹',
+ \ '\mbfSigma': '𝚺',
+ \ '\mbfTau': '𝚻',
+ \ '\mbfUpsilon': '𝚼',
+ \ '\mbfPhi': '𝚽',
+ \ '\mbfChi': '𝚾',
+ \ '\mbfPsi': '𝚿',
+ \ '\mbfOmega': '𝛀',
+ \ '\mbfnabla': '𝛁',
+ \ '\mbfalpha': '𝛂',
+ \ '\mbfbeta': '𝛃',
+ \ '\mbfgamma': '𝛄',
+ \ '\mbfdelta': '𝛅',
+ \ '\mbfepsilon': '𝛆',
+ \ '\mbfzeta': '𝛇',
+ \ '\mbfeta': '𝛈',
+ \ '\mbftheta': '𝛉',
+ \ '\mbfiota': '𝛊',
+ \ '\mbfkappa': '𝛋',
+ \ '\mbflambda': '𝛌',
+ \ '\mbfmu': '𝛍',
+ \ '\mbfnu': '𝛎',
+ \ '\mbfxi': '𝛏',
+ \ '\mbfomicron': '𝛐',
+ \ '\mbfpi': '𝛑',
+ \ '\mbfrho': '𝛒',
+ \ '\mbfvarsigma': '𝛓',
+ \ '\mbfsigma': '𝛔',
+ \ '\mbftau': '𝛕',
+ \ '\mbfupsilon': '𝛖',
+ \ '\mbfvarphi': '𝛗',
+ \ '\mbfchi': '𝛘',
+ \ '\mbfpsi': '𝛙',
+ \ '\mbfomega': '𝛚',
+ \ '\mbfpartial': '𝛛',
+ \ '\mbfvarepsilon': '𝛜',
+ \ '\mbfvartheta': '𝛝',
+ \ '\mbfvarkappa': '𝛞',
+ \ '\mbfphi': '𝛟',
+ \ '\mbfvarrho': '𝛠',
+ \ '\mbfvarpi': '𝛡',
+ \ '\mitAlpha': '𝛢',
+ \ '\mitBeta': '𝛣',
+ \ '\mitGamma': '𝛤',
+ \ '\mitDelta': '𝛥',
+ \ '\mitEpsilon': '𝛦',
+ \ '\mitZeta': '𝛧',
+ \ '\mitEta': '𝛨',
+ \ '\mitTheta': '𝛩',
+ \ '\mitIota': '𝛪',
+ \ '\mitKappa': '𝛫',
+ \ '\mitLambda': '𝛬',
+ \ '\mitMu': '𝛭',
+ \ '\mitNu': '𝛮',
+ \ '\mitXi': '𝛯',
+ \ '\mitOmicron': '𝛰',
+ \ '\mitPi': '𝛱',
+ \ '\mitRho': '𝛲',
+ \ '\mitvarTheta': '𝛳',
+ \ '\mitSigma': '𝛴',
+ \ '\mitTau': '𝛵',
+ \ '\mitUpsilon': '𝛶',
+ \ '\mitPhi': '𝛷',
+ \ '\mitChi': '𝛸',
+ \ '\mitPsi': '𝛹',
+ \ '\mitOmega': '𝛺',
+ \ '\mitnabla': '𝛻',
+ \ '\mitalpha': '𝛼',
+ \ '\mitbeta': '𝛽',
+ \ '\mitgamma': '𝛾',
+ \ '\mitdelta': '𝛿',
+ \ '\mitepsilon': '𝜀',
+ \ '\mitzeta': '𝜁',
+ \ '\miteta': '𝜂',
+ \ '\mittheta': '𝜃',
+ \ '\mitiota': '𝜄',
+ \ '\mitkappa': '𝜅',
+ \ '\mitlambda': '𝜆',
+ \ '\mitmu': '𝜇',
+ \ '\mitnu': '𝜈',
+ \ '\mitxi': '𝜉',
+ \ '\mitomicron': '𝜊',
+ \ '\mitpi': '𝜋',
+ \ '\mitrho': '𝜌',
+ \ '\mitvarsigma': '𝜍',
+ \ '\mitsigma': '𝜎',
+ \ '\mittau': '𝜏',
+ \ '\mitupsilon': '𝜐',
+ \ '\mitphi': '𝜑',
+ \ '\mitchi': '𝜒',
+ \ '\mitpsi': '𝜓',
+ \ '\mitomega': '𝜔',
+ \ '\mitpartial': '𝜕',
+ \ '\mitvarepsilon': '𝜖',
+ \ '\mitvartheta': '𝜗',
+ \ '\mitvarkappa': '𝜘',
+ \ '\mitvarphi': '𝜙',
+ \ '\mitvarrho': '𝜚',
+ \ '\mitvarpi': '𝜛',
+ \ '\mbfitAlpha': '𝜜',
+ \ '\mbfitBeta': '𝜝',
+ \ '\mbfitGamma': '𝜞',
+ \ '\mbfitDelta': '𝜟',
+ \ '\mbfitEpsilon': '𝜠',
+ \ '\mbfitZeta': '𝜡',
+ \ '\mbfitEta': '𝜢',
+ \ '\mbfitTheta': '𝜣',
+ \ '\mbfitIota': '𝜤',
+ \ '\mbfitKappa': '𝜥',
+ \ '\mbfitLambda': '𝜦',
+ \ '\mbfitMu': '𝜧',
+ \ '\mbfitNu': '𝜨',
+ \ '\mbfitXi': '𝜩',
+ \ '\mbfitOmicron': '𝜪',
+ \ '\mbfitPi': '𝜫',
+ \ '\mbfitRho': '𝜬',
+ \ '\mbfitvarTheta': '𝜭',
+ \ '\mbfitSigma': '𝜮',
+ \ '\mbfitTau': '𝜯',
+ \ '\mbfitUpsilon': '𝜰',
+ \ '\mbfitPhi': '𝜱',
+ \ '\mbfitChi': '𝜲',
+ \ '\mbfitPsi': '𝜳',
+ \ '\mbfitOmega': '𝜴',
+ \ '\mbfitnabla': '𝜵',
+ \ '\mbfitalpha': '𝜶',
+ \ '\mbfitbeta': '𝜷',
+ \ '\mbfitgamma': '𝜸',
+ \ '\mbfitdelta': '𝜹',
+ \ '\mbfitepsilon': '𝜺',
+ \ '\mbfitzeta': '𝜻',
+ \ '\mbfiteta': '𝜼',
+ \ '\mbfittheta': '𝜽',
+ \ '\mbfitiota': '𝜾',
+ \ '\mbfitkappa': '𝜿',
+ \ '\mbfitlambda': '𝝀',
+ \ '\mbfitmu': '𝝁',
+ \ '\mbfitnu': '𝝂',
+ \ '\mbfitxi': '𝝃',
+ \ '\mbfitomicron': '𝝄',
+ \ '\mbfitpi': '𝝅',
+ \ '\mbfitrho': '𝝆',
+ \ '\mbfitvarsigma': '𝝇',
+ \ '\mbfitsigma': '𝝈',
+ \ '\mbfittau': '𝝉',
+ \ '\mbfitupsilon': '𝝊',
+ \ '\mbfitphi': '𝝋',
+ \ '\mbfitchi': '𝝌',
+ \ '\mbfitpsi': '𝝍',
+ \ '\mbfitomega': '𝝎',
+ \ '\mbfitpartial': '𝝏',
+ \ '\mbfitvarepsilon': '𝝐',
+ \ '\mbfitvartheta': '𝝑',
+ \ '\mbfitvarkappa': '𝝒',
+ \ '\mbfitvarphi': '𝝓',
+ \ '\mbfitvarrho': '𝝔',
+ \ '\mbfitvarpi': '𝝕',
+ \ '\mbfsansAlpha': '𝝖',
+ \ '\mbfsansBeta': '𝝗',
+ \ '\mbfsansGamma': '𝝘',
+ \ '\mbfsansDelta': '𝝙',
+ \ '\mbfsansEpsilon': '𝝚',
+ \ '\mbfsansZeta': '𝝛',
+ \ '\mbfsansEta': '𝝜',
+ \ '\mbfsansTheta': '𝝝',
+ \ '\mbfsansIota': '𝝞',
+ \ '\mbfsansKappa': '𝝟',
+ \ '\mbfsansLambda': '𝝠',
+ \ '\mbfsansMu': '𝝡',
+ \ '\mbfsansNu': '𝝢',
+ \ '\mbfsansXi': '𝝣',
+ \ '\mbfsansOmicron': '𝝤',
+ \ '\mbfsansPi': '𝝥',
+ \ '\mbfsansRho': '𝝦',
+ \ '\mbfsansvarTheta': '𝝧',
+ \ '\mbfsansSigma': '𝝨',
+ \ '\mbfsansTau': '𝝩',
+ \ '\mbfsansUpsilon': '𝝪',
+ \ '\mbfsansPhi': '𝝫',
+ \ '\mbfsansChi': '𝝬',
+ \ '\mbfsansPsi': '𝝭',
+ \ '\mbfsansOmega': '𝝮',
+ \ '\mbfsansnabla': '𝝯',
+ \ '\mbfsansalpha': '𝝰',
+ \ '\mbfsansbeta': '𝝱',
+ \ '\mbfsansgamma': '𝝲',
+ \ '\mbfsansdelta': '𝝳',
+ \ '\mbfsansepsilon': '𝝴',
+ \ '\mbfsanszeta': '𝝵',
+ \ '\mbfsanseta': '𝝶',
+ \ '\mbfsanstheta': '𝝷',
+ \ '\mbfsansiota': '𝝸',
+ \ '\mbfsanskappa': '𝝹',
+ \ '\mbfsanslambda': '𝝺',
+ \ '\mbfsansmu': '𝝻',
+ \ '\mbfsansnu': '𝝼',
+ \ '\mbfsansxi': '𝝽',
+ \ '\mbfsansomicron': '𝝾',
+ \ '\mbfsanspi': '𝝿',
+ \ '\mbfsansrho': '𝞀',
+ \ '\mbfsansvarsigma': '𝞁',
+ \ '\mbfsanssigma': '𝞂',
+ \ '\mbfsanstau': '𝞃',
+ \ '\mbfsansupsilon': '𝞄',
+ \ '\mbfsansphi': '𝞅',
+ \ '\mbfsanschi': '𝞆',
+ \ '\mbfsanspsi': '𝞇',
+ \ '\mbfsansomega': '𝞈',
+ \ '\mbfsanspartial': '𝞉',
+ \ '\mbfsansvarepsilon': '𝞊',
+ \ '\mbfsansvartheta': '𝞋',
+ \ '\mbfsansvarkappa': '𝞌',
+ \ '\mbfsansvarphi': '𝞍',
+ \ '\mbfsansvarrho': '𝞎',
+ \ '\mbfsansvarpi': '𝞏',
+ \ '\mbfitsansAlpha': '𝞐',
+ \ '\mbfitsansBeta': '𝞑',
+ \ '\mbfitsansGamma': '𝞒',
+ \ '\mbfitsansDelta': '𝞓',
+ \ '\mbfitsansEpsilon': '𝞔',
+ \ '\mbfitsansZeta': '𝞕',
+ \ '\mbfitsansEta': '𝞖',
+ \ '\mbfitsansTheta': '𝞗',
+ \ '\mbfitsansIota': '𝞘',
+ \ '\mbfitsansKappa': '𝞙',
+ \ '\mbfitsansLambda': '𝞚',
+ \ '\mbfitsansMu': '𝞛',
+ \ '\mbfitsansNu': '𝞜',
+ \ '\mbfitsansXi': '𝞝',
+ \ '\mbfitsansOmicron': '𝞞',
+ \ '\mbfitsansPi': '𝞟',
+ \ '\mbfitsansRho': '𝞠',
+ \ '\mbfitsansvarTheta': '𝞡',
+ \ '\mbfitsansSigma': '𝞢',
+ \ '\mbfitsansTau': '𝞣',
+ \ '\mbfitsansUpsilon': '𝞤',
+ \ '\mbfitsansPhi': '𝞥',
+ \ '\mbfitsansChi': '𝞦',
+ \ '\mbfitsansPsi': '𝞧',
+ \ '\mbfitsansOmega': '𝞨',
+ \ '\mbfitsansnabla': '𝞩',
+ \ '\mbfitsansalpha': '𝞪',
+ \ '\mbfitsansbeta': '𝞫',
+ \ '\mbfitsansgamma': '𝞬',
+ \ '\mbfitsansdelta': '𝞭',
+ \ '\mbfitsansepsilon': '𝞮',
+ \ '\mbfitsanszeta': '𝞯',
+ \ '\mbfitsanseta': '𝞰',
+ \ '\mbfitsanstheta': '𝞱',
+ \ '\mbfitsansiota': '𝞲',
+ \ '\mbfitsanskappa': '𝞳',
+ \ '\mbfitsanslambda': '𝞴',
+ \ '\mbfitsansmu': '𝞵',
+ \ '\mbfitsansnu': '𝞶',
+ \ '\mbfitsansxi': '𝞷',
+ \ '\mbfitsansomicron': '𝞸',
+ \ '\mbfitsanspi': '𝞹',
+ \ '\mbfitsansrho': '𝞺',
+ \ '\mbfitsansvarsigma': '𝞻',
+ \ '\mbfitsanssigma': '𝞼',
+ \ '\mbfitsanstau': '𝞽',
+ \ '\mbfitsansupsilon': '𝞾',
+ \ '\mbfitsansphi': '𝞿',
+ \ '\mbfitsanschi': '𝟀',
+ \ '\mbfitsanspsi': '𝟁',
+ \ '\mbfitsansomega': '𝟂',
+ \ '\mbfitsanspartial': '𝟃',
+ \ '\mbfitsansvarepsilon': '𝟄',
+ \ '\mbfitsansvartheta': '𝟅',
+ \ '\mbfitsansvarkappa': '𝟆',
+ \ '\mbfitsansvarphi': '𝟇',
+ \ '\mbfitsansvarrho': '𝟈',
+ \ '\mbfitsansvarpi': '𝟉',
+ \ '\mbfDigamma': '𝟊',
+ \ '\mbfdigamma': '𝟋',
+ \ '\mbfzero': '𝟎',
+ \ '\mbfone': '𝟏',
+ \ '\mbftwo': '𝟐',
+ \ '\mbfthree': '𝟑',
+ \ '\mbffour': '𝟒',
+ \ '\mbffive': '𝟓',
+ \ '\mbfsix': '𝟔',
+ \ '\mbfseven': '𝟕',
+ \ '\mbfeight': '𝟖',
+ \ '\mbfnine': '𝟗',
+ \ '\Bbbzero': '𝟘',
+ \ '\Bbbone': '𝟙',
+ \ '\Bbbtwo': '𝟚',
+ \ '\Bbbthree': '𝟛',
+ \ '\Bbbfour': '𝟜',
+ \ '\Bbbfive': '𝟝',
+ \ '\Bbbsix': '𝟞',
+ \ '\Bbbseven': '𝟟',
+ \ '\Bbbeight': '𝟠',
+ \ '\Bbbnine': '𝟡',
+ \ '\msanszero': '𝟢',
+ \ '\msansone': '𝟣',
+ \ '\msanstwo': '𝟤',
+ \ '\msansthree': '𝟥',
+ \ '\msansfour': '𝟦',
+ \ '\msansfive': '𝟧',
+ \ '\msanssix': '𝟨',
+ \ '\msansseven': '𝟩',
+ \ '\msanseight': '𝟪',
+ \ '\msansnine': '𝟫',
+ \ '\mbfsanszero': '𝟬',
+ \ '\mbfsansone': '𝟭',
+ \ '\mbfsanstwo': '𝟮',
+ \ '\mbfsansthree': '𝟯',
+ \ '\mbfsansfour': '𝟰',
+ \ '\mbfsansfive': '𝟱',
+ \ '\mbfsanssix': '𝟲',
+ \ '\mbfsansseven': '𝟳',
+ \ '\mbfsanseight': '𝟴',
+ \ '\mbfsansnine': '𝟵',
+ \ '\mttzero': '𝟶',
+ \ '\mttone': '𝟷',
+ \ '\mtttwo': '𝟸',
+ \ '\mttthree': '𝟹',
+ \ '\mttfour': '𝟺',
+ \ '\mttfive': '𝟻',
+ \ '\mttsix': '𝟼',
+ \ '\mttseven': '𝟽',
+ \ '\mtteight': '𝟾',
+ \ '\mttnine': '𝟿',
+ \ '\:mahjong:': '🀄',
+ \ '\:black_joker:': '🃏',
+ \ '\:a:': '🅰',
+ \ '\:b:': '🅱',
+ \ '\:o2:': '🅾',
+ \ '\:parking:': '🅿',
+ \ '\:ab:': '🆎',
+ \ '\:cl:': '🆑',
+ \ '\:cool:': '🆒',
+ \ '\:free:': '🆓',
+ \ '\:id:': '🆔',
+ \ '\:new:': '🆕',
+ \ '\:ng:': '🆖',
+ \ '\:ok:': '🆗',
+ \ '\:sos:': '🆘',
+ \ '\:up:': '🆙',
+ \ '\:vs:': '🆚',
+ \ '\:koko:': '🈁',
+ \ '\:sa:': '🈂',
+ \ '\:u7121:': '🈚',
+ \ '\:u6307:': '🈯',
+ \ '\:u7981:': '🈲',
+ \ '\:u7a7a:': '🈳',
+ \ '\:u5408:': '🈴',
+ \ '\:u6e80:': '🈵',
+ \ '\:u6709:': '🈶',
+ \ '\:u6708:': '🈷',
+ \ '\:u7533:': '🈸',
+ \ '\:u5272:': '🈹',
+ \ '\:u55b6:': '🈺',
+ \ '\:ideograph_advantage:': '🉐',
+ \ '\:accept:': '🉑',
+ \ '\:cyclone:': '🌀',
+ \ '\:foggy:': '🌁',
+ \ '\:closed_umbrella:': '🌂',
+ \ '\:night_with_stars:': '🌃',
+ \ '\:sunrise_over_mountains:': '🌄',
+ \ '\:sunrise:': '🌅',
+ \ '\:city_sunset:': '🌆',
+ \ '\:city_sunrise:': '🌇',
+ \ '\:rainbow:': '🌈',
+ \ '\:bridge_at_night:': '🌉',
+ \ '\:ocean:': '🌊',
+ \ '\:volcano:': '🌋',
+ \ '\:milky_way:': '🌌',
+ \ '\:earth_africa:': '🌍',
+ \ '\:earth_americas:': '🌎',
+ \ '\:earth_asia:': '🌏',
+ \ '\:globe_with_meridians:': '🌐',
+ \ '\:new_moon:': '🌑',
+ \ '\:waxing_crescent_moon:': '🌒',
+ \ '\:first_quarter_moon:': '🌓',
+ \ '\:moon:': '🌔',
+ \ '\:full_moon:': '🌕',
+ \ '\:waning_gibbous_moon:': '🌖',
+ \ '\:last_quarter_moon:': '🌗',
+ \ '\:waning_crescent_moon:': '🌘',
+ \ '\:crescent_moon:': '🌙',
+ \ '\:new_moon_with_face:': '🌚',
+ \ '\:first_quarter_moon_with_face:': '🌛',
+ \ '\:last_quarter_moon_with_face:': '🌜',
+ \ '\:full_moon_with_face:': '🌝',
+ \ '\:sun_with_face:': '🌞',
+ \ '\:star2:': '🌟',
+ \ '\:stars:': '🌠',
+ \ '\:chestnut:': '🌰',
+ \ '\:seedling:': '🌱',
+ \ '\:evergreen_tree:': '🌲',
+ \ '\:deciduous_tree:': '🌳',
+ \ '\:palm_tree:': '🌴',
+ \ '\:cactus:': '🌵',
+ \ '\:tulip:': '🌷',
+ \ '\:cherry_blossom:': '🌸',
+ \ '\:rose:': '🌹',
+ \ '\:hibiscus:': '🌺',
+ \ '\:sunflower:': '🌻',
+ \ '\:blossom:': '🌼',
+ \ '\:corn:': '🌽',
+ \ '\:ear_of_rice:': '🌾',
+ \ '\:herb:': '🌿',
+ \ '\:four_leaf_clover:': '🍀',
+ \ '\:maple_leaf:': '🍁',
+ \ '\:fallen_leaf:': '🍂',
+ \ '\:leaves:': '🍃',
+ \ '\:mushroom:': '🍄',
+ \ '\:tomato:': '🍅',
+ \ '\:eggplant:': '🍆',
+ \ '\:grapes:': '🍇',
+ \ '\:melon:': '🍈',
+ \ '\:watermelon:': '🍉',
+ \ '\:tangerine:': '🍊',
+ \ '\:lemon:': '🍋',
+ \ '\:banana:': '🍌',
+ \ '\:pineapple:': '🍍',
+ \ '\:apple:': '🍎',
+ \ '\:green_apple:': '🍏',
+ \ '\:pear:': '🍐',
+ \ '\:peach:': '🍑',
+ \ '\:cherries:': '🍒',
+ \ '\:strawberry:': '🍓',
+ \ '\:hamburger:': '🍔',
+ \ '\:pizza:': '🍕',
+ \ '\:meat_on_bone:': '🍖',
+ \ '\:poultry_leg:': '🍗',
+ \ '\:rice_cracker:': '🍘',
+ \ '\:rice_ball:': '🍙',
+ \ '\:rice:': '🍚',
+ \ '\:curry:': '🍛',
+ \ '\:ramen:': '🍜',
+ \ '\:spaghetti:': '🍝',
+ \ '\:bread:': '🍞',
+ \ '\:fries:': '🍟',
+ \ '\:sweet_potato:': '🍠',
+ \ '\:dango:': '🍡',
+ \ '\:oden:': '🍢',
+ \ '\:sushi:': '🍣',
+ \ '\:fried_shrimp:': '🍤',
+ \ '\:fish_cake:': '🍥',
+ \ '\:icecream:': '🍦',
+ \ '\:shaved_ice:': '🍧',
+ \ '\:ice_cream:': '🍨',
+ \ '\:doughnut:': '🍩',
+ \ '\:cookie:': '🍪',
+ \ '\:chocolate_bar:': '🍫',
+ \ '\:candy:': '🍬',
+ \ '\:lollipop:': '🍭',
+ \ '\:custard:': '🍮',
+ \ '\:honey_pot:': '🍯',
+ \ '\:cake:': '🍰',
+ \ '\:bento:': '🍱',
+ \ '\:stew:': '🍲',
+ \ '\:egg:': '🍳',
+ \ '\:fork_and_knife:': '🍴',
+ \ '\:tea:': '🍵',
+ \ '\:sake:': '🍶',
+ \ '\:wine_glass:': '🍷',
+ \ '\:cocktail:': '🍸',
+ \ '\:tropical_drink:': '🍹',
+ \ '\:beer:': '🍺',
+ \ '\:beers:': '🍻',
+ \ '\:baby_bottle:': '🍼',
+ \ '\:ribbon:': '🎀',
+ \ '\:gift:': '🎁',
+ \ '\:birthday:': '🎂',
+ \ '\:jack_o_lantern:': '🎃',
+ \ '\:christmas_tree:': '🎄',
+ \ '\:santa:': '🎅',
+ \ '\:fireworks:': '🎆',
+ \ '\:sparkler:': '🎇',
+ \ '\:balloon:': '🎈',
+ \ '\:tada:': '🎉',
+ \ '\:confetti_ball:': '🎊',
+ \ '\:tanabata_tree:': '🎋',
+ \ '\:crossed_flags:': '🎌',
+ \ '\:bamboo:': '🎍',
+ \ '\:dolls:': '🎎',
+ \ '\:flags:': '🎏',
+ \ '\:wind_chime:': '🎐',
+ \ '\:rice_scene:': '🎑',
+ \ '\:school_satchel:': '🎒',
+ \ '\:mortar_board:': '🎓',
+ \ '\:carousel_horse:': '🎠',
+ \ '\:ferris_wheel:': '🎡',
+ \ '\:roller_coaster:': '🎢',
+ \ '\:fishing_pole_and_fish:': '🎣',
+ \ '\:microphone:': '🎤',
+ \ '\:movie_camera:': '🎥',
+ \ '\:cinema:': '🎦',
+ \ '\:headphones:': '🎧',
+ \ '\:art:': '🎨',
+ \ '\:tophat:': '🎩',
+ \ '\:circus_tent:': '🎪',
+ \ '\:ticket:': '🎫',
+ \ '\:clapper:': '🎬',
+ \ '\:performing_arts:': '🎭',
+ \ '\:video_game:': '🎮',
+ \ '\:dart:': '🎯',
+ \ '\:slot_machine:': '🎰',
+ \ '\:8ball:': '🎱',
+ \ '\:game_die:': '🎲',
+ \ '\:bowling:': '🎳',
+ \ '\:flower_playing_cards:': '🎴',
+ \ '\:musical_note:': '🎵',
+ \ '\:notes:': '🎶',
+ \ '\:saxophone:': '🎷',
+ \ '\:guitar:': '🎸',
+ \ '\:musical_keyboard:': '🎹',
+ \ '\:trumpet:': '🎺',
+ \ '\:violin:': '🎻',
+ \ '\:musical_score:': '🎼',
+ \ '\:running_shirt_with_sash:': '🎽',
+ \ '\:tennis:': '🎾',
+ \ '\:ski:': '🎿',
+ \ '\:basketball:': '🏀',
+ \ '\:checkered_flag:': '🏁',
+ \ '\:snowboarder:': '🏂',
+ \ '\:runner:': '🏃',
+ \ '\:surfer:': '🏄',
+ \ '\:trophy:': '🏆',
+ \ '\:horse_racing:': '🏇',
+ \ '\:football:': '🏈',
+ \ '\:rugby_football:': '🏉',
+ \ '\:swimmer:': '🏊',
+ \ '\:house:': '🏠',
+ \ '\:house_with_garden:': '🏡',
+ \ '\:office:': '🏢',
+ \ '\:post_office:': '🏣',
+ \ '\:european_post_office:': '🏤',
+ \ '\:hospital:': '🏥',
+ \ '\:bank:': '🏦',
+ \ '\:atm:': '🏧',
+ \ '\:hotel:': '🏨',
+ \ '\:love_hotel:': '🏩',
+ \ '\:convenience_store:': '🏪',
+ \ '\:school:': '🏫',
+ \ '\:department_store:': '🏬',
+ \ '\:factory:': '🏭',
+ \ '\:izakaya_lantern:': '🏮',
+ \ '\:japanese_castle:': '🏯',
+ \ '\:european_castle:': '🏰',
+ \ '\:skin-tone-2:': '🏻',
+ \ '\:skin-tone-3:': '🏼',
+ \ '\:skin-tone-4:': '🏽',
+ \ '\:skin-tone-5:': '🏾',
+ \ '\:skin-tone-6:': '🏿',
+ \ '\:rat:': '🐀',
+ \ '\:mouse2:': '🐁',
+ \ '\:ox:': '🐂',
+ \ '\:water_buffalo:': '🐃',
+ \ '\:cow2:': '🐄',
+ \ '\:tiger2:': '🐅',
+ \ '\:leopard:': '🐆',
+ \ '\:rabbit2:': '🐇',
+ \ '\:cat2:': '🐈',
+ \ '\:dragon:': '🐉',
+ \ '\:crocodile:': '🐊',
+ \ '\:whale2:': '🐋',
+ \ '\:snail:': '🐌',
+ \ '\:snake:': '🐍',
+ \ '\:racehorse:': '🐎',
+ \ '\:ram:': '🐏',
+ \ '\:goat:': '🐐',
+ \ '\:sheep:': '🐑',
+ \ '\:monkey:': '🐒',
+ \ '\:rooster:': '🐓',
+ \ '\:chicken:': '🐔',
+ \ '\:dog2:': '🐕',
+ \ '\:pig2:': '🐖',
+ \ '\:boar:': '🐗',
+ \ '\:elephant:': '🐘',
+ \ '\:octopus:': '🐙',
+ \ '\:shell:': '🐚',
+ \ '\:bug:': '🐛',
+ \ '\:ant:': '🐜',
+ \ '\:bee:': '🐝',
+ \ '\:beetle:': '🐞',
+ \ '\:fish:': '🐟',
+ \ '\:tropical_fish:': '🐠',
+ \ '\:blowfish:': '🐡',
+ \ '\:turtle:': '🐢',
+ \ '\:hatching_chick:': '🐣',
+ \ '\:baby_chick:': '🐤',
+ \ '\:hatched_chick:': '🐥',
+ \ '\:bird:': '🐦',
+ \ '\:penguin:': '🐧',
+ \ '\:koala:': '🐨',
+ \ '\:poodle:': '🐩',
+ \ '\:dromedary_camel:': '🐪',
+ \ '\:camel:': '🐫',
+ \ '\:dolphin:': '🐬',
+ \ '\:mouse:': '🐭',
+ \ '\:cow:': '🐮',
+ \ '\:tiger:': '🐯',
+ \ '\:rabbit:': '🐰',
+ \ '\:cat:': '🐱',
+ \ '\:dragon_face:': '🐲',
+ \ '\:whale:': '🐳',
+ \ '\:horse:': '🐴',
+ \ '\:monkey_face:': '🐵',
+ \ '\:dog:': '🐶',
+ \ '\:pig:': '🐷',
+ \ '\:frog:': '🐸',
+ \ '\:hamster:': '🐹',
+ \ '\:wolf:': '🐺',
+ \ '\:bear:': '🐻',
+ \ '\:panda_face:': '🐼',
+ \ '\:pig_nose:': '🐽',
+ \ '\:feet:': '🐾',
+ \ '\:eyes:': '👀',
+ \ '\:ear:': '👂',
+ \ '\:nose:': '👃',
+ \ '\:lips:': '👄',
+ \ '\:tongue:': '👅',
+ \ '\:point_up_2:': '👆',
+ \ '\:point_down:': '👇',
+ \ '\:point_left:': '👈',
+ \ '\:point_right:': '👉',
+ \ '\:facepunch:': '👊',
+ \ '\:wave:': '👋',
+ \ '\:ok_hand:': '👌',
+ \ '\:+1:': '👍',
+ \ '\:-1:': '👎',
+ \ '\:clap:': '👏',
+ \ '\:open_hands:': '👐',
+ \ '\:crown:': '👑',
+ \ '\:womans_hat:': '👒',
+ \ '\:eyeglasses:': '👓',
+ \ '\:necktie:': '👔',
+ \ '\:shirt:': '👕',
+ \ '\:jeans:': '👖',
+ \ '\:dress:': '👗',
+ \ '\:kimono:': '👘',
+ \ '\:bikini:': '👙',
+ \ '\:womans_clothes:': '👚',
+ \ '\:purse:': '👛',
+ \ '\:handbag:': '👜',
+ \ '\:pouch:': '👝',
+ \ '\:mans_shoe:': '👞',
+ \ '\:athletic_shoe:': '👟',
+ \ '\:high_heel:': '👠',
+ \ '\:sandal:': '👡',
+ \ '\:boot:': '👢',
+ \ '\:footprints:': '👣',
+ \ '\:bust_in_silhouette:': '👤',
+ \ '\:busts_in_silhouette:': '👥',
+ \ '\:boy:': '👦',
+ \ '\:girl:': '👧',
+ \ '\:man:': '👨',
+ \ '\:woman:': '👩',
+ \ '\:family:': '👪',
+ \ '\:couple:': '👫',
+ \ '\:two_men_holding_hands:': '👬',
+ \ '\:two_women_holding_hands:': '👭',
+ \ '\:cop:': '👮',
+ \ '\:dancers:': '👯',
+ \ '\:bride_with_veil:': '👰',
+ \ '\:person_with_blond_hair:': '👱',
+ \ '\:man_with_gua_pi_mao:': '👲',
+ \ '\:man_with_turban:': '👳',
+ \ '\:older_man:': '👴',
+ \ '\:older_woman:': '👵',
+ \ '\:baby:': '👶',
+ \ '\:construction_worker:': '👷',
+ \ '\:princess:': '👸',
+ \ '\:japanese_ogre:': '👹',
+ \ '\:japanese_goblin:': '👺',
+ \ '\:ghost:': '👻',
+ \ '\:angel:': '👼',
+ \ '\:alien:': '👽',
+ \ '\:space_invader:': '👾',
+ \ '\:imp:': '👿',
+ \ '\:skull:': '💀',
+ \ '\:information_desk_person:': '💁',
+ \ '\:guardsman:': '💂',
+ \ '\:dancer:': '💃',
+ \ '\:lipstick:': '💄',
+ \ '\:nail_care:': '💅',
+ \ '\:massage:': '💆',
+ \ '\:haircut:': '💇',
+ \ '\:barber:': '💈',
+ \ '\:syringe:': '💉',
+ \ '\:pill:': '💊',
+ \ '\:kiss:': '💋',
+ \ '\:love_letter:': '💌',
+ \ '\:ring:': '💍',
+ \ '\:gem:': '💎',
+ \ '\:couplekiss:': '💏',
+ \ '\:bouquet:': '💐',
+ \ '\:couple_with_heart:': '💑',
+ \ '\:wedding:': '💒',
+ \ '\:heartbeat:': '💓',
+ \ '\:broken_heart:': '💔',
+ \ '\:two_hearts:': '💕',
+ \ '\:sparkling_heart:': '💖',
+ \ '\:heartpulse:': '💗',
+ \ '\:cupid:': '💘',
+ \ '\:blue_heart:': '💙',
+ \ '\:green_heart:': '💚',
+ \ '\:yellow_heart:': '💛',
+ \ '\:purple_heart:': '💜',
+ \ '\:gift_heart:': '💝',
+ \ '\:revolving_hearts:': '💞',
+ \ '\:heart_decoration:': '💟',
+ \ '\:diamond_shape_with_a_dot_inside:': '💠',
+ \ '\:bulb:': '💡',
+ \ '\:anger:': '💢',
+ \ '\:bomb:': '💣',
+ \ '\:zzz:': '💤',
+ \ '\:boom:': '💥',
+ \ '\:sweat_drops:': '💦',
+ \ '\:droplet:': '💧',
+ \ '\:dash:': '💨',
+ \ '\:hankey:': '💩',
+ \ '\:muscle:': '💪',
+ \ '\:dizzy:': '💫',
+ \ '\:speech_balloon:': '💬',
+ \ '\:thought_balloon:': '💭',
+ \ '\:white_flower:': '💮',
+ \ '\:100:': '💯',
+ \ '\:moneybag:': '💰',
+ \ '\:currency_exchange:': '💱',
+ \ '\:heavy_dollar_sign:': '💲',
+ \ '\:credit_card:': '💳',
+ \ '\:yen:': '💴',
+ \ '\:dollar:': '💵',
+ \ '\:euro:': '💶',
+ \ '\:pound:': '💷',
+ \ '\:money_with_wings:': '💸',
+ \ '\:chart:': '💹',
+ \ '\:seat:': '💺',
+ \ '\:computer:': '💻',
+ \ '\:briefcase:': '💼',
+ \ '\:minidisc:': '💽',
+ \ '\:floppy_disk:': '💾',
+ \ '\:cd:': '💿',
+ \ '\:dvd:': '📀',
+ \ '\:file_folder:': '📁',
+ \ '\:open_file_folder:': '📂',
+ \ '\:page_with_curl:': '📃',
+ \ '\:page_facing_up:': '📄',
+ \ '\:date:': '📅',
+ \ '\:calendar:': '📆',
+ \ '\:card_index:': '📇',
+ \ '\:chart_with_upwards_trend:': '📈',
+ \ '\:chart_with_downwards_trend:': '📉',
+ \ '\:bar_chart:': '📊',
+ \ '\:clipboard:': '📋',
+ \ '\:pushpin:': '📌',
+ \ '\:round_pushpin:': '📍',
+ \ '\:paperclip:': '📎',
+ \ '\:straight_ruler:': '📏',
+ \ '\:triangular_ruler:': '📐',
+ \ '\:bookmark_tabs:': '📑',
+ \ '\:ledger:': '📒',
+ \ '\:notebook:': '📓',
+ \ '\:notebook_with_decorative_cover:': '📔',
+ \ '\:closed_book:': '📕',
+ \ '\:book:': '📖',
+ \ '\:green_book:': '📗',
+ \ '\:blue_book:': '📘',
+ \ '\:orange_book:': '📙',
+ \ '\:books:': '📚',
+ \ '\:name_badge:': '📛',
+ \ '\:scroll:': '📜',
+ \ '\:memo:': '📝',
+ \ '\:telephone_receiver:': '📞',
+ \ '\:pager:': '📟',
+ \ '\:fax:': '📠',
+ \ '\:satellite:': '📡',
+ \ '\:loudspeaker:': '📢',
+ \ '\:mega:': '📣',
+ \ '\:outbox_tray:': '📤',
+ \ '\:inbox_tray:': '📥',
+ \ '\:package:': '📦',
+ \ '\:e-mail:': '📧',
+ \ '\:incoming_envelope:': '📨',
+ \ '\:envelope_with_arrow:': '📩',
+ \ '\:mailbox_closed:': '📪',
+ \ '\:mailbox:': '📫',
+ \ '\:mailbox_with_mail:': '📬',
+ \ '\:mailbox_with_no_mail:': '📭',
+ \ '\:postbox:': '📮',
+ \ '\:postal_horn:': '📯',
+ \ '\:newspaper:': '📰',
+ \ '\:iphone:': '📱',
+ \ '\:calling:': '📲',
+ \ '\:vibration_mode:': '📳',
+ \ '\:mobile_phone_off:': '📴',
+ \ '\:no_mobile_phones:': '📵',
+ \ '\:signal_strength:': '📶',
+ \ '\:camera:': '📷',
+ \ '\:video_camera:': '📹',
+ \ '\:tv:': '📺',
+ \ '\:radio:': '📻',
+ \ '\:vhs:': '📼',
+ \ '\:twisted_rightwards_arrows:': '🔀',
+ \ '\:repeat:': '🔁',
+ \ '\:repeat_one:': '🔂',
+ \ '\:arrows_clockwise:': '🔃',
+ \ '\:arrows_counterclockwise:': '🔄',
+ \ '\:low_brightness:': '🔅',
+ \ '\:high_brightness:': '🔆',
+ \ '\:mute:': '🔇',
+ \ '\:speaker:': '🔈',
+ \ '\:sound:': '🔉',
+ \ '\:loud_sound:': '🔊',
+ \ '\:battery:': '🔋',
+ \ '\:electric_plug:': '🔌',
+ \ '\:mag:': '🔍',
+ \ '\:mag_right:': '🔎',
+ \ '\:lock_with_ink_pen:': '🔏',
+ \ '\:closed_lock_with_key:': '🔐',
+ \ '\:key:': '🔑',
+ \ '\:lock:': '🔒',
+ \ '\:unlock:': '🔓',
+ \ '\:bell:': '🔔',
+ \ '\:no_bell:': '🔕',
+ \ '\:bookmark:': '🔖',
+ \ '\:link:': '🔗',
+ \ '\:radio_button:': '🔘',
+ \ '\:back:': '🔙',
+ \ '\:end:': '🔚',
+ \ '\:on:': '🔛',
+ \ '\:soon:': '🔜',
+ \ '\:top:': '🔝',
+ \ '\:underage:': '🔞',
+ \ '\:keycap_ten:': '🔟',
+ \ '\:capital_abcd:': '🔠',
+ \ '\:abcd:': '🔡',
+ \ '\:1234:': '🔢',
+ \ '\:symbols:': '🔣',
+ \ '\:abc:': '🔤',
+ \ '\:fire:': '🔥',
+ \ '\:flashlight:': '🔦',
+ \ '\:wrench:': '🔧',
+ \ '\:hammer:': '🔨',
+ \ '\:nut_and_bolt:': '🔩',
+ \ '\:hocho:': '🔪',
+ \ '\:gun:': '🔫',
+ \ '\:microscope:': '🔬',
+ \ '\:telescope:': '🔭',
+ \ '\:crystal_ball:': '🔮',
+ \ '\:six_pointed_star:': '🔯',
+ \ '\:beginner:': '🔰',
+ \ '\:trident:': '🔱',
+ \ '\:black_square_button:': '🔲',
+ \ '\:white_square_button:': '🔳',
+ \ '\:red_circle:': '🔴',
+ \ '\:large_blue_circle:': '🔵',
+ \ '\:large_orange_diamond:': '🔶',
+ \ '\:large_blue_diamond:': '🔷',
+ \ '\:small_orange_diamond:': '🔸',
+ \ '\:small_blue_diamond:': '🔹',
+ \ '\:small_red_triangle:': '🔺',
+ \ '\:small_red_triangle_down:': '🔻',
+ \ '\:arrow_up_small:': '🔼',
+ \ '\:arrow_down_small:': '🔽',
+ \ '\:clock1:': '🕐',
+ \ '\:clock2:': '🕑',
+ \ '\:clock3:': '🕒',
+ \ '\:clock4:': '🕓',
+ \ '\:clock5:': '🕔',
+ \ '\:clock6:': '🕕',
+ \ '\:clock7:': '🕖',
+ \ '\:clock8:': '🕗',
+ \ '\:clock9:': '🕘',
+ \ '\:clock10:': '🕙',
+ \ '\:clock11:': '🕚',
+ \ '\:clock12:': '🕛',
+ \ '\:clock130:': '🕜',
+ \ '\:clock230:': '🕝',
+ \ '\:clock330:': '🕞',
+ \ '\:clock430:': '🕟',
+ \ '\:clock530:': '🕠',
+ \ '\:clock630:': '🕡',
+ \ '\:clock730:': '🕢',
+ \ '\:clock830:': '🕣',
+ \ '\:clock930:': '🕤',
+ \ '\:clock1030:': '🕥',
+ \ '\:clock1130:': '🕦',
+ \ '\:clock1230:': '🕧',
+ \ '\:mount_fuji:': '🗻',
+ \ '\:tokyo_tower:': '🗼',
+ \ '\:statue_of_liberty:': '🗽',
+ \ '\:japan:': '🗾',
+ \ '\:moyai:': '🗿',
+ \ '\:grinning:': '😀',
+ \ '\:grin:': '😁',
+ \ '\:joy:': '😂',
+ \ '\:smiley:': '😃',
+ \ '\:smile:': '😄',
+ \ '\:sweat_smile:': '😅',
+ \ '\:laughing:': '😆',
+ \ '\:innocent:': '😇',
+ \ '\:smiling_imp:': '😈',
+ \ '\:wink:': '😉',
+ \ '\:blush:': '😊',
+ \ '\:yum:': '😋',
+ \ '\:relieved:': '😌',
+ \ '\:heart_eyes:': '😍',
+ \ '\:sunglasses:': '😎',
+ \ '\:smirk:': '😏',
+ \ '\:neutral_face:': '😐',
+ \ '\:expressionless:': '😑',
+ \ '\:unamused:': '😒',
+ \ '\:sweat:': '😓',
+ \ '\:pensive:': '😔',
+ \ '\:confused:': '😕',
+ \ '\:confounded:': '😖',
+ \ '\:kissing:': '😗',
+ \ '\:kissing_heart:': '😘',
+ \ '\:kissing_smiling_eyes:': '😙',
+ \ '\:kissing_closed_eyes:': '😚',
+ \ '\:stuck_out_tongue:': '😛',
+ \ '\:stuck_out_tongue_winking_eye:': '😜',
+ \ '\:stuck_out_tongue_closed_eyes:': '😝',
+ \ '\:disappointed:': '😞',
+ \ '\:worried:': '😟',
+ \ '\:angry:': '😠',
+ \ '\:rage:': '😡',
+ \ '\:cry:': '😢',
+ \ '\:persevere:': '😣',
+ \ '\:triumph:': '😤',
+ \ '\:disappointed_relieved:': '😥',
+ \ '\:frowning:': '😦',
+ \ '\:anguished:': '😧',
+ \ '\:fearful:': '😨',
+ \ '\:weary:': '😩',
+ \ '\:sleepy:': '😪',
+ \ '\:tired_face:': '😫',
+ \ '\:grimacing:': '😬',
+ \ '\:sob:': '😭',
+ \ '\:open_mouth:': '😮',
+ \ '\:hushed:': '😯',
+ \ '\:cold_sweat:': '😰',
+ \ '\:scream:': '😱',
+ \ '\:astonished:': '😲',
+ \ '\:flushed:': '😳',
+ \ '\:sleeping:': '😴',
+ \ '\:dizzy_face:': '😵',
+ \ '\:no_mouth:': '😶',
+ \ '\:mask:': '😷',
+ \ '\:smile_cat:': '😸',
+ \ '\:joy_cat:': '😹',
+ \ '\:smiley_cat:': '😺',
+ \ '\:heart_eyes_cat:': '😻',
+ \ '\:smirk_cat:': '😼',
+ \ '\:kissing_cat:': '😽',
+ \ '\:pouting_cat:': '😾',
+ \ '\:crying_cat_face:': '😿',
+ \ '\:scream_cat:': '🙀',
+ \ '\:no_good:': '🙅',
+ \ '\:ok_woman:': '🙆',
+ \ '\:bow:': '🙇',
+ \ '\:see_no_evil:': '🙈',
+ \ '\:hear_no_evil:': '🙉',
+ \ '\:speak_no_evil:': '🙊',
+ \ '\:raising_hand:': '🙋',
+ \ '\:raised_hands:': '🙌',
+ \ '\:person_frowning:': '🙍',
+ \ '\:person_with_pouting_face:': '🙎',
+ \ '\:pray:': '🙏',
+ \ '\:rocket:': '🚀',
+ \ '\:helicopter:': '🚁',
+ \ '\:steam_locomotive:': '🚂',
+ \ '\:railway_car:': '🚃',
+ \ '\:bullettrain_side:': '🚄',
+ \ '\:bullettrain_front:': '🚅',
+ \ '\:train2:': '🚆',
+ \ '\:metro:': '🚇',
+ \ '\:light_rail:': '🚈',
+ \ '\:station:': '🚉',
+ \ '\:tram:': '🚊',
+ \ '\:train:': '🚋',
+ \ '\:bus:': '🚌',
+ \ '\:oncoming_bus:': '🚍',
+ \ '\:trolleybus:': '🚎',
+ \ '\:busstop:': '🚏',
+ \ '\:minibus:': '🚐',
+ \ '\:ambulance:': '🚑',
+ \ '\:fire_engine:': '🚒',
+ \ '\:police_car:': '🚓',
+ \ '\:oncoming_police_car:': '🚔',
+ \ '\:taxi:': '🚕',
+ \ '\:oncoming_taxi:': '🚖',
+ \ '\:car:': '🚗',
+ \ '\:oncoming_automobile:': '🚘',
+ \ '\:blue_car:': '🚙',
+ \ '\:truck:': '🚚',
+ \ '\:articulated_lorry:': '🚛',
+ \ '\:tractor:': '🚜',
+ \ '\:monorail:': '🚝',
+ \ '\:mountain_railway:': '🚞',
+ \ '\:suspension_railway:': '🚟',
+ \ '\:mountain_cableway:': '🚠',
+ \ '\:aerial_tramway:': '🚡',
+ \ '\:ship:': '🚢',
+ \ '\:rowboat:': '🚣',
+ \ '\:speedboat:': '🚤',
+ \ '\:traffic_light:': '🚥',
+ \ '\:vertical_traffic_light:': '🚦',
+ \ '\:construction:': '🚧',
+ \ '\:rotating_light:': '🚨',
+ \ '\:triangular_flag_on_post:': '🚩',
+ \ '\:door:': '🚪',
+ \ '\:no_entry_sign:': '🚫',
+ \ '\:smoking:': '🚬',
+ \ '\:no_smoking:': '🚭',
+ \ '\:put_litter_in_its_place:': '🚮',
+ \ '\:do_not_litter:': '🚯',
+ \ '\:potable_water:': '🚰',
+ \ '\:non-potable_water:': '🚱',
+ \ '\:bike:': '🚲',
+ \ '\:no_bicycles:': '🚳',
+ \ '\:bicyclist:': '🚴',
+ \ '\:mountain_bicyclist:': '🚵',
+ \ '\:walking:': '🚶',
+ \ '\:no_pedestrians:': '🚷',
+ \ '\:children_crossing:': '🚸',
+ \ '\:mens:': '🚹',
+ \ '\:womens:': '🚺',
+ \ '\:restroom:': '🚻',
+ \ '\:baby_symbol:': '🚼',
+ \ '\:toilet:': '🚽',
+ \ '\:wc:': '🚾',
+ \ '\:shower:': '🚿',
+ \ '\:bath:': '🛀',
+ \ '\:bathtub:': '🛁',
+ \ '\:passport_control:': '🛂',
+ \ '\:customs:': '🛃',
+ \ '\:baggage_claim:': '🛄',
+ \ '\:left_luggage:': '🛅'}
+endfunction
+
+endif