diff options
32 files changed, 5786 insertions, 2248 deletions
| @@ -61,11 +61,11 @@ If you need full functionality of any plugin, please use it directly with your p  - [emberscript](https://github.com/yalesov/vim-ember-script) (syntax, indent, ftplugin)  - [emblem](https://github.com/yalesov/vim-emblem) (syntax, indent, ftplugin)  - [erlang](https://github.com/vim-erlang/vim-erlang-runtime) (syntax, indent) -- [fish](https://github.com/dag/vim-fish) (syntax, indent, compiler, autoload, ftplugin) -- [fsharp](https://github.com/fsharp/vim-fsharp) (syntax, indent) -- [git](https://github.com/tpope/vim-git) (syntax, indent, ftplugin) -- [glsl](https://github.com/tikhomirov/vim-glsl) (syntax, indent) -- [gmpl](https://github.com/maelvalais/gmpl.vim) (syntax) +- [fish](https://github.com/dag/vim-fish) () +- [fsharp](https://github.com/fsharp/vim-fsharp) () +- [git](https://github.com/tpope/vim-git) () +- [glsl](https://github.com/tikhomirov/vim-glsl) () +- [gmpl](https://github.com/maelvalais/gmpl.vim) ()  - [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting) (syntax)  - [go](https://github.com/fatih/vim-go) (syntax, compiler, indent)  - [groovy](https://github.com/vim-scripts/groovy.vim) (syntax) @@ -81,7 +81,7 @@ If you need full functionality of any plugin, please use it directly with your p  - [json](https://github.com/elzr/vim-json) (syntax, indent, ftplugin)  - [jst](https://github.com/briancollins/vim-jst) (syntax, indent)  - [jsx](https://github.com/mxw/vim-jsx) (after) -- [julia](https://github.com/dcjones/julia-minimalist-vim) (syntax, indent) +- [julia](https://github.com/JuliaEditorSupport/julia-vim) (syntax, indent, autoload, ftplugin)  - [kotlin](https://github.com/udalov/kotlin-vim) (syntax, indent)  - [latex](https://github.com/LaTeX-Box-Team/LaTeX-Box) (syntax, indent, ftplugin)  - [less](https://github.com/groenewege/vim-less) (syntax, indent, ftplugin) diff --git a/after/syntax/html.vim b/after/syntax/html.vim index 43c0c41e..0ba2c14d 100644 --- a/after/syntax/html.vim +++ b/after/syntax/html.vim @@ -22,19 +22,6 @@ if exists('s:current_syntax_save')  endif  endif -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'glsl') == -1 -   -" Language: OpenGL Shading Language -" Maintainer: Sergey Tikhomirov <sergey@tikhomirov.io> - -syn include @GLSL syntax/glsl.vim -syn region ShaderScript -      \ start="<script [^>]*type=\('\|\"\)x-shader/x-\(vertex\|fragment\)\('\|\"\)[^>]*>" -      \ keepend -      \ end="</script>"me=s-1 -      \ contains=@GLSL,htmlScriptTag,@htmlPreproc - -endif  if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'html5') == -1  " Vim syntax file 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 @@ -153,7 +153,7 @@ PACKS="    json:elzr/vim-json    jst:briancollins/vim-jst    jsx:mxw/vim-jsx:_ALL -  julia:dcjones/julia-minimalist-vim +  julia:JuliaEditorSupport/julia-vim    kotlin:udalov/kotlin-vim    latex:LaTeX-Box-Team/LaTeX-Box    less:groenewege/vim-less diff --git a/compiler/fish.vim b/compiler/fish.vim deleted file mode 100644 index 11fad0c6..00000000 --- a/compiler/fish.vim +++ /dev/null @@ -1,11 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fish') == -1 -   -if exists('current_compiler') -    finish -endif -let current_compiler = 'fish' - -CompilerSet makeprg=fish\ --no-execute\ % -execute 'CompilerSet errorformat='.escape(fish#errorformat(), ' ') - -endif diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim index 0bef8008..44c70eea 100644 --- a/ftdetect/polyglot.vim +++ b/ftdetect/polyglot.vim @@ -242,77 +242,22 @@ augroup END  augroup filetypedetect  " fish:dag/vim-fish -autocmd BufRead,BufNewFile *.fish setfiletype fish - -" Detect fish scripts by the shebang line. -autocmd BufRead * -            \ if getline(1) =~# '\v^#!%(\f*/|/usr/bin/env\s*<)fish>' | -            \     setlocal filetype=fish | -            \ endif - -" Move cursor to first empty line when using funced. -autocmd BufRead fish_funced_*_*.fish call search('^$') - -" Fish histories are YAML documents. -autocmd BufRead,BufNewFile ~/.config/fish/fish_{read_,}history setfiletype yaml - -" Universal variable storages should not be hand edited. -autocmd BufRead,BufNewFile ~/.config/fish/fishd.* setlocal readonly - -" Mimic `funced` when manually creating functions. -autocmd BufNewFile ~/.config/fish/functions/*.fish -            \ call append(0, ['function '.expand('%:t:r'), -                             \'', -                             \'end']) | -            \ 2  augroup END  augroup filetypedetect  " fsharp:fsharp/vim-fsharp:_BASIC -" F#, fsharp -autocmd BufNewFile,BufRead *.fs,*.fsi,*.fsx set filetype=fsharp  augroup END  augroup filetypedetect  " git:tpope/vim-git -" Git -autocmd BufNewFile,BufRead *.git/{,modules/**/,worktrees/*/}{COMMIT_EDIT,TAG_EDIT,MERGE_,}MSG set ft=gitcommit -autocmd BufNewFile,BufRead *.git/config,.gitconfig,gitconfig,.gitmodules set ft=gitconfig -autocmd BufNewFile,BufRead */.config/git/config                          set ft=gitconfig -autocmd BufNewFile,BufRead *.git/modules/**/config                       set ft=gitconfig -autocmd BufNewFile,BufRead git-rebase-todo                               set ft=gitrebase -autocmd BufNewFile,BufRead .gitsendemail.*                               set ft=gitsendemail -autocmd BufNewFile,BufRead *.git/** -      \ if getline(1) =~ '^\x\{40\}\>\|^ref: ' | -      \   set ft=git | -      \ endif - -" This logic really belongs in scripts.vim -autocmd BufNewFile,BufRead,StdinReadPost * -      \ if getline(1) =~ '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$' | -      \   set ft=git | -      \ endif -autocmd BufNewFile,BufRead * -      \ if getline(1) =~ '^From \x\{40\} Mon Sep 17 00:00:00 2001$' | -      \   set filetype=gitsendemail | -      \ endif  augroup END  augroup filetypedetect  " gmpl:maelvalais/gmpl.vim -au BufRead,BufNewFile *.mod set filetype=gmpl  augroup END  augroup filetypedetect  " glsl:tikhomirov/vim-glsl -" Language: OpenGL Shading Language -" Maintainer: Sergey Tikhomirov <sergey@tikhomirov.io> - -" Extensions supported by Khronos reference compiler (with one exception, ".glsl") -" https://github.com/KhronosGroup/glslang -autocmd! BufNewFile,BufRead *.vert,*.tesc,*.tese,*.glsl,*.geom,*.frag,*.comp set filetype=glsl - -" vim:set sts=2 sw=2 :  augroup END  augroup filetypedetect @@ -493,13 +438,28 @@ autocmd BufNewFile,BufRead *.js  augroup END  augroup filetypedetect -" julia:dcjones/julia-minimalist-vim -" NOTE: this line fixes an issue with the default system-wide lisp ftplugin -"       which doesn't define b:undo_ftplugin -"       (*.jt files are recognized as lisp) -au BufRead,BufNewFile *.jl		let b:undo_ftplugin = "setlocal comments< define< formatoptions< iskeyword< lisp<" +" julia:JuliaEditorSupport/julia-vim +if v:version < 704 +  " NOTE: this line fixes an issue with the default system-wide lisp ftplugin +  "       which didn't define b:undo_ftplugin on older Vim versions +  "       (*.jl files are recognized as lisp) +  autocmd BufRead,BufNewFile *.jl    let b:undo_ftplugin = "setlocal comments< define< formatoptions< iskeyword< lisp<" +endif -au BufRead,BufNewFile *.jl		set filetype=julia +autocmd BufRead,BufNewFile *.jl      set filetype=julia + +autocmd FileType *                   call LaTeXtoUnicode#Refresh() +autocmd BufEnter *                   call LaTeXtoUnicode#Refresh() + +" This autocommand is used to postpone the first initialization of LaTeXtoUnicode as much as possible, +" by calling LaTeXtoUnicode#SetTab amd LaTeXtoUnicode#SetAutoSub only at InsertEnter or later +function! s:L2UTrigger() +  augroup L2UInit +    autocmd! +    autocmd InsertEnter *            let g:did_insert_enter = 1 | call LaTeXtoUnicode#Init(0) +  augroup END +endfunction +autocmd BufEnter *                   call s:L2UTrigger()  augroup END  augroup filetypedetect diff --git a/ftplugin/fish.vim b/ftplugin/fish.vim deleted file mode 100644 index c6c1f6d8..00000000 --- a/ftplugin/fish.vim +++ /dev/null @@ -1,43 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fish') == -1 -   -setlocal comments=:# -setlocal commentstring=#%s -setlocal define=\\v^\\s*function> -setlocal foldexpr=fish#Fold() -setlocal formatoptions+=ron1 -setlocal formatoptions-=t -setlocal include=\\v^\\s*\\.> -setlocal iskeyword=@,48-57,-,_,.,/ -setlocal suffixesadd^=.fish - -" Use the 'j' format option when available. -if v:version ># 703 || v:version ==# 703 && has('patch541') -    setlocal formatoptions+=j -endif - -if executable('fish_indent') -    setlocal formatexpr=fish#Format() -endif - -if executable('fish') -    setlocal omnifunc=fish#Complete -    for s:path in split(system("fish -c 'echo $fish_function_path'")) -        execute 'setlocal path+='.s:path -    endfor -else -    setlocal omnifunc=syntaxcomplete#Complete -endif - -" Use the 'man' wrapper function in fish to include fish's man pages. -" Have to use a script for this; 'fish -c man' would make the the man page an -" argument to fish instead of man. -execute 'setlocal keywordprg=fish\ '.fnameescape(expand('<sfile>:p:h:h').'/bin/man.fish') - -let b:match_words = -            \ escape('<%(begin|function|if|switch|while|for)>:<end>', '<>%|)') - -let b:endwise_addition = 'end' -let b:endwise_words = 'begin,function,if,switch,while,for' -let b:endwise_syngroups = 'fishKeyword,fishConditional,fishRepeat' - -endif diff --git a/ftplugin/git.vim b/ftplugin/git.vim deleted file mode 100644 index 38b9493b..00000000 --- a/ftplugin/git.vim +++ /dev/null @@ -1,45 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'git') == -1 -   -" Vim filetype plugin -" Language:	generic git output -" Maintainer:	Tim Pope <vimNOSPAM@tpope.org> -" Last Change:	2013 May 30 - -" Only do this when not done yet for this buffer -if (exists("b:did_ftplugin")) -  finish -endif -let b:did_ftplugin = 1 - -if !exists('b:git_dir') -  if expand('%:p') =~# '[\/]\.git[\/]modules[\/]' -    " Stay out of the way -  elseif expand('%:p') =~# '[\/]\.git[\/]worktrees' -    let b:git_dir = matchstr(expand('%:p'),'.*\.git[\/]worktrees[\/][^\/]\+\>') -  elseif expand('%:p') =~# '\.git\>' -    let b:git_dir = matchstr(expand('%:p'),'.*\.git\>') -  elseif $GIT_DIR != '' -    let b:git_dir = $GIT_DIR -  endif -  if (has('win32') || has('win64')) && exists('b:git_dir') -    let b:git_dir = substitute(b:git_dir,'\\','/','g') -  endif -endif - -if exists('*shellescape') && exists('b:git_dir') && b:git_dir != '' -  if b:git_dir =~# '/\.git$' " Not a bare repository -    let &l:path = escape(fnamemodify(b:git_dir,':h'),'\, ').','.&l:path -  endif -  let &l:path = escape(b:git_dir,'\, ').','.&l:path -  let &l:keywordprg = 'git --git-dir='.shellescape(b:git_dir).' show' -else -  setlocal keywordprg=git\ show -endif -if has('gui_running') -  let &l:keywordprg = substitute(&l:keywordprg,'^git\>','git --no-pager','') -endif - -setlocal includeexpr=substitute(v:fname,'^[^/]\\+/','','') -let b:undo_ftplugin = "setl keywordprg< path< includeexpr<" - -endif diff --git a/ftplugin/gitcommit.vim b/ftplugin/gitcommit.vim deleted file mode 100644 index dc6a581a..00000000 --- a/ftplugin/gitcommit.vim +++ /dev/null @@ -1,68 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'git') == -1 -   -" Vim filetype plugin -" Language:	git commit file -" Maintainer:	Tim Pope <vimNOSPAM@tpope.org> -" Last Change:	2013 May 30 - -" Only do this when not done yet for this buffer -if (exists("b:did_ftplugin")) -  finish -endif - -runtime! ftplugin/git.vim -let b:did_ftplugin = 1 - -setlocal comments=:# commentstring=#\ %s -setlocal nomodeline tabstop=8 formatoptions+=tl textwidth=72 -setlocal formatoptions-=c formatoptions-=r formatoptions-=o formatoptions-=q -let b:undo_ftplugin = 'setl modeline< tabstop< formatoptions< tw< com< cms<' - -if exists("g:no_gitcommit_commands") || v:version < 700 -  finish -endif - -if !exists("b:git_dir") -  let b:git_dir = expand("%:p:h") -endif - -command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>) - -let b:undo_ftplugin = b:undo_ftplugin . "|delc DiffGitCached" - -function! s:diffcomplete(A,L,P) -  let args = "" -  if a:P <= match(a:L." -- "," -- ")+3 -    let args = args . "-p\n--stat\n--shortstat\n--summary\n--patch-with-stat\n--no-renames\n-B\n-M\n-C\n" -  end -  if exists("b:git_dir") && a:A !~ '^-' -    let tree = fnamemodify(b:git_dir,':h') -    if strpart(getcwd(),0,strlen(tree)) == tree -      let args = args."\n".system("git diff --cached --name-only") -    endif -  endif -  return args -endfunction - -function! s:gitdiffcached(bang,gitdir,...) -  let tree = fnamemodify(a:gitdir,':h') -  let name = tempname() -  let git = "git" -  if strpart(getcwd(),0,strlen(tree)) != tree -    let git .= " --git-dir=".(exists("*shellescape") ? shellescape(a:gitdir) : '"'.a:gitdir.'"') -  endif -  if a:0 -    let extra = join(map(copy(a:000),exists("*shellescape") ? 'shellescape(v:val)' : "'\"'.v:val.'\"'")) -  else -    let extra = "-p --stat=".&columns -  endif -  call system(git." diff --cached --no-color --no-ext-diff ".extra." > ".(exists("*shellescape") ? shellescape(name) : name)) -  exe "pedit ".(exists("*fnameescape") ? fnameescape(name) : name) -  wincmd P -  let b:git_dir = a:gitdir -  command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>) -  nnoremap <buffer> <silent> q :q<CR> -  setlocal buftype=nowrite nobuflisted noswapfile nomodifiable filetype=git -endfunction - -endif diff --git a/ftplugin/gitconfig.vim b/ftplugin/gitconfig.vim deleted file mode 100644 index 23282522..00000000 --- a/ftplugin/gitconfig.vim +++ /dev/null @@ -1,19 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'git') == -1 -   -" Vim filetype plugin -" Language:	git config file -" Maintainer:	Tim Pope <vimNOSPAM@tpope.org> -" Last Change:	2009 Dec 24 - -" Only do this when not done yet for this buffer -if (exists("b:did_ftplugin")) -  finish -endif -let b:did_ftplugin = 1 - -setlocal formatoptions-=t formatoptions+=croql -setlocal comments=:#,:; commentstring=;\ %s - -let b:undo_ftplugin = "setl fo< com< cms<" - -endif diff --git a/ftplugin/gitrebase.vim b/ftplugin/gitrebase.vim deleted file mode 100644 index 032aba31..00000000 --- a/ftplugin/gitrebase.vim +++ /dev/null @@ -1,49 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'git') == -1 -   -" Vim filetype plugin -" Language:	git rebase --interactive -" Maintainer:	Tim Pope <vimNOSPAM@tpope.org> -" Last Change:	2010 May 21 - -" Only do this when not done yet for this buffer -if (exists("b:did_ftplugin")) -  finish -endif - -runtime! ftplugin/git.vim -let b:did_ftplugin = 1 - -setlocal comments=:# commentstring=#\ %s formatoptions-=t -setlocal nomodeline -if !exists("b:undo_ftplugin") -  let b:undo_ftplugin = "" -endif -let b:undo_ftplugin = b:undo_ftplugin."|setl com< cms< fo< ml<" - -function! s:choose(word) -  s/^\(\w\+\>\)\=\(\s*\)\ze\x\{4,40\}\>/\=(strlen(submatch(1)) == 1 ? a:word[0] : a:word) . substitute(submatch(2),'^$',' ','')/e -endfunction - -function! s:cycle() -  call s:choose(get({'s':'edit','p':'squash','e':'reword','r':'fixup'},getline('.')[0],'pick')) -endfunction - -command! -buffer -bar -range Pick   :<line1>,<line2>call s:choose('pick') -command! -buffer -bar -range Squash :<line1>,<line2>call s:choose('squash') -command! -buffer -bar -range Edit   :<line1>,<line2>call s:choose('edit') -command! -buffer -bar -range Reword :<line1>,<line2>call s:choose('reword') -command! -buffer -bar -range Fixup  :<line1>,<line2>call s:choose('fixup') -command! -buffer -bar -range Drop   :<line1>,<line2>call s:choose('drop') -command! -buffer -bar Cycle  :call s:cycle() -" The above are more useful when they are mapped; for example: -"nnoremap <buffer> <silent> S :Cycle<CR> - -if exists("g:no_plugin_maps") || exists("g:no_gitrebase_maps") -  finish -endif - -nnoremap <buffer> <expr> K col('.') < 7 && expand('<Lt>cword>') =~ '\X' && getline('.') =~ '^\w\+\s\+\x\+\>' ? 'wK' : 'K' - -let b:undo_ftplugin = b:undo_ftplugin . "|nunmap <buffer> K" - -endif diff --git a/ftplugin/gitsendemail.vim b/ftplugin/gitsendemail.vim deleted file mode 100644 index 69e0360e..00000000 --- a/ftplugin/gitsendemail.vim +++ /dev/null @@ -1,10 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'git') == -1 -   -" Vim filetype plugin -" Language:	git send-email message -" Maintainer:	Tim Pope <vimNOSPAM@tpope.org> -" Last Change:	2009 Dec 24 - -runtime! ftplugin/mail.vim - -endif diff --git a/ftplugin/julia.vim b/ftplugin/julia.vim new file mode 100644 index 00000000..2d1bcb49 --- /dev/null +++ b/ftplugin/julia.vim @@ -0,0 +1,99 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1 +   +" Vim filetype plugin file +" Language:	Julia +" Maintainer:	Carlo Baldassi <carlobaldassi@gmail.com> +" Last Change:	2014 may 29 + +if exists("b:did_ftplugin") +  finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo-=C + +setlocal include=^\\s*\\%(reload\\\|include\\)\\> +setlocal suffixesadd=.jl +setlocal comments=:# +setlocal commentstring=#=%s=# +setlocal cinoptions+=#1 +setlocal define=^\\s*macro\\> + +let b:julia_vim_loaded = 1 + +let b:undo_ftplugin = "setlocal include< suffixesadd< comments< commentstring<" +      \ . " define< shiftwidth< expandtab< indentexpr< indentkeys< cinoptions< omnifunc<" +      \ . " | unlet! b:julia_vim_loaded" + +" MatchIt plugin support +if exists("loaded_matchit") +  let b:match_ignorecase = 0 + +  " note: begin_keywords must contain all blocks in order +  " for nested-structures-skipping to work properly +  let b:julia_begin_keywords = '\%(\%(\.\s*\)\@<!\|\%(@\s*.\s*\)\@<=\)\<\%(\%(staged\)\?function\|macro\|begin\|mutable\s\+struct\|\%(mutable\s\+\)\@<!struct\|\%(abstract\|primitive\)\s\+type\|\%(\(abstract\|primitive\)\s\+\)\@<!type\|immutable\|let\|do\|\%(bare\)\?module\|quote\|if\|for\|while\|try\)\>' +  let s:macro_regex = '@\%(#\@!\S\)\+\s\+' +  let s:nomacro = '\%(' . s:macro_regex . '\)\@<!' +  let s:yesmacro = s:nomacro . '\%('. s:macro_regex . '\)\+' +  let b:julia_begin_keywordsm = '\%(' . s:yesmacro . b:julia_begin_keywords . '\)\|' +        \ . '\%(' . s:nomacro . b:julia_begin_keywords . '\)' +  let b:julia_end_keywords = '\<end\>' + +  " note: this function relies heavily on the syntax file +  function! JuliaGetMatchWords() +    let [l,c] = [line('.'),col('.')] +    let attr = synIDattr(synID(l, c, 1),"name") +    let c1 = c +    while attr == 'juliaMacro' +      normal! W +      if line('.') > l || col('.') == c1 +        call cursor(l, c) +        return '' +      endif +      let attr = synIDattr(synID(l, col('.'), 1),"name") +      let c1 = col('.') +    endwhile +    call cursor(l, c) +    if attr == 'juliaConditional' +      return b:julia_begin_keywordsm . ':\<\%(elseif\|else\)\>:' . b:julia_end_keywords +    elseif attr =~ '\<\%(juliaRepeat\|juliaRepKeyword\)\>' +      return b:julia_begin_keywordsm . ':\<\%(break\|continue\)\>:' . b:julia_end_keywords +    elseif attr == 'juliaBlKeyword' +      return b:julia_begin_keywordsm . ':' . b:julia_end_keywords +    elseif attr == 'juliaException' +      return b:julia_begin_keywordsm . ':\<\%(catch\|finally\)\>:' . b:julia_end_keywords +    endif +    return '\<\>:\<\>' +  endfunction + +  let b:match_words = 'JuliaGetMatchWords()' + +  " we need to skip everything within comments, strings and +  " the 'end' keyword when it is used as a range rather than as +  " the end of a block +  let b:match_skip = 'synIDattr(synID(line("."),col("."),1),"name") =~ ' +        \ . '"\\<julia\\%(Comprehension\\%(For\\|If\\)\\|RangeEnd\\|SymbolS\\?\\|Comment[LM]\\|\\%([bv]\\|ip\\|MIME\\|Shell\\|Doc\\)\\?String\\|RegEx\\)\\>"' + +  let b:undo_ftplugin = b:undo_ftplugin +        \ . " | unlet! b:match_words b:match_skip b:match_ignorecase" +        \ . " | unlet! b:julia_begin_keywords b:julia_end_keywords" +        \ . " | delfunction JuliaGetMatchWords" +        \ . " | call julia_blocks#remove_mappings()" + +  if get(g:, "julia_blocks", 1) +    call julia_blocks#init_mappings() +    let b:undo_ftplugin .= " | call julia_blocks#remove_mappings()" +  endif + +endif + +if has("gui_win32") +  let b:browsefilter = "Julia Source Files (*.jl)\t*.jl\n" +  let b:undo_ftplugin = b:undo_ftplugin . " | unlet! b:browsefilter" +endif + +let &cpo = s:save_cpo +unlet s:save_cpo + +endif diff --git a/indent/fish.vim b/indent/fish.vim deleted file mode 100644 index c5f8e50e..00000000 --- a/indent/fish.vim +++ /dev/null @@ -1,6 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fish') == -1 -   -setlocal indentexpr=fish#Indent() -setlocal indentkeys+==end,=else,=case - -endif diff --git a/indent/fsharp.vim b/indent/fsharp.vim deleted file mode 100644 index bdc3e3f9..00000000 --- a/indent/fsharp.vim +++ /dev/null @@ -1,253 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fsharp') == -1 -   -" Vim indent file -" Language:     FSharp -" Maintainers:  Jean-Francois Yuen   <jfyuen@happycoders.org> -"               Mike Leary           <leary@nwlink.com> -"               Markus Mottl         <markus.mottl@gmail.com> -"               Rudi Grinberg        <rudi.grinberg@gmail.com> -"               Gregor Uhlenheuer    <kongo2002@gmail.com> -" Last Change:  2013 Jun 29 -"               2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working -"               2005 May 09 - Added an option to not indent OCaml-indents specially (MM) -"               2013 June   - commented textwidth (Marc Weber) -"               2014 August - Ported to F# -"               2014 August - F# specific cleanup -" -" Marc Weber's comment: This file may contain a lot of (very custom) stuff -" which eventually should be moved somewhere else .. - -" Only load this indent file when no other was loaded. - -if exists("b:did_indent") -    finish -endif -let b:did_indent = 1 - -setlocal indentexpr=GetFsharpIndent() -setlocal indentkeys+=0=and,0=class,0=constraint,0=done,0=else,0=end,0=exception,0=external,0=if,0=in,0=include,0=inherit,0=let,0=method,0=open,0=then,0=type,0=val,0=with,0;;,0>\],0\|\],0>},0\|,0},0\],0) - -" Only define the function once. -if exists("*GetFsharpIndent") -    finish -endif - -" Skipping pattern, for comments -function! s:GetLineWithoutFullComment(lnum) -    let lnum = prevnonblank(a:lnum - 1) -    let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '') -    while lline =~ '^\s*$' && lnum > 0 -        let lnum = prevnonblank(lnum - 1) -        let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '') -    endwhile -    return lnum -endfunction - -" Indent for ';;' to match multiple 'let' -function! s:GetInd(lnum, pat, lim) -    let llet = search(a:pat, 'bW') -    let old = indent(a:lnum) -    while llet > 0 -        let old = indent(llet) -        let nb = s:GetLineWithoutFullComment(llet) -        if getline(nb) =~ a:lim -            return old -        endif -        let llet = search(a:pat, 'bW') -    endwhile -    return old -endfunction - -" Indent pairs -function! s:FindPair(pstart, pmid, pend) -    call search(a:pend, 'bW') -    return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')) -endfunction - -" Indent 'let' -function! s:FindLet(pstart, pmid, pend) -    call search(a:pend, 'bW') -    return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ s:beflet')) -endfunction - -function! GetFsharpIndent() -    " Find a non-commented line above the current line. -    let lnum = s:GetLineWithoutFullComment(v:lnum) - -    " At the start of the file use zero indent. -    if lnum == 0 -        return 0 -    endif - -    let ind = indent(lnum) -    let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '') - -    " " Return single 'shiftwidth' after lines matching: -    " if lline =~ '^\s*|.*->\s*$' -    "     return ind + &sw -    " endif - -    let line = getline(v:lnum) - -    " Indent if current line begins with 'end': -    if line =~ '^\s*end\>' -        return s:FindPair(s:module, '','\<end\>') - -        " Indent if current line begins with 'done' for 'do': -    elseif line =~ '^\s*done\>' -        return s:FindPair('\<do\>', '','\<done\>') - -        " Indent if current line begins with '}' or '>}': -    elseif line =~ '^\s*\(\|>\)}' -        return s:FindPair('{', '','}') - -        " Indent if current line begins with ']', '|]' or '>]': -    elseif line =~ '^\s*\(\||\|>\)\]' -        return s:FindPair('\[', '','\]') - -        " Indent if current line begins with ')': -    elseif line =~ '^\s*)' -        return s:FindPair('(', '',')') - -        " Indent if current line begins with 'let': -    elseif line =~ '^\s*let\>' -        if lline !~ s:lim . '\|' . s:letlim . '\|' . s:beflet -            return s:FindLet(s:type, '','\<let\s*$') -        endif - -        " Indent if current line begins with 'class' or 'type': -    elseif line =~ '^\s*\(class\|type\)\>' -        if lline !~ s:lim . '\|\<and\s*$\|' . s:letlim -            return s:FindLet(s:type, '','\<\(class\|type\)\s*$') -        endif - -        " Indent for pattern matching: -    elseif line =~ '^\s*|' -        if lline !~ '^\s*\(|[^\]]\|\(match\|type\|with\)\>\)\|\<\(function\|private\|with\)\s*$' -            call search('|', 'bW') -            return indent(searchpair('^\s*\(match\|type\)\>\|\<\(function\|private\|with\)\s*$', '', '^\s*|', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") !~ "^\\s*|.*->"')) -        endif - -        " Indent if current line begins with ';;': -    elseif line =~ '^\s*;;' -        if lline !~ ';;\s*$' -            return s:GetInd(v:lnum, s:letpat, s:letlim) -        endif - -        " Indent if current line begins with 'in': -    elseif line =~ '^\s*in\>' -        if lline !~ '^\s*\(let\|and\)\>' -            return s:FindPair('\<let\>', '', '\<in\>') -        endif - -        " Indent if current line begins with 'else': -    elseif line =~ '^\s*else\>' -        if lline !~ '^\s*\(if\|then\)\>' -            return s:FindPair('\<if\>', '', '\<else\>') -        endif - -        " Indent if current line begins with 'then': -    elseif line =~ '^\s*then\>' -        if lline !~ '^\s*\(if\|else\)\>' -            return s:FindPair('\<if\>', '', '\<then\>') -        endif - -        " Indent if current line begins with 'and': -    elseif line =~ '^\s*and\>' -        if lline !~ '^\s*\(and\|let\|type\)\>\|\<end\s*$' -            return ind - &sw -        endif - -        " Indent if current line begins with 'with': -    elseif line =~ '^\s*with\>' -        if lline !~ '^\s*\(match\|try\)\>' -            return s:FindPair('\<\%(match\|try\)\>', '','\<with\>') -        endif - -        " Indent if current line begins with 'exception', 'external', 'include' or -        " 'open': -    elseif line =~ '^\s*\(exception\|external\|include\|open\)\>' -        if lline !~ s:lim . '\|' . s:letlim -            call search(line) -            return indent(search('^\s*\(\(exception\|external\|include\|open\|type\)\>\|val\>.*:\)', 'bW')) -        endif - -        " Indent if current line begins with 'val': -    elseif line =~ '^\s*val\>' -        if lline !~ '^\s*\(exception\|external\|include\|open\)\>\|' . s:obj . '\|' . s:letlim -            return indent(search('^\s*\(\(exception\|include\|initializer\|method\|open\|type\|val\)\>\|external\>.*:\)', 'bW')) -        endif - -        " Indent if current line begins with 'constraint', 'inherit', 'initializer' -        " or 'method': -    elseif line =~ '^\s*\(constraint\|inherit\|initializer\|method\)\>' -        if lline !~ s:obj -            return indent(search('\<\(object\|object\s*(.*)\)\s*$', 'bW')) + &sw -        endif - -    endif - -    " Add a 'shiftwidth' after lines ending with: -    if lline =~ '\(:\|=\|->\|<-\|(\|\[\|{\|{<\|\[|\|\[<\|\<\(begin\|do\|else\|fun\|function\|functor\|if\|initializer\|object\|private\|sig\|struct\|then\|try\)\|\<object\s*(.*)\)\s*$' -        let ind = ind + &sw - -        " Back to normal indent after lines ending with ';;': -    elseif lline =~ ';;\s*$' && lline !~ '^\s*;;' -        let ind = s:GetInd(v:lnum, s:letpat, s:letlim) - -        " Back to normal indent after lines ending with 'end': -    elseif lline =~ '\<end\s*$' -        let ind = s:FindPair(s:module, '','\<end\>') - -        " Back to normal indent after lines ending with 'in': -    elseif lline =~ '\<in\s*$' && lline !~ '^\s*in\>' -        let ind = s:FindPair('\<let\>', '', '\<in\>') - -        " Back to normal indent after lines ending with 'done': -    elseif lline =~ '\<done\s*$' -        let ind = s:FindPair('\<do\>', '','\<done\>') - -        " Back to normal indent after lines ending with '}' or '>}': -    elseif lline =~ '\(\|>\)}\s*$' -        let ind = s:FindPair('{', '','}') - -        " Back to normal indent after lines ending with ']', '|]' or '>]': -    elseif lline =~ '\(\||\|>\)\]\s*$' -        let ind = s:FindPair('\[', '','\]') - -        " Back to normal indent after comments: -    elseif lline =~ '\*)\s*$' -        call search('\*)', 'bW') -        let ind = indent(searchpair('(\*', '', '\*)', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')) - -        " Back to normal indent after lines ending with ')': -    elseif lline =~ ')\s*$' -        let ind = s:FindPair('(', '',')') - -        " If this is a multiline comment then align '*': -    elseif lline =~ '^\s*(\*' && line =~ '^\s*\*' -        let ind = ind + 1 - -    else -        " Don't change indentation of this line -        " for new lines (indent==0) use indentation of previous line - -        " This is for preventing removing indentation of these args: -        "   let f x = -        "     let y = x + 1 in -        "     Printf.printf -        "       "o"           << here -        "       "oeuth"       << don't touch indentation - -        let i = indent(v:lnum) -        return i == 0 ? ind : i - -    endif - -    return ind - -endfunction - -" vim: sw=4 et sts=4 - -endif diff --git a/indent/gitconfig.vim b/indent/gitconfig.vim deleted file mode 100644 index e0e4a456..00000000 --- a/indent/gitconfig.vim +++ /dev/null @@ -1,42 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'git') == -1 -   -" Vim indent file -" Language:	git config file -" Maintainer:	Tim Pope <vimNOSPAM@tpope.org> -" Last Change:	2013 May 30 - -if exists("b:did_indent") -  finish -endif -let b:did_indent = 1 - -setlocal autoindent -setlocal indentexpr=GetGitconfigIndent() -setlocal indentkeys=o,O,*<Return>,0[,],0;,0#,=,!^F - -let b:undo_indent = 'setl ai< inde< indk<' - -" Only define the function once. -if exists("*GetGitconfigIndent") -  finish -endif - -function! GetGitconfigIndent() -  let sw    = exists('*shiftwidth') ? shiftwidth() : &sw -  let line  = getline(prevnonblank(v:lnum-1)) -  let cline = getline(v:lnum) -  if line =~  '\\\@<!\%(\\\\\)*\\$' -    " odd number of slashes, in a line continuation -    return 2 * sw -  elseif cline =~ '^\s*\[' -    return 0 -  elseif cline =~ '^\s*\a' -    return sw -  elseif cline == ''       && line =~ '^\[' -    return sw -  else -    return -1 -  endif -endfunction - -endif diff --git a/indent/glsl.vim b/indent/glsl.vim deleted file mode 100644 index 64f3a6fa..00000000 --- a/indent/glsl.vim +++ /dev/null @@ -1,15 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'glsl') == -1 -   -" Language: OpenGL Shading Language -" Maintainer: Sergey Tikhomirov <sergey@tikhomirov.io> - -if exists("b:did_indent") -  finish -endif - -setlocal autoindent cindent -setlocal formatoptions+=roq - -" vim:set sts=2 sw=2 : - -endif diff --git a/indent/julia.vim b/indent/julia.vim index 7fafe89c..4833d7e5 100644 --- a/indent/julia.vim +++ b/indent/julia.vim @@ -3,13 +3,13 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1  " Vim indent file  " Language:	Julia  " Maintainer:	Carlo Baldassi <carlobaldassi@gmail.com> -" Last Change:	2011 dec 11 -" Notes:        based on Bram Moneaar's indent file for vim +" Last Change:	2016 jun 16 +" Notes:        originally based on Bram Molenaar's indent file for vim  setlocal autoindent  setlocal indentexpr=GetJuliaIndent() -setlocal indentkeys+==end,=else,=catch,=finally +setlocal indentkeys+==end,=else,=catch,=finally,),],}  setlocal indentkeys-=0#  setlocal indentkeys-=:  setlocal indentkeys-=0{ @@ -21,12 +21,16 @@ if exists("*GetJuliaIndent")    finish  endif -let s:skipPatterns = '\<julia\%(Comment\)\>' +let s:skipPatterns = '\<julia\%(Comprehension\%(For\|If\)\|RangeEnd\|CommentL\|\%([bsv]\|ip\|big\|MIME\|Shell\|Printf\|Doc\)\=String\|RegEx\|SymbolS\?\)\>' -function JuliaMatch(lnum, str, regex, st) +function JuliaMatch(lnum, str, regex, st, ...)    let s = a:st +  let e = a:0 > 0 ? a:1 : -1    while 1      let f = match(a:str, a:regex, s) +    if e >= 0 && f >= e +      return -1 +    endif      if f >= 0        let attr = synIDattr(synID(a:lnum,f+1,1),"name")        if attr =~ s:skipPatterns @@ -39,15 +43,16 @@ function JuliaMatch(lnum, str, regex, st)    return f  endfunction -function GetJuliaNestingStruct(lnum) +function GetJuliaNestingStruct(lnum, ...)    " Auxiliary function to inspect the block structure of a line    let line = getline(a:lnum) -  let s = 0 +  let s = a:0 > 0 ? a:1 : 0 +  let e = a:0 > 1 ? a:2 : -1    let blocks_stack = []    let num_closed_blocks = 0    while 1 -    let fb = JuliaMatch(a:lnum, line, '@\@<!\<\%(if\|else\%(if\)\=\|while\|for\|try\|catch\|finally\|function\|macro\|begin\|type\|immutable\|let\|\%(bare\)\?module\|quote\|do\)\>', s) -    let fe = JuliaMatch(a:lnum, line, '@\@<!\<end\>', s) +    let fb = JuliaMatch(a:lnum, line, '@\@<!\<\%(if\|else\%(if\)\=\|while\|for\|try\|catch\|finally\|\%(staged\)\?function\|macro\|begin\|mutable\s\+struct\|\%(mutable\s\+\)\@<!struct\|\%(abstract\|primitive\)\s\+type\|\%(\%(abstract\|primitive\)\s\+\)\@<!type\|immutable\|let\|\%(bare\)\?module\|quote\|do\)\>', s, e) +    let fe = JuliaMatch(a:lnum, line, '@\@<!\<end\>', s, e)      if fb < 0 && fe < 0        " No blocks found @@ -128,9 +133,13 @@ function GetJuliaNestingStruct(lnum)          continue        endif -      let i = JuliaMatch(a:lnum, line, '@\@<!\<\%(while\|for\|function\|macro\|begin\|type\|immutable\|let\|quote\|do\)\>', s) +      let i = JuliaMatch(a:lnum, line, '@\@<!\<\%(while\|for\|\%(staged\)\?function\|macro\|begin\|\%(mutable\s\+\)\?struct\|\%(\%(abstract\|primitive\)\s\+\)\?type\|immutable\|let\|quote\|do\)\>', s)        if i >= 0 && i == fb -        let s = i+1 +        if match(line, '\<\%(mutable\|abstract\|primitive\)', i) != -1 +          let s = i+11 +        else +          let s = i+1 +        endif          call add(blocks_stack, 'other')          continue        endif @@ -158,6 +167,128 @@ function GetJuliaNestingStruct(lnum)    return [num_open_blocks, num_closed_blocks]  endfunction +function GetJuliaNestingBrackets(lnum, c) +  " Auxiliary function to inspect the brackets structure of a line +  let line = getline(a:lnum)[0 : (a:c - 1)] +  let s = 0 +  let brackets_stack = [] +  let last_closed_bracket = -1 +  while 1 +    let fb = JuliaMatch(a:lnum, line, '[([{]', s) +    let fe = JuliaMatch(a:lnum, line, '[])}]', s) + +    if fb < 0 && fe < 0 +      " No brackets found +      break +    end + +    if fb >= 0 && (fb < fe || fe < 0) +      " The first occurrence is an opening bracket + +      let i = JuliaMatch(a:lnum, line, '(', s) +      if i >= 0 && i == fb +        let s = i+1 +        call add(brackets_stack, ['par',i]) +        continue +      endif + +      let i = JuliaMatch(a:lnum, line, '\[', s) +      if i >= 0 && i == fb +        let s = i+1 +        call add(brackets_stack, ['sqbra',i]) +        continue +      endif + +      let i = JuliaMatch(a:lnum, line, '{', s) +      if i >= 0 && i == fb +        let s = i+1 +        call add(brackets_stack, ['curbra',i]) +        continue +      endif + +      " Note: it should be impossible to get here +      break + +    else +      " The first occurrence is a closing bracket + +      let i = JuliaMatch(a:lnum, line, ')', s) +      if i >= 0 && i == fe +        let s = i+1 +        if len(brackets_stack) > 0 && brackets_stack[-1][0] == 'par' +          call remove(brackets_stack, -1) +        else +          let last_closed_bracket = i + 1 +        endif +        continue +      endif + +      let i = JuliaMatch(a:lnum, line, ']', s) +      if i >= 0 && i == fe +        let s = i+1 +        if len(brackets_stack) > 0 && brackets_stack[-1][0] == 'sqbra' +          call remove(brackets_stack, -1) +        else +          let last_closed_bracket = i + 1 +        endif +        continue +      endif + +      let i = JuliaMatch(a:lnum, line, '}', s) +      if i >= 0 && i == fe +        let s = i+1 +        if len(brackets_stack) > 0 && brackets_stack[-1][0] == 'curbra' +          call remove(brackets_stack, -1) +        else +          let last_closed_bracket = i + 1 +        endif +        continue +      endif + +      " Note: it should be impossible to get here +      break + +    endif + +    " Note: it should be impossible to get here +    break +  endwhile +  let first_open_bracket = -1 +  let last_open_bracket = -1 +  if len(brackets_stack) > 0 +    let first_open_bracket = brackets_stack[0][1] +    let last_open_bracket = brackets_stack[-1][1] +  endif +  return [first_open_bracket, last_open_bracket, last_closed_bracket] +endfunction + +let s:bracketBlocks = '\<julia\%(\%(\%(Printf\)\?Par\|SqBra\|CurBra\)Block\|ParBlockInRange\|StringVars\%(Par\|SqBra\|CurBra\)\|Dollar\%(Par\|SqBra\)\|QuotedParBlockS\?\)\>' + +function IsInBrackets(lnum, c) +  let stack = map(synstack(a:lnum, a:c), 'synIDattr(v:val, "name")') +  call filter(stack, 'v:val =~# s:bracketBlocks') +  return len(stack) > 0 +endfunction + +" Auxiliary function to find a line which does not start in the middle of a +" multiline bracketed expression, to be used as reference for block +" indentation. +function LastBlockIndent(lnum) +  let lnum = a:lnum +  let ind = 0 +  while lnum > 0 +    let ind = indent(lnum) +    if ind == 0 +      return [lnum, 0] +    endif +    if !IsInBrackets(lnum, 1) +      break +    endif +    let lnum = prevnonblank(lnum - 1) +  endwhile +  return [max([lnum,1]), ind] +endfunction +  function GetJuliaIndent()    let s:save_ignorecase = &ignorecase    set noignorecase @@ -172,19 +303,81 @@ function GetJuliaIndent()      return 0    endif -  let ind = indent(lnum) +  let ind = -1 +  let st = -1 +  let lim = -1 + +  " Multiline bracketed expressions take precedence +  let c = len(getline(lnum)) + 1 +  while IsInBrackets(lnum, c) +    let [first_open_bracket, last_open_bracket, last_closed_bracket] = GetJuliaNestingBrackets(lnum, c) + +    " First scenario: the previous line has a hanging open bracket: +    " set the indentation to match the opening bracket (plus an extra space) +    if last_open_bracket != -1 +      let st = last_open_bracket +      let ind = virtcol([lnum, st + 1]) + +    " Second scenario: some multiline bracketed expression was closed in the +    " previous line. But since we know we are still in a bracketed expression, +    " we need to find the line where the bracket was open +    elseif last_closed_bracket != -1 " && exists("loaded_matchit") +      " we use the % command to skip back (this is buggy without matchit, and +      " is potentially a disaster if % got remapped) +      call cursor(lnum, last_closed_bracket) +      normal % +      if line(".") == lnum +        " something wrong here, give up +        let ind = indent(lnum) +      else +        let lnum = line(".") +        let c = col(".") - 1 +        if c == 0 +          " uhm, give up +          let ind = 0 +        else +          " we skipped a bracket set, keep searching for an opening bracket +          let lim = c +          continue +        endif +      endif + +    " Third scenario: nothing special, or matchit not available: keep the indentation +    else +      let ind = indent(lnum) +    endif + +    " In case the current line starts with a closing bracket, we align it with +    " the opening one. +    if JuliaMatch(v:lnum, getline(v:lnum), '[])}]', indent(v:lnum)) == indent(v:lnum) && ind > 0 +      return ind - 1 +    endif + +    break +  endwhile + +  if ind == -1 +    " We are not in a multiline bracketed expression. Thus we look for a +    " previous line to use as a reference +    let [lnum,ind] = LastBlockIndent(lnum) +    let c = len(getline(lnum)) + 1 +    if IsInBrackets(lnum, c) +      let [first_open_bracket, last_open_bracket, last_closed_bracket] = GetJuliaNestingBrackets(lnum, c) +      let lim = first_open_bracket +    endif +  end -  " Analyse previous line -  let [num_open_blocks, num_closed_blocks] = GetJuliaNestingStruct(lnum) +  " Analyse the reference line +  let [num_open_blocks, num_closed_blocks] = GetJuliaNestingStruct(lnum, st, lim)    " Increase indentation for each newly opened block -  " in the previous line +  " in the reference line    while num_open_blocks > 0      let ind += &sw      let num_open_blocks -= 1    endwhile -  " Analyse current line +  " Analyse the current line    let [num_open_blocks, num_closed_blocks] = GetJuliaNestingStruct(v:lnum)    " Decrease indentation for each closed block diff --git a/syntax/fish.vim b/syntax/fish.vim deleted file mode 100644 index f198dbaa..00000000 --- a/syntax/fish.vim +++ /dev/null @@ -1,41 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fish') == -1 -   -if exists('b:current_syntax') -    finish -endif - -syntax case match - -syntax keyword fishKeyword begin function end -syntax keyword fishConditional if else switch -syntax keyword fishRepeat while for in -syntax keyword fishLabel case - -syntax match fishComment /#.*/ -syntax match fishSpecial /\\$/ -syntax match fishIdentifier /\$[[:alnum:]_]\+/ -syntax region fishString start=/'/ skip=/\\'/ end=/'/ -syntax region fishString start=/"/ skip=/\\"/ end=/"/ contains=fishIdentifier -syntax match fishCharacter /\v\\[abefnrtv *?~%#(){}\[\]<>&;"']|\\[xX][0-9a-f]{1,2}|\\o[0-7]{1,2}|\\u[0-9a-f]{1,4}|\\U[0-9a-f]{1,8}|\\c[a-z]/ -syntax match fishStatement /\v;\s*\zs\k+>/ -syntax match fishCommandSub /\v\(\s*\zs\k+>/ - -syntax region fishLineContinuation matchgroup=fishStatement -            \ start='\v^\s*\zs\k+>' skip='\\$' end='$' -            \ contains=fishSpecial,fishIdentifier,fishString,fishCharacter,fishStatement,fishCommandSub,fishComment - -highlight default link fishKeyword Keyword -highlight default link fishConditional Conditional -highlight default link fishRepeat Repeat -highlight default link fishLabel Label -highlight default link fishComment Comment -highlight default link fishSpecial Special -highlight default link fishIdentifier Identifier -highlight default link fishString String -highlight default link fishCharacter Character -highlight default link fishStatement Statement -highlight default link fishCommandSub fishStatement - -let b:current_syntax = 'fish' - -endif diff --git a/syntax/fsharp.vim b/syntax/fsharp.vim deleted file mode 100644 index f66daa01..00000000 --- a/syntax/fsharp.vim +++ /dev/null @@ -1,269 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fsharp') == -1 -   -" Vim syntax file -" Language:     F# -" Last Change:  Sun 19 Oct 2014 11:11:44 PM CEST -" Maintainer:   Gregor Uhlenheuer <kongo2002@googlemail.com> -" -" Note:         This syntax file is a complete rewrite of the original version -"               of fs.vim from Choy Rim <choy.rim@gmail.com> and a slight -"               modified version from Thomas Schank <ThomasSchank@gmail.com> - -if version < 600 -    syntax clear -elseif exists('b:current_syntax') -    finish -endif - -" F# is case sensitive. -syn case match - -" reset 'iskeyword' setting -setl isk&vim - -" Scripting/preprocessor directives -syn match    fsharpSScript "^\s*#\S\+" transparent contains=fsharpScript,fsharpRegion,fsharpPreCondit - -syn match    fsharpScript contained "#" -syn keyword  fsharpScript contained quitlabels warnings directory cd load use -syn keyword  fsharpScript contained install_printer remove_printer requirethread -syn keyword  fsharpScript contained trace untrace untrace_all print_depth -syn keyword  fsharpScript contained print_length define undef if elif else endif -syn keyword  fsharpScript contained line error warning light nowarn - - -" comments -syn match    fsharpSingleLineComment "//.*$" contains=fsharpTodo,@Spell -syn region   fsharpDocComment start="///" end="$" contains=fsharpTodo,fsharpXml,@Spell keepend oneline -syn region   fsharpXml matchgroup=fsharpXmlDoc start="<[^>]\+>" end="</[^>]\+>" contained contains=fsharpXml - -" Double-backtick identifiers -syn region   fsharpDoubleBacktick start="``" end="``" keepend oneline - - -" symbol names -syn match fsharpSymbol "\%(let\|use\|mutable\|rec\|and\|private\)\@<=!\=\s\+\zs\w\+\ze\s*[^=:]*[=:]" -syn match fsharpSymbol "\%(member\)\@<=\s\+\w\+\.\zs\w\+" - - -" types -syn match    fsharpTypeName   "\%(\<type\s\+\)\@<=\w\+" - - -" errors -syn match    fsharpBraceErr   "}" -syn match    fsharpBrackErr   "\]" -syn match    fsharpParenErr   ")" -syn match    fsharpArrErr     "|]" -syn match    fsharpCommentErr "\*)" - - -" enclosing delimiters -syn region   fsharpEncl transparent matchgroup=fsharpKeyword start="(" matchgroup=fsharpKeyword end=")" contains=ALLBUT,fsharpParenErr,fsharpScript -syn region   fsharpEncl transparent matchgroup=fsharpKeyword start="{" matchgroup=fsharpKeyword end="}"  contains=ALLBUT,fsharpBraceErr,fsharpScript -syn region   fsharpEncl transparent matchgroup=fsharpKeyword start="\[" matchgroup=fsharpKeyword end="\]" contains=ALLBUT,fsharpBrackErr,fsharpScript -syn region   fsharpEncl transparent matchgroup=fsharpKeyword start="\[|" matchgroup=fsharpKeyword end="|\]" contains=ALLBUT,fsharpArrErr,fsharpScript - - -" comments -syn region   fsharpMultiLineComment start="(\*" end="\*)" contains=fsharpTodo -syn keyword  fsharpTodo contained TODO FIXME XXX NOTE - -" keywords -syn keyword fsharpKeyword    abstract as assert base begin class default delegate -syn keyword fsharpKeyword    do done downcast downto elif else end exception -syn keyword fsharpKeyword    extern for fun function global if in inherit inline -syn keyword fsharpKeyword    interface lazy let match member module mutable -syn keyword fsharpKeyword    namespace new of override rec static struct then -syn keyword fsharpKeyword    to type upcast use val void when while with - -syn keyword fsharpKeyword    async atomic break checked component const constraint -syn keyword fsharpKeyword    constructor continue decimal eager event external -syn keyword fsharpKeyword    fixed functor include method mixin object parallel -syn keyword fsharpKeyword    process pure return seq tailcall trait - -" additional operator keywords (Microsoft.FSharp.Core.Operators) -syn keyword fsharpKeyword    box hash sizeof typeof typedefof unbox ref fst snd -syn keyword fsharpKeyword    stdin stdout stderr - -" math operators (Microsoft.FSharp.Core.Operators) -syn keyword fsharpKeyword    abs acos asin atan atan2 ceil cos cosh exp floor log -syn keyword fsharpKeyword    log10 pown round sign sin sinh sqrt tan tanh - -syn keyword fsharpOCaml      asr land lor lsl lsr lxor mod sig - -if !exists('g:fsharp_no_linq') || g:fsharp_no_linq == 0 -    syn keyword fsharpLinq   orderBy select where yield -endif - -" open -syn keyword fsharpOpen       open - -" exceptions -syn keyword fsharpException  try failwith failwithf finally invalid_arg raise -syn keyword fsharpException  rethrow - -" modifiers -syn keyword fsharpModifier   abstract const extern internal override private -syn keyword fsharpModifier   protected public readonly sealed static virtual -syn keyword fsharpModifier   volatile - -" constants -syn keyword fsharpConstant   null -syn keyword fsharpBoolean    false true - -" types -syn keyword  fsharpType      array bool byte char decimal double enum exn float -syn keyword  fsharpType      float32 int int16 int32 int64 lazy_t list nativeint -syn keyword  fsharpType      obj option sbyte single string uint uint32 uint64 -syn keyword  fsharpType      uint16 unativeint unit - -" core classes -syn match    fsharpCore      "\u\a*\." transparent contains=fsharpCoreClass - -syn keyword  fsharpCoreClass Array Async Directory File List Option Path Map Set contained -syn keyword  fsharpCoreClass String Seq Tuple contained - -syn keyword fsharpCoreMethod printf printfn sprintf eprintf eprintfn fprintf -syn keyword fsharpCoreMethod fprintfn - -" options -syn keyword  fsharpOption    Some None - -" operators -syn keyword fsharpOperator   not and or - -syn match   fsharpFormat     display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bscdiuxXoEefFgGMOAat]\|\[\^\=.[^]]*\]\)" contained - -syn match    fsharpCharacter    "'\\\d\d\d'\|'\\[\'ntbr]'\|'.'" -syn match    fsharpCharErr      "'\\\d\d'\|'\\\d'" -syn match    fsharpCharErr      "'\\[^\'ntbr]'" -syn region   fsharpString       start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=fsharpFormat -syn region   fsharpString       start=+"""+ skip=+\\\\\|\\"+ end=+"""+ contains=fsharpFormat -syn region   fsharpString       start=+@"+ skip=+""+ end=+"+ contains=fsharpFormat - -syn match    fsharpFunDef       "->" -syn match    fsharpRefAssign    ":=" -syn match    fsharpTopStop      ";;" -syn match    fsharpOperator     "\^" -syn match    fsharpOperator     "::" - -syn match    fsharpLabel        "\<_\>" - -syn match    fsharpOperator     "&&" -syn match    fsharpOperator     "<" -syn match    fsharpOperator     ">" -syn match    fsharpOperator     "|>" -syn match    fsharpOperator     ":>" -syn match    fsharpOperator     ":?>" -syn match    fsharpOperator     "&&&" -syn match    fsharpOperator     "|||" -syn match    fsharpOperator     "\.\." - -syn match    fsharpKeyChar      "|[^\]]"me=e-1 -syn match    fsharpKeyChar      ";" -syn match    fsharpKeyChar      "\~" -syn match    fsharpKeyChar      "?" -syn match    fsharpKeyChar      "\*" -syn match    fsharpKeyChar      "+" -syn match    fsharpKeyChar      "=" -syn match    fsharpKeyChar      "|" -syn match    fsharpKeyChar      "(\*)" - -syn match    fsharpOperator     "<-" - -syn match    fsharpNumber        "\<\d\+" -syn match    fsharpNumber        "\<-\=\d\(_\|\d\)*\(u\|u\?[yslLn]\|UL\)\?\>" -syn match    fsharpNumber        "\<-\=0[x|X]\(\x\|_\)\+\(u\|u\?[yslLn]\|UL\)\?\>" -syn match    fsharpNumber        "\<-\=0[o|O]\(\o\|_\)\+\(u\|u\?[yslLn]\|UL\)\?\>" -syn match    fsharpNumber        "\<-\=0[b|B]\([01]\|_\)\+\(u\|u\?[yslLn]\|UL\)\?\>" -syn match    fsharpFloat         "\<-\=\d\(_\|\d\)*\.\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>" -syn match    fsharpFloat         "\<-\=\d\(_\|\d\)*\.\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>" -syn match    fsharpFloat         "\<\d\+\.\d*" - -" modules -syn match    fsharpModule     "\%(\<open\s\+\)\@<=[a-zA-Z.]\+" - -" attributes -syn region   fsharpAttrib matchgroup=fsharpAttribute start="\[<" end=">]" - -" regions -syn region   fsharpRegion matchgroup=fsharpPreCondit start="\%(end\)\@<!region.*$" -            \ end="endregion" fold contains=ALL contained - -if version >= 508 || !exists("did_fs_syntax_inits") -    if version < 508 -        let did_fs_syntax_inits = 1 -        command -nargs=+ HiLink hi link <args> -    else -        command -nargs=+ HiLink hi def link <args> -    endif - -    HiLink fsharpBraceErr          Error -    HiLink fsharpBrackErr          Error -    HiLink fsharpParenErr          Error -    HiLink fsharpArrErr            Error -    HiLink fsharpCommentErr        Error - -    HiLink fsharpSingleLineComment Comment -    HiLink fsharpMultiLineComment  Comment -    HiLink fsharpDocComment        Comment -    HiLink fsharpXml               Comment -    HiLink fsharpDoubleBacktick    String - -    HiLink fsharpOpen              Include -    HiLink fsharpModPath           Include -    HiLink fsharpScript            Include -    HiLink fsharpPreCondit         Include - -    HiLink fsharpKeyword           Keyword -    HiLink fsharpCoreMethod        Keyword - -    HiLink fsharpOCaml             Statement -    HiLink fsharpLinq              Statement - -    HiLink fsharpSymbol            Function - -    HiLink fsharpFunDef            Operator -    HiLink fsharpRefAssign         Operator -    HiLink fsharpTopStop           Operator -    HiLink fsharpKeyChar           Operator -    HiLink fsharpOperator          Operator - -    HiLink fsharpBoolean           Boolean -    HiLink fsharpConstant          Constant -    HiLink fsharpCharacter         Character -    HiLink fsharpNumber            Number -    HiLink fsharpFloat             Float - -    HiLink fsharpString            String -    HiLink fsharpFormat            Special - -    HiLink fsharpModifier          StorageClass - -    HiLink fsharpException         Exception - -    HiLink fsharpLabel             Identifier -    HiLink fsharpOption            Identifier -    HiLink fsharpTypeName          Identifier -    HiLink fsharpModule            Identifier - -    HiLink fsharpType              Type - -    HiLink fsharpCoreClass         Typedef -    HiLink fsharpAttrib            Typedef -    HiLink fsharpXmlDoc            Typedef - -    HiLink fsharpTodo              Todo - -    HiLink fsharpEncl              Delimiter -    HiLink fsharpAttribute         Delimiter - -    delcommand HiLink -endif - -let b:current_syntax = 'fsharp' - -" vim: sw=4 et sts=4 - -endif diff --git a/syntax/git.vim b/syntax/git.vim deleted file mode 100644 index 53f44d36..00000000 --- a/syntax/git.vim +++ /dev/null @@ -1,82 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'git') == -1 -   -" Vim syntax file -" Language:	generic git output -" Maintainer:	Tim Pope <vimNOSPAM@tpope.org> -" Last Change:	2010 May 21 - -if exists("b:current_syntax") -  finish -endif - -syn case match -syn sync minlines=50 - -syn include @gitDiff syntax/diff.vim - -syn region gitHead start=/\%^/ end=/^$/ -syn region gitHead start=/\%(^commit\%( \x\{40\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/ - -" For git reflog and git show ...^{tree}, avoid sync issues -syn match gitHead /^\d\{6\} \%(\w\{4} \)\=\x\{40\}\%( [0-3]\)\=\t.*/ -syn match gitHead /^\x\{40\} \x\{40}\t.*/ - -syn region gitDiff start=/^\%(diff --git \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold -syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\) \|$\)\@=/ contains=@gitDiff - -syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff -syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff -syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge -syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge - -syn match  gitKeyword /^\%(object\|type\|tag\|commit\|tree\|parent\|encoding\)\>/ contained containedin=gitHead nextgroup=gitHash,gitType skipwhite -syn match  gitKeyword /^\%(tag\>\|ref:\)/ contained containedin=gitHead nextgroup=gitReference skipwhite -syn match  gitKeyword /^Merge:/  contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite -syn match  gitMode    /^\d\{6\}/ contained containedin=gitHead nextgroup=gitType,gitHash skipwhite -syn match  gitIdentityKeyword /^\%(author\|committer\|tagger\)\>/ contained containedin=gitHead nextgroup=gitIdentity skipwhite -syn match  gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite -syn match  gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite - -syn match  gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite -syn match  gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite -syn match  gitReflogMiddle /\S\+@{\d\+} (/he=e-2 nextgroup=gitIdentity - -syn match  gitDate      /\<\u\l\l \u\l\l \d\=\d \d\d:\d\d:\d\d \d\d\d\d [+-]\d\d\d\d/ contained -syn match  gitDate      /-\=\d\+ [+-]\d\d\d\d\>/               contained -syn match  gitDate      /\<\d\+ \l\+ ago\>/                    contained -syn match  gitType      /\<\%(tag\|commit\|tree\|blob\)\>/     contained nextgroup=gitHash skipwhite -syn match  gitStage     /\<\d\t\@=/                            contained -syn match  gitReference /\S\+\S\@!/                            contained -syn match  gitHash      /\<\x\{40\}\>/                         contained nextgroup=gitIdentity,gitStage,gitHash skipwhite -syn match  gitHash      /^\<\x\{40\}\>/ containedin=gitHead contained nextgroup=gitHash skipwhite -syn match  gitHashAbbrev /\<\x\{4,40\}\>/           contained nextgroup=gitHashAbbrev skipwhite -syn match  gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite - -syn match  gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite -syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity - -syn match  gitNotesHeader /^Notes:\ze\n    / - -hi def link gitDateHeader        gitIdentityHeader -hi def link gitIdentityHeader    gitIdentityKeyword -hi def link gitIdentityKeyword   Label -hi def link gitNotesHeader       gitKeyword -hi def link gitReflogHeader      gitKeyword -hi def link gitKeyword           Keyword -hi def link gitIdentity          String -hi def link gitEmailDelimiter    Delimiter -hi def link gitEmail             Special -hi def link gitDate              Number -hi def link gitMode              Number -hi def link gitHashAbbrev        gitHash -hi def link gitHash              Identifier -hi def link gitReflogMiddle      gitReference -hi def link gitReference         Function -hi def link gitStage             gitType -hi def link gitType              Type -hi def link gitDiffAdded         diffAdded -hi def link gitDiffRemoved       diffRemoved - -let b:current_syntax = "git" - -endif diff --git a/syntax/gitcommit.vim b/syntax/gitcommit.vim deleted file mode 100644 index 74477b27..00000000 --- a/syntax/gitcommit.vim +++ /dev/null @@ -1,88 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'git') == -1 -   -" Vim syntax file -" Language:	git commit file -" Maintainer:	Tim Pope <vimNOSPAM@tpope.org> -" Filenames:	*.git/COMMIT_EDITMSG -" Last Change:	2013 May 30 - -if exists("b:current_syntax") -  finish -endif - -syn case match -syn sync minlines=50 - -if has("spell") -  syn spell toplevel -endif - -syn include @gitcommitDiff syntax/diff.vim -syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|#\)\@=/ fold contains=@gitcommitDiff - -syn match   gitcommitFirstLine	"\%^[^#].*"  nextgroup=gitcommitBlank skipnl -syn match   gitcommitSummary	"^.\{0,50\}" contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell -syn match   gitcommitOverflow	".*" contained contains=@Spell -syn match   gitcommitBlank	"^[^#].*" contained contains=@Spell -syn match   gitcommitComment	"^#.*" -syn match   gitcommitHead	"^\%(#   .*\n\)\+#$" contained transparent -syn match   gitcommitOnBranch	"\%(^# \)\@<=On branch" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite -syn match   gitcommitOnBranch	"\%(^# \)\@<=Your branch .\{-\} '" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite -syn match   gitcommitBranch	"[^ ']\+" contained -syn match   gitcommitNoBranch	"\%(^# \)\@<=Not currently on any branch." contained containedin=gitcommitComment -syn match   gitcommitHeader	"\%(^# \)\@<=.*:$"	contained containedin=gitcommitComment -syn region  gitcommitAuthor	matchgroup=gitCommitHeader start=/\%(^# \)\@<=\%(Author\|Committer\):/ end=/$/ keepend oneline contained containedin=gitcommitComment transparent -syn match   gitcommitNoChanges	"\%(^# \)\@<=No changes$" contained containedin=gitcommitComment - -syn region  gitcommitUntracked	start=/^# Untracked files:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitUntrackedFile fold -syn match   gitcommitUntrackedFile  "\t\@<=.*"	contained - -syn region  gitcommitDiscarded	start=/^# Change\%(s not staged for commit\|d but not updated\):/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitDiscardedType fold -syn region  gitcommitSelected	start=/^# Changes to be committed:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitSelectedType fold -syn region  gitcommitUnmerged	start=/^# Unmerged paths:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitUnmergedType fold - - -syn match   gitcommitDiscardedType	"\t\@<=[[:lower:]][^:]*[[:lower:]]: "he=e-2	contained containedin=gitcommitComment nextgroup=gitcommitDiscardedFile skipwhite -syn match   gitcommitSelectedType	"\t\@<=[[:lower:]][^:]*[[:lower:]]: "he=e-2	contained containedin=gitcommitComment nextgroup=gitcommitSelectedFile skipwhite -syn match   gitcommitUnmergedType	"\t\@<=[[:lower:]][^:]*[[:lower:]]: "he=e-2	contained containedin=gitcommitComment nextgroup=gitcommitUnmergedFile skipwhite -syn match   gitcommitDiscardedFile	".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitDiscardedArrow -syn match   gitcommitSelectedFile	".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitSelectedArrow -syn match   gitcommitUnmergedFile	".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitSelectedArrow -syn match   gitcommitDiscardedArrow	" -> " contained nextgroup=gitcommitDiscardedFile -syn match   gitcommitSelectedArrow	" -> " contained nextgroup=gitcommitSelectedFile -syn match   gitcommitUnmergedArrow	" -> " contained nextgroup=gitcommitSelectedFile - -syn match   gitcommitWarning		"\%^[^#].*: needs merge$" nextgroup=gitcommitWarning skipnl -syn match   gitcommitWarning		"^[^#].*: needs merge$" nextgroup=gitcommitWarning skipnl contained -syn match   gitcommitWarning		"^\%(no changes added to commit\|nothing \%(added \)\=to commit\)\>.*\%$" - -hi def link gitcommitSummary		Keyword -hi def link gitcommitComment		Comment -hi def link gitcommitUntracked		gitcommitComment -hi def link gitcommitDiscarded		gitcommitComment -hi def link gitcommitSelected		gitcommitComment -hi def link gitcommitUnmerged		gitcommitComment -hi def link gitcommitOnBranch		Comment -hi def link gitcommitBranch		Special -hi def link gitcommitNoBranch		gitCommitBranch -hi def link gitcommitDiscardedType	gitcommitType -hi def link gitcommitSelectedType	gitcommitType -hi def link gitcommitUnmergedType	gitcommitType -hi def link gitcommitType		Type -hi def link gitcommitNoChanges		gitcommitHeader -hi def link gitcommitHeader		PreProc -hi def link gitcommitUntrackedFile	gitcommitFile -hi def link gitcommitDiscardedFile	gitcommitFile -hi def link gitcommitSelectedFile	gitcommitFile -hi def link gitcommitUnmergedFile	gitcommitFile -hi def link gitcommitFile		Constant -hi def link gitcommitDiscardedArrow	gitcommitArrow -hi def link gitcommitSelectedArrow	gitcommitArrow -hi def link gitcommitUnmergedArrow	gitcommitArrow -hi def link gitcommitArrow		gitcommitComment -"hi def link gitcommitOverflow		Error -hi def link gitcommitBlank		Error - -let b:current_syntax = "gitcommit" - -endif diff --git a/syntax/gitconfig.vim b/syntax/gitconfig.vim deleted file mode 100644 index 49b992b0..00000000 --- a/syntax/gitconfig.vim +++ /dev/null @@ -1,42 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'git') == -1 -   -" Vim syntax file -" Language:	git config file -" Maintainer:	Tim Pope <vimNOSPAM@tpope.org> -" Filenames:	gitconfig, .gitconfig, *.git/config -" Last Change:	2010 May 21 - -if exists("b:current_syntax") -  finish -endif - -setlocal iskeyword+=- -setlocal iskeyword-=_ -syn case ignore -syn sync minlines=10 - -syn match   gitconfigComment	"[#;].*" -syn match   gitconfigSection	"\%(^\s*\)\@<=\[[a-z0-9.-]\+\]" -syn match   gitconfigSection	'\%(^\s*\)\@<=\[[a-z0-9.-]\+ \+\"\%([^\\"]\|\\.\)*"\]' -syn match   gitconfigVariable	 "\%(^\s*\)\@<=\a\k*\%(\s*\%([=#;]\|$\)\)\@=" nextgroup=gitconfigAssignment skipwhite -syn region  gitconfigAssignment  matchgroup=gitconfigNone start=+=\s*+ skip=+\\+ end=+\s*$+ contained contains=gitconfigBoolean,gitconfigNumber,gitConfigString,gitConfigEscape,gitConfigError,gitconfigComment keepend -syn keyword gitconfigBoolean true false yes no contained -syn match   gitconfigNumber  "\d\+" contained -syn region  gitconfigString  matchgroup=gitconfigDelim start=+"+ skip=+\\+ end=+"+ matchgroup=gitconfigError end=+[^\\"]\%#\@!$+ contained contains=gitconfigEscape,gitconfigEscapeError -syn match   gitconfigError  +\\.+	 contained -syn match   gitconfigEscape +\\[\\"ntb]+ contained -syn match   gitconfigEscape +\\$+	 contained - -hi def link gitconfigComment		Comment -hi def link gitconfigSection		Keyword -hi def link gitconfigVariable		Identifier -hi def link gitconfigBoolean		Boolean -hi def link gitconfigNumber		Number -hi def link gitconfigString		String -hi def link gitconfigDelim		Delimiter -hi def link gitconfigEscape		Delimiter -hi def link gitconfigError		Error - -let b:current_syntax = "gitconfig" - -endif diff --git a/syntax/gitrebase.vim b/syntax/gitrebase.vim deleted file mode 100644 index 3a66f0a2..00000000 --- a/syntax/gitrebase.vim +++ /dev/null @@ -1,44 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'git') == -1 -   -" Vim syntax file -" Language:	git rebase --interactive -" Maintainer:	Tim Pope <vimNOSPAM@tpope.org> -" Filenames:	git-rebase-todo -" Last Change:	2013 May 30 - -if exists("b:current_syntax") -  finish -endif - -syn case match - -syn match   gitrebaseHash   "\v<\x{7,40}>"                             contained -syn match   gitrebaseCommit "\v<\x{7,40}>"  nextgroup=gitrebaseSummary skipwhite -syn match   gitrebasePick   "\v^p%(ick)=>"   nextgroup=gitrebaseCommit skipwhite -syn match   gitrebaseReword "\v^r%(eword)=>" nextgroup=gitrebaseCommit skipwhite -syn match   gitrebaseEdit   "\v^e%(dit)=>"   nextgroup=gitrebaseCommit skipwhite -syn match   gitrebaseSquash "\v^s%(quash)=>" nextgroup=gitrebaseCommit skipwhite -syn match   gitrebaseFixup  "\v^f%(ixup)=>"  nextgroup=gitrebaseCommit skipwhite -syn match   gitrebaseExec   "\v^%(x|exec)>" nextgroup=gitrebaseCommand skipwhite -syn match   gitrebaseDrop   "\v^d%(rop)=>"   nextgroup=gitrebaseCommit skipwhite -syn match   gitrebaseSummary ".*"               contains=gitrebaseHash contained -syn match   gitrebaseCommand ".*"                                      contained -syn match   gitrebaseComment "^\s*#.*"             contains=gitrebaseHash -syn match   gitrebaseSquashError "\v%^%(s%(quash)=>|f%(ixup)=>)" nextgroup=gitrebaseCommit skipwhite - -hi def link gitrebaseCommit         gitrebaseHash -hi def link gitrebaseHash           Identifier -hi def link gitrebasePick           Statement -hi def link gitrebaseReword         Number -hi def link gitrebaseEdit           PreProc -hi def link gitrebaseSquash         Type -hi def link gitrebaseFixup          Special -hi def link gitrebaseExec           Function -hi def link gitrebaseDrop           Comment -hi def link gitrebaseSummary        String -hi def link gitrebaseComment        Comment -hi def link gitrebaseSquashError    Error - -let b:current_syntax = "gitrebase" - -endif diff --git a/syntax/gitsendemail.vim b/syntax/gitsendemail.vim deleted file mode 100644 index 756f5da2..00000000 --- a/syntax/gitsendemail.vim +++ /dev/null @@ -1,27 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'git') == -1 -   -" Vim syntax file -" Language:	git send-email message -" Maintainer:	Tim Pope -" Filenames:	.gitsendemail.* -" Last Change:	2010 May 21 - -if exists("b:current_syntax") -  finish -endif - -runtime! syntax/mail.vim -unlet! b:current_syntax -syn include @gitsendemailDiff syntax/diff.vim -syn region gitsendemailDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^-- %/ fold contains=@gitsendemailDiff - -syn case match - -syn match   gitsendemailComment "\%^From.*#.*" -syn match   gitsendemailComment "^GIT:.*" - -hi def link gitsendemailComment Comment - -let b:current_syntax = "gitsendemail" - -endif diff --git a/syntax/glsl.vim b/syntax/glsl.vim deleted file mode 100644 index 73c2afa1..00000000 --- a/syntax/glsl.vim +++ /dev/null @@ -1,679 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'glsl') == -1 -   -" Language: OpenGL Shading Language -" Maintainer: Sergey Tikhomirov <sergey@tikhomirov.io> - -if exists("b:current_syntax") && b:current_syntax == "glsl" -  finish -endif - -" Statements -syn keyword glslConditional if else switch case default -syn keyword glslRepeat      for while do -syn keyword glslStatement   discard return break continue - -" Comments -syn keyword glslTodo     contained TODO FIXME XXX NOTE -syn region  glslCommentL start="//" skip="\\$" end="$" keepend contains=glslTodo,@Spell -syn region  glslComment  matchgroup=glslCommentStart start="/\*" end="\*/" extend contains=glslTodo,@Spell - -" Preprocessor -syn region  glslPreCondit       start="^\s*#\s*\(if\|ifdef\|ifndef\|else\|elif\|endif\)" skip="\\$" end="$" keepend -syn region  glslDefine          start="^\s*#\s*\(define\|undef\)" skip="\\$" end="$" keepend -syn keyword glslTokenConcat     ## -syn keyword glslPredefinedMacro __LINE__ __FILE__ __VERSION__ GL_ES -syn region  glslPreProc         start="^\s*#\s*\(error\|pragma\|extension\|version\|line\)" skip="\\$" end="$" keepend - -" Boolean Constants -syn keyword glslBoolean true false - -" Integer Numbers -syn match glslDecimalInt display "\<\(0\|[1-9]\d*\)[uU]\?" -syn match glslOctalInt   display "\<0\o\+[uU]\?" -syn match glslHexInt     display "\<0[xX]\x\+[uU]\?" - -" Float Numbers -syn match glslFloat display "\<\d\+\.\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\=" -syn match glslFloat display "\<\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\=" -syn match glslFloat display "\<\d\+[eE][+-]\=\d\+\(lf\|LF\|f\|F\)\=" -syn match glslFloat display "\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\=" - -" Swizzles -syn match glslSwizzle display /\.[xyzw]\{1,4\}\>/ -syn match glslSwizzle display /\.[rgba]\{1,4\}\>/ -syn match glslSwizzle display /\.[stpq]\{1,4\}\>/ - -" Structure -syn keyword glslStructure struct nextgroup=glslIdentifier skipwhite skipempty - -syn match glslIdentifier contains=glslIdentifierPrime "\%([a-zA-Z_]\)\%([a-zA-Z0-9_]\)*" display contained - -" Types -syn keyword glslType atomic_uint -syn keyword glslType bool -syn keyword glslType bvec2 -syn keyword glslType bvec3 -syn keyword glslType bvec4 -syn keyword glslType dmat2 -syn keyword glslType dmat2x2 -syn keyword glslType dmat2x3 -syn keyword glslType dmat2x4 -syn keyword glslType dmat3 -syn keyword glslType dmat3x2 -syn keyword glslType dmat3x3 -syn keyword glslType dmat3x4 -syn keyword glslType dmat4 -syn keyword glslType dmat4x2 -syn keyword glslType dmat4x3 -syn keyword glslType dmat4x4 -syn keyword glslType double -syn keyword glslType dvec2 -syn keyword glslType dvec3 -syn keyword glslType dvec4 -syn keyword glslType float -syn keyword glslType iimage1D -syn keyword glslType iimage1DArray -syn keyword glslType iimage2D -syn keyword glslType iimage2DArray -syn keyword glslType iimage2DMS -syn keyword glslType iimage2DMSArray -syn keyword glslType iimage2DRect -syn keyword glslType iimage3D -syn keyword glslType iimageBuffer -syn keyword glslType iimageCube -syn keyword glslType iimageCubeArray -syn keyword glslType image1D -syn keyword glslType image1DArray -syn keyword glslType image2D -syn keyword glslType image2DArray -syn keyword glslType image2DMS -syn keyword glslType image2DMSArray -syn keyword glslType image2DRect -syn keyword glslType image3D -syn keyword glslType imageBuffer -syn keyword glslType imageCube -syn keyword glslType imageCubeArray -syn keyword glslType int -syn keyword glslType isampler1D -syn keyword glslType isampler1DArray -syn keyword glslType isampler2D -syn keyword glslType isampler2DArray -syn keyword glslType isampler2DMS -syn keyword glslType isampler2DMSArray -syn keyword glslType isampler2DRect -syn keyword glslType isampler3D -syn keyword glslType isamplerBuffer -syn keyword glslType isamplerCube -syn keyword glslType isamplerCubeArray -syn keyword glslType ivec2 -syn keyword glslType ivec3 -syn keyword glslType ivec4 -syn keyword glslType mat2 -syn keyword glslType mat2x2 -syn keyword glslType mat2x3 -syn keyword glslType mat2x4 -syn keyword glslType mat3 -syn keyword glslType mat3x2 -syn keyword glslType mat3x3 -syn keyword glslType mat3x4 -syn keyword glslType mat4 -syn keyword glslType mat4x2 -syn keyword glslType mat4x3 -syn keyword glslType mat4x4 -syn keyword glslType sampler1D -syn keyword glslType sampler1DArray -syn keyword glslType sampler1DArrayShadow -syn keyword glslType sampler1DShadow -syn keyword glslType sampler2D -syn keyword glslType sampler2DArray -syn keyword glslType sampler2DArrayShadow -syn keyword glslType sampler2DMS -syn keyword glslType sampler2DMSArray -syn keyword glslType sampler2DRect -syn keyword glslType sampler2DRectShadow -syn keyword glslType sampler2DShadow -syn keyword glslType sampler3D -syn keyword glslType samplerBuffer -syn keyword glslType samplerCube -syn keyword glslType samplerCubeArray -syn keyword glslType samplerCubeArrayShadow -syn keyword glslType samplerCubeShadow -syn keyword glslType uimage1D -syn keyword glslType uimage1DArray -syn keyword glslType uimage2D -syn keyword glslType uimage2DArray -syn keyword glslType uimage2DMS -syn keyword glslType uimage2DMSArray -syn keyword glslType uimage2DRect -syn keyword glslType uimage3D -syn keyword glslType uimageBuffer -syn keyword glslType uimageCube -syn keyword glslType uimageCubeArray -syn keyword glslType uint -syn keyword glslType usampler1D -syn keyword glslType usampler1DArray -syn keyword glslType usampler2D -syn keyword glslType usampler2DArray -syn keyword glslType usampler2DMS -syn keyword glslType usampler2DMSArray -syn keyword glslType usampler2DRect -syn keyword glslType usampler3D -syn keyword glslType usamplerBuffer -syn keyword glslType usamplerCube -syn keyword glslType usamplerCubeArray -syn keyword glslType uvec2 -syn keyword glslType uvec3 -syn keyword glslType uvec4 -syn keyword glslType vec2 -syn keyword glslType vec3 -syn keyword glslType vec4 -syn keyword glslType void - -" Qualifiers -syn keyword glslQualifier align -syn keyword glslQualifier attribute -syn keyword glslQualifier binding -syn keyword glslQualifier buffer -syn keyword glslQualifier ccw -syn keyword glslQualifier centroid -syn keyword glslQualifier centroid varying -syn keyword glslQualifier coherent -syn keyword glslQualifier column_major -syn keyword glslQualifier const -syn keyword glslQualifier cw -syn keyword glslQualifier depth_any -syn keyword glslQualifier depth_greater -syn keyword glslQualifier depth_less -syn keyword glslQualifier depth_unchanged -syn keyword glslQualifier early_fragment_tests -syn keyword glslQualifier equal_spacing -syn keyword glslQualifier flat -syn keyword glslQualifier fractional_even_spacing -syn keyword glslQualifier fractional_odd_spacing -syn keyword glslQualifier highp -syn keyword glslQualifier in -syn keyword glslQualifier index -syn keyword glslQualifier inout -syn keyword glslQualifier invariant -syn keyword glslQualifier invocations -syn keyword glslQualifier isolines -syn keyword glslQualifier layout -syn keyword glslQualifier line_strip -syn keyword glslQualifier lines -syn keyword glslQualifier lines_adjacency -syn keyword glslQualifier local_size_x -syn keyword glslQualifier local_size_y -syn keyword glslQualifier local_size_z -syn keyword glslQualifier location -syn keyword glslQualifier lowp -syn keyword glslQualifier max_vertices -syn keyword glslQualifier mediump -syn keyword glslQualifier noperspective -syn keyword glslQualifier offset -syn keyword glslQualifier origin_upper_left -syn keyword glslQualifier out -syn keyword glslQualifier packed -syn keyword glslQualifier patch -syn keyword glslQualifier pixel_center_integer -syn keyword glslQualifier point_mode -syn keyword glslQualifier points -syn keyword glslQualifier precise -syn keyword glslQualifier precision -syn keyword glslQualifier quads -syn keyword glslQualifier r11f_g11f_b10f -syn keyword glslQualifier r16 -syn keyword glslQualifier r16_snorm -syn keyword glslQualifier r16f -syn keyword glslQualifier r16i -syn keyword glslQualifier r16ui -syn keyword glslQualifier r32f -syn keyword glslQualifier r32i -syn keyword glslQualifier r32ui -syn keyword glslQualifier r8 -syn keyword glslQualifier r8_snorm -syn keyword glslQualifier r8i -syn keyword glslQualifier r8ui -syn keyword glslQualifier readonly -syn keyword glslQualifier restrict -syn keyword glslQualifier rg16 -syn keyword glslQualifier rg16_snorm -syn keyword glslQualifier rg16f -syn keyword glslQualifier rg16i -syn keyword glslQualifier rg16ui -syn keyword glslQualifier rg32f -syn keyword glslQualifier rg32i -syn keyword glslQualifier rg32ui -syn keyword glslQualifier rg8 -syn keyword glslQualifier rg8_snorm -syn keyword glslQualifier rg8i -syn keyword glslQualifier rg8ui -syn keyword glslQualifier rgb10_a2 -syn keyword glslQualifier rgb10_a2ui -syn keyword glslQualifier rgba16 -syn keyword glslQualifier rgba16_snorm -syn keyword glslQualifier rgba16f -syn keyword glslQualifier rgba16i -syn keyword glslQualifier rgba16ui -syn keyword glslQualifier rgba32f -syn keyword glslQualifier rgba32i -syn keyword glslQualifier rgba32ui -syn keyword glslQualifier rgba8 -syn keyword glslQualifier rgba8_snorm -syn keyword glslQualifier rgba8i -syn keyword glslQualifier rgba8ui -syn keyword glslQualifier row_major -syn keyword glslQualifier sample -syn keyword glslQualifier shared -syn keyword glslQualifier smooth -syn keyword glslQualifier std140 -syn keyword glslQualifier std430 -syn keyword glslQualifier stream -syn keyword glslQualifier triangle_strip -syn keyword glslQualifier triangles -syn keyword glslQualifier triangles_adjacency -syn keyword glslQualifier uniform -syn keyword glslQualifier varying -syn keyword glslQualifier vertices -syn keyword glslQualifier volatile -syn keyword glslQualifier writeonly -syn keyword glslQualifier xfb_buffer -syn keyword glslQualifier xfb_stride -syn keyword glslQualifier xfb_offset - -" Built-in Constants -syn keyword glslBuiltinConstant gl_CullDistance -syn keyword glslBuiltinConstant gl_MaxAtomicCounterBindings -syn keyword glslBuiltinConstant gl_MaxAtomicCounterBufferSize -syn keyword glslBuiltinConstant gl_MaxClipDistances -syn keyword glslBuiltinConstant gl_MaxClipPlanes -syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounterBuffers -syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounters -syn keyword glslBuiltinConstant gl_MaxCombinedClipAndCullDistances -syn keyword glslBuiltinConstant gl_MaxCombinedImageUniforms -syn keyword glslBuiltinConstant gl_MaxCombinedImageUnitsAndFragmentOutputs -syn keyword glslBuiltinConstant gl_MaxCombinedShaderOutputResources -syn keyword glslBuiltinConstant gl_MaxCombinedTextureImageUnits -syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounterBuffers -syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounters -syn keyword glslBuiltinConstant gl_MaxComputeImageUniforms -syn keyword glslBuiltinConstant gl_MaxComputeTextureImageUnits -syn keyword glslBuiltinConstant gl_MaxComputeUniformComponents -syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupCount -syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupSize -syn keyword glslBuiltinConstant gl_MaxCullDistances -syn keyword glslBuiltinConstant gl_MaxDrawBuffers -syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounterBuffers -syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounters -syn keyword glslBuiltinConstant gl_MaxFragmentImageUniforms -syn keyword glslBuiltinConstant gl_MaxFragmentInputComponents -syn keyword glslBuiltinConstant gl_MaxFragmentInputVectors -syn keyword glslBuiltinConstant gl_MaxFragmentUniformComponents -syn keyword glslBuiltinConstant gl_MaxFragmentUniformVectors -syn keyword glslBuiltinConstant gl_MaxGeometryAtomicCounterBuffers -syn keyword glslBuiltinConstant gl_MaxGeometryAtomicCounters -syn keyword glslBuiltinConstant gl_MaxGeometryImageUniforms -syn keyword glslBuiltinConstant gl_MaxGeometryInputComponents -syn keyword glslBuiltinConstant gl_MaxGeometryOutputComponents -syn keyword glslBuiltinConstant gl_MaxGeometryOutputVertices -syn keyword glslBuiltinConstant gl_MaxGeometryTextureImageUnits -syn keyword glslBuiltinConstant gl_MaxGeometryTotalOutputComponents -syn keyword glslBuiltinConstant gl_MaxGeometryUniformComponents -syn keyword glslBuiltinConstant gl_MaxGeometryVaryingComponents -syn keyword glslBuiltinConstant gl_MaxImageSamples -syn keyword glslBuiltinConstant gl_MaxImageUnits -syn keyword glslBuiltinConstant gl_MaxLights -syn keyword glslBuiltinConstant gl_MaxPatchVertices -syn keyword glslBuiltinConstant gl_MaxProgramTexelOffset -syn keyword glslBuiltinConstant gl_MaxSamples -syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounterBuffers -syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounters -syn keyword glslBuiltinConstant gl_MaxTessControlImageUniforms -syn keyword glslBuiltinConstant gl_MaxTessControlInputComponents -syn keyword glslBuiltinConstant gl_MaxTessControlOutputComponents -syn keyword glslBuiltinConstant gl_MaxTessControlTextureImageUnits -syn keyword glslBuiltinConstant gl_MaxTessControlTotalOutputComponents -syn keyword glslBuiltinConstant gl_MaxTessControlUniformComponents -syn keyword glslBuiltinConstant gl_MaxTessEvaluationAtomicCounterBuffers -syn keyword glslBuiltinConstant gl_MaxTessEvaluationAtomicCounters -syn keyword glslBuiltinConstant gl_MaxTessEvaluationImageUniforms -syn keyword glslBuiltinConstant gl_MaxTessEvaluationInputComponents -syn keyword glslBuiltinConstant gl_MaxTessEvaluationOutputComponents -syn keyword glslBuiltinConstant gl_MaxTessEvaluationTextureImageUnits -syn keyword glslBuiltinConstant gl_MaxTessEvaluationUniformComponents -syn keyword glslBuiltinConstant gl_MaxTessGenLevel -syn keyword glslBuiltinConstant gl_MaxTessPatchComponents -syn keyword glslBuiltinConstant gl_MaxTextureCoords -syn keyword glslBuiltinConstant gl_MaxTextureImageUnits -syn keyword glslBuiltinConstant gl_MaxTextureUnits -syn keyword glslBuiltinConstant gl_MaxTransformFeedbackBuffers -syn keyword glslBuiltinConstant gl_MaxTransformFeedbackInterleavedComponents -syn keyword glslBuiltinConstant gl_MaxVaryingComponents -syn keyword glslBuiltinConstant gl_MaxVaryingFloats -syn keyword glslBuiltinConstant gl_MaxVaryingVectors -syn keyword glslBuiltinConstant gl_MaxVertexAtomicCounterBuffers -syn keyword glslBuiltinConstant gl_MaxVertexAtomicCounters -syn keyword glslBuiltinConstant gl_MaxVertexAttribs -syn keyword glslBuiltinConstant gl_MaxVertexImageUniforms -syn keyword glslBuiltinConstant gl_MaxVertexOutputComponents -syn keyword glslBuiltinConstant gl_MaxVertexOutputVectors -syn keyword glslBuiltinConstant gl_MaxVertexTextureImageUnits -syn keyword glslBuiltinConstant gl_MaxVertexUniformComponents -syn keyword glslBuiltinConstant gl_MaxVertexUniformVectors -syn keyword glslBuiltinConstant gl_MaxViewports -syn keyword glslBuiltinConstant gl_MinProgramTexelOffset - -" Built-in Variables -syn keyword glslBuiltinVariable gl_BackColor -syn keyword glslBuiltinVariable gl_BackLightModelProduct -syn keyword glslBuiltinVariable gl_BackLightProduct -syn keyword glslBuiltinVariable gl_BackLightProduct -syn keyword glslBuiltinVariable gl_BackMaterial -syn keyword glslBuiltinVariable gl_BackSecondaryColor -syn keyword glslBuiltinVariable gl_ClipDistance -syn keyword glslBuiltinVariable gl_ClipPlane -syn keyword glslBuiltinVariable gl_ClipVertex -syn keyword glslBuiltinVariable gl_Color -syn keyword glslBuiltinVariable gl_DepthRange -syn keyword glslBuiltinVariable gl_EyePlaneQ -syn keyword glslBuiltinVariable gl_EyePlaneR -syn keyword glslBuiltinVariable gl_EyePlaneS -syn keyword glslBuiltinVariable gl_EyePlaneT -syn keyword glslBuiltinVariable gl_Fog -syn keyword glslBuiltinVariable gl_FogCoord -syn keyword glslBuiltinVariable gl_FogFragCoord -syn keyword glslBuiltinVariable gl_FragColor -syn keyword glslBuiltinVariable gl_FragCoord -syn keyword glslBuiltinVariable gl_FragData -syn keyword glslBuiltinVariable gl_FragDepth -syn keyword glslBuiltinVariable gl_FrontColor -syn keyword glslBuiltinVariable gl_FrontFacing -syn keyword glslBuiltinVariable gl_FrontLightModelProduct -syn keyword glslBuiltinVariable gl_FrontLightProduct -syn keyword glslBuiltinVariable gl_FrontMaterial -syn keyword glslBuiltinVariable gl_FrontSecondaryColor -syn keyword glslBuiltinVariable gl_GlobalInvocationID -syn keyword glslBuiltinVariable gl_HelperInvocation -syn keyword glslBuiltinVariable gl_InstanceID -syn keyword glslBuiltinVariable gl_InvocationID -syn keyword glslBuiltinVariable gl_Layer -syn keyword glslBuiltinVariable gl_LightModel -syn keyword glslBuiltinVariable gl_LightSource -syn keyword glslBuiltinVariable gl_LocalInvocationID -syn keyword glslBuiltinVariable gl_LocalInvocationIndex -syn keyword glslBuiltinVariable gl_ModelViewMatrix -syn keyword glslBuiltinVariable gl_ModelViewMatrixInverse -syn keyword glslBuiltinVariable gl_ModelViewMatrixInverseTranspose -syn keyword glslBuiltinVariable gl_ModelViewMatrixTranspose -syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrix -syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrixInverse -syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrixInverseTranspose -syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrixTranspose -syn keyword glslBuiltinVariable gl_MultiTexCoord0 -syn keyword glslBuiltinVariable gl_MultiTexCoord1 -syn keyword glslBuiltinVariable gl_MultiTexCoord2 -syn keyword glslBuiltinVariable gl_MultiTexCoord3 -syn keyword glslBuiltinVariable gl_MultiTexCoord4 -syn keyword glslBuiltinVariable gl_MultiTexCoord5 -syn keyword glslBuiltinVariable gl_MultiTexCoord6 -syn keyword glslBuiltinVariable gl_MultiTexCoord7 -syn keyword glslBuiltinVariable gl_Normal -syn keyword glslBuiltinVariable gl_NormalMatrix -syn keyword glslBuiltinVariable gl_NormalScale -syn keyword glslBuiltinVariable gl_NumSamples -syn keyword glslBuiltinVariable gl_NumWorkGroups -syn keyword glslBuiltinVariable gl_ObjectPlaneQ -syn keyword glslBuiltinVariable gl_ObjectPlaneR -syn keyword glslBuiltinVariable gl_ObjectPlaneS -syn keyword glslBuiltinVariable gl_ObjectPlaneT -syn keyword glslBuiltinVariable gl_PatchVerticesIn -syn keyword glslBuiltinVariable gl_Point -syn keyword glslBuiltinVariable gl_PointCoord -syn keyword glslBuiltinVariable gl_PointSize -syn keyword glslBuiltinVariable gl_Position -syn keyword glslBuiltinVariable gl_PrimitiveID -syn keyword glslBuiltinVariable gl_PrimitiveIDIn -syn keyword glslBuiltinVariable gl_ProjectionMatrix -syn keyword glslBuiltinVariable gl_ProjectionMatrixInverse -syn keyword glslBuiltinVariable gl_ProjectionMatrixInverseTranspose -syn keyword glslBuiltinVariable gl_ProjectionMatrixTranspose -syn keyword glslBuiltinVariable gl_SampleID -syn keyword glslBuiltinVariable gl_SampleMask -syn keyword glslBuiltinVariable gl_SampleMaskIn -syn keyword glslBuiltinVariable gl_SamplePosition -syn keyword glslBuiltinVariable gl_SecondaryColor -syn keyword glslBuiltinVariable gl_TessCoord -syn keyword glslBuiltinVariable gl_TessLevelInner -syn keyword glslBuiltinVariable gl_TessLevelOuter -syn keyword glslBuiltinVariable gl_TexCoord -syn keyword glslBuiltinVariable gl_TextureEnvColor -syn keyword glslBuiltinVariable gl_TextureMatrix -syn keyword glslBuiltinVariable gl_TextureMatrixInverse -syn keyword glslBuiltinVariable gl_TextureMatrixInverseTranspose -syn keyword glslBuiltinVariable gl_TextureMatrixTranspose -syn keyword glslBuiltinVariable gl_Vertex -syn keyword glslBuiltinVariable gl_VertexID -syn keyword glslBuiltinVariable gl_ViewportIndex -syn keyword glslBuiltinVariable gl_WorkGroupID -syn keyword glslBuiltinVariable gl_WorkGroupSize -syn keyword glslBuiltinVariable gl_in -syn keyword glslBuiltinVariable gl_out - -" Built-in Functions -syn keyword glslBuiltinFunction EmitStreamVertex -syn keyword glslBuiltinFunction EmitVertex -syn keyword glslBuiltinFunction EndPrimitive -syn keyword glslBuiltinFunction EndStreamPrimitive -syn keyword glslBuiltinFunction abs -syn keyword glslBuiltinFunction acos -syn keyword glslBuiltinFunction acosh -syn keyword glslBuiltinFunction all -syn keyword glslBuiltinFunction any -syn keyword glslBuiltinFunction asin -syn keyword glslBuiltinFunction asinh -syn keyword glslBuiltinFunction atan -syn keyword glslBuiltinFunction atanh -syn keyword glslBuiltinFunction atomicAdd -syn keyword glslBuiltinFunction atomicAnd -syn keyword glslBuiltinFunction atomicCompSwap -syn keyword glslBuiltinFunction atomicCounter -syn keyword glslBuiltinFunction atomicCounterDecrement -syn keyword glslBuiltinFunction atomicCounterIncrement -syn keyword glslBuiltinFunction atomicExchange -syn keyword glslBuiltinFunction atomicMax -syn keyword glslBuiltinFunction atomicMin -syn keyword glslBuiltinFunction atomicOr -syn keyword glslBuiltinFunction atomicXor -syn keyword glslBuiltinFunction barrier -syn keyword glslBuiltinFunction bitCount -syn keyword glslBuiltinFunction bitfieldExtract -syn keyword glslBuiltinFunction bitfieldInsert -syn keyword glslBuiltinFunction bitfieldReverse -syn keyword glslBuiltinFunction ceil -syn keyword glslBuiltinFunction clamp -syn keyword glslBuiltinFunction cos -syn keyword glslBuiltinFunction cosh -syn keyword glslBuiltinFunction cross -syn keyword glslBuiltinFunction dFdx -syn keyword glslBuiltinFunction dFdxCoarse -syn keyword glslBuiltinFunction dFdxFine -syn keyword glslBuiltinFunction dFdy -syn keyword glslBuiltinFunction dFdyCoarse -syn keyword glslBuiltinFunction dFdyFine -syn keyword glslBuiltinFunction degrees -syn keyword glslBuiltinFunction determinant -syn keyword glslBuiltinFunction distance -syn keyword glslBuiltinFunction dot -syn keyword glslBuiltinFunction equal -syn keyword glslBuiltinFunction exp -syn keyword glslBuiltinFunction exp2 -syn keyword glslBuiltinFunction faceforward -syn keyword glslBuiltinFunction findLSB -syn keyword glslBuiltinFunction findMSB -syn keyword glslBuiltinFunction floatBitsToInt -syn keyword glslBuiltinFunction floatBitsToUint -syn keyword glslBuiltinFunction floor -syn keyword glslBuiltinFunction fma -syn keyword glslBuiltinFunction fract -syn keyword glslBuiltinFunction frexp -syn keyword glslBuiltinFunction ftransform -syn keyword glslBuiltinFunction fwidth -syn keyword glslBuiltinFunction fwidthCoarse -syn keyword glslBuiltinFunction fwidthFine -syn keyword glslBuiltinFunction greaterThan -syn keyword glslBuiltinFunction greaterThanEqual -syn keyword glslBuiltinFunction groupMemoryBarrier -syn keyword glslBuiltinFunction imageAtomicAdd -syn keyword glslBuiltinFunction imageAtomicAnd -syn keyword glslBuiltinFunction imageAtomicCompSwap -syn keyword glslBuiltinFunction imageAtomicExchange -syn keyword glslBuiltinFunction imageAtomicMax -syn keyword glslBuiltinFunction imageAtomicMin -syn keyword glslBuiltinFunction imageAtomicOr -syn keyword glslBuiltinFunction imageAtomicXor -syn keyword glslBuiltinFunction imageLoad -syn keyword glslBuiltinFunction imageSize -syn keyword glslBuiltinFunction imageStore -syn keyword glslBuiltinFunction imulExtended -syn keyword glslBuiltinFunction intBitsToFloat -syn keyword glslBuiltinFunction interpolateAtCentroid -syn keyword glslBuiltinFunction interpolateAtOffset -syn keyword glslBuiltinFunction interpolateAtSample -syn keyword glslBuiltinFunction inverse -syn keyword glslBuiltinFunction inversesqrt -syn keyword glslBuiltinFunction isinf -syn keyword glslBuiltinFunction isnan -syn keyword glslBuiltinFunction ldexp -syn keyword glslBuiltinFunction length -syn keyword glslBuiltinFunction lessThan -syn keyword glslBuiltinFunction lessThanEqual -syn keyword glslBuiltinFunction log -syn keyword glslBuiltinFunction log2 -syn keyword glslBuiltinFunction matrixCompMult -syn keyword glslBuiltinFunction max -syn keyword glslBuiltinFunction memoryBarrier -syn keyword glslBuiltinFunction memoryBarrierAtomicCounter -syn keyword glslBuiltinFunction memoryBarrierBuffer -syn keyword glslBuiltinFunction memoryBarrierImage -syn keyword glslBuiltinFunction memoryBarrierShared -syn keyword glslBuiltinFunction min -syn keyword glslBuiltinFunction mix -syn keyword glslBuiltinFunction mod -syn keyword glslBuiltinFunction modf -syn keyword glslBuiltinFunction noise1 -syn keyword glslBuiltinFunction noise2 -syn keyword glslBuiltinFunction noise3 -syn keyword glslBuiltinFunction noise4 -syn keyword glslBuiltinFunction normalize -syn keyword glslBuiltinFunction not -syn keyword glslBuiltinFunction notEqual -syn keyword glslBuiltinFunction outerProduct -syn keyword glslBuiltinFunction packDouble2x32 -syn keyword glslBuiltinFunction packHalf2x16 -syn keyword glslBuiltinFunction packSnorm2x16 -syn keyword glslBuiltinFunction packSnorm4x8 -syn keyword glslBuiltinFunction packUnorm2x16 -syn keyword glslBuiltinFunction packUnorm4x8 -syn keyword glslBuiltinFunction pow -syn keyword glslBuiltinFunction radians -syn keyword glslBuiltinFunction reflect -syn keyword glslBuiltinFunction refract -syn keyword glslBuiltinFunction round -syn keyword glslBuiltinFunction roundEven -syn keyword glslBuiltinFunction shadow1D -syn keyword glslBuiltinFunction shadow1DLod -syn keyword glslBuiltinFunction shadow1DProj -syn keyword glslBuiltinFunction shadow1DProjLod -syn keyword glslBuiltinFunction shadow2D -syn keyword glslBuiltinFunction shadow2DLod -syn keyword glslBuiltinFunction shadow2DProj -syn keyword glslBuiltinFunction shadow2DProjLod -syn keyword glslBuiltinFunction sign -syn keyword glslBuiltinFunction sin -syn keyword glslBuiltinFunction sinh -syn keyword glslBuiltinFunction smoothstep -syn keyword glslBuiltinFunction sqrt -syn keyword glslBuiltinFunction step -syn keyword glslBuiltinFunction tan -syn keyword glslBuiltinFunction tanh -syn keyword glslBuiltinFunction texelFetch -syn keyword glslBuiltinFunction texelFetchOffset -syn keyword glslBuiltinFunction texture -syn keyword glslBuiltinFunction texture1D -syn keyword glslBuiltinFunction texture1DLod -syn keyword glslBuiltinFunction texture1DProj -syn keyword glslBuiltinFunction texture1DProjLod -syn keyword glslBuiltinFunction texture2D -syn keyword glslBuiltinFunction texture2DLod -syn keyword glslBuiltinFunction texture2DProj -syn keyword glslBuiltinFunction texture2DProjLod -syn keyword glslBuiltinFunction texture3D -syn keyword glslBuiltinFunction texture3DLod -syn keyword glslBuiltinFunction texture3DProj -syn keyword glslBuiltinFunction texture3DProjLod -syn keyword glslBuiltinFunction textureCube -syn keyword glslBuiltinFunction textureCubeLod -syn keyword glslBuiltinFunction textureGather -syn keyword glslBuiltinFunction textureGatherOffset -syn keyword glslBuiltinFunction textureGatherOffsets -syn keyword glslBuiltinFunction textureGrad -syn keyword glslBuiltinFunction textureGradOffset -syn keyword glslBuiltinFunction textureLod -syn keyword glslBuiltinFunction textureLodOffset -syn keyword glslBuiltinFunction textureOffset -syn keyword glslBuiltinFunction textureProj -syn keyword glslBuiltinFunction textureProjGrad -syn keyword glslBuiltinFunction textureProjGradOffset -syn keyword glslBuiltinFunction textureProjLod -syn keyword glslBuiltinFunction textureProjLodOffset -syn keyword glslBuiltinFunction textureProjOffset -syn keyword glslBuiltinFunction textureQueryLevels -syn keyword glslBuiltinFunction textureQueryLod -syn keyword glslBuiltinFunction textureSize -syn keyword glslBuiltinFunction transpose -syn keyword glslBuiltinFunction trunc -syn keyword glslBuiltinFunction uaddCarry -syn keyword glslBuiltinFunction uintBitsToFloat -syn keyword glslBuiltinFunction umulExtended -syn keyword glslBuiltinFunction unpackDouble2x32 -syn keyword glslBuiltinFunction unpackHalf2x16 -syn keyword glslBuiltinFunction unpackSnorm2x16 -syn keyword glslBuiltinFunction unpackSnorm4x8 -syn keyword glslBuiltinFunction unpackUnorm2x16 -syn keyword glslBuiltinFunction unpackUnorm4x8 -syn keyword glslBuiltinFunction usubBorrow - -hi def link glslConditional     Conditional -hi def link glslRepeat          Repeat -hi def link glslStatement       Statement -hi def link glslTodo            Todo -hi def link glslCommentL        glslComment -hi def link glslCommentStart    glslComment -hi def link glslComment         Comment -hi def link glslPreCondit       PreCondit -hi def link glslDefine          Define -hi def link glslTokenConcat     glslPreProc -hi def link glslPredefinedMacro Macro -hi def link glslPreProc         PreProc -hi def link glslBoolean         Boolean -hi def link glslDecimalInt      glslInteger -hi def link glslOctalInt        glslInteger -hi def link glslHexInt          glslInteger -hi def link glslInteger         Number -hi def link glslFloat           Float -hi def link glslIdentifierPrime glslIdentifier -hi def link glslIdentifier      Identifier -hi def link glslStructure       Structure -hi def link glslType            Type -hi def link glslQualifier       StorageClass -hi def link glslBuiltinConstant Constant -hi def link glslBuiltinFunction Function -hi def link glslBuiltinVariable Identifier -hi def link glslSwizzle         Identifier - -if !exists("b:current_syntax") -  let b:current_syntax = "glsl" -endif - -" vim:set sts=2 sw=2 : - -endif diff --git a/syntax/gmpl.vim b/syntax/gmpl.vim deleted file mode 100644 index 2b8d7128..00000000 --- a/syntax/gmpl.vim +++ /dev/null @@ -1,122 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'gmpl') == -1 -   -" Vim syntax file -" Language: GMPL -" Maintainer: Mark Mba Wright -" Latest Revision: 9 July 2012 - -if exists("b:current_syntax") -  finish -endif - -syn sync fromstart - - -syn match gmplArithmeticSetOperator "\.\." - -" Integer with - + or nothing in front -syn match gmplNumber '\d\+' -syn match gmplNumber '[-+]\d\+' - -" Floating point gmplNumber with decimal no E or e (+,-) -syn match gmplNumber '\d*\.\d\+' -syn match gmplNumber '[-+]\d*\.\d\+' - -" Floating point like gmplNumber with E and no decimal point (+,-) -syn match gmplNumber '[-+]\=\d[[:digit:]]*[eE][\-+]\=\d\+' -syn match gmplNumber '\d[[:digit:]]*[eE][\-+]\=\d\+' - -" Floating point like gmplNumber with E and decimal point (+,-) -syn match gmplNumber '[-+]\=\d[[:digit:]]*\.\d*[eE][\-+]\=\d\+' -syn match gmplNumber '\d[[:digit:]]*\.\d*[eE][\-+]\=\d\+' -syn match gmplIndex   /\<\%(in\>\)\@!\w*/ contained contains=gmplKeyword,gmplNumber -syn match gmplLabel  '[a-zA-Z][a-zA-Z0-9_]*' -syn match gmplArithmeticOperator	"[-+]" -syn match gmplArithmeticOperator	"\.\=[*/\\^]" -syn match gmplRelationalOperator	"[=~]=" -syn match gmplRelationalOperator	"[<>]=\=" -" syn match gmplLogicalOperator		"[&|~] - -" match indeces - -" comments -syn match gmplComment /\/\*.\{-}\*\// -syn region gmplComment start="/\*"  end="\*/" -syn match gmplComment '#.\{-}$' - -" strings -syn region gmplString start="\"" end="\"" -syn region gmplString start="\'" end="\'" contains=gmplStringToken -syn match gmplStringToken '\%[a-z]' contained - -" Keywords -syn keyword gmplKeyword and else by if cross in diff inter div less mod union not within or symdiff then  -syn keyword gmplKeyword minimize maximize solve -syn keyword gmplType set var param nextgroup=gmplLabel skipwhite - -" Regions -syn region gmplIndexExpression start="{" end="}" transparent contains=gmplIndex,gmplIndexExpression -syn region gmplIndexGroup start="\[" end="\]" transparent contains=gmplIndex -" syn region gmplParen start="(" end=")"   - -"" catch errors caused by wrong parenthesis -syn match   gmplParensError    ")\|}\|\]" -syn match   gmplParensErrA     contained "\]" -syn match   gmplParensErrC     contained "}" - - -hi level1c  ctermfg=brown       guifg=brown               -hi level2c  ctermfg=darkgreen   guifg=darkgreen   gui=bold -hi level3c  ctermfg=Darkblue    guifg=Darkblue             -hi level4c  ctermfg=darkmagenta guifg=darkmagenta gui=bold -hi level5c  ctermfg=darkcyan    guifg=darkcyan             -hi level6c  ctermfg=white       guifg=white       gui=bold -hi level7c  ctermfg=darkred     guifg=darkred -hi level8c  ctermfg=blue        guifg=blue        gui=bold  -hi level9c  ctermfg=darkgray    guifg=darkgray                  -hi level10c ctermfg=brown       guifg=brown       gui=bold  -hi level11c ctermfg=darkgreen   guifg=darkgreen          -hi level12c ctermfg=Darkblue    guifg=Darkblue    gui=bold  -hi level13c ctermfg=darkmagenta guifg=darkmagenta             -hi level14c ctermfg=darkcyan    guifg=darkcyan    gui=bold  -hi level15c ctermfg=gray       guifg=gray           - -" These are the regions for each pair. -" This could be improved, perhaps, by makeing them match [ and { also, -" but I'm not going to take the time to figure out haw to make the -" end pattern match only the proper type. -syn region level1 matchgroup=level1c start=/(/ end=/)/ contains=TOP,level1,level2,level3,level4,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens -syn region level2 matchgroup=level2c start=/(/ end=/)/ contains=TOP,level2,level3,level4,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens -syn region level3 matchgroup=level3c start=/(/ end=/)/ contains=TOP,level3,level4,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens -syn region level4 matchgroup=level4c start=/(/ end=/)/ contains=TOP,level4,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens -syn region level5 matchgroup=level5c start=/(/ end=/)/ contains=TOP,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens -syn region level6 matchgroup=level6c start=/(/ end=/)/ contains=TOP,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens -syn region level7 matchgroup=level7c start=/(/ end=/)/ contains=TOP,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens -syn region level8 matchgroup=level8c start=/(/ end=/)/ contains=TOP,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens -syn region level9 matchgroup=level9c start=/(/ end=/)/ contains=TOP,level9,level10,level11,level12,level13,level14,level15, NoInParens -syn region level10 matchgroup=level10c start=/(/ end=/)/ contains=TOP,level10,level11,level12,level13,level14,level15, NoInParens -syn region level11 matchgroup=level11c start=/(/ end=/)/ contains=TOP,level11,level12,level13,level14,level15, NoInParens -syn region level12 matchgroup=level12c start=/(/ end=/)/ contains=TOP,level12,level13,level14,level15, NoInParens -syn region level13 matchgroup=level13c start=/(/ end=/)/ contains=TOP,level13,level14,level15, NoInParens -syn region level14 matchgroup=level14c start=/(/ end=/)/ contains=TOP,level14,level15, NoInParens -syn region level15 matchgroup=level15c start=/(/ end=/)/ contains=TOP,level15, NoInParens - -let b:current_syntax = "gmpl" - -hi def link gmplKeyword Keyword -hi def link gmplParensError Error -hi def link gmplParensErrA Error -hi def link gmplParensErrB Error -hi def link gmplParensErrC Error -" hi def link gmplIndexExpression Label -" hi def link gmplParen Label -" hi def link gmplIndexGroup Label -hi def link gmplIndex Identifier -hi def link gmplNumber Number -hi def link gmplComment Comment -hi def link gmplType Type -hi def link gmplLabel Keyword -hi def link gmplString String -hi def link gmplStringToken Special  - -endif diff --git a/syntax/julia.vim b/syntax/julia.vim index 1424b0cc..915cc680 100644 --- a/syntax/julia.vim +++ b/syntax/julia.vim @@ -1,153 +1,551 @@  if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1 - -if exists("b:current_syntax") +" Vim syntax file +" Language:	julia +" Maintainer:	Carlo Baldassi <carlobaldassi@gmail.com> +" Last Change:	2013 feb 11 + +if version < 600 +  syntax clear +elseif exists("b:current_syntax")    finish  endif -syn case match - - -syn keyword juliaDirective import importall export using require include - -hi def link juliaDirective Include - -syn region juliaDeclTypeBlock transparent matchgroup=juliaDeclType start="\<\%(type\|immutable\)\>" end="\<end\>" contains=ALL -syn keyword juliaTypeAlias typealias -syn keyword juliaDeclAbstract abstract - -hi def link juliaDeclType  Structure -hi def link juliaTypeAlias Typedef -hi def link juliaDeclAbstract Structure - -" Module -syn region juliaModuleBlock transparent matchgroup=juliaModule start="\<module\>" end="\<end\>" contains=ALL - -hi def link juliaModule Structure - - -" Misc. blocks -syn region juliaMiscBlockBlock transparent matchgroup=juliaMiscBlock start="\<\%(quote\|do\|begin\|let\)\>" end="\<end\>" contains=ALL - -hi def link juliaMiscBlock Repeat - -" Braces and Brackets -syn region juliaBracketsBlock matchgroup=juliaBrackets start='\[' end='\]' contains=ALLBUT,juliaRepeatBlock contained -syn region juliaBracesBlock matchgroup=juliaBraces start='{' end='}' contains=ALLBUT,juliaRepeatBlock contained - -" Repeat -syn region juliaRepeatBlock transparent matchgroup=juliaRepeat start="\<\%(while\|for\)\>" end="\<end\>" contains=@juliaTop - -hi def link juliaRepeat    Repeat - -" Conditional -syn keyword juliaElse else elseif -syn region  juliaIfBlock transparent matchgroup=juliaIf start="\<if\>" end="\<end\>" contains=@juliaTop - -hi def link juliaElse Conditional -hi def link juliaIf   Conditional - - -" try catch end -syn keyword juliaCatch    catch contained -syn region  juliaTryBlock transparent matchgroup=juliaTry start="\<try\>" end="\<end\>" contains=@juliaTop - -hi def link juliaTry Exception -hi def link juliaCatch Exception - - -" one word statements -syn keyword juliaStatement return continue break - -hi def link juliaStatement Statement - -" misc -syn keyword juliaDeclaration const global local -syn keyword juliaComprehensionFor for - -hi def link juliaDeclaration Keyword -hi def link juliaComprehensionFor Keyword - -" Built in types -syn keyword juliaType Uint Uint8 Uint16 Uint32 Uint64 Uint128 -syn keyword juliaType Int Int8 Int16 Int32 Int64 Int128 -syn keyword juliaType Float Float16 Float32 Float64 -syn keyword juliaType AbstractArray AbstractMatrix AbstractVector Array Vector Matrix -syn keyword juliaType String ByteString UTF8String SubString -syn keyword juliaType Bool Nothing Union Type - - -hi def link juliaType Type - - -" Comments -syn keyword juliaTodo         contained TODO FIXME XXX -syn cluster juliaCommentGroup contains=juliaTodo -syn region  juliaComment      start="#" end="$" contains=@juliaCommentGroup,@Spell - -hi def link juliaComment Comment -hi def link juliaTodo    Todo - - -" Strings -syn region juliaString       start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@juliaStringGroup,@Spell -syn region juliaTripleString start=+"""+ end=+"""+ -syn region juliaCharacter    start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@juliaCharacterGroup - -hi def link juliaString        String -hi def link juliaTripleString  String -hi def link juliaCharacter     Character +if version < 704 +  " this is used to disable regex syntax like `\@3<=' +  " on older vim versions +  function! s:d(x) +    return '' +  endfunction +else +  function! s:d(x) +    return string(a:x) +  endfunction +endif +scriptencoding utf-8 -" Functions -syn region juliaFunctionBlock transparent matchgroup=juliaFunction start="\<\%\(function\|macro\)\>" end="\<end\>" contains=@juliaTop -hi def link juliaFunction Function +if !exists("b:julia_syntax_version") +  let b:julia_syntax_version = get(g:, "default_julia_version", "current") +endif +if !exists("b:julia_syntax_highlight_deprecated") +  let b:julia_syntax_highlight_deprecated = get(g:, "julia_syntax_highlight_deprecated", 0) +endif +if b:julia_syntax_version =~? '\<\%(curr\%(ent\)\?\|release\|6\|0\.6\)\>' +  let b:julia_syntax_version = 6 +elseif b:julia_syntax_version =~? '\<\%(next\|devel\|7\|0\.7\)\>' +  let b:julia_syntax_version = 7 +elseif b:julia_syntax_version =~? '\<\%(prev\%(ious\)\?\|legacy\|5\|0\.5\)\>' +  let b:julia_syntax_version = 5 +else +  echohl WarningMsg | echomsg "Unrecognized or unsupported julia syntax version: " . b:julia_syntax_version | echohl None +  let b:julia_syntax_version = 6 +endif -" Numbers -syn match juliaNumber "\<\d\+\([Ee]\d\+\)\?\>" -syn match juliaNumber "\<0x\x\+\>" -syn match juliaNumber "\<0\o\+\>" +let s:julia_spellcheck_strings = get(g:, "julia_spellcheck_strings", 0) +let s:julia_spellcheck_docstrings = get(g:, "julia_spellcheck_docstrings", 1) +let s:julia_spellcheck_comments = get(g:, "julia_spellcheck_comments", 1) -syn match juliaFloat "\<\d\+\.\d*\([Ee][-+]\d\+\)\?\>" -syn match juliaFloat "\<\.\d\+\([Ee][-+]\d\+\)\?\>" -syn match juliaFloat "\<\d\+[Ee][-+]\d\+\>" -syn keyword juliaFloatSpecial NaN Inf +let s:julia_highlight_operators = get(g:, "julia_highlight_operators", 1) -hi def link juliaNumber Number -hi def link juliaFloat Float -hi def link juliaFloatSpecial Float +" characters which cannot be used in identifiers. This list is very incomplete: +" 1) it only cares about charactes below 256 +" 2) it doesn't distinguish between what's allowed as the 1st char vs in the +"    rest of an identifier (e.g. digits, `!` and `?`) +" Despite these shortcomings, it seems to do a decent job. +" note: \U5B and \U5D are '[' and ']' +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 -" Operators -syn keyword juliaIn in -hi def link juliaIn Operator +" 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*/\\%÷^&|⊻<>≤≥≡≠≢∈∉⋅×∪∩⊆⊈⊂⊄⊊←→∋∌⊕⊖⊞⊟∘∧⊗⊘↑↓∨⊠±" -" Constants -syn keyword juliaBool true false nothing -hi def link juliaBool Boolean +" 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 = "↔↚↛↠↣↦↮⇎⇏⇒⇔⇴⇶⇷⇸⇹⇺⇻⇼⇽⇾⇿⟵⟶⟷⟷⟹⟺⟻⟼⟽⟾⟿⤀⤁⤂⤃⤄⤅⤆⤇⤌⤍⤎⤏⤐⤑⤔⤕⤖⤗⤘⤝⤞⤟⤠⥄⥅⥆⥇⥈⥊⥋⥎⥐⥒⥓⥖⥗⥚⥛⥞⥟⥢⥤⥦⥧⥨⥩⥪⥫⥬⥭⥰⧴⬱⬰⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿⭀⭁⭂⭃⭄⭇⭈⭉⭊⭋⭌←→" . +"       \                   "∝∊∍∥∦∷∺∻∽∾≁≃≄≅≆≇≈≉≊≋≌≍≎≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≣≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊃⊅⊇⊉⊋⊏⊐⊑⊒⊜⊩⊬⊮⊰⊱⊲⊳⊴⊵⊶⊷⋍⋐⋑⋕⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿⟈⟉⟒⦷⧀⧁⧡⧣⧤⧥⩦⩧⩪⩫⩬⩭⩮⩯⩰⩱⩲⩳⩴⩵⩶⩷⩸⩹⩺⩻⩼⩽⩾⩿⪀⪁⪂⪃⪄⪅⪆⪇⪈⪉⪊⪋⪌⪍⪎⪏⪐⪑⪒⪓⪔⪕⪖⪗⪘⪙⪚⪛⪜⪝⪞⪟⪠⪡⪢⪣⪤⪥⪦⪧⪨⪩⪪⪫⪬⪭⪮⪯⪰⪱⪲⪳⪴⪵⪶⪷⪸⪹⪺⪻⪼⪽⪾⪿⫀⫁⫂⫃⫄⫅⫆⫇⫈⫉⫊⫋⫌⫍⫎⫏⫐⫑⫒⫓⫔⫕⫖⫗⫘⫙⫷⫸⫹⫺⊢⊣" . +"       \                   "⊔∓∔∸≂≏⊎⊽⋎⋓⧺⧻⨈⨢⨣⨤⨥⨦⨧⨨⨩⨪⨫⨬⨭⨮⨹⨺⩁⩂⩅⩊⩌⩏⩐⩒⩔⩖⩗⩛⩝⩡⩢⩣" . +"       \                   "⊙⊚⊛⊡⊓∗∙∤⅋≀⊼⋄⋆⋇⋉⋊⋋⋌⋏⋒⟑⦸⦼⦾⦿⧶⧷⨇⨰⨱⨲⨳⨴⨵⨶⨷⨸⨻⨼⨽⩀⩃⩄⩋⩍⩎⩑⩓⩕⩘⩚⩜⩞⩟⩠⫛⊍▷⨝⟕⟖⟗" . +"       \                   "⇵⟰⟱⤈⤉⤊⤋⤒⤓⥉⥌⥍⥏⥑⥔⥕⥘⥙⥜⥝⥠⥡⥣⥥⥮⥯↑↓" -syn keyword juliaIdentifierSpecial STDOUT, STDIN, STDERR +" 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" -hi def link juliaIdentifierSpecial Identifier +" a Julia identifier, sort of (TODO: the special case of a lone `?` should be +" removed as soon as the Julia parser is fixed) +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 . ']' . +      \           '\)' -" Macros -syn match juliaMacro display "@[_[:alpha:]][_[:alnum:]!]*\%(\.[_[:alpha:]][_[:alnum:]!]*\)*" +syn case match -hi def link juliaMacro Macro +syntax cluster juliaExpressions		contains=@juliaParItems,@juliaStringItems,@juliaKeywordItems,@juliaBlocksItems,@juliaTypesItems,@juliaConstItems,@juliaMacroItems,@juliaSymbolItems,@juliaOperatorItems,@juliaNumberItems,@juliaCommentItems,@juliaErrorItems +syntax cluster juliaExprsPrintf		contains=@juliaExpressions,@juliaPrintfItems +syntax cluster juliaParItems		contains=juliaParBlock,juliaSqBraBlock,juliaCurBraBlock,juliaQuotedParBlock,juliaQuotedQMarkPar +syntax cluster juliaKeywordItems	contains=juliaKeyword,juliaInfixKeyword,juliaRepKeyword,juliaTypedef +if b:julia_syntax_version == 5 +  syntax cluster juliaBlocksItems	contains=@juliaBlocksItemsAll +else +  syntax cluster juliaBlocksItems	contains=@juliaBlocksItemsAll,@juliaBlocksItems0607 +endif +syntax cluster juliaBlocksItemsAll	contains=juliaConditionalBlock,juliaWhileBlock,juliaForBlock,juliaBeginBlock,juliaFunctionBlock,juliaMacroBlock,juliaQuoteBlock,juliaTypeBlock,juliaImmutableBlock,juliaExceptionBlock,juliaLetBlock,juliaDoBlock,juliaModuleBlock +syntax cluster juliaBlocksItems0607	contains=juliaStructBlock,juliaMutableStructBlock,juliaAbstractBlock,juliaPrimitiveBlock +if b:julia_syntax_version == 5 +  syntax cluster juliaTypesItems	contains=@juliaTypesItemsAll,@juliaTypesItems05,@juliaTypesItems0506 +elseif b:julia_syntax_version == 6 +  syntax cluster juliaTypesItems	contains=@juliaTypesItemsAll,@juliaTypesItems05,@juliaTypesItems0506,@juliaTypesItems0607 +else +  syntax cluster juliaTypesItems	contains=@juliaTypesItemsAll,@juliaTypesItems05,@juliaTypesItems0506,@juliaTypesItems0607,@juliaTypesItems07 +endif +syntax cluster juliaTypesItemsAll	contains=juliaBaseTypeBasic,juliaBaseTypeNum,juliaBaseTypeC,juliaBaseTypeError,juliaBaseTypeIter,juliaBaseTypeString,juliaBaseTypeArray,juliaBaseTypeDict,juliaBaseTypeSet,juliaBaseTypeIO,juliaBaseTypeProcess,juliaBaseTypeRange,juliaBaseTypeRegex,juliaBaseTypeFact,juliaBaseTypeFact,juliaBaseTypeSort,juliaBaseTypeRound,juliaBaseTypeSpecial,juliaBaseTypeRandom,juliaBaseTypeDisplay,juliaBaseTypeTime,juliaBaseTypeOther +syntax cluster juliaTypesItems05	contains=juliaBaseTypeIter05,juliaBaseTypeRange05 +syntax cluster juliaTypesItems0506	contains=juliaBaseTypeRange0506,juliaBaseTypeSet0506 +syntax cluster juliaTypesItems0607	contains=juliaBaseTypeBasic0607,juliaBaseTypeArray0607,juliaBaseTypeSet0607,juliaBaseTypeProcess0607,juliaBaseTypeRange0607,juliaBaseTypeTime0607 +syntax cluster juliaTypesItems07	contains=juliaBaseTypeRange07,juliaBaseTypeSet07 + +syntax cluster juliaConstItemsAll	contains=juliaConstNum,juliaConstBool,juliaConstEnv,juliaConstIO,juliaConstMMap,juliaConstC,juliaConstGeneric +syntax cluster juliaConstItems0506	contains=juliaConstNum0506 +syntax cluster juliaConstItems07	contains=juliaPossibleEuler +if b:julia_syntax_version <= 6 +  syntax cluster juliaConstItems	contains=@juliaConstItemsAll,@juliaConstItems0506 +else +  syntax cluster juliaConstItems	contains=@juliaConstItemsAll,@juliaConstItems0506,@juliaConstItems07 +endif -syn cluster juliaTop contains=ALLBUT,juliaComprehensionFor +syntax cluster juliaMacroItems		contains=juliaPossibleMacro,juliaDollarVar,juliaDollarPar,juliaDollarSqBra +syntax cluster juliaSymbolItems		contains=juliaPossibleSymbol +syntax cluster juliaNumberItems		contains=juliaNumbers +syntax cluster juliaStringItems		contains=juliaChar,juliaString,juliabString,juliasString,juliavString,juliaipString,juliabigString,juliaMIMEString,juliaShellString,juliaDocString,juliaRegEx +syntax cluster juliaPrintfItems		contains=juliaPrintfParBlock,juliaPrintfString +syntax cluster juliaOperatorItems	contains=juliaOperator,juliaRangeOperator,juliaCTransOperator,juliaTernaryRegion,juliaColon,juliaSemicolon,juliaComma +syntax cluster juliaCommentItems	contains=juliaCommentL,juliaCommentM +syntax cluster juliaErrorItems		contains=juliaErrorPar,juliaErrorEnd,juliaErrorElse,juliaErrorCatch,juliaErrorFinally + +syntax cluster juliaSpellcheckStrings	        contains=@spell +syntax cluster juliaSpellcheckDocStrings	contains=@spell +syntax cluster juliaSpellcheckComments	        contains=@spell + +if !s:julia_spellcheck_docstrings +  syntax cluster juliaSpellcheckDocStrings      remove=@spell +endif +if !s:julia_spellcheck_strings +  syntax cluster juliaSpellcheckStrings remove=@spell +endif +if !s:julia_spellcheck_comments +  syntax cluster juliaSpellcheckComments        remove=@spell +endif -" Ragel -syn include @ragel syntax/ragel.vim -syn region ragelLine  start="%%" end="$" contains=@ragel +syntax match   juliaSemicolon		display ";" +syntax match   juliaComma		display "," +syntax match   juliaColon		display ":" + +syntax match   juliaErrorPar		display "[])}]" +syntax match   juliaErrorEnd		display "\<end\>" +syntax match   juliaErrorElse		display "\<\%(else\|elseif\)\>" +syntax match   juliaErrorCatch		display "\<catch\>" +syntax match   juliaErrorFinally	display "\<finally\>" +syntax match   juliaErrorSemicol	display contained ";" + +syntax match   juliaRangeEnd		display contained "\<end\>" + +syntax region  juliaParBlock		matchgroup=juliaParDelim start="(" end=")" contains=@juliaExpressions,juliaComprehensionFor +syntax region  juliaParBlockInRange	matchgroup=juliaParDelim contained start="(" end=")" contains=@juliaExpressions,juliaParBlockInRange,juliaRangeEnd,juliaComprehensionFor +syntax region  juliaSqBraBlock		matchgroup=juliaParDelim start="\[" end="\]" contains=@juliaExpressions,juliaParBlockInRange,juliaRangeEnd,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS +syntax region  juliaCurBraBlock		matchgroup=juliaParDelim start="{" end="}" contains=@juliaExpressions + +if b:julia_syntax_version >= 6 +  let s:keywords = '\<\%(return\|local\|global\|import\%(all\)\?\|export\|using\|const\|where\)\>' +  let s:infixkeywords = '\<\%(in\|isa\)\>' +else +  let s:keywords = '\<\%(return\|local\|global\|import\%(all\)\?\|export\|using\|const\)\>' +  let s:infixkeywords = '\<\%(in\)\>' +endif +exec 'syntax match   juliaKeyword		display "' . s:keywords . '"' +exec 'syntax match   juliaInfixKeyword		display "\%(=\s*\)\@<!' . s:infixkeywords . '\S\@!\%(\s*=\)\@!"' +syntax match   juliaRepKeyword		display "\<\%(break\|continue\)\>" +syntax region  juliaConditionalBlock	matchgroup=juliaConditional start="\<if\>" end="\<end\>" contains=@juliaExpressions,juliaConditionalEIBlock,juliaConditionalEBlock fold +syntax region  juliaConditionalEIBlock	matchgroup=juliaConditional transparent contained start="\<elseif\>" end="\<\%(end\|else\|elseif\)\>"me=s-1 contains=@juliaExpressions,juliaConditionalEIBlock,juliaConditionalEBlock +syntax region  juliaConditionalEBlock	matchgroup=juliaConditional transparent contained start="\<else\>" end="\<end\>"me=s-1 contains=@juliaExpressions +syntax region  juliaWhileBlock		matchgroup=juliaRepeat start="\<while\>" end="\<end\>" contains=@juliaExpressions fold +syntax region  juliaForBlock		matchgroup=juliaRepeat start="\<for\>" end="\<end\>" contains=@juliaExpressions,juliaOuter fold +syntax region  juliaBeginBlock		matchgroup=juliaBlKeyword start="\<begin\>" end="\<end\>" contains=@juliaExpressions fold +syntax region  juliaFunctionBlock	matchgroup=juliaBlKeyword start="\<function\>" end="\<end\>" contains=@juliaExpressions fold +syntax region  juliaMacroBlock		matchgroup=juliaBlKeyword start="\<macro\>" end="\<end\>" contains=@juliaExpressions fold +syntax region  juliaQuoteBlock		matchgroup=juliaBlKeyword start="\<quote\>" end="\<end\>" contains=@juliaExpressions fold +syntax region  juliaTypeBlock		matchgroup=juliaBlKeyword start="\<type\>" end="\<end\>" contains=@juliaExpressions fold +syntax region  juliaImmutableBlock	matchgroup=juliaBlKeyword start="\<immutable\>" end="\<end\>" contains=@juliaExpressions fold +syntax region  juliaStructBlock		matchgroup=juliaBlKeyword start="\<struct\>" end="\<end\>" contains=@juliaExpressions fold +syntax region  juliaMutableStructBlock	matchgroup=juliaBlKeyword start="\<mutable struct\>" end="\<end\>" contains=@juliaExpressions fold +syntax region  juliaLetBlock		matchgroup=juliaBlKeyword start="\<let\>" end="\<end\>" contains=@juliaExpressions fold +syntax region  juliaDoBlock		matchgroup=juliaBlKeyword start="\<do\>" end="\<end\>" contains=@juliaExpressions fold +exec 'syntax region  juliaModuleBlock		matchgroup=juliaBlKeyword start="\%(\%(\.\s*\)\@'.s:d(6).'<!\|\%(@\s*\.\s*\)\@'.s:d(6).'<=\)\<\%(bare\)\?module\>" end="\<end\>" contains=@juliaExpressions fold' +syntax region  juliaExceptionBlock	matchgroup=juliaException start="\<try\>" end="\<end\>" contains=@juliaExpressions,juliaCatchBlock,juliaFinallyBlock fold +syntax region  juliaCatchBlock		matchgroup=juliaException transparent contained start="\<catch\>" end="\<end\>"me=s-1 contains=@juliaExpressions,juliaFinallyBlock +syntax region  juliaFinallyBlock	matchgroup=juliaException transparent contained start="\<finally\>" end="\<end\>"me=s-1 contains=@juliaExpressions +syntax match   juliaTypedef		"\<\%(abstract\|typealias\|bitstype\)\>" +" AbstractBlock needs to come after to take precedence +syntax region  juliaAbstractBlock	matchgroup=juliaBlKeyword start="\<abstract type\>" end="\<end\>" fold contains=@juliaExpressions +syntax region  juliaPrimitiveBlock	matchgroup=juliaBlKeyword start="\<primitive type\>" end="\<end\>" fold contains=@juliaExpressions + +exec 'syntax region  juliaComprehensionFor	matchgroup=juliaComprehensionFor transparent contained start="\%([^[:space:],;:({[]\_s*\)\@'.s:d(80).'<=\<for\>" end="\ze[]);]" contains=@juliaExpressions,juliaComprehensionIf,juliaComprehensionFor' +syntax match   juliaComprehensionIf	contained "\<if\>" + +exec 'syntax match   juliaOuter    contained "\<outer\ze\s\+' . s:idregex . '\>"' + +syntax match   juliaBaseTypeBasic	display "\<\%(Tuple\|NTuple\|Symbol\|\%(Intrinsic\)\?Function\|Union\|Type\%(Name\|Constructor\|Var\)\?\|Any\|ANY\|Vararg\|Top\|None\|Nothing\|Ptr\|Void\|Exception\|Module\|Box\|Expr\|LambdaStaticData\|\%(Data\|Union\)Type\|\%(LineNumber\|Label\|Goto\|Quote\|Top\|Symbol\|Getfield\)Node\|\%(Weak\|Global\)\?Ref\|Associative\|Method\(Table\)\?\|GetfieldNode\|Nullable\|Pair\|Val\|TypeMap\%(Level\|Entry\)\)\>" +syntax match   juliaBaseTypeBasic0607	display "\<\%(UnionAll\|CodeInfo\)\>" +syntax match   juliaBaseTypeNum		display "\<\%(U\?Int\%(8\|16\|32\|64\|128\)\?\|Float\%(16\|32\|64\)\|Complex\%(32\|64\|128\)\?\|Bool\|Char\|Number\|Signed\|Unsigned\|Integer\|AbstractFloat\|Real\|Rational\|Irrational\|Enum\|BigInt\|BigFloat\|MathConst\)\>" +syntax match   juliaBaseTypeC		display "\<\%(FileOffset\|C\%(u\?\%(char\|short\|int\|long\(long\)\?\|w\?string\)\|float\|double\|\%(ptrdiff\|s\?size\|wchar\|off\|u\?intmax\)_t\)\)\>" +syntax match   juliaBaseTypeError	display "\<\%(\%(Bounds\|Divide\|Domain\|\%(Stack\)\?Overflow\|EOF\|Undef\%(Ref\|Var\)\|System\|Type\|Parse\|Argument\|Key\|Load\|Method\|Inexact\|OutOfMemory\|Init\|Assertion\|Unicode\|ReadOnlyMemory\)Error\|\%(Interrupt\|Error\|ProcessExited\|Captured\|Composite\|InvalidState\|Null\|Remote\)Exception\|DimensionMismatch\|SegmentationFault\)\>" +syntax match   juliaBaseTypeIter	display "\<\%(EachLine\|Enumerate\|Cartesian\%(Index\|Range\)\|LinSpace\)\>" +syntax match   juliaBaseTypeIter05	display "\<\%(Zip\|Filter\)\>" +syntax match   juliaBaseTypeString	display "\<\%(DirectIndex\|Sub\|Rep\|Rev\|Abstract\)\?String\>" +syntax match   juliaBaseTypeArray	display "\<\%(\%(Sub\)\?Array\|\%(Abstract\|Dense\|Strided\)\?\%(Array\|Matrix\|Vec\%(tor\|OrMat\)\)\|SparseMatrixCSC\|\%(AbstractSparse\|Bit\|Shared\)\%(Array\|Vector\|Matrix\)\|\%\(D\|Bid\|\%(Sym\)\?Trid\)iagonal\|Hermitian\|Symmetric\|UniformScaling\|\%(Lower\|Upper\)Triangular\|SparseVector\|VecElement\)\>" +syntax match   juliaBaseTypeArray0607	display "\<\%(Conj\%(Array\|Matrix\|Vector\)\|Index\%(Cartesian\|Linear\|Style\)\|PermutedDimsArray\|RowVector\)\>" +syntax match   juliaBaseTypeDict	display "\<\%(WeakKey\|ObjectId\)\?Dict\>" +syntax match   juliaBaseTypeSet		display "\<Set\>" +syntax match   juliaBaseTypeSet0506	display "\<IntSet\>" +syntax match   juliaBaseTypeSet0607	display "\<AbstractSet\>" +syntax match   juliaBaseTypeSet07	display "\<BitSet\>" +syntax match   juliaBaseTypeIO		display "\<\%(IO\%(Stream\|Buffer\|Context\)\?\|RawFD\|StatStruct\|DevNull\|FileMonitor\|PollingFileWatcher\|Timer\|Base64\%(Decode\|Encode\)Pipe\|\%(UDP\|TCP\)Socket\|\%(Abstract\)\?Channel\|BufferStream\|ReentrantLock\)\>" +syntax match   juliaBaseTypeProcess	display "\<\%(ProcessGroup\|Pipe\|Cmd\)\>" +syntax match   juliaBaseTypeProcess0607	display "\<PipeBuffer\>" +syntax match   juliaBaseTypeRange	display "\<\%(Dims\|RangeIndex\|\%(Ordinal\|Step\|\%(Abstract\)\?Unit\)Range\|Colon\)\>" +syntax match   juliaBaseTypeRange05	display "\<FloatRange\>" +syntax match   juliaBaseTypeRange0506	display "\<Range\>" +syntax match   juliaBaseTypeRange0607	display "\<\%(ExponentialBackOff\|StepRangeLen\)\>" +syntax match   juliaBaseTypeRange07	display "\<AbstractRange\>" +syntax match   juliaBaseTypeRegex	display "\<Regex\%(Match\)\?\>" +syntax match   juliaBaseTypeFact	display "\<Factorization\>" +syntax match   juliaBaseTypeSort	display "\<\%(Insertion\|\(Partial\)\?Quick\|Merge\)Sort\>" +syntax match   juliaBaseTypeRound	display "\<Round\%(ingMode\|FromZero\|Down\|Nearest\%(Ties\%(Away\|Up\)\)\?\|ToZero\|Up\)\>" +syntax match   juliaBaseTypeSpecial	display "\<\%(LocalProcess\|ClusterManager\)\>" +syntax match   juliaBaseTypeRandom	display "\<\%(AbstractRNG\|MersenneTwister\|RandomDevice\)\>" +syntax match   juliaBaseTypeDisplay	display "\<\%(Text\(Display\)\?\|Display\|MIME\|HTML\)\>" +syntax match   juliaBaseTypeTime	display "\<\%(Date\%(Time\)\?\)\>" +syntax match   juliaBaseTypeTime0607	display "\<DateFormat\>" +syntax match   juliaBaseTypeOther	display "\<\%(RemoteRef\|Task\|Condition\|VersionNumber\|IPv[46]\|SerializationState\|WorkerConfig\|Future\|RemoteChannel\|IPAddr\|Stack\%(Trace\|Frame\)\|\(Caching\|Worker\)Pool\|AbstractSerializer\)\>" + +syntax match   juliaConstNum		display "\%(\<\%(\%(NaN\|Inf\)\%(16\|32\|64\)\?\|pi\|π\)\>\)" +syntax match   juliaConstNum0506	display "\%(\<\%(eu\?\|eulergamma\|γ\|catalan\|φ\|golden\)\>\)" +" Note: recognition of ℯ, which Vim does not consider a valid identifier, is +" complicated. We detect possible uses by just looking for the character (for +" performance) and then check that it's actually used by its own. +" (This also tries to detect preceding number constants; it does so in a crude +" way.) +syntax match   juliaPossibleEuler	"ℯ" contains=juliaEuler +exec 'syntax match   juliaEuler	        contained "\%(\%(^\|[' . s:nonidS_chars . ']\|' . s:operators . '\)\%([.0-9eEf_]*\d\)\?\)\@'.s:d(80).'<=ℯ\ze\%($\|[' . s:nonidS_chars . ']\|' . s:operators . '\)"' +syntax match   juliaConstBool		display "\<\%(true\|false\)\>" +syntax match   juliaConstEnv		display "\<\%(ARGS\|ENV\|CPU_CORES\|OS_NAME\|ENDIAN_BOM\|LOAD_PATH\|VERSION\|JULIA_HOME\|PROGRAM_FILE\)\>" +syntax match   juliaConstIO		display "\<\%(STD\%(OUT\|IN\|ERR\)\)\>" +syntax match   juliaConstC		display "\<\%(WORD_SIZE\|C_NULL\)\>" +syntax match   juliaConstGeneric	display "\<\%(nothing\|Main\)\>" + +syntax match   juliaPossibleMacro	transparent "@" contains=juliaMacroCall,juliaMacroCallP,juliaPrintfMacro + +exec 'syntax match   juliaMacro		contained "@' . s:idregex . '\%(\.' . s:idregex . '\)*"' +syntax match   juliaMacro		contained "@\.\ze[^0-9]" +exec 'syntax region  juliaMacroCallP	contained transparent start="@' . s:idregex . '\%(\.' . s:idregex . '\)*(" end=")\@'.s:d(1).'<=" contains=juliaMacro,juliaParBlock' +exec 'syntax region  juliaMacroCallP	contained transparent start="@.(" end=")\@'.s:d(1).'<=" contains=juliaMacro,juliaParBlock' +exec 'syntax region  juliaMacroCall	contained transparent start="\(@' . s:idregex . '\%(\.' . s:idregex . '\)*\)\@=\1\%([^(]\|$\)" end="\ze\%([])};#]\|$\|\<for\>\)" contains=@juliaExpressions,juliaMacro,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS' +exec 'syntax region  juliaMacroCall	contained transparent start="\(@.\)\@=\1\%([^(]\|$\)" end="\ze\%([])};#]\|$\|\<for\>\)" contains=@juliaExpressions,juliaMacro,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS' + +syntax match   juliaNumbers		transparent "\<\d\|\.\d\|\<im\>" contains=juliaNumber,juliaFloat,juliaComplexUnit + +"integer regexes +let s:dec_regex = '\d\%(_\?\d\)*\%(\>\|im\>\|\ze\D\)' +let s:hex_regex = '0x\x\%(_\?\x\)*\%(\>\|im\>\|\ze\X\)' +let s:bin_regex = '0b[01]\%(_\?[01]\)*\%(\>\|im\>\|\ze[^01]\)' +let s:oct_regex = '0o\o\%(_\?\o\)*\%(\>\|im\>\|\ze\O\)' + +let s:int_regex = '\%(' . s:hex_regex . +      \           '\|'  . s:bin_regex . +      \           '\|'  . s:oct_regex . +      \           '\|'  . s:dec_regex . +      \           '\)' + +"floating point regexes +"  starting with a dot, optional exponent +let s:float_regex1 = '\.\d\%(_\?\d\)*\%([eEf][-+]\?\d\+\)\?\%(\>\|im\>\|\ze\D\)' +"  with dot, optional exponent +let s:float_regex2 = '\d\%(_\?\d\)*\.\%(\d\%(_\?\d\)*\)\?\%([eEf][-+]\?\d\+\)\?\%(\>\|im\>\|\ze\D\)' +"  without dot, with exponent +let s:float_regex3 = '\d\%(_\?\d\)*[eEf][-+]\?\d\+\%(\>\|im\>\|\ze\D\)' + +"hex floating point numbers +"  starting with a dot +let s:hexfloat_regex1 = '0x\.\%\(\x\%(_\?\x\)*\)\?[pP][-+]\?\d\+\%(\>\|im\>\|\ze\X\)' +"  starting with a digit +let s:hexfloat_regex2 = '0x\x\%(_\?\x\)*\%\(\.\%\(\x\%(_\?\x\)*\)\?\)\?[pP][-+]\?\d\+\%(\>\|im\>\|\ze\X\)' + +let s:float_regex = '\%(' . s:float_regex3 . +      \             '\|'  . s:float_regex2 . +      \             '\|'  . s:float_regex1 . +      \             '\|'  . s:hexfloat_regex2 . +      \             '\|'  . s:hexfloat_regex1 . +      \             '\)' + +exec 'syntax match   juliaNumber	contained "' . s:int_regex . '" contains=juliaComplexUnit' +exec 'syntax match   juliaFloat		contained "' . s:float_regex . '" contains=juliaComplexUnit' +syntax match   juliaComplexUnit		display	contained "\<im\>" + +exec 'syntax match   juliaOperator	"' . s:operators . '"' +syntax match   juliaRangeOperator	display ":" +exec 'syntax region  juliaTernaryRegion	matchgroup=juliaTernaryOperator start="\s\zs?\ze\s" skip="\%(:\(:\|[^:[:space:]'."'".'"({[]\+\s*\ze:\)\|^\s*:\|\%(?\s*\)\@'.s:d(6).'<=:(\)" end=":" contains=@juliaExpressions,juliaErrorSemicol' + +let s:interp_dollar = '\([' . s:nonidS_chars . s:uniop_chars . s:binop_chars . '!?]\|^\)\@'.s:d(1).'<=\$' + +exec 'syntax match   juliaDollarVar	display contained "' . s:interp_dollar . s:idregex . '"' +exec 'syntax region  juliaDollarPar	matchgroup=juliaDollarVar contained start="' .s:interp_dollar . '(" end=")" contains=@juliaExpressions' +exec 'syntax region  juliaDollarSqBra	matchgroup=juliaDollarVar contained start="' .s:interp_dollar . '\[" end="\]" contains=@juliaExpressions,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS' + +syntax match   juliaChar		"'\\\?.'" contains=juliaSpecialChar +syntax match   juliaChar		display "'\\\o\{3\}'" contains=juliaOctalEscapeChar +syntax match   juliaChar		display "'\\x\x\{2\}'" contains=juliaHexEscapeChar +syntax match   juliaChar		display "'\\u\x\{1,4\}'" contains=juliaUniCharSmall +syntax match   juliaChar		display "'\\U\x\{1,8\}'" contains=juliaUniCharLarge + +exec 'syntax match   juliaCTransOperator	"[[:space:]}' . s:nonid_chars . s:uniop_chars . s:binop_chars . '!?]\@'.s:d(1).'<!\.\?' . "'" . '"' + +syntax region  juliaString		matchgroup=juliaStringDelim start=+\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaStringVars,@juliaSpecialChars,@juliaSpellcheckStrings +syntax region  juliabString		matchgroup=juliaStringDelim start=+\<b\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialChars +syntax region  juliasString		matchgroup=juliaStringDelim start=+\<s\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialChars +syntax region  juliavString		matchgroup=juliaStringDelim start=+\<v\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ +syntax region  juliaipString		matchgroup=juliaStringDelim start=+\<ip\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ +syntax region  juliabigString		matchgroup=juliaStringDelim start=+\<big\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ +syntax region  juliaMIMEString		matchgroup=juliaStringDelim start=+\<MIME\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialChars + +syntax region  juliaDocString		matchgroup=juliaStringDelim start=+^"""+ skip=+\%(\\\\\)*\\"+ end=+"""+ contains=@juliaStringVars,@juliaSpecialChars,@juliaSpellcheckDocStrings + +exec 'syntax region  juliaPrintfMacro		contained transparent start="@s\?printf(" end=")\@'.s:d(1).'<=" contains=juliaMacro,juliaPrintfParBlock' +syntax region  juliaPrintfMacro		contained transparent start="@s\?printf\s\+" end="\ze\%([])};#]\|$\|\<for\>\)" contains=@juliaExprsPrintf,juliaMacro,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS +syntax region  juliaPrintfParBlock	contained matchgroup=juliaParDelim start="(" end=")" contains=@juliaExprsPrintf +syntax region  juliaPrintfString	contained matchgroup=juliaStringDelim start=+"+ skip=+\%(\\\\\)*\\"+ end=+"+ contains=@juliaSpecialChars,@juliaPrintfChars + +syntax region  juliaShellString		matchgroup=juliaStringDelim start=+`+ skip=+\%(\\\\\)*\\`+ end=+`+ contains=@juliaStringVars,juliaSpecialChar + +syntax cluster juliaStringVars		contains=juliaStringVarsPar,juliaStringVarsSqBra,juliaStringVarsCurBra,juliaStringVarsPla +syntax region  juliaStringVarsPar	contained matchgroup=juliaStringVarDelim start="$(" end=")" contains=@juliaExpressions +syntax region  juliaStringVarsSqBra	contained matchgroup=juliaStringVarDelim start="$\[" end="\]" contains=@juliaExpressions,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS +syntax region  juliaStringVarsCurBra	contained matchgroup=juliaStringVarDelim start="${" end="}" contains=@juliaExpressions +exec 'syntax match   juliaStringVarsPla	contained "\$' . s:idregex . '"' + +" TODO improve RegEx +syntax region  juliaRegEx		matchgroup=juliaStringDelim start=+\<r\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1[imsx]*+ + +syntax cluster juliaSpecialChars	contains=juliaSpecialChar,juliaOctalEscapeChar,juliaHexEscapeChar,juliaUniCharSmall,juliaUniCharLarge +syntax match   juliaSpecialChar		display contained "\\." +syntax match   juliaOctalEscapeChar	display contained "\\\o\{3\}" +syntax match   juliaHexEscapeChar	display contained "\\x\x\{2\}" +syntax match   juliaUniCharSmall	display contained "\\u\x\{1,4\}" +syntax match   juliaUniCharLarge	display contained "\\U\x\{1,8\}" + +syntax cluster juliaPrintfChars		contains=juliaErrorPrintfFmt,juliaPrintfFmt +syntax match   juliaErrorPrintfFmt	display contained "\\\?%." +syntax match   juliaPrintfFmt		display contained "%\%(\d\+\$\)\=[-+' #0]*\%(\d*\|\*\|\*\d\+\$\)\%(\.\%(\d*\|\*\|\*\d\+\$\)\)\=\%([hlLjqzt]\|ll\|hh\)\=[aAbdiuoxXDOUfFeEgGcCsSpn]" +syntax match   juliaPrintfFmt		display contained "%%" +syntax match   juliaPrintfFmt		display contained "\\%\%(\d\+\$\)\=[-+' #0]*\%(\d*\|\*\|\*\d\+\$\)\%(\.\%(\d*\|\*\|\*\d\+\$\)\)\=\%([hlLjqzt]\|ll\|hh\)\=[aAbdiuoxXDOUfFeEgGcCsSpn]"hs=s+1 +syntax match   juliaPrintfFmt		display contained "\\%%"hs=s+1 + +" this is used to restrict the search for Symbols to when colons appear at all +" (for performance reasons) +syntax match   juliaPossibleSymbol      transparent ":\ze[^:]" contains=juliaSymbol,juliaQuotedParBlock,juliaQuotedQMarkPar,juliaColon + +let s:quotable = '\%(' . s:idregex . '\|?\|' . s:operators . '\|' . s:float_regex . '\|' . s:int_regex . '\)' +let s:quoting_colon = '\%(\%(^\s*\|\s\{6,\}\|[' . s:nonid_chars . s:uniop_chars . s:binop_chars . '?]\s*\)\@'.s:d(6).'<=\|\%(\<\%(return\|if\|else\%(if\)\?\|while\|try\|begin\)\s*\)\@'.s:d(9).'<=\)\zs:' +let s:quoting_colonS = '\s\@'.s:d(1).'<=:' + +" note: juliaSymbolS only works within whitespace-sensitive contexts, +" such as in macro calls without parentheses, or within square brackets. +" It is used to override the recognition of expressions like `a :b` as +" ranges rather than symbols in those contexts. +" (Note that such `a :b` expressions only allows at most 5 spaces between +" the identifier and the colon anyway.) + +exec 'syntax match   juliaSymbol	contained "' .s:quoting_colon . s:quotable . '"' +exec 'syntax match   juliaSymbolS	contained "' . s:quoting_colonS . s:quotable . '"' + +" same as above for quoted expressions such as :(expr) +" (includes :(?) as a special case, although it really shouldn't work...) +exec 'syntax region   juliaQuotedParBlock	matchgroup=juliaQParDelim start="' . s:quoting_colon . '(" end=")" contains=@juliaExpressions' +exec 'syntax match    juliaQuotedQMarkPar	"' . s:quoting_colon . '(\s*?\s*)" contains=juliaQuotedQMark' +exec 'syntax region   juliaQuotedParBlockS	matchgroup=juliaQParDelim contained start="' . s:quoting_colonS . '(" end=")" contains=@juliaExpressions' +exec 'syntax match    juliaQuotedQMarkParS	contained "' . s:quoting_colonS . '(\s*?\s*)" contains=juliaQuotedQMark' + +" force precedence over Symbols +syntax match   juliaOperator		display "::" + +syntax region  juliaCommentL		matchgroup=juliaCommentDelim start="#\ze\%([^=]\|$\)" end="$" keepend contains=juliaTodo,@juliaSpellcheckComments +syntax region  juliaCommentM		matchgroup=juliaCommentDelim start="#=\ze\%([^#]\|$\)" end="=#" contains=juliaTodo,juliaCommentM,@juliaSpellcheckComments +syntax keyword juliaTodo		contained TODO FIXME XXX + + +" the following are disabled by default, but +" can be enabled by entering e.g. +"   :hi link juliaParDelim Delimiter +hi def link juliaParDelim		juliaNone +hi def link juliaSemicolon		juliaNone +hi def link juliaComma  		juliaNone + +hi def link juliaColon			juliaOperator + + +hi def link juliaKeyword		Keyword +hi def link juliaInfixKeyword		Keyword +hi def link juliaRepKeyword		Keyword +hi def link juliaBlKeyword		Keyword +hi def link juliaConditional		Conditional +hi def link juliaRepeat			Repeat +hi def link juliaException		Exception +hi def link juliaTypedef		Keyword +exec 'hi! def link juliaOuter ' . (b:julia_syntax_version >= 7 ? 'Keyword' : 'NONE') +hi def link juliaBaseTypeBasic		Type +hi def link juliaBaseTypeNum		Type +hi def link juliaBaseTypeC		Type +hi def link juliaBaseTypeError		Type +hi def link juliaBaseTypeIter		Type +hi def link juliaBaseTypeString		Type +hi def link juliaBaseTypeArray		Type +hi def link juliaBaseTypeDict		Type +hi def link juliaBaseTypeSet		Type +hi def link juliaBaseTypeIO		Type +hi def link juliaBaseTypeProcess	Type +hi def link juliaBaseTypeRange		Type +hi def link juliaBaseTypeRegex		Type +hi def link juliaBaseTypeFact		Type +hi def link juliaBaseTypeSort		Type +hi def link juliaBaseTypeRound		Type +hi def link juliaBaseTypeSpecial	Type +hi def link juliaBaseTypeRandom		Type +hi def link juliaBaseTypeDisplay	Type +hi def link juliaBaseTypeTime		Type +hi def link juliaBaseTypeOther		Type +for t in ["Basic", "Array", "Set", "Range", "Time", "Process"] +  let h = b:julia_syntax_version >= 6 ? "Type" : "NONE" +  exec "hi! def link juliaBaseType" . t . "0607	" . h +endfor +for t in ["Iter", "Range"] +  let h = b:julia_syntax_version == 5 ? "Type" : b:julia_syntax_version == 6 ? "juliaDeprecated" : "NONE" +  exec "hi! def link juliaBaseType" . t . "05 " . h +endfor +for t in ["Range", "Set"] +  let h = b:julia_syntax_version <= 6 ? "Type" : "juliaDeprecated" +  exec "hi! def link juliaBaseType" . t . "0506 " . h +endfor +for t in ["Range", "Set"] +  let h = b:julia_syntax_version >= 7 ? "Type" : "NONE" +  exec "hi! def link juliaBaseType" . t . "07 " . h +endfor + +" NOTE: deprecated constants are not highlighted as such. For once, +" one can still legitimately use them by importing Base.MathConstants. +" Plus, one-letter variables like `e` and `γ` can be used with other +" meanings. +hi def link juliaConstNum		Constant +let h = b:julia_syntax_version <= 6 ? "Constant" : "NONE" +exec "hi! def link juliaConstNum0506 " . h +let h = b:julia_syntax_version >= 7 ? "Constant" : "NONE" +exec "hi! def link juliaEuler " . h + +hi def link juliaConstEnv		Constant +hi def link juliaConstIO		Constant +hi def link juliaConstC			Constant +hi def link juliaConstLimits		Constant +hi def link juliaConstGeneric		Constant +hi def link juliaRangeEnd		Constant +hi def link juliaConstBool		Boolean + +hi def link juliaComprehensionFor	Keyword +hi def link juliaComprehensionIf	Keyword + +hi def link juliaDollarVar		Identifier + +hi def link juliaMacro			Macro +hi def link juliaSymbol			Identifier +hi def link juliaSymbolS		Identifier +hi def link juliaQParDelim		Identifier +hi def link juliaQuotedQMarkPar		Identifier +hi def link juliaQuotedQMarkParS	Identifier +hi def link juliaQuotedQMark            juliaOperatorHL + +hi def link juliaNumber			Number +hi def link juliaFloat			Float +hi def link juliaComplexUnit		Constant + +hi def link juliaChar			Character + +hi def link juliaString			String +hi def link juliabString		String +hi def link juliasString		String +hi def link juliavString		String +hi def link juliarString		String +hi def link juliaipString		String +hi def link juliabigString		String +hi def link juliaMIMEString		String +hi def link juliaPrintfString		String +hi def link juliaShellString		String +hi def link juliaDocString		String +hi def link juliaStringDelim		String +hi def link juliaStringVarsPla		Identifier +hi def link juliaStringVarDelim		Identifier + +hi def link juliaRegEx			String + +hi def link juliaSpecialChar		SpecialChar +hi def link juliaOctalEscapeChar	SpecialChar +hi def link juliaHexEscapeChar		SpecialChar +hi def link juliaUniCharSmall		SpecialChar +hi def link juliaUniCharLarge		SpecialChar + +hi def link juliaPrintfFmt		SpecialChar + +if s:julia_highlight_operators +  hi! def link juliaOperatorHL		Operator +else +  hi! def link juliaOperatorHL		juliaNone +endif +hi def link juliaOperator		juliaOperatorHL +hi def link juliaRangeOperator		juliaOperatorHL +hi def link juliaCTransOperator		juliaOperatorHL +hi def link juliaTernaryOperator	juliaOperatorHL + +hi def link juliaCommentL		Comment +hi def link juliaCommentM		Comment +hi def link juliaCommentDelim		Comment +hi def link juliaTodo			Todo + +hi def link juliaErrorPar		juliaError +hi def link juliaErrorEnd		juliaError +hi def link juliaErrorElse		juliaError +hi def link juliaErrorCatch		juliaError +hi def link juliaErrorFinally		juliaError +hi def link juliaErrorSemicol		juliaError +hi def link juliaErrorPrintfFmt		juliaError + +hi def link juliaError			Error + +if b:julia_syntax_highlight_deprecated == 1 +  hi! def link juliaDeprecated		Todo +else +  hi! def link juliaDeprecated		NONE +end + +syntax sync fromstart  let b:current_syntax = "julia" - -  endif | 
