diff options
Diffstat (limited to '')
| -rw-r--r-- | autoload/LaTeXtoUnicode.vim | 625 | ||||
| -rw-r--r-- | autoload/fish.vim | 71 | ||||
| -rw-r--r-- | autoload/julia.vim | 188 | ||||
| -rw-r--r-- | autoload/julia_blocks.vim | 798 | ||||
| -rw-r--r-- | autoload/julia_latex_symbols.vim | 3316 | 
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 | 
