From 9fe009095afdb86f6f771109ac454ccfc5340f31 Mon Sep 17 00:00:00 2001 From: Adam Stankiewicz Date: Wed, 6 Dec 2017 13:05:56 +0100 Subject: [PATCH] Change julia provider to JuliaEditorSupport/julia-vim, closes #253 --- README.md | 12 +- after/syntax/html.vim | 13 - autoload/LaTeXtoUnicode.vim | 625 ++++++ autoload/fish.vim | 71 - autoload/julia.vim | 188 ++ autoload/julia_blocks.vim | 798 +++++++ autoload/julia_latex_symbols.vim | 3316 ++++++++++++++++++++++++++++++ build | 2 +- compiler/fish.vim | 11 - ftdetect/polyglot.vim | 82 +- ftplugin/fish.vim | 43 - ftplugin/git.vim | 45 - ftplugin/gitcommit.vim | 68 - ftplugin/gitconfig.vim | 19 - ftplugin/gitrebase.vim | 49 - ftplugin/gitsendemail.vim | 10 - ftplugin/julia.vim | 99 + indent/fish.vim | 6 - indent/fsharp.vim | 253 --- indent/gitconfig.vim | 42 - indent/glsl.vim | 15 - indent/julia.vim | 225 +- syntax/fish.vim | 41 - syntax/fsharp.vim | 269 --- syntax/git.vim | 82 - syntax/gitcommit.vim | 88 - syntax/gitconfig.vim | 42 - syntax/gitrebase.vim | 44 - syntax/gitsendemail.vim | 27 - syntax/glsl.vim | 679 ------ syntax/gmpl.vim | 122 -- syntax/julia.vim | 624 +++++- 32 files changed, 5774 insertions(+), 2236 deletions(-) create mode 100644 autoload/LaTeXtoUnicode.vim delete mode 100644 autoload/fish.vim create mode 100644 autoload/julia.vim create mode 100644 autoload/julia_blocks.vim create mode 100644 autoload/julia_latex_symbols.vim delete mode 100644 compiler/fish.vim delete mode 100644 ftplugin/fish.vim delete mode 100644 ftplugin/git.vim delete mode 100644 ftplugin/gitcommit.vim delete mode 100644 ftplugin/gitconfig.vim delete mode 100644 ftplugin/gitrebase.vim delete mode 100644 ftplugin/gitsendemail.vim create mode 100644 ftplugin/julia.vim delete mode 100644 indent/fish.vim delete mode 100644 indent/fsharp.vim delete mode 100644 indent/gitconfig.vim delete mode 100644 indent/glsl.vim delete mode 100644 syntax/fish.vim delete mode 100644 syntax/fsharp.vim delete mode 100644 syntax/git.vim delete mode 100644 syntax/gitcommit.vim delete mode 100644 syntax/gitconfig.vim delete mode 100644 syntax/gitrebase.vim delete mode 100644 syntax/gitsendemail.vim delete mode 100644 syntax/glsl.vim delete mode 100644 syntax/gmpl.vim diff --git a/README.md b/README.md index 0b22f64..ac74457 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 43c0c41..0ba2c14 100644 --- a/after/syntax/html.vim +++ b/after/syntax/html.vim @@ -21,19 +21,6 @@ if exists('s:current_syntax_save') unlet s:current_syntax_save endif -endif -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'glsl') == -1 - -" Language: OpenGL Shading Language -" Maintainer: Sergey Tikhomirov - -syn include @GLSL syntax/glsl.vim -syn region ShaderScript - \ start=""me=s-1 - \ contains=@GLSL,htmlScriptTag,@htmlPreproc - endif if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'html5') == -1 diff --git a/autoload/LaTeXtoUnicode.vim b/autoload/LaTeXtoUnicode.vim new file mode 100644 index 0000000..581dec1 --- /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 + 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 +" mapping into the Fallback trigger) +function! s:L2U_SetFallbackMapping(s, k) + let mmdict = maparg(a:s, 'i', 0, 1) + if empty(mmdict) + exe 'inoremap ' . a:k . ' ' . a:s + return + endif + let rhs = mmdict["rhs"] + if rhs =~# '^L2U' + return + endif + let pre = '' + if mmdict["silent"] + let pre = pre . '' + endif + if mmdict["expr"] + let pre = pre . '' + 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, "\=LaTeXtoUnicode#PutLiteral('" . a:s . "')\", 'g') + endif + endif + exe cmd . pre . ' ' . a:k . ' ' . rhs +endfunction + +" This is the function which is mapped to +function! LaTeXtoUnicode#Tab() + " the 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 "\\" +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 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 L2UCmdTab + cnoremap L2UCmdTab eLaTeXtoUnicode#CmdTab() + 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('', s:l2u_fallback_trigger) + imap L2UTab + inoremap L2UTab LaTeXtoUnicode#Tab() + + augroup L2UTab + autocmd! * + " Every time a completion finishes, the fallback may be invoked + autocmd CompleteDone 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 + let b:l2u_cmdtab_set = 0 + endif + if !b:l2u_tab_set + return + endif + exec "setlocal omnifunc=" . get(b:, "prev_omnifunc", "") + iunmap + if empty(maparg("", "i")) + call s:L2U_SetFallbackMapping(s:l2u_fallback_trigger, '') + endif + iunmap L2UTab + exe 'iunmap ' . s:l2u_fallback_trigger + augroup L2UTab + autocmd! * + 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("\u", 'n') + call feedkeys(repeat("\b", len(base) + bs) . unicode . vc . s:l2u_esc_sequence, 'nt') + call feedkeys("\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 key does not seem to be catched in + " this way though, so we use a mapping for that case. + imap L2UAutoSub + inoremap L2UAutoSub LaTeXtoUnicode#AutoSub("\n", "\") + + augroup L2UAutoSub + autocmd! * + autocmd InsertCharPre 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 + iunmap L2UAutoSub + augroup L2UAutoSub + autocmd! * + 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 d4e63cd..0000000 --- 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 0000000..695a6b7 --- /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\') == 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('') + " 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 0000000..ef7cf01 --- /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 = " " . chars . " " + let cnt = ":let b:jlblk_count=v:count1" + exe "nnoremap " . lhs . cnt + \ . " call " . fn . "()" + exe "onoremap " . lhs . cnt + \ . ":call julia_blocks#owrapper_move(v:operator, \"" . fn . "\", " . a:toend . ", " . a:backwards . ")" + exe "xnoremap " . lhs . cnt + \ . "gv:call julia_blocks#vwrapper_move(\"" . fn . "\")" + 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 = "\" + \ . ":let &l:selection = \"" . save_select . "\"\" + \ . ":let &l:lazyredraw = " . save_redraw . "\" + \ . ":\" + + 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 = " " . 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, '|', '', '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 = " " . chars . " " + let cnt = ":let b:jlblk_inwrapper=1:let b:jlblk_count=max([v:prevcount,1])" + exe "onoremap " . lhs . "" . cnt + \ . ":call julia_blocks#owrapper_select(v:operator, \"" . fn . "\")" + exe "xnoremap " . lhs . cnt + \ . ":call julia_blocks#vwrapper_select(\"" . fn . "\")" + 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 = "\" + \ . ":let &l:selection = \"" . save_select . "\"\" + \ . ":let &l:lazyredraw = " . save_redraw . "\" + \ . ":\" + + 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 = " " . chars . " " + exe "nnoremap " . lhs . ":echo " . fn . "()" + 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 :call julia_blocks#select_reset() +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("", "x", 0, 1) + if !empty(md) && md["buffer"] + vunmap + 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) . "\" + elseif newtopline < oldtopline + exe ":normal! " . (oldtopline - newtopline) . "\" + 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) . "\" + elseif newtopline > oldtopline && (newtopline + &l:scrolloff - l) > 0 + exe ":normal! " . (l - newtopline - &l:scrolloff) . "\" + 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("\", '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("") =~# 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 0000000..8fdb856 --- /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 38796fe..3a6eb6a 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 11fad0c..0000000 --- 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 0bef800..44c70ee 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 - -" 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 c6c1f6d..0000000 --- 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(':p:h:h').'/bin/man.fish') - -let b:match_words = - \ escape('<%(begin|function|if|switch|while|for)>:', '<>%|)') - -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 38b9493..0000000 --- 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 -" 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 dc6a581..0000000 --- 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 -" 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(0,b:git_dir,) - -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(0,b:git_dir,) - nnoremap q :q - 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 2328252..0000000 --- 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 -" 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 032aba3..0000000 --- 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 -" 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 :,call s:choose('pick') -command! -buffer -bar -range Squash :,call s:choose('squash') -command! -buffer -bar -range Edit :,call s:choose('edit') -command! -buffer -bar -range Reword :,call s:choose('reword') -command! -buffer -bar -range Fixup :,call s:choose('fixup') -command! -buffer -bar -range Drop :,call s:choose('drop') -command! -buffer -bar Cycle :call s:cycle() -" The above are more useful when they are mapped; for example: -"nnoremap S :Cycle - -if exists("g:no_plugin_maps") || exists("g:no_gitrebase_maps") - finish -endif - -nnoremap K col('.') < 7 && expand('cword>') =~ '\X' && getline('.') =~ '^\w\+\s\+\x\+\>' ? 'wK' : 'K' - -let b:undo_ftplugin = b:undo_ftplugin . "|nunmap K" - -endif diff --git a/ftplugin/gitsendemail.vim b/ftplugin/gitsendemail.vim deleted file mode 100644 index 69e0360..0000000 --- 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 -" 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 0000000..2d1bcb4 --- /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 +" 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*\)\@' + let s:macro_regex = '@\%(#\@!\S\)\+\s\+' + let s:nomacro = '\%(' . s:macro_regex . '\)\@' + + " 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") =~ ' + \ . '"\\"' + + 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 c5f8e50..0000000 --- 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 bdc3e3f..0000000 --- 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 -" Mike Leary -" Markus Mottl -" Rudi Grinberg -" Gregor Uhlenheuer -" 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\\>.*=.*\\\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, '','\') - - " Indent if current line begins with 'done' for 'do': - elseif line =~ '^\s*done\>' - return s:FindPair('\', '','\') - - " 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, '','\' - if lline !~ s:lim . '\|\\)\|\<\(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('\', '', '\') - endif - - " Indent if current line begins with 'else': - elseif line =~ '^\s*else\>' - if lline !~ '^\s*\(if\|then\)\>' - return s:FindPair('\', '', '\') - endif - - " Indent if current line begins with 'then': - elseif line =~ '^\s*then\>' - if lline !~ '^\s*\(if\|else\)\>' - return s:FindPair('\', '', '\') - endif - - " Indent if current line begins with 'and': - elseif line =~ '^\s*and\>' - if lline !~ '^\s*\(and\|let\|type\)\>\|\' - if lline !~ '^\s*\(match\|try\)\>' - return s:FindPair('\<\%(match\|try\)\>', '','\') - 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\)\|\') - - " Back to normal indent after lines ending with 'in': - elseif lline =~ '\' - let ind = s:FindPair('\', '', '\') - - " Back to normal indent after lines ending with 'done': - elseif lline =~ '\', '','\') - - " 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 e0e4a45..0000000 --- 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 -" 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,*,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 =~ '\\\@ - -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 7fafe89..4833d7e 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 -" 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 = '\' +let s:skipPatterns = '\' -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, '@\@', s) - let fe = JuliaMatch(a:lnum, line, '@\@', s) + let fb = JuliaMatch(a:lnum, line, '@\@', s, e) + let fe = JuliaMatch(a:lnum, line, '@\@', 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, '@\@', s) + let i = JuliaMatch(a:lnum, line, '@\@', 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 = '\' + +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 - " Analyse previous line - let [num_open_blocks, num_closed_blocks] = GetJuliaNestingStruct(lnum) + " 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 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 f198dba..0000000 --- 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 f66daa0..0000000 --- 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 -" -" Note: This syntax file is a complete rewrite of the original version -" of fs.vim from Choy Rim and a slight -" modified version from Thomas Schank - -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 "\%(\" -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 "\%(\= 508 || !exists("did_fs_syntax_inits") - if version < 508 - let did_fs_syntax_inits = 1 - command -nargs=+ HiLink hi link - else - command -nargs=+ HiLink hi def link - 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 53f44d3..0000000 --- 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 -" 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=// 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 74477b2..0000000 --- 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 -" 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 49b992b..0000000 --- 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 -" 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 3a66f0a..0000000 --- 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 -" 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 756f5da..0000000 --- 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 73c2afa..0000000 --- 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 - -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 2b8d712..0000000 --- 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 1424b0c..915cc68 100644 --- a/syntax/julia.vim +++ b/syntax/julia.vim @@ -1,153 +1,551 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1 +" Vim syntax file +" Language: julia +" Maintainer: Carlo Baldassi +" Last Change: 2013 feb 11 -if exists("b:current_syntax") +if version < 600 + syntax clear +elseif exists("b:current_syntax") finish endif +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 + +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 + +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) + +let s:julia_highlight_operators = get(g:, "julia_highlight_operators", 1) + +" 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 + +" 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 (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 . ']' . + \ '\)' + syn case match +syntax cluster juliaExpressions contains=@juliaParItems,@juliaStringItems,@juliaKeywordItems,@juliaBlocksItems,@juliaTypesItems,@juliaConstItems,@juliaMacroItems,@juliaSymbolItems,@juliaOperatorItems,@juliaNumberItems,@juliaCommentItems,@juliaErrorItems +syntax cluster juliaExprsPrintf contains=@juliaExpressions,@juliaPrintfItems -syn keyword juliaDirective import importall export using require include +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 -hi def link juliaDirective Include +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 region juliaDeclTypeBlock transparent matchgroup=juliaDeclType start="\<\%(type\|immutable\)\>" end="\" contains=ALL -syn keyword juliaTypeAlias typealias -syn keyword juliaDeclAbstract abstract +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 -hi def link juliaDeclType Structure -hi def link juliaTypeAlias Typedef -hi def link juliaDeclAbstract Structure +syntax cluster juliaSpellcheckStrings contains=@spell +syntax cluster juliaSpellcheckDocStrings contains=@spell +syntax cluster juliaSpellcheckComments contains=@spell -" Module -syn region juliaModuleBlock transparent matchgroup=juliaModule start="\" end="\" contains=ALL +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 -hi def link juliaModule Structure +syntax match juliaSemicolon display ";" +syntax match juliaComma display "," +syntax match juliaColon display ":" + +syntax match juliaErrorPar display "[])}]" +syntax match juliaErrorEnd display "\" +syntax match juliaErrorElse display "\<\%(else\|elseif\)\>" +syntax match juliaErrorCatch display "\" +syntax match juliaErrorFinally display "\" +syntax match juliaErrorSemicol display contained ";" + +syntax match juliaRangeEnd display contained "\" + +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*\)\@" +syntax region juliaConditionalBlock matchgroup=juliaConditional start="\" end="\" contains=@juliaExpressions,juliaConditionalEIBlock,juliaConditionalEBlock fold +syntax region juliaConditionalEIBlock matchgroup=juliaConditional transparent contained start="\" end="\<\%(end\|else\|elseif\)\>"me=s-1 contains=@juliaExpressions,juliaConditionalEIBlock,juliaConditionalEBlock +syntax region juliaConditionalEBlock matchgroup=juliaConditional transparent contained start="\" end="\"me=s-1 contains=@juliaExpressions +syntax region juliaWhileBlock matchgroup=juliaRepeat start="\" end="\" contains=@juliaExpressions fold +syntax region juliaForBlock matchgroup=juliaRepeat start="\" end="\" contains=@juliaExpressions,juliaOuter fold +syntax region juliaBeginBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold +syntax region juliaFunctionBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold +syntax region juliaMacroBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold +syntax region juliaQuoteBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold +syntax region juliaTypeBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold +syntax region juliaImmutableBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold +syntax region juliaStructBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold +syntax region juliaMutableStructBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold +syntax region juliaLetBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold +syntax region juliaDoBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold +exec 'syntax region juliaModuleBlock matchgroup=juliaBlKeyword start="\%(\%(\.\s*\)\@'.s:d(6).'" end="\" contains=@juliaExpressions fold' +syntax region juliaExceptionBlock matchgroup=juliaException start="\" end="\" contains=@juliaExpressions,juliaCatchBlock,juliaFinallyBlock fold +syntax region juliaCatchBlock matchgroup=juliaException transparent contained start="\" end="\"me=s-1 contains=@juliaExpressions,juliaFinallyBlock +syntax region juliaFinallyBlock matchgroup=juliaException transparent contained start="\" 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="\" end="\" fold contains=@juliaExpressions +syntax region juliaPrimitiveBlock matchgroup=juliaBlKeyword start="\" end="\" fold contains=@juliaExpressions + +exec 'syntax region juliaComprehensionFor matchgroup=juliaComprehensionFor transparent contained start="\%([^[:space:],;:({[]\_s*\)\@'.s:d(80).'<=\" end="\ze[]);]" contains=@juliaExpressions,juliaComprehensionIf,juliaComprehensionFor' +syntax match juliaComprehensionIf contained "\" + +exec 'syntax match juliaOuter contained "\"' + +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 "\" +syntax match juliaBaseTypeSet0506 display "\" +syntax match juliaBaseTypeSet0607 display "\" +syntax match juliaBaseTypeSet07 display "\" +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 "\" +syntax match juliaBaseTypeRange display "\<\%(Dims\|RangeIndex\|\%(Ordinal\|Step\|\%(Abstract\)\?Unit\)Range\|Colon\)\>" +syntax match juliaBaseTypeRange05 display "\" +syntax match juliaBaseTypeRange0506 display "\" +syntax match juliaBaseTypeRange0607 display "\<\%(ExponentialBackOff\|StepRangeLen\)\>" +syntax match juliaBaseTypeRange07 display "\" +syntax match juliaBaseTypeRegex display "\" +syntax match juliaBaseTypeFact display "\" +syntax match juliaBaseTypeSort display "\<\%(Insertion\|\(Partial\)\?Quick\|Merge\)Sort\>" +syntax match juliaBaseTypeRound display "\" +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 "\" +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\%([])};#]\|$\|\\)" contains=@juliaExpressions,juliaMacro,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS' +exec 'syntax region juliaMacroCall contained transparent start="\(@.\)\@=\1\%([^(]\|$\)" end="\ze\%([])};#]\|$\|\\)" contains=@juliaExpressions,juliaMacro,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS' + +syntax match juliaNumbers transparent "\<\d\|\.\d\|\" 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 "\" + +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).'\)" 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=+\= 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 -hi def link juliaTry Exception -hi def link juliaCatch Exception +" 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 -" one word statements -syn keyword juliaStatement return continue break +hi def link juliaComprehensionFor Keyword +hi def link juliaComprehensionIf Keyword -hi def link juliaStatement Statement +hi def link juliaDollarVar Identifier -" misc -syn keyword juliaDeclaration const global local -syn keyword juliaComprehensionFor for +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 juliaDeclaration Keyword -hi def link juliaComprehensionFor Keyword +hi def link juliaNumber Number +hi def link juliaFloat Float +hi def link juliaComplexUnit Constant -" 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 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 juliaType Type +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 -" Comments -syn keyword juliaTodo contained TODO FIXME XXX -syn cluster juliaCommentGroup contains=juliaTodo -syn region juliaComment start="#" end="$" contains=@juliaCommentGroup,@Spell +hi def link juliaPrintfFmt SpecialChar -hi def link juliaComment Comment -hi def link juliaTodo Todo +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 -" 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 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 juliaString String -hi def link juliaTripleString String -hi def link juliaCharacter Character +hi def link juliaError Error +if b:julia_syntax_highlight_deprecated == 1 + hi! def link juliaDeprecated Todo +else + hi! def link juliaDeprecated NONE +end -" Functions -syn region juliaFunctionBlock transparent matchgroup=juliaFunction start="\<\%\(function\|macro\)\>" end="\" contains=@juliaTop -hi def link juliaFunction Function - - -" Numbers -syn match juliaNumber "\<\d\+\([Ee]\d\+\)\?\>" -syn match juliaNumber "\<0x\x\+\>" -syn match juliaNumber "\<0\o\+\>" - -syn match juliaFloat "\<\d\+\.\d*\([Ee][-+]\d\+\)\?\>" -syn match juliaFloat "\<\.\d\+\([Ee][-+]\d\+\)\?\>" -syn match juliaFloat "\<\d\+[Ee][-+]\d\+\>" -syn keyword juliaFloatSpecial NaN Inf - -hi def link juliaNumber Number -hi def link juliaFloat Float -hi def link juliaFloatSpecial Float - - -" Operators -syn keyword juliaIn in -hi def link juliaIn Operator - - -" Constants -syn keyword juliaBool true false nothing -hi def link juliaBool Boolean - -syn keyword juliaIdentifierSpecial STDOUT, STDIN, STDERR - -hi def link juliaIdentifierSpecial Identifier - - -" Macros -syn match juliaMacro display "@[_[:alpha:]][_[:alnum:]!]*\%(\.[_[:alpha:]][_[:alnum:]!]*\)*" - -hi def link juliaMacro Macro - - -syn cluster juliaTop contains=ALLBUT,juliaComprehensionFor - -" Ragel -syn include @ragel syntax/ragel.vim -syn region ragelLine start="%%" end="$" contains=@ragel - +syntax sync fromstart let b:current_syntax = "julia" - - endif