summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md12
-rw-r--r--after/syntax/html.vim13
-rw-r--r--autoload/LaTeXtoUnicode.vim625
-rw-r--r--autoload/fish.vim71
-rw-r--r--autoload/julia.vim188
-rw-r--r--autoload/julia_blocks.vim798
-rw-r--r--autoload/julia_latex_symbols.vim3316
-rwxr-xr-xbuild2
-rw-r--r--compiler/fish.vim11
-rw-r--r--ftdetect/polyglot.vim82
-rw-r--r--ftplugin/fish.vim43
-rw-r--r--ftplugin/git.vim45
-rw-r--r--ftplugin/gitcommit.vim68
-rw-r--r--ftplugin/gitconfig.vim19
-rw-r--r--ftplugin/gitrebase.vim49
-rw-r--r--ftplugin/gitsendemail.vim10
-rw-r--r--ftplugin/julia.vim99
-rw-r--r--indent/fish.vim6
-rw-r--r--indent/fsharp.vim253
-rw-r--r--indent/gitconfig.vim42
-rw-r--r--indent/glsl.vim15
-rw-r--r--indent/julia.vim225
-rw-r--r--syntax/fish.vim41
-rw-r--r--syntax/fsharp.vim269
-rw-r--r--syntax/git.vim82
-rw-r--r--syntax/gitcommit.vim88
-rw-r--r--syntax/gitconfig.vim42
-rw-r--r--syntax/gitrebase.vim44
-rw-r--r--syntax/gitsendemail.vim27
-rw-r--r--syntax/glsl.vim679
-rw-r--r--syntax/gmpl.vim122
-rw-r--r--syntax/julia.vim648
32 files changed, 5786 insertions, 2248 deletions
diff --git a/README.md b/README.md
index 0b22f643..ac744574 100644
--- a/README.md
+++ b/README.md
@@ -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
diff --git a/build b/build
index 38796fe2..3a6eb6ac 100755
--- a/build
+++ b/build
@@ -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