diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2018-10-08 19:00:59 +0200 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2018-10-08 19:00:59 +0200 | 
| commit | fd74d8b2b170b540680a9bbf6c64990f8ebafd08 (patch) | |
| tree | b1fdef6203a78a21053d1b8e0666ab7a38c36df2 /autoload | |
| parent | 055f7710b65dfa2df52fc0b5be2486ae36ac5751 (diff) | |
| download | vim-polyglot-fd74d8b2b170b540680a9bbf6c64990f8ebafd08.tar.gz vim-polyglot-fd74d8b2b170b540680a9bbf6c64990f8ebafd08.zip | |
Updatev3.3.3
Diffstat (limited to 'autoload')
| -rw-r--r-- | autoload/crystal_lang.vim | 4 | ||||
| -rw-r--r-- | autoload/elixir/indent.vim | 327 | ||||
| -rw-r--r-- | autoload/go/config.vim | 18 | ||||
| -rw-r--r-- | autoload/julia/doc.vim | 246 | ||||
| -rw-r--r-- | autoload/julia_blocks.vim | 4 | ||||
| -rw-r--r-- | autoload/julia_latex_symbols.vim | 2295 | ||||
| -rw-r--r-- | autoload/rubycomplete.vim | 35 | ||||
| -rw-r--r-- | autoload/rust.vim | 91 | ||||
| -rw-r--r-- | autoload/rust/debugging.vim | 1 | ||||
| -rw-r--r-- | autoload/rust/delimitmate.vim | 48 | ||||
| -rw-r--r-- | autoload/rustfmt.vim | 142 | 
11 files changed, 1773 insertions, 1438 deletions
| diff --git a/autoload/crystal_lang.vim b/autoload/crystal_lang.vim index aaf626cf..bffa721f 100644 --- a/autoload/crystal_lang.vim +++ b/autoload/crystal_lang.vim @@ -310,6 +310,10 @@ function! crystal_lang#format(option_str, ...) abort      call setpos('.', pos_save)  endfunction +function! crystal_lang#expand(file, pos, ...) abort +    return crystal_lang#tool('expand', a:file, a:pos, get(a:, 1, '')) +endfunction +  let &cpo = s:save_cpo  unlet s:save_cpo diff --git a/autoload/elixir/indent.vim b/autoload/elixir/indent.vim index aca5a2fd..20271ac5 100644 --- a/autoload/elixir/indent.vim +++ b/autoload/elixir/indent.vim @@ -23,22 +23,18 @@ function! elixir#indent#indent(lnum)    let handlers = [          \'top_of_file', -        \'starts_with_end', -        \'starts_with_mid_or_end_block_keyword', -        \'following_trailing_do', -        \'following_trailing_rocket',          \'following_trailing_binary_operator',          \'starts_with_pipe', -        \'starts_with_close_bracket',          \'starts_with_binary_operator', -        \'inside_nested_construct', -        \'starts_with_comment', +        \'inside_block', +        \'starts_with_end',          \'inside_generic_block',          \'follow_prev_nb'          \]    for handler in handlers      call s:debug('testing handler elixir#indent#handle_'.handler) -    let indent = function('elixir#indent#handle_'.handler)(lnum, text, prev_nb_lnum, prev_nb_text) +    let context = {'lnum': lnum, 'text': text, 'prev_nb_lnum': prev_nb_lnum, 'prev_nb_text': prev_nb_text} +    let indent = function('elixir#indent#handle_'.handler)(context)      if indent != -1        call s:debug('line '.lnum.': elixir#indent#handle_'.handler.' returned '.indent)        call cursor(curs_lnum, curs_col) @@ -57,9 +53,17 @@ function! s:debug(str)    endif  endfunction +function! s:starts_with(context, expr) +  return s:_starts_with(a:context.text, a:expr, a:context.lnum) +endfunction + +function! s:prev_starts_with(context, expr) +  return s:_starts_with(a:context.prev_nb_text, a:expr, a:context.prev_nb_lnum) +endfunction +  " Returns 0 or 1 based on whether or not the text starts with the given  " expression and is not a string or comment -function! s:starts_with(text, expr, lnum) +function! s:_starts_with(text, expr, lnum)    let pos = match(a:text, '^\s*'.a:expr)    if pos == -1      return 0 @@ -74,9 +78,13 @@ function! s:starts_with(text, expr, lnum)    end  endfunction +function! s:prev_ends_with(context, expr) +  return s:_ends_with(a:context.prev_nb_text, a:expr, a:context.prev_nb_lnum) +endfunction +  " Returns 0 or 1 based on whether or not the text ends with the given  " expression and is not a string or comment -function! s:ends_with(text, expr, lnum) +function! s:_ends_with(text, expr, lnum)    let pos = match(a:text, a:expr.'\s*$')    if pos == -1      return 0 @@ -140,16 +148,16 @@ function! s:find_last_pos(lnum, text, match)    return -1  endfunction -function! elixir#indent#handle_top_of_file(_lnum, _text, prev_nb_lnum, _prev_nb_text) -  if a:prev_nb_lnum == 0 +function! elixir#indent#handle_top_of_file(context) +  if a:context.prev_nb_lnum == 0      return 0    else      return -1    end  endfunction -function! elixir#indent#handle_follow_prev_nb(_lnum, _text, prev_nb_lnum, prev_nb_text) -  return s:get_base_indent(a:prev_nb_lnum, a:prev_nb_text) +function! elixir#indent#handle_follow_prev_nb(context) +  return s:get_base_indent(a:context.prev_nb_lnum, a:context.prev_nb_text)  endfunction  " Given the line at `lnum`, returns the indent of the line that acts as the 'base indent' @@ -163,13 +171,13 @@ function! s:get_base_indent(lnum, text)    let data_structure_close = '\%(\]\|}\|)\)'    let pipe = '|>' -  if s:starts_with(a:text, binary_operator, a:lnum) +  if s:_starts_with(a:text, binary_operator, a:lnum)      return s:get_base_indent(prev_nb_lnum, prev_nb_text) -  elseif s:starts_with(a:text, pipe, a:lnum) +  elseif s:_starts_with(a:text, pipe, a:lnum)      return s:get_base_indent(prev_nb_lnum, prev_nb_text) -  elseif s:ends_with(prev_nb_text, binary_operator, prev_nb_lnum) +  elseif s:_ends_with(prev_nb_text, binary_operator, prev_nb_lnum)      return s:get_base_indent(prev_nb_lnum, prev_nb_text) -  elseif s:ends_with(a:text, data_structure_close, a:lnum) +  elseif s:_ends_with(a:text, data_structure_close, a:lnum)      let data_structure_open = '\%(\[\|{\|(\)'      let close_match_idx = match(a:text, data_structure_close . '\s*$')      call cursor(a:lnum, close_match_idx + 1) @@ -181,54 +189,26 @@ function! s:get_base_indent(lnum, text)    endif  endfunction -function! elixir#indent#handle_following_trailing_do(lnum, text, prev_nb_lnum, prev_nb_text) -  if s:ends_with(a:prev_nb_text, s:keyword('do'), a:prev_nb_lnum) -    if s:starts_with(a:text, s:keyword('end'), a:lnum) -      return indent(a:prev_nb_lnum) -    else -      return indent(a:prev_nb_lnum) + s:sw() -    end -  else -    return -1 -  endif -endfunction - -function! elixir#indent#handle_following_trailing_rocket(lnum, text, prev_nb_lnum, prev_nb_text) -  if s:ends_with(a:prev_nb_text, '->', a:prev_nb_lnum) -    return indent(a:prev_nb_lnum) + s:sw() -  else -    return -1 -  endif -endfunction - -function! elixir#indent#handle_following_trailing_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text) +function! elixir#indent#handle_following_trailing_binary_operator(context)    let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)' -  if s:ends_with(a:prev_nb_text, binary_operator, a:prev_nb_lnum) -    return indent(a:prev_nb_lnum) + s:sw() +  if s:prev_ends_with(a:context, binary_operator) +    return indent(a:context.prev_nb_lnum) + s:sw()    else      return -1    endif  endfunction -function! elixir#indent#handle_following_prev_end(_lnum, _text, prev_nb_lnum, prev_nb_text) -  if s:ends_with(a:prev_nb_text, s:keyword('end'), a:prev_nb_lnum) -    return indent(a:prev_nb_lnum) -  else -    return -1 -  endif -endfunction - -function! elixir#indent#handle_starts_with_pipe(lnum, text, prev_nb_lnum, prev_nb_text) -  if s:starts_with(a:text, '|>', a:lnum) +function! elixir#indent#handle_starts_with_pipe(context) +  if s:starts_with(a:context, '|>')      let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!' -    let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator) +    let pos = s:find_last_pos(a:context.prev_nb_lnum, a:context.prev_nb_text, match_operator)      if pos == -1 -      return indent(a:prev_nb_lnum) +      return indent(a:context.prev_nb_lnum)      else -      let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S') +      let next_word_pos = match(strpart(a:context.prev_nb_text, pos+1, len(a:context.prev_nb_text)-1), '\S')        if next_word_pos == -1 -        return indent(a:prev_nb_lnum) + s:sw() +        return indent(a:context.prev_nb_lnum) + s:sw()        else          return pos + 1 + next_word_pos        end @@ -238,16 +218,8 @@ function! elixir#indent#handle_starts_with_pipe(lnum, text, prev_nb_lnum, prev_n    endif  endfunction -function! elixir#indent#handle_starts_with_comment(_lnum, text, prev_nb_lnum, _prev_nb_text) -  if match(a:text, '^\s*#') != -1 -    return indent(a:prev_nb_lnum) -  else -    return -1 -  endif -endfunction - -function! elixir#indent#handle_starts_with_end(lnum, text, _prev_nb_lnum, _prev_nb_text) -  if s:starts_with(a:text, s:keyword('end'), a:lnum) +function! elixir#indent#handle_starts_with_end(context) +  if s:starts_with(a:context, s:keyword('end'))      let pair_lnum = searchpair(s:keyword('do\|fn'), '', s:keyword('end').'\zs', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")      return indent(pair_lnum)    else @@ -255,36 +227,18 @@ function! elixir#indent#handle_starts_with_end(lnum, text, _prev_nb_lnum, _prev_    endif  endfunction -function! elixir#indent#handle_starts_with_mid_or_end_block_keyword(lnum, text, _prev_nb_lnum, _prev_nb_text) -  if s:starts_with(a:text, s:keyword('catch\|rescue\|after\|else'), a:lnum) -    let pair_lnum = searchpair(s:keyword('with\|receive\|try\|if\|fn'), s:keyword('catch\|rescue\|after\|else').'\zs', s:keyword('end'), 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()") -    return indent(pair_lnum) -  else -    return -1 -  endif -endfunction - -function! elixir#indent#handle_starts_with_close_bracket(lnum, text, _prev_nb_lnum, _prev_nb_text) -  if s:starts_with(a:text, '\%(\]\|}\|)\)', a:lnum) -    let pair_lnum = searchpair('\%(\[\|{\|(\)', '', '\%(\]\|}\|)\)', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()") -    return indent(pair_lnum) -  else -    return -1 -  endif -endfunction - -function! elixir#indent#handle_starts_with_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text) +function! elixir#indent#handle_starts_with_binary_operator(context)    let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)' -  if s:starts_with(a:text, binary_operator, a:lnum) +  if s:starts_with(a:context, binary_operator)      let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!' -    let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator) +    let pos = s:find_last_pos(a:context.prev_nb_lnum, a:context.prev_nb_text, match_operator)      if pos == -1 -      return indent(a:prev_nb_lnum) +      return indent(a:context.prev_nb_lnum)      else -      let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S') +      let next_word_pos = match(strpart(a:context.prev_nb_text, pos+1, len(a:context.prev_nb_text)-1), '\S')        if next_word_pos == -1 -        return indent(a:prev_nb_lnum) + s:sw() +        return indent(a:context.prev_nb_lnum) + s:sw()        else          return pos + 1 + next_word_pos        end @@ -298,162 +252,89 @@ endfunction  " nested structure. For example, we might be in a function in a map in a  " function, etc... so we need to first figure out what the innermost structure  " is then forward execution to the proper handler -function! elixir#indent#handle_inside_nested_construct(lnum, text, prev_nb_lnum, prev_nb_text) +function! elixir#indent#handle_inside_block(context)    let start_pattern = '\C\%(\<with\>\|\<if\>\|\<case\>\|\<cond\>\|\<try\>\|\<receive\>\|\<fn\>\|{\|\[\|(\)'    let end_pattern = '\C\%(\<end\>\|\]\|}\|)\)' -  let pair_info = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()", max([0, a:lnum - g:elixir_indent_max_lookbehind])) -  let pair_lnum = pair_info[0] -  let pair_col = pair_info[1] -  if pair_lnum != 0 || pair_col != 0 -    let pair_text = getline(pair_lnum) -    let pair_char = pair_text[pair_col - 1] -    if pair_char == 'f' -      call s:debug("testing s:do_handle_inside_fn") -      return s:do_handle_inside_fn(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text) -    elseif pair_char == '[' -      call s:debug("testing s:do_handle_inside_square_brace") -      return s:do_handle_inside_square_brace(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text) -    elseif pair_char == '{' -      call s:debug("testing s:do_handle_inside_curly_brace") -      return s:do_handle_inside_curly_brace(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text) -    elseif pair_char == '(' -      call s:debug("testing s:do_handle_inside_parens") -      return s:do_handle_inside_parens(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text) -    elseif pair_char == 'w' -      call s:debug("testing s:do_handle_inside_with") -      return s:do_handle_inside_with(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text) +  " hack - handle do: better +  let block_info = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip() || getline(line('.')) =~ 'do:'", max([0, a:context.lnum - g:elixir_indent_max_lookbehind])) +  let block_start_lnum = block_info[0] +  let block_start_col = block_info[1] +  if block_start_lnum != 0 || block_start_col != 0 +    let block_text = getline(block_start_lnum) +    let block_start_char = block_text[block_start_col - 1] + +    let never_match = '\(a\)\@=b' +    let config = { +          \'f': {'aligned_clauses': s:keyword('end'), 'pattern_match_clauses': never_match}, +          \'c': {'aligned_clauses': s:keyword('end'), 'pattern_match_clauses': never_match}, +          \'t': {'aligned_clauses': s:keyword('end\|catch\|rescue\|after'), 'pattern_match_clauses': s:keyword('catch\|rescue')}, +          \'r': {'aligned_clauses': s:keyword('end\|after'), 'pattern_match_clauses': s:keyword('after')}, +          \'i': {'aligned_clauses': s:keyword('end\|else'), 'pattern_match_clauses': never_match}, +          \'[': {'aligned_clauses': ']', 'pattern_match_clauses': never_match}, +          \'{': {'aligned_clauses': '}', 'pattern_match_clauses': never_match}, +          \'(': {'aligned_clauses': ')', 'pattern_match_clauses': never_match} +          \} + +    if block_start_char == 'w' +      call s:debug("testing s:handle_with") +      return s:handle_with(block_start_lnum, block_start_col, a:context)      else -      call s:debug("testing s:do_handle_inside_keyword_block") -      return s:do_handle_inside_keyword_block(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text) +      let block_config = config[block_start_char] +      if s:starts_with(a:context, block_config.aligned_clauses) +        call s:debug("clause") +        return indent(block_start_lnum) +      else +        let clause_lnum = searchpair(block_config.pattern_match_clauses, '', '*', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()", block_start_lnum) +        let relative_lnum = max([clause_lnum, block_start_lnum]) +        call s:debug("pattern matching relative to lnum " . relative_lnum) +        return s:do_handle_pattern_match_block(relative_lnum, a:context) +      endif      end    else      return -1    end  endfunction -function! s:do_handle_inside_with(pair_lnum, pair_col, lnum, text, prev_nb_lnum, prev_nb_text) -  if a:pair_lnum == a:lnum -    " This is the `with` line or an inline `with`/`do` -    call s:debug("current line is `with`") -    return -1 -  else -    " Determine if in with/do, do/else|end, or else/end -    let start_pattern = '\C\%(\<with\>\|\<else\>\|\<do\>\)' -    let end_pattern = '\C\%(\<end\>\)' -    let pair_info = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()") -    let pair_lnum = pair_info[0] -    let pair_col = pair_info[1] - -    let pair_text = getline(pair_lnum) -    let pair_char = pair_text[pair_col - 1] - -    if s:starts_with(a:text, '\Cdo:', a:lnum) -      call s:debug("current line is do:") -      return pair_col - 1 + s:sw() -    elseif s:starts_with(a:text, '\Celse:', a:lnum) -      call s:debug("current line is else:") -      return pair_col - 1 -    elseif s:starts_with(a:text, '\C\(\<do\>\|\<else\>\)', a:lnum) -      call s:debug("current line is do/else") -      return pair_col - 1 -    elseif s:starts_with(pair_text, '\C\(do\|else\):', pair_lnum) -      call s:debug("inside do:/else:") -      return pair_col - 1 + s:sw() -    elseif pair_char == 'w' -      call s:debug("inside with/do") -      return pair_col + 4 -    elseif pair_char == 'd' -      call s:debug("inside do/else|end") -      return pair_col - 1 + s:sw() -    else -      call s:debug("inside else/end") -      return s:do_handle_inside_pattern_match_block(pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_text) -    end -  end -endfunction +function! s:handle_with(start_lnum, start_col, context) +  let block_info = searchpairpos('\C\%(\<with\>\|\<do\>\|\<else\>\)', '', s:keyword('end'), 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()") +  let block_start_lnum = block_info[0] +  let block_start_col = block_info[1] -function! s:do_handle_inside_keyword_block(pair_lnum, _pair_col, _lnum, text, prev_nb_lnum, prev_nb_text) -  let keyword_pattern = '\C\%(\<case\>\|\<cond\>\|\<try\>\|\<receive\>\|\<after\>\|\<catch\>\|\<rescue\>\|\<else\>\)' -  if a:pair_lnum -    " last line is a "receive" or something -    if s:starts_with(a:prev_nb_text, keyword_pattern, a:prev_nb_lnum) -      call s:debug("prev nb line is keyword") -      return indent(a:prev_nb_lnum) + s:sw() -    else -      return s:do_handle_inside_pattern_match_block(a:pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_text) -    end -  else -    return -1 -  endif -endfunction +  let block_start_text = getline(block_start_lnum) +  let block_start_char = block_start_text[block_start_col - 1] -" Implements indent for pattern-matching blocks (e.g. case, fn, with/else) -function! s:do_handle_inside_pattern_match_block(block_start_lnum, text, prev_nb_lnum, prev_nb_text) -  if a:text =~ '->' -    call s:debug("current line contains ->") -    return indent(a:block_start_lnum) + s:sw() -  elseif a:prev_nb_text =~ '->' -    call s:debug("prev nb line contains ->") -    return indent(a:prev_nb_lnum) + s:sw() +  if s:starts_with(a:context, s:keyword('do\|else\|end')) +    return indent(a:start_lnum) +  elseif block_start_char == 'w' || s:starts_with(a:context, '\C\(do\|else\):') +    return indent(a:start_lnum) + 5 +  elseif s:_starts_with(block_start_text, '\C\(do\|else\):', a:start_lnum) +    return indent(block_start_lnum) + s:sw()    else -    return indent(a:prev_nb_lnum) +    return s:do_handle_pattern_match_block(a:start_lnum, a:context)    end  endfunction -function! s:do_handle_inside_fn(pair_lnum, _pair_col, lnum, text, prev_nb_lnum, prev_nb_text) -  if a:pair_lnum && a:pair_lnum != a:lnum -    return s:do_handle_inside_pattern_match_block(a:pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_text) +function! s:do_handle_pattern_match_block(relative_line, context) +  let relative_indent = indent(a:relative_line) +  " hack! +  if a:context.text =~ '\(fn.*\)\@<!->' +    call s:debug("current line contains ->; assuming match definition") +    return relative_indent + s:sw() +  elseif search('\(fn.*\)\@<!->', 'bnW', a:relative_line) != 0 +    call s:debug("a previous line contains ->; assuming match handler") +    return relative_indent + 2 * s:sw()    else -    return -1 -  endif -endfunction - -function! s:do_handle_inside_square_brace(pair_lnum, pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text) -  " If in list... -  if a:pair_lnum != 0 || a:pair_col != 0 -    let pair_text = getline(a:pair_lnum) -    let substr = strpart(pair_text, a:pair_col, len(pair_text)-1) -    let indent_pos = match(substr, '\S') -    if indent_pos != -1 -      return indent_pos + a:pair_col -    else -      return indent(a:pair_lnum) + s:sw() -    endif -  else -    return -1 +    call s:debug("couldn't find any previous ->; assuming body text") +    return relative_indent + s:sw()    end  endfunction -function! s:do_handle_inside_curly_brace(pair_lnum, _pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text) -  return indent(a:pair_lnum) + s:sw() -endfunction - -function! s:do_handle_inside_parens(pair_lnum, pair_col, _lnum, _text, prev_nb_lnum, prev_nb_text) -  if a:pair_lnum -    if s:ends_with(a:prev_nb_text, '(', a:prev_nb_lnum) -      return indent(a:prev_nb_lnum) + s:sw() -    elseif a:pair_lnum == a:prev_nb_lnum -      " Align indent (e.g. "def add(a,") -      let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, '[^(]\+,') -      if pos == -1 -        return 0 -      else -        return pos -      end -    else -      return indent(a:prev_nb_lnum) -    end -  else -    return -1 -  endif -endfunction - -function! elixir#indent#handle_inside_generic_block(lnum, _text, prev_nb_lnum, prev_nb_text) -  let pair_lnum = searchpair(s:keyword('do\|fn'), '', s:keyword('end'), 'bW', "line('.') == ".a:lnum." || s:is_string_or_comment(line('.'), col('.'))", max([0, a:lnum - g:elixir_indent_max_lookbehind])) +function! elixir#indent#handle_inside_generic_block(context) +  let pair_lnum = searchpair(s:keyword('do\|fn'), '', s:keyword('end'), 'bW', "line('.') == ".a:context.lnum." || s:is_string_or_comment(line('.'), col('.'))", max([0, a:context.lnum - g:elixir_indent_max_lookbehind]))    if pair_lnum      " TODO: @jbodah 2017-03-29: this should probably be the case in *all*      " blocks -    if s:ends_with(a:prev_nb_text, ',', a:prev_nb_lnum) +    if s:prev_ends_with(a:context, ',')        return indent(pair_lnum) + 2 * s:sw()      else        return indent(pair_lnum) + s:sw() diff --git a/autoload/go/config.vim b/autoload/go/config.vim index 5eef48d4..9ed523a9 100644 --- a/autoload/go/config.vim +++ b/autoload/go/config.vim @@ -137,10 +137,6 @@ function! go#config#SetGuruScope(scope) abort    endif  endfunction -function! go#config#GocodeUnimportedPackages() abort -  return get(g:, 'go_gocode_unimported_packages', 0) -endfunction -  let s:sock_type = (has('win32') || has('win64')) ? 'tcp' : 'unix'  function! go#config#GocodeSocketType() abort    return get(g:, 'go_gocode_socket_type', s:sock_type) @@ -150,8 +146,8 @@ function! go#config#GocodeProposeBuiltins() abort    return get(g:, 'go_gocode_propose_builtins', 1)  endfunction -function! go#config#GocodeAutobuild() abort -  return get(g:, 'go_gocode_autobuild', 1) +function! go#config#GocodeProposeSource() abort +  return get(g:, 'go_gocode_propose_source', 1)  endfunction  function! go#config#EchoCommandInfo() abort @@ -284,6 +280,14 @@ function! go#config#SetAsmfmtAutosave(value) abort    let g:go_asmfmt_autosave = a:value  endfunction +function! go#config#ModFmtAutosave() abort +	return get(g:, "go_mod_fmt_autosave", 1) +endfunction + +function! go#config#SetModFmtAutosave(value) abort +  let g:go_mod_fmt_autosave = a:value +endfunction +  function! go#config#DocMaxHeight() abort    return get(g:, "go_doc_max_height", 20)  endfunction @@ -418,7 +422,7 @@ function! go#config#HighlightVariableDeclarations() abort    return get(g:, 'go_highlight_variable_declarations', 0)  endfunction -function go#config#FoldEnable(...) abort +function! go#config#FoldEnable(...) abort    if a:0 > 0      return index(go#config#FoldEnable(), a:1) > -1    endif diff --git a/autoload/julia/doc.vim b/autoload/julia/doc.vim new file mode 100644 index 00000000..8a9cab52 --- /dev/null +++ b/autoload/julia/doc.vim @@ -0,0 +1,246 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1 +   +" path to the julia binary to communicate with +if has('win32') || has('win64') +  if exists('g:julia#doc#juliapath') +    " use assigned g:julia#doc#juliapath +  elseif executable('julia') +    " use julia command in PATH +    let g:julia#doc#juliapath = 'julia' +  else +    " search julia binary in the default installation paths +    let pathlist = sort(glob($LOCALAPPDATA . '\Julia-*\bin\julia.exe', 1, 1)) +    let g:julia#doc#juliapath = get(pathlist, -1, 'julia') +  endif +else +  let g:julia#doc#juliapath = get(g:, 'julia#doc#juliapath', 'julia') +endif + +function! s:version() abort +  let VERSION = {'major': 0, 'minor': 0} +  if !executable(g:julia#doc#juliapath) +    return VERSION +  endif + +  let cmd = printf('%s -v', g:julia#doc#juliapath) +  let output = system(cmd) +  let versionstr = matchstr(output, '\C^julia version \zs\d\+\.\d\+\ze') +  let [major, minor] = map(split(versionstr, '\.'), 'str2nr(v:val)') +  let VERSION.major = major +  let VERSION.minor = minor +  return VERSION +endfunction + +let s:VERSION = s:version() +let s:NODOCPATTERN = '\C\VNo documentation found.' + +function! julia#doc#lookup(keyword, ...) abort +  let juliapath = get(a:000, 0, g:julia#doc#juliapath) +  let keyword = escape(a:keyword, '"\') +  let cmd = printf('%s -E "@doc %s"', juliapath, keyword) +  return systemlist(cmd) +endfunction + +function! julia#doc#open(keyword) abort +  if empty(a:keyword) +    call s:warn('Not an appropriate keyword.') +    return +  endif + +  if !executable(g:julia#doc#juliapath) +    call s:warn('%s command is not executable', g:julia#doc#juliapath) +    return +  endif + +  let doc = julia#doc#lookup(a:keyword, g:julia#doc#juliapath) +  if empty(doc) || match(doc[0], s:NODOCPATTERN) > -1 +    call s:warn('No documentation found for "%s".', a:keyword) +    return +  endif + +  " workaround for * and ? since a buffername cannot include them +  let keyword = a:keyword +  let keyword = substitute(keyword, '\*', ':asterisk:', 'g') +  let keyword = substitute(keyword, '?', ':question:', 'g') +  let buffername = printf('juliadoc: %s', keyword) + +  call s:write_to_preview_window(doc, "juliadoc", buffername) + +  call filter(s:HELPHISTORY, 'v:val isnot# a:keyword') +  call add(s:HELPHISTORY, a:keyword) +endfunction + +function! s:write_to_preview_window(content, ftype, buffername) +  " Are we in the preview window from the outset? If not, best to close any +  " preview windows that might exist. +  let pvw = &previewwindow +  if !pvw +    silent! pclose! +  endif +  execute "silent! pedit +setlocal\\ nobuflisted\\ noswapfile\\" +        \ "buftype=nofile\\ bufhidden=wipe" a:buffername +  silent! wincmd P +  if &previewwindow +    setlocal modifiable noreadonly +    silent! %delete _ +    call append(0, a:content) +    silent! $delete _ +    normal! ggj +    setlocal nomodified readonly nomodifiable +    execute "setfiletype" a:ftype +    " Only return to a normal window if we didn't start in a preview window. +    if !pvw +      silent! wincmd p +    endif +  else +    " We couldn't make it to the preview window, so as a fallback we dump the +    " contents in the status area. +    execute printf("echo '%s'", join(a:content, "\n")) +  endif +endfunction + +function! s:warn(...) abort +  if a:0 == 0 +    return +  endif + +  echohl WarningMsg +  try +    if a:0 == 1 +      echo a:1 +    else +      echo call('printf', a:000) +    endif +  finally +    echohl None +  endtry +endfunction + + + +let s:KEYWORDPATTERN = '\m@\?\h\k*!\?' + +" This function is called in normal mode or visual mode. +function! julia#doc#keywordprg(word) abort +  if a:word is# '' +    return +  endif + +  let word = s:unfnameescape(a:word) +  if word is# expand('<cword>') +    " 'K' in normal mode +    " NOTE: Because ! and @ is not in 'iskeyword' option, this func ignore +    "       the argument to recognize keywords like "@time" and "push!" +    let view = winsaveview() +    let lnum = line('.') +    let tail = searchpos(s:KEYWORDPATTERN, 'ce', lnum) +    let head = searchpos(s:KEYWORDPATTERN, 'bc', lnum) +    call winrestview(view) +    if head == [0, 0] || tail == [0, 0] +      return +    else +      let start = head[1] - 1 +      let end = tail[1] - 1 +      let word = getline(lnum)[start : end] +    endif +  endif +  call julia#doc#open(word) +endfunction + +if exists('+shellslash') +  let s:ESCAPEDCHARS = " \t\n\"#%'*<?`|" +else +  let s:ESCAPEDCHARS = " \t\n*?[{`$\\%#'\"|!<" +endif +let s:FNAMEESCAPEPATTERN = '\\\ze[' . escape(s:ESCAPEDCHARS, ']^-\') . ']' + +" this function reproduces an original string escaped by fnameescape() +function! s:unfnameescape(str) abort +  if a:str is# '' +    return '' +  endif + +  " NOTE: We cannot determine the original string if a:str starts from '\-', +  "       '\+' or '\>' because fnameescape('-') ==# fnameescape('\-'). +  if a:str is# '\-' +    " Remove escape anyway. +    return '-' +  endif + +  if a:str =~# '^\\[+>]' +    let str = a:str[1:] +  else +    let str = a:str +  endif +  return substitute(str, s:FNAMEESCAPEPATTERN, '', 'g') +endfunction + + + +let s:HELPPROMPT = 'help?> ' +let s:HELPHISTORY = [] + +function! julia#doc#prompt() abort +  let inputhist = s:savehistory('input') +  echohl MoreMsg +  try +    call s:restorehistory('input', s:HELPHISTORY) +    let keyword = input(s:HELPPROMPT, '', 'customlist,julia#doc#complete') + +    " Clear the last prompt +    normal! : +  finally +    echohl None +    call s:restorehistory('input', inputhist) +  endtry + +  if empty(keyword) +    return +  endif + +  call julia#doc#open(keyword) +endfunction + +function! s:savehistory(name) abort +  if histnr(a:name) == -1 +    return [] +  endif + +  let history = [] +  for i in range(1, histnr(a:name)) +    let item = histget(a:name, i) +    if !empty(item) +      call add(history, item) +    endif +  endfor +  return history +endfunction + +function! s:restorehistory(name, history) abort +  call histdel(a:name) +  for item in a:history +    call histadd(a:name, item) +  endfor +endfunction + + + +if s:VERSION.major == 0 && s:VERSION.minor <= 6 +  let s:REPL_SEARCH = 'Base.Docs.repl_search' +else +  let s:REPL_SEARCH = 'import REPL.repl_search; repl_search' +endif + +function! julia#doc#complete(ArgLead, CmdLine, CursorPos) abort +  return s:likely(a:ArgLead) +endfunction + +function! s:likely(str) abort +  " escape twice +  let str = escape(escape(a:str, '"\'), '"\') +  let cmd = printf('%s -E "%s(\"%s\")"', g:julia#doc#juliapath, s:REPL_SEARCH, str) +  let output = systemlist(cmd) +  return split(matchstr(output[0], '\C^search: \zs.*')) +endfunction + +endif diff --git a/autoload/julia_blocks.vim b/autoload/julia_blocks.vim index ef7cf016..0362c8dc 100644 --- a/autoload/julia_blocks.vim +++ b/autoload/julia_blocks.vim @@ -244,8 +244,8 @@ function! julia_blocks#init_mappings()    call julia_blocks#select_reset()    augroup JuliaBlocks      au! -    au InsertEnter *.jl call julia_blocks#select_reset() -    au CursorMoved *.jl call s:cursor_moved() +    au InsertEnter <buffer> call julia_blocks#select_reset() +    au CursorMoved <buffer> call s:cursor_moved()    augroup END    " we would need some autocmd event associated with exiting from diff --git a/autoload/julia_latex_symbols.vim b/autoload/julia_latex_symbols.vim index 8fdb856a..5dc87df2 100644 --- a/autoload/julia_latex_symbols.vim +++ b/autoload/julia_latex_symbols.vim @@ -1,38 +1,36 @@  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 +" The symbols are based on Julia version 0.7.0-rc2.0  scriptencoding utf-8  function! julia_latex_symbols#get_dict()    return { -    \ '\textexclamdown': '¡', +    \ '\exclamdown': '¡',      \ '\sterling': '£',      \ '\yen': '¥', -    \ '\textbrokenbar': '¦', +    \ '\brokenbar': '¦',      \ '\S': '§', -    \ '\textasciidieresis': '¨',      \ '\copyright': '©',      \ '\:copyright:': '©', -    \ '\textordfeminine': 'ª', +    \ '\ordfeminine': 'ª',      \ '\neg': '¬',      \ '\circledR': '®',      \ '\:registered:': '®', -    \ '\textasciimacron': '¯', +    \ '\highminus': '¯',      \ '\degree': '°',      \ '\pm': '±',      \ '\^2': '²',      \ '\^3': '³', -    \ '\textasciiacute': '´',      \ '\P': '¶',      \ '\cdotp': '·',      \ '\^1': '¹', -    \ '\textordmasculine': 'º', -    \ '\textonequarter': '¼', -    \ '\textonehalf': '½', -    \ '\textthreequarters': '¾', -    \ '\textquestiondown': '¿', +    \ '\ordmasculine': 'º', +    \ '\1/4': '¼', +    \ '\1/2': '½', +    \ '\3/4': '¾', +    \ '\questiondown': '¿',      \ '\AA': 'Å',      \ '\AE': 'Æ',      \ '\DH': 'Ð', @@ -43,80 +41,81 @@ function! julia_latex_symbols#get_dict()      \ '\aa': 'å',      \ '\ae': 'æ',      \ '\eth': 'ð', +    \ '\dh': 'ð',      \ '\div': '÷',      \ '\o': 'ø',      \ '\th': 'þ',      \ '\DJ': 'Đ',      \ '\dj': 'đ', -    \ '\Elzxh': 'ħ',      \ '\hbar': 'ħ', +    \ '\imath': 'ı',      \ '\L': 'Ł',      \ '\l': 'ł',      \ '\NG': 'Ŋ',      \ '\ng': 'ŋ',      \ '\OE': 'Œ',      \ '\oe': 'œ', -    \ '\texthvlig': 'ƕ', -    \ '\textnrleg': 'ƞ', +    \ '\hvlig': 'ƕ', +    \ '\nrleg': 'ƞ',      \ '\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': 'ʧ', +    \ '\doublepipe': 'ǂ', +    \ '\jmath': 'ȷ', +    \ '\trna': 'ɐ', +    \ '\trnsa': 'ɒ', +    \ '\openo': 'ɔ', +    \ '\rtld': 'ɖ', +    \ '\schwa': 'ə', +    \ '\pgamma': 'ɣ', +    \ '\pbgam': 'ɤ', +    \ '\trnh': 'ɥ', +    \ '\btdl': 'ɬ', +    \ '\rtll': 'ɭ', +    \ '\trnm': 'ɯ', +    \ '\trnmlr': 'ɰ', +    \ '\ltlmr': 'ɱ', +    \ '\ltln': 'ɲ', +    \ '\rtln': 'ɳ', +    \ '\clomeg': 'ɷ', +    \ '\ltphi': 'ɸ', +    \ '\trnr': 'ɹ', +    \ '\trnrl': 'ɺ', +    \ '\rttrnr': 'ɻ', +    \ '\rl': 'ɼ', +    \ '\rtlr': 'ɽ', +    \ '\fhr': 'ɾ', +    \ '\rtls': 'ʂ', +    \ '\esh': 'ʃ', +    \ '\trnt': 'ʇ', +    \ '\rtlt': 'ʈ', +    \ '\pupsil': 'ʊ', +    \ '\pscrv': 'ʋ', +    \ '\invv': 'ʌ', +    \ '\invw': 'ʍ', +    \ '\trny': 'ʎ', +    \ '\rtlz': 'ʐ', +    \ '\yogh': 'ʒ', +    \ '\glst': 'ʔ', +    \ '\reglst': 'ʕ', +    \ '\inglst': 'ʖ', +    \ '\turnk': 'ʞ', +    \ '\dyogh': 'ʤ', +    \ '\tesh': 'ʧ',      \ '\^h': 'ʰ',      \ '\^j': 'ʲ',      \ '\^r': 'ʳ',      \ '\^w': 'ʷ',      \ '\^y': 'ʸ',      \ '\rasp': 'ʼ', -    \ '\textasciicaron': 'ˇ', -    \ '\Elzverts': 'ˈ', -    \ '\Elzverti': 'ˌ', -    \ '\Elzlmrk': 'ː', -    \ '\Elzhlmrk': 'ˑ', -    \ '\Elzsbrhr': '˒', -    \ '\Elzsblhr': '˓', -    \ '\Elzrais': '˔', -    \ '\Elzlow': '˕', +    \ '\verts': 'ˈ', +    \ '\verti': 'ˌ', +    \ '\lmrk': 'ː', +    \ '\hlmrk': 'ˑ', +    \ '\sbrhr': '˒', +    \ '\sblhr': '˓', +    \ '\rais': '˔', +    \ '\low': '˕',      \ '\u': '˘', -    \ '\texttildelow': '˜', +    \ '\tildelow': '˜',      \ '\^l': 'ˡ',      \ '\^s': 'ˢ',      \ '\^x': 'ˣ', @@ -137,15 +136,14 @@ function! julia_latex_symbols#get_dict()      \ '\oturnedcomma': '̒',      \ '\ocommatopright': '̕',      \ '\droang': '̚', -    \ '\Elzpalh': '̡', -    \ '\Elzrh': '̢', +    \ '\palh': '̡', +    \ '\rh': '̢',      \ '\c': '̧',      \ '\k': '̨', -    \ '\Elzsbbrg': '̪', +    \ '\sbbrg': '̪',      \ '\wideutilde': '̰',      \ '\underbar': '̲', -    \ '\Elzxl': '̵', -    \ '\Elzbar': '̶', +    \ '\strike': '̶',      \ '\sout': '̶',      \ '\not': '̸',      \ '\underleftrightarrow': '͍', @@ -215,7 +213,7 @@ function! julia_latex_symbols#get_dict()      \ '\upsampi': 'ϡ',      \ '\varkappa': 'ϰ',      \ '\varrho': 'ϱ', -    \ '\textTheta': 'ϴ', +    \ '\varTheta': 'ϴ',      \ '\epsilon': 'ϵ',      \ '\backepsilon': '϶',      \ '\^A': 'ᴬ', @@ -280,16 +278,16 @@ function! julia_latex_symbols#get_dict()      \ '\Vert': '‖',      \ '\lq': '‘',      \ '\rq': '’', -    \ '\Elzreapos': '‛', -    \ '\textquotedblleft': '“', -    \ '\textquotedblright': '”', +    \ '\reapos': '‛', +    \ '\quotedblleft': '“', +    \ '\quotedblright': '”',      \ '\dagger': '†',      \ '\ddagger': '‡',      \ '\bullet': '•',      \ '\dots': '…',      \ '\ldots': '…', -    \ '\textperthousand': '‰', -    \ '\textpertenthousand': '‱', +    \ '\perthousand': '‰', +    \ '\pertenthousand': '‱',      \ '\prime': '′',      \ '\pprime': '″',      \ '\ppprime': '‴', @@ -302,6 +300,7 @@ function! julia_latex_symbols#get_dict()      \ '\tieconcat': '⁀',      \ '\:interrobang:': '⁉',      \ '\pppprime': '⁗', +    \ '\tricolon': '⁝',      \ '\nolinebreak': '',      \ '\^0': '⁰',      \ '\^i': 'ⁱ', @@ -345,7 +344,7 @@ function! julia_latex_symbols#get_dict()      \ '\_p': 'ₚ',      \ '\_s': 'ₛ',      \ '\_t': 'ₜ', -    \ '\Elzpes': '₧', +    \ '\pes': '₧',      \ '\euro': '€',      \ '\leftharpoonaccent': '⃐',      \ '\rightharpoonaccent': '⃑', @@ -367,64 +366,81 @@ function! julia_latex_symbols#get_dict()      \ '\underleftarrow': '⃮',      \ '\underrightarrow': '⃯',      \ '\asteraccent': '⃰', -    \ '\BbbC': 'ℂ', -    \ '\Eulerconst': 'ℇ', -    \ '\mscrg': 'ℊ', -    \ '\mscrH': 'ℋ', -    \ '\mfrakH': 'ℌ', -    \ '\BbbH': 'ℍ', -    \ '\Planckconst': 'ℎ', +    \ '\bbC': 'ℂ', +    \ '\eulermascheroni': 'ℇ', +    \ '\scrg': 'ℊ', +    \ '\scrH': 'ℋ', +    \ '\frakH': 'ℌ', +    \ '\bbH': 'ℍ', +    \ '\planck': 'ℎ',      \ '\hslash': 'ℏ', -    \ '\mscrI': 'ℐ', +    \ '\scrI': 'ℐ',      \ '\Im': 'ℑ', -    \ '\mscrL': 'ℒ', +    \ '\scrL': 'ℒ',      \ '\ell': 'ℓ', -    \ '\BbbN': 'ℕ', -    \ '\textnumero': '№', +    \ '\bbN': 'ℕ', +    \ '\numero': '№',      \ '\wp': '℘', -    \ '\BbbP': 'ℙ', -    \ '\BbbQ': 'ℚ', -    \ '\mscrR': 'ℛ', +    \ '\bbP': 'ℙ', +    \ '\bbQ': 'ℚ', +    \ '\scrR': 'ℛ',      \ '\Re': 'ℜ', -    \ '\BbbR': 'ℝ', -    \ '\Elzxrat': '℞', -    \ '\texttrademark': '™', +    \ '\bbR': 'ℝ', +    \ '\xrat': '℞', +    \ '\trademark': '™',      \ '\:tm:': '™', -    \ '\BbbZ': 'ℤ', +    \ '\bbZ': 'ℤ',      \ '\mho': '℧', -    \ '\mfrakZ': 'ℨ', +    \ '\frakZ': 'ℨ',      \ '\turnediota': '℩',      \ '\Angstrom': 'Å', -    \ '\mscrB': 'ℬ', -    \ '\mfrakC': 'ℭ', -    \ '\mscre': 'ℯ', +    \ '\scrB': 'ℬ', +    \ '\frakC': 'ℭ', +    \ '\scre': 'ℯ',      \ '\euler': 'ℯ', -    \ '\mscrE': 'ℰ', -    \ '\mscrF': 'ℱ', +    \ '\scrE': 'ℰ', +    \ '\scrF': 'ℱ',      \ '\Finv': 'Ⅎ', -    \ '\mscrM': 'ℳ', -    \ '\mscro': 'ℴ', +    \ '\scrM': 'ℳ', +    \ '\scro': 'ℴ',      \ '\aleph': 'ℵ',      \ '\beth': 'ℶ',      \ '\gimel': 'ℷ',      \ '\daleth': 'ℸ',      \ '\:information_source:': 'ℹ', -    \ '\Bbbpi': 'ℼ', -    \ '\Bbbgamma': 'ℽ', -    \ '\BbbGamma': 'ℾ', -    \ '\BbbPi': 'ℿ', +    \ '\bbpi': 'ℼ', +    \ '\bbgamma': 'ℽ', +    \ '\bbGamma': 'ℾ', +    \ '\bbPi': 'ℿ',      \ '\bbsum': '⅀',      \ '\Game': '⅁',      \ '\sansLturned': '⅂',      \ '\sansLmirrored': '⅃',      \ '\Yup': '⅄', -    \ '\mitBbbD': 'ⅅ', -    \ '\mitBbbd': 'ⅆ', -    \ '\mitBbbe': 'ⅇ', -    \ '\mitBbbi': 'ⅈ', -    \ '\mitBbbj': 'ⅉ', +    \ '\bbiD': 'ⅅ', +    \ '\bbid': 'ⅆ', +    \ '\bbie': 'ⅇ', +    \ '\bbii': 'ⅈ', +    \ '\bbij': 'ⅉ',      \ '\PropertyLine': '⅊',      \ '\upand': '⅋', +    \ '\1/7': '⅐', +    \ '\1/9': '⅑', +    \ '\1/10': '⅒', +    \ '\1/3': '⅓', +    \ '\2/3': '⅔', +    \ '\1/5': '⅕', +    \ '\2/5': '⅖', +    \ '\3/5': '⅗', +    \ '\4/5': '⅘', +    \ '\1/6': '⅙', +    \ '\5/6': '⅚', +    \ '\1/8': '⅛', +    \ '\3/8': '⅜', +    \ '\5/8': '⅝', +    \ '\7/8': '⅞', +    \ '\1/': '⅟', +    \ '\0/3': '↉',      \ '\leftarrow': '←',      \ '\uparrow': '↑',      \ '\to': '→', @@ -778,7 +794,7 @@ function! julia_latex_symbols#get_dict()      \ '\nsqsubseteq': '⋢',      \ '\nsqsupseteq': '⋣',      \ '\sqsubsetneq': '⋤', -    \ '\Elzsqspne': '⋥', +    \ '\sqspne': '⋥',      \ '\lnsim': '⋦',      \ '\gnsim': '⋧',      \ '\precnsim': '⋨', @@ -832,12 +848,12 @@ function! julia_latex_symbols#get_dict()      \ '\conictaper': '⌲',      \ '\topbot': '⌶',      \ '\obar': '⌽', -    \ '\APLnotslash': '⌿', -    \ '\APLnotbackslash': '⍀', -    \ '\APLboxupcaret': '⍓', -    \ '\APLboxquestion': '⍰', +    \ '\notslash': '⌿', +    \ '\notbackslash': '⍀', +    \ '\boxupcaret': '⍓', +    \ '\boxquestion': '⍰',      \ '\hexagon': '⎔', -    \ '\Elzdlcorn': '⎣', +    \ '\dlcorn': '⎣',      \ '\lmoustache': '⎰',      \ '\rmoustache': '⎱',      \ '\overbracket': '⎴', @@ -862,11 +878,11 @@ function! julia_latex_symbols#get_dict()      \ '\:alarm_clock:': '⏰',      \ '\:hourglass_flowing_sand:': '⏳',      \ '\blanksymbol': '␢', -    \ '\textvisiblespace': '␣', +    \ '\visiblespace': '␣',      \ '\:m:': 'Ⓜ',      \ '\circledS': 'Ⓢ', -    \ '\Elzdshfnc': '┆', -    \ '\Elzsqfnw': '┙', +    \ '\dshfnc': '┆', +    \ '\sqfnw': '┙',      \ '\diagup': '╱',      \ '\diagdown': '╲',      \ '\blockuphalf': '▀', @@ -894,7 +910,7 @@ function! julia_latex_symbols#get_dict()      \ '\hrectangleblack': '▬',      \ '\hrectangle': '▭',      \ '\vrectangleblack': '▮', -    \ '\Elzvrecto': '▯', +    \ '\vrecto': '▯',      \ '\parallelogramblack': '▰',      \ '\parallelogram': '▱',      \ '\bigblacktriangleup': '▲', @@ -929,15 +945,15 @@ function! julia_latex_symbols#get_dict()      \ '\circlevertfill': '◍',      \ '\bullseye': '◎',      \ '\mdlgblkcircle': '●', -    \ '\Elzcirfl': '◐', -    \ '\Elzcirfr': '◑', -    \ '\Elzcirfb': '◒', +    \ '\cirfl': '◐', +    \ '\cirfr': '◑', +    \ '\cirfb': '◒',      \ '\circletophalfblack': '◓',      \ '\circleurquadblack': '◔',      \ '\blackcircleulquadwhite': '◕',      \ '\blacklefthalfcircle': '◖',      \ '\blackrighthalfcircle': '◗', -    \ '\Elzrvbull': '◘', +    \ '\rvbull': '◘',      \ '\inversewhitecircle': '◙',      \ '\invwhiteupperhalfcircle': '◚',      \ '\invwhitelowerhalfcircle': '◛', @@ -952,10 +968,10 @@ function! julia_latex_symbols#get_dict()      \ '\ulblacktriangle': '◤',      \ '\urblacktriangle': '◥',      \ '\smwhtcircle': '◦', -    \ '\Elzsqfl': '◧', -    \ '\Elzsqfr': '◨', +    \ '\sqfl': '◧', +    \ '\sqfr': '◨',      \ '\squareulblack': '◩', -    \ '\Elzsqfse': '◪', +    \ '\sqfse': '◪',      \ '\boxbar': '◫',      \ '\trianglecdot': '◬',      \ '\triangleleftblack': '◭', @@ -1066,7 +1082,7 @@ function! julia_latex_symbols#get_dict()      \ '\:anchor:': '⚓',      \ '\:warning:': '⚠',      \ '\:zap:': '⚡', -    \ '\Hermaphrodite': '⚥', +    \ '\hermaphrodite': '⚥',      \ '\mdwhtcircle': '⚪',      \ '\:white_circle:': '⚪',      \ '\mdblkcircle': '⚫', @@ -1199,11 +1215,11 @@ function! julia_latex_symbols#get_dict()      \ '\nwovnearrow': '⤲',      \ '\:arrow_heading_up:': '⤴',      \ '\:arrow_heading_down:': '⤵', -    \ '\ElzRlarr': '⥂', -    \ '\ElzrLarr': '⥄', +    \ '\Rlarr': '⥂', +    \ '\rLarr': '⥄',      \ '\rightarrowplus': '⥅',      \ '\leftarrowplus': '⥆', -    \ '\Elzrarrx': '⥇', +    \ '\rarrx': '⥇',      \ '\leftrightarrowcircle': '⥈',      \ '\twoheaduparrowcircle': '⥉',      \ '\leftrightharpoonupdown': '⥊', @@ -1247,13 +1263,13 @@ function! julia_latex_symbols#get_dict()      \ '\RoundImplies': '⥰',      \ '\Vvert': '⦀',      \ '\Elroang': '⦆', -    \ '\Elzddfnc': '⦙', +    \ '\ddfnc': '⦙',      \ '\measuredangleleft': '⦛',      \ '\Angle': '⦜',      \ '\rightanglemdot': '⦝',      \ '\angles': '⦞',      \ '\angdnr': '⦟', -    \ '\Elzlpargt': '⦠', +    \ '\lpargt': '⦠',      \ '\sphericalangleup': '⦡',      \ '\turnangle': '⦢',      \ '\revangle': '⦣', @@ -1285,8 +1301,8 @@ function! julia_latex_symbols#get_dict()      \ '\boxbslash': '⧅',      \ '\boxast': '⧆',      \ '\boxcircle': '⧇', -    \ '\ElzLap': '⧊', -    \ '\Elzdefas': '⧋', +    \ '\Lap': '⧊', +    \ '\defas': '⧋',      \ '\LeftTriangleBar': '⧏',      \ '\NotLeftTriangleBar': '⧏̸',      \ '\RightTriangleBar': '⧐', @@ -1332,6 +1348,7 @@ function! julia_latex_symbols#get_dict()      \ '\upint': '⨛',      \ '\lowint': '⨜',      \ '\Join': '⨝', +    \ '\join': '⨝',      \ '\ringplus': '⨢',      \ '\plushat': '⨣',      \ '\simplus': '⨤', @@ -1345,7 +1362,7 @@ function! julia_latex_symbols#get_dict()      \ '\minusrdots': '⨬',      \ '\opluslhrim': '⨭',      \ '\oplusrhrim': '⨮', -    \ '\ElzTimes': '⨯', +    \ '\Times': '⨯',      \ '\dottimes': '⨰',      \ '\timesbar': '⨱',      \ '\btimes': '⨲', @@ -1376,8 +1393,8 @@ function! julia_latex_symbols#get_dict()      \ '\closedvarcupsmashprod': '⩐',      \ '\wedgeodot': '⩑',      \ '\veeodot': '⩒', -    \ '\ElzAnd': '⩓', -    \ '\ElzOr': '⩔', +    \ '\And': '⩓', +    \ '\Or': '⩔',      \ '\wedgeonwedge': '⩕',      \ '\ElOr': '⩖',      \ '\bigslopedvee': '⩗', @@ -1387,7 +1404,7 @@ function! julia_latex_symbols#get_dict()      \ '\midbarwedge': '⩜',      \ '\midbarvee': '⩝',      \ '\perspcorrespond': '⩞', -    \ '\Elzminhat': '⩟', +    \ '\minhat': '⩟',      \ '\wedgedoublebar': '⩠',      \ '\varveebar': '⩡',      \ '\doublebarvee': '⩢', @@ -1520,7 +1537,7 @@ function! julia_latex_symbols#get_dict()      \ '\dashV': '⫣',      \ '\Dashv': '⫤',      \ '\interleave': '⫴', -    \ '\Elztdcol': '⫶', +    \ '\tdcol': '⫶',      \ '\lllnest': '⫷',      \ '\gggnest': '⫸',      \ '\leqqslant': '⫹', @@ -1603,1002 +1620,1002 @@ function! julia_latex_symbols#get_dict()      \ '\: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': '𝟿', +    \ '\bfA': '𝐀', +    \ '\bfB': '𝐁', +    \ '\bfC': '𝐂', +    \ '\bfD': '𝐃', +    \ '\bfE': '𝐄', +    \ '\bfF': '𝐅', +    \ '\bfG': '𝐆', +    \ '\bfH': '𝐇', +    \ '\bfI': '𝐈', +    \ '\bfJ': '𝐉', +    \ '\bfK': '𝐊', +    \ '\bfL': '𝐋', +    \ '\bfM': '𝐌', +    \ '\bfN': '𝐍', +    \ '\bfO': '𝐎', +    \ '\bfP': '𝐏', +    \ '\bfQ': '𝐐', +    \ '\bfR': '𝐑', +    \ '\bfS': '𝐒', +    \ '\bfT': '𝐓', +    \ '\bfU': '𝐔', +    \ '\bfV': '𝐕', +    \ '\bfW': '𝐖', +    \ '\bfX': '𝐗', +    \ '\bfY': '𝐘', +    \ '\bfZ': '𝐙', +    \ '\bfa': '𝐚', +    \ '\bfb': '𝐛', +    \ '\bfc': '𝐜', +    \ '\bfd': '𝐝', +    \ '\bfe': '𝐞', +    \ '\bff': '𝐟', +    \ '\bfg': '𝐠', +    \ '\bfh': '𝐡', +    \ '\bfi': '𝐢', +    \ '\bfj': '𝐣', +    \ '\bfk': '𝐤', +    \ '\bfl': '𝐥', +    \ '\bfm': '𝐦', +    \ '\bfn': '𝐧', +    \ '\bfo': '𝐨', +    \ '\bfp': '𝐩', +    \ '\bfq': '𝐪', +    \ '\bfr': '𝐫', +    \ '\bfs': '𝐬', +    \ '\bft': '𝐭', +    \ '\bfu': '𝐮', +    \ '\bfv': '𝐯', +    \ '\bfw': '𝐰', +    \ '\bfx': '𝐱', +    \ '\bfy': '𝐲', +    \ '\bfz': '𝐳', +    \ '\itA': '𝐴', +    \ '\itB': '𝐵', +    \ '\itC': '𝐶', +    \ '\itD': '𝐷', +    \ '\itE': '𝐸', +    \ '\itF': '𝐹', +    \ '\itG': '𝐺', +    \ '\itH': '𝐻', +    \ '\itI': '𝐼', +    \ '\itJ': '𝐽', +    \ '\itK': '𝐾', +    \ '\itL': '𝐿', +    \ '\itM': '𝑀', +    \ '\itN': '𝑁', +    \ '\itO': '𝑂', +    \ '\itP': '𝑃', +    \ '\itQ': '𝑄', +    \ '\itR': '𝑅', +    \ '\itS': '𝑆', +    \ '\itT': '𝑇', +    \ '\itU': '𝑈', +    \ '\itV': '𝑉', +    \ '\itW': '𝑊', +    \ '\itX': '𝑋', +    \ '\itY': '𝑌', +    \ '\itZ': '𝑍', +    \ '\ita': '𝑎', +    \ '\itb': '𝑏', +    \ '\itc': '𝑐', +    \ '\itd': '𝑑', +    \ '\ite': '𝑒', +    \ '\itf': '𝑓', +    \ '\itg': '𝑔', +    \ '\iti': '𝑖', +    \ '\itj': '𝑗', +    \ '\itk': '𝑘', +    \ '\itl': '𝑙', +    \ '\itm': '𝑚', +    \ '\itn': '𝑛', +    \ '\ito': '𝑜', +    \ '\itp': '𝑝', +    \ '\itq': '𝑞', +    \ '\itr': '𝑟', +    \ '\its': '𝑠', +    \ '\itt': '𝑡', +    \ '\itu': '𝑢', +    \ '\itv': '𝑣', +    \ '\itw': '𝑤', +    \ '\itx': '𝑥', +    \ '\ity': '𝑦', +    \ '\itz': '𝑧', +    \ '\biA': '𝑨', +    \ '\biB': '𝑩', +    \ '\biC': '𝑪', +    \ '\biD': '𝑫', +    \ '\biE': '𝑬', +    \ '\biF': '𝑭', +    \ '\biG': '𝑮', +    \ '\biH': '𝑯', +    \ '\biI': '𝑰', +    \ '\biJ': '𝑱', +    \ '\biK': '𝑲', +    \ '\biL': '𝑳', +    \ '\biM': '𝑴', +    \ '\biN': '𝑵', +    \ '\biO': '𝑶', +    \ '\biP': '𝑷', +    \ '\biQ': '𝑸', +    \ '\biR': '𝑹', +    \ '\biS': '𝑺', +    \ '\biT': '𝑻', +    \ '\biU': '𝑼', +    \ '\biV': '𝑽', +    \ '\biW': '𝑾', +    \ '\biX': '𝑿', +    \ '\biY': '𝒀', +    \ '\biZ': '𝒁', +    \ '\bia': '𝒂', +    \ '\bib': '𝒃', +    \ '\bic': '𝒄', +    \ '\bid': '𝒅', +    \ '\bie': '𝒆', +    \ '\bif': '𝒇', +    \ '\big': '𝒈', +    \ '\bih': '𝒉', +    \ '\bii': '𝒊', +    \ '\bij': '𝒋', +    \ '\bik': '𝒌', +    \ '\bil': '𝒍', +    \ '\bim': '𝒎', +    \ '\bin': '𝒏', +    \ '\bio': '𝒐', +    \ '\bip': '𝒑', +    \ '\biq': '𝒒', +    \ '\bir': '𝒓', +    \ '\bis': '𝒔', +    \ '\bit': '𝒕', +    \ '\biu': '𝒖', +    \ '\biv': '𝒗', +    \ '\biw': '𝒘', +    \ '\bix': '𝒙', +    \ '\biy': '𝒚', +    \ '\biz': '𝒛', +    \ '\scrA': '𝒜', +    \ '\scrC': '𝒞', +    \ '\scrD': '𝒟', +    \ '\scrG': '𝒢', +    \ '\scrJ': '𝒥', +    \ '\scrK': '𝒦', +    \ '\scrN': '𝒩', +    \ '\scrO': '𝒪', +    \ '\scrP': '𝒫', +    \ '\scrQ': '𝒬', +    \ '\scrS': '𝒮', +    \ '\scrT': '𝒯', +    \ '\scrU': '𝒰', +    \ '\scrV': '𝒱', +    \ '\scrW': '𝒲', +    \ '\scrX': '𝒳', +    \ '\scrY': '𝒴', +    \ '\scrZ': '𝒵', +    \ '\scra': '𝒶', +    \ '\scrb': '𝒷', +    \ '\scrc': '𝒸', +    \ '\scrd': '𝒹', +    \ '\scrf': '𝒻', +    \ '\scrh': '𝒽', +    \ '\scri': '𝒾', +    \ '\scrj': '𝒿', +    \ '\scrk': '𝓀', +    \ '\scrl': '𝓁', +    \ '\scrm': '𝓂', +    \ '\scrn': '𝓃', +    \ '\scrp': '𝓅', +    \ '\scrq': '𝓆', +    \ '\scrr': '𝓇', +    \ '\scrs': '𝓈', +    \ '\scrt': '𝓉', +    \ '\scru': '𝓊', +    \ '\scrv': '𝓋', +    \ '\scrw': '𝓌', +    \ '\scrx': '𝓍', +    \ '\scry': '𝓎', +    \ '\scrz': '𝓏', +    \ '\bscrA': '𝓐', +    \ '\bscrB': '𝓑', +    \ '\bscrC': '𝓒', +    \ '\bscrD': '𝓓', +    \ '\bscrE': '𝓔', +    \ '\bscrF': '𝓕', +    \ '\bscrG': '𝓖', +    \ '\bscrH': '𝓗', +    \ '\bscrI': '𝓘', +    \ '\bscrJ': '𝓙', +    \ '\bscrK': '𝓚', +    \ '\bscrL': '𝓛', +    \ '\bscrM': '𝓜', +    \ '\bscrN': '𝓝', +    \ '\bscrO': '𝓞', +    \ '\bscrP': '𝓟', +    \ '\bscrQ': '𝓠', +    \ '\bscrR': '𝓡', +    \ '\bscrS': '𝓢', +    \ '\bscrT': '𝓣', +    \ '\bscrU': '𝓤', +    \ '\bscrV': '𝓥', +    \ '\bscrW': '𝓦', +    \ '\bscrX': '𝓧', +    \ '\bscrY': '𝓨', +    \ '\bscrZ': '𝓩', +    \ '\bscra': '𝓪', +    \ '\bscrb': '𝓫', +    \ '\bscrc': '𝓬', +    \ '\bscrd': '𝓭', +    \ '\bscre': '𝓮', +    \ '\bscrf': '𝓯', +    \ '\bscrg': '𝓰', +    \ '\bscrh': '𝓱', +    \ '\bscri': '𝓲', +    \ '\bscrj': '𝓳', +    \ '\bscrk': '𝓴', +    \ '\bscrl': '𝓵', +    \ '\bscrm': '𝓶', +    \ '\bscrn': '𝓷', +    \ '\bscro': '𝓸', +    \ '\bscrp': '𝓹', +    \ '\bscrq': '𝓺', +    \ '\bscrr': '𝓻', +    \ '\bscrs': '𝓼', +    \ '\bscrt': '𝓽', +    \ '\bscru': '𝓾', +    \ '\bscrv': '𝓿', +    \ '\bscrw': '𝔀', +    \ '\bscrx': '𝔁', +    \ '\bscry': '𝔂', +    \ '\bscrz': '𝔃', +    \ '\frakA': '𝔄', +    \ '\frakB': '𝔅', +    \ '\frakD': '𝔇', +    \ '\frakE': '𝔈', +    \ '\frakF': '𝔉', +    \ '\frakG': '𝔊', +    \ '\frakJ': '𝔍', +    \ '\frakK': '𝔎', +    \ '\frakL': '𝔏', +    \ '\frakM': '𝔐', +    \ '\frakN': '𝔑', +    \ '\frakO': '𝔒', +    \ '\frakP': '𝔓', +    \ '\frakQ': '𝔔', +    \ '\frakS': '𝔖', +    \ '\frakT': '𝔗', +    \ '\frakU': '𝔘', +    \ '\frakV': '𝔙', +    \ '\frakW': '𝔚', +    \ '\frakX': '𝔛', +    \ '\frakY': '𝔜', +    \ '\fraka': '𝔞', +    \ '\frakb': '𝔟', +    \ '\frakc': '𝔠', +    \ '\frakd': '𝔡', +    \ '\frake': '𝔢', +    \ '\frakf': '𝔣', +    \ '\frakg': '𝔤', +    \ '\frakh': '𝔥', +    \ '\fraki': '𝔦', +    \ '\frakj': '𝔧', +    \ '\frakk': '𝔨', +    \ '\frakl': '𝔩', +    \ '\frakm': '𝔪', +    \ '\frakn': '𝔫', +    \ '\frako': '𝔬', +    \ '\frakp': '𝔭', +    \ '\frakq': '𝔮', +    \ '\frakr': '𝔯', +    \ '\fraks': '𝔰', +    \ '\frakt': '𝔱', +    \ '\fraku': '𝔲', +    \ '\frakv': '𝔳', +    \ '\frakw': '𝔴', +    \ '\frakx': '𝔵', +    \ '\fraky': '𝔶', +    \ '\frakz': '𝔷', +    \ '\bbA': '𝔸', +    \ '\bbB': '𝔹', +    \ '\bbD': '𝔻', +    \ '\bbE': '𝔼', +    \ '\bbF': '𝔽', +    \ '\bbG': '𝔾', +    \ '\bbI': '𝕀', +    \ '\bbJ': '𝕁', +    \ '\bbK': '𝕂', +    \ '\bbL': '𝕃', +    \ '\bbM': '𝕄', +    \ '\bbO': '𝕆', +    \ '\bbS': '𝕊', +    \ '\bbT': '𝕋', +    \ '\bbU': '𝕌', +    \ '\bbV': '𝕍', +    \ '\bbW': '𝕎', +    \ '\bbX': '𝕏', +    \ '\bbY': '𝕐', +    \ '\bba': '𝕒', +    \ '\bbb': '𝕓', +    \ '\bbc': '𝕔', +    \ '\bbd': '𝕕', +    \ '\bbe': '𝕖', +    \ '\bbf': '𝕗', +    \ '\bbg': '𝕘', +    \ '\bbh': '𝕙', +    \ '\bbi': '𝕚', +    \ '\bbj': '𝕛', +    \ '\bbk': '𝕜', +    \ '\bbl': '𝕝', +    \ '\bbm': '𝕞', +    \ '\bbn': '𝕟', +    \ '\bbo': '𝕠', +    \ '\bbp': '𝕡', +    \ '\bbq': '𝕢', +    \ '\bbr': '𝕣', +    \ '\bbs': '𝕤', +    \ '\bbt': '𝕥', +    \ '\bbu': '𝕦', +    \ '\bbv': '𝕧', +    \ '\bbw': '𝕨', +    \ '\bbx': '𝕩', +    \ '\bby': '𝕪', +    \ '\bbz': '𝕫', +    \ '\bfrakA': '𝕬', +    \ '\bfrakB': '𝕭', +    \ '\bfrakC': '𝕮', +    \ '\bfrakD': '𝕯', +    \ '\bfrakE': '𝕰', +    \ '\bfrakF': '𝕱', +    \ '\bfrakG': '𝕲', +    \ '\bfrakH': '𝕳', +    \ '\bfrakI': '𝕴', +    \ '\bfrakJ': '𝕵', +    \ '\bfrakK': '𝕶', +    \ '\bfrakL': '𝕷', +    \ '\bfrakM': '𝕸', +    \ '\bfrakN': '𝕹', +    \ '\bfrakO': '𝕺', +    \ '\bfrakP': '𝕻', +    \ '\bfrakQ': '𝕼', +    \ '\bfrakR': '𝕽', +    \ '\bfrakS': '𝕾', +    \ '\bfrakT': '𝕿', +    \ '\bfrakU': '𝖀', +    \ '\bfrakV': '𝖁', +    \ '\bfrakW': '𝖂', +    \ '\bfrakX': '𝖃', +    \ '\bfrakY': '𝖄', +    \ '\bfrakZ': '𝖅', +    \ '\bfraka': '𝖆', +    \ '\bfrakb': '𝖇', +    \ '\bfrakc': '𝖈', +    \ '\bfrakd': '𝖉', +    \ '\bfrake': '𝖊', +    \ '\bfrakf': '𝖋', +    \ '\bfrakg': '𝖌', +    \ '\bfrakh': '𝖍', +    \ '\bfraki': '𝖎', +    \ '\bfrakj': '𝖏', +    \ '\bfrakk': '𝖐', +    \ '\bfrakl': '𝖑', +    \ '\bfrakm': '𝖒', +    \ '\bfrakn': '𝖓', +    \ '\bfrako': '𝖔', +    \ '\bfrakp': '𝖕', +    \ '\bfrakq': '𝖖', +    \ '\bfrakr': '𝖗', +    \ '\bfraks': '𝖘', +    \ '\bfrakt': '𝖙', +    \ '\bfraku': '𝖚', +    \ '\bfrakv': '𝖛', +    \ '\bfrakw': '𝖜', +    \ '\bfrakx': '𝖝', +    \ '\bfraky': '𝖞', +    \ '\bfrakz': '𝖟', +    \ '\sansA': '𝖠', +    \ '\sansB': '𝖡', +    \ '\sansC': '𝖢', +    \ '\sansD': '𝖣', +    \ '\sansE': '𝖤', +    \ '\sansF': '𝖥', +    \ '\sansG': '𝖦', +    \ '\sansH': '𝖧', +    \ '\sansI': '𝖨', +    \ '\sansJ': '𝖩', +    \ '\sansK': '𝖪', +    \ '\sansL': '𝖫', +    \ '\sansM': '𝖬', +    \ '\sansN': '𝖭', +    \ '\sansO': '𝖮', +    \ '\sansP': '𝖯', +    \ '\sansQ': '𝖰', +    \ '\sansR': '𝖱', +    \ '\sansS': '𝖲', +    \ '\sansT': '𝖳', +    \ '\sansU': '𝖴', +    \ '\sansV': '𝖵', +    \ '\sansW': '𝖶', +    \ '\sansX': '𝖷', +    \ '\sansY': '𝖸', +    \ '\sansZ': '𝖹', +    \ '\sansa': '𝖺', +    \ '\sansb': '𝖻', +    \ '\sansc': '𝖼', +    \ '\sansd': '𝖽', +    \ '\sanse': '𝖾', +    \ '\sansf': '𝖿', +    \ '\sansg': '𝗀', +    \ '\sansh': '𝗁', +    \ '\sansi': '𝗂', +    \ '\sansj': '𝗃', +    \ '\sansk': '𝗄', +    \ '\sansl': '𝗅', +    \ '\sansm': '𝗆', +    \ '\sansn': '𝗇', +    \ '\sanso': '𝗈', +    \ '\sansp': '𝗉', +    \ '\sansq': '𝗊', +    \ '\sansr': '𝗋', +    \ '\sanss': '𝗌', +    \ '\sanst': '𝗍', +    \ '\sansu': '𝗎', +    \ '\sansv': '𝗏', +    \ '\sansw': '𝗐', +    \ '\sansx': '𝗑', +    \ '\sansy': '𝗒', +    \ '\sansz': '𝗓', +    \ '\bsansA': '𝗔', +    \ '\bsansB': '𝗕', +    \ '\bsansC': '𝗖', +    \ '\bsansD': '𝗗', +    \ '\bsansE': '𝗘', +    \ '\bsansF': '𝗙', +    \ '\bsansG': '𝗚', +    \ '\bsansH': '𝗛', +    \ '\bsansI': '𝗜', +    \ '\bsansJ': '𝗝', +    \ '\bsansK': '𝗞', +    \ '\bsansL': '𝗟', +    \ '\bsansM': '𝗠', +    \ '\bsansN': '𝗡', +    \ '\bsansO': '𝗢', +    \ '\bsansP': '𝗣', +    \ '\bsansQ': '𝗤', +    \ '\bsansR': '𝗥', +    \ '\bsansS': '𝗦', +    \ '\bsansT': '𝗧', +    \ '\bsansU': '𝗨', +    \ '\bsansV': '𝗩', +    \ '\bsansW': '𝗪', +    \ '\bsansX': '𝗫', +    \ '\bsansY': '𝗬', +    \ '\bsansZ': '𝗭', +    \ '\bsansa': '𝗮', +    \ '\bsansb': '𝗯', +    \ '\bsansc': '𝗰', +    \ '\bsansd': '𝗱', +    \ '\bsanse': '𝗲', +    \ '\bsansf': '𝗳', +    \ '\bsansg': '𝗴', +    \ '\bsansh': '𝗵', +    \ '\bsansi': '𝗶', +    \ '\bsansj': '𝗷', +    \ '\bsansk': '𝗸', +    \ '\bsansl': '𝗹', +    \ '\bsansm': '𝗺', +    \ '\bsansn': '𝗻', +    \ '\bsanso': '𝗼', +    \ '\bsansp': '𝗽', +    \ '\bsansq': '𝗾', +    \ '\bsansr': '𝗿', +    \ '\bsanss': '𝘀', +    \ '\bsanst': '𝘁', +    \ '\bsansu': '𝘂', +    \ '\bsansv': '𝘃', +    \ '\bsansw': '𝘄', +    \ '\bsansx': '𝘅', +    \ '\bsansy': '𝘆', +    \ '\bsansz': '𝘇', +    \ '\isansA': '𝘈', +    \ '\isansB': '𝘉', +    \ '\isansC': '𝘊', +    \ '\isansD': '𝘋', +    \ '\isansE': '𝘌', +    \ '\isansF': '𝘍', +    \ '\isansG': '𝘎', +    \ '\isansH': '𝘏', +    \ '\isansI': '𝘐', +    \ '\isansJ': '𝘑', +    \ '\isansK': '𝘒', +    \ '\isansL': '𝘓', +    \ '\isansM': '𝘔', +    \ '\isansN': '𝘕', +    \ '\isansO': '𝘖', +    \ '\isansP': '𝘗', +    \ '\isansQ': '𝘘', +    \ '\isansR': '𝘙', +    \ '\isansS': '𝘚', +    \ '\isansT': '𝘛', +    \ '\isansU': '𝘜', +    \ '\isansV': '𝘝', +    \ '\isansW': '𝘞', +    \ '\isansX': '𝘟', +    \ '\isansY': '𝘠', +    \ '\isansZ': '𝘡', +    \ '\isansa': '𝘢', +    \ '\isansb': '𝘣', +    \ '\isansc': '𝘤', +    \ '\isansd': '𝘥', +    \ '\isanse': '𝘦', +    \ '\isansf': '𝘧', +    \ '\isansg': '𝘨', +    \ '\isansh': '𝘩', +    \ '\isansi': '𝘪', +    \ '\isansj': '𝘫', +    \ '\isansk': '𝘬', +    \ '\isansl': '𝘭', +    \ '\isansm': '𝘮', +    \ '\isansn': '𝘯', +    \ '\isanso': '𝘰', +    \ '\isansp': '𝘱', +    \ '\isansq': '𝘲', +    \ '\isansr': '𝘳', +    \ '\isanss': '𝘴', +    \ '\isanst': '𝘵', +    \ '\isansu': '𝘶', +    \ '\isansv': '𝘷', +    \ '\isansw': '𝘸', +    \ '\isansx': '𝘹', +    \ '\isansy': '𝘺', +    \ '\isansz': '𝘻', +    \ '\bisansA': '𝘼', +    \ '\bisansB': '𝘽', +    \ '\bisansC': '𝘾', +    \ '\bisansD': '𝘿', +    \ '\bisansE': '𝙀', +    \ '\bisansF': '𝙁', +    \ '\bisansG': '𝙂', +    \ '\bisansH': '𝙃', +    \ '\bisansI': '𝙄', +    \ '\bisansJ': '𝙅', +    \ '\bisansK': '𝙆', +    \ '\bisansL': '𝙇', +    \ '\bisansM': '𝙈', +    \ '\bisansN': '𝙉', +    \ '\bisansO': '𝙊', +    \ '\bisansP': '𝙋', +    \ '\bisansQ': '𝙌', +    \ '\bisansR': '𝙍', +    \ '\bisansS': '𝙎', +    \ '\bisansT': '𝙏', +    \ '\bisansU': '𝙐', +    \ '\bisansV': '𝙑', +    \ '\bisansW': '𝙒', +    \ '\bisansX': '𝙓', +    \ '\bisansY': '𝙔', +    \ '\bisansZ': '𝙕', +    \ '\bisansa': '𝙖', +    \ '\bisansb': '𝙗', +    \ '\bisansc': '𝙘', +    \ '\bisansd': '𝙙', +    \ '\bisanse': '𝙚', +    \ '\bisansf': '𝙛', +    \ '\bisansg': '𝙜', +    \ '\bisansh': '𝙝', +    \ '\bisansi': '𝙞', +    \ '\bisansj': '𝙟', +    \ '\bisansk': '𝙠', +    \ '\bisansl': '𝙡', +    \ '\bisansm': '𝙢', +    \ '\bisansn': '𝙣', +    \ '\bisanso': '𝙤', +    \ '\bisansp': '𝙥', +    \ '\bisansq': '𝙦', +    \ '\bisansr': '𝙧', +    \ '\bisanss': '𝙨', +    \ '\bisanst': '𝙩', +    \ '\bisansu': '𝙪', +    \ '\bisansv': '𝙫', +    \ '\bisansw': '𝙬', +    \ '\bisansx': '𝙭', +    \ '\bisansy': '𝙮', +    \ '\bisansz': '𝙯', +    \ '\ttA': '𝙰', +    \ '\ttB': '𝙱', +    \ '\ttC': '𝙲', +    \ '\ttD': '𝙳', +    \ '\ttE': '𝙴', +    \ '\ttF': '𝙵', +    \ '\ttG': '𝙶', +    \ '\ttH': '𝙷', +    \ '\ttI': '𝙸', +    \ '\ttJ': '𝙹', +    \ '\ttK': '𝙺', +    \ '\ttL': '𝙻', +    \ '\ttM': '𝙼', +    \ '\ttN': '𝙽', +    \ '\ttO': '𝙾', +    \ '\ttP': '𝙿', +    \ '\ttQ': '𝚀', +    \ '\ttR': '𝚁', +    \ '\ttS': '𝚂', +    \ '\ttT': '𝚃', +    \ '\ttU': '𝚄', +    \ '\ttV': '𝚅', +    \ '\ttW': '𝚆', +    \ '\ttX': '𝚇', +    \ '\ttY': '𝚈', +    \ '\ttZ': '𝚉', +    \ '\tta': '𝚊', +    \ '\ttb': '𝚋', +    \ '\ttc': '𝚌', +    \ '\ttd': '𝚍', +    \ '\tte': '𝚎', +    \ '\ttf': '𝚏', +    \ '\ttg': '𝚐', +    \ '\tth': '𝚑', +    \ '\tti': '𝚒', +    \ '\ttj': '𝚓', +    \ '\ttk': '𝚔', +    \ '\ttl': '𝚕', +    \ '\ttm': '𝚖', +    \ '\ttn': '𝚗', +    \ '\tto': '𝚘', +    \ '\ttp': '𝚙', +    \ '\ttq': '𝚚', +    \ '\ttr': '𝚛', +    \ '\tts': '𝚜', +    \ '\ttt': '𝚝', +    \ '\ttu': '𝚞', +    \ '\ttv': '𝚟', +    \ '\ttw': '𝚠', +    \ '\ttx': '𝚡', +    \ '\tty': '𝚢', +    \ '\ttz': '𝚣', +    \ '\itimath': '𝚤', +    \ '\itjmath': '𝚥', +    \ '\bfAlpha': '𝚨', +    \ '\bfBeta': '𝚩', +    \ '\bfGamma': '𝚪', +    \ '\bfDelta': '𝚫', +    \ '\bfEpsilon': '𝚬', +    \ '\bfZeta': '𝚭', +    \ '\bfEta': '𝚮', +    \ '\bfTheta': '𝚯', +    \ '\bfIota': '𝚰', +    \ '\bfKappa': '𝚱', +    \ '\bfLambda': '𝚲', +    \ '\bfMu': '𝚳', +    \ '\bfNu': '𝚴', +    \ '\bfXi': '𝚵', +    \ '\bfOmicron': '𝚶', +    \ '\bfPi': '𝚷', +    \ '\bfRho': '𝚸', +    \ '\bfvarTheta': '𝚹', +    \ '\bfSigma': '𝚺', +    \ '\bfTau': '𝚻', +    \ '\bfUpsilon': '𝚼', +    \ '\bfPhi': '𝚽', +    \ '\bfChi': '𝚾', +    \ '\bfPsi': '𝚿', +    \ '\bfOmega': '𝛀', +    \ '\bfnabla': '𝛁', +    \ '\bfalpha': '𝛂', +    \ '\bfbeta': '𝛃', +    \ '\bfgamma': '𝛄', +    \ '\bfdelta': '𝛅', +    \ '\bfepsilon': '𝛆', +    \ '\bfzeta': '𝛇', +    \ '\bfeta': '𝛈', +    \ '\bftheta': '𝛉', +    \ '\bfiota': '𝛊', +    \ '\bfkappa': '𝛋', +    \ '\bflambda': '𝛌', +    \ '\bfmu': '𝛍', +    \ '\bfnu': '𝛎', +    \ '\bfxi': '𝛏', +    \ '\bfomicron': '𝛐', +    \ '\bfpi': '𝛑', +    \ '\bfrho': '𝛒', +    \ '\bfvarsigma': '𝛓', +    \ '\bfsigma': '𝛔', +    \ '\bftau': '𝛕', +    \ '\bfupsilon': '𝛖', +    \ '\bfvarphi': '𝛗', +    \ '\bfchi': '𝛘', +    \ '\bfpsi': '𝛙', +    \ '\bfomega': '𝛚', +    \ '\bfpartial': '𝛛', +    \ '\bfvarepsilon': '𝛜', +    \ '\bfvartheta': '𝛝', +    \ '\bfvarkappa': '𝛞', +    \ '\bfphi': '𝛟', +    \ '\bfvarrho': '𝛠', +    \ '\bfvarpi': '𝛡', +    \ '\itAlpha': '𝛢', +    \ '\itBeta': '𝛣', +    \ '\itGamma': '𝛤', +    \ '\itDelta': '𝛥', +    \ '\itEpsilon': '𝛦', +    \ '\itZeta': '𝛧', +    \ '\itEta': '𝛨', +    \ '\itTheta': '𝛩', +    \ '\itIota': '𝛪', +    \ '\itKappa': '𝛫', +    \ '\itLambda': '𝛬', +    \ '\itMu': '𝛭', +    \ '\itNu': '𝛮', +    \ '\itXi': '𝛯', +    \ '\itOmicron': '𝛰', +    \ '\itPi': '𝛱', +    \ '\itRho': '𝛲', +    \ '\itvarTheta': '𝛳', +    \ '\itSigma': '𝛴', +    \ '\itTau': '𝛵', +    \ '\itUpsilon': '𝛶', +    \ '\itPhi': '𝛷', +    \ '\itChi': '𝛸', +    \ '\itPsi': '𝛹', +    \ '\itOmega': '𝛺', +    \ '\itnabla': '𝛻', +    \ '\italpha': '𝛼', +    \ '\itbeta': '𝛽', +    \ '\itgamma': '𝛾', +    \ '\itdelta': '𝛿', +    \ '\itepsilon': '𝜀', +    \ '\itzeta': '𝜁', +    \ '\iteta': '𝜂', +    \ '\ittheta': '𝜃', +    \ '\itiota': '𝜄', +    \ '\itkappa': '𝜅', +    \ '\itlambda': '𝜆', +    \ '\itmu': '𝜇', +    \ '\itnu': '𝜈', +    \ '\itxi': '𝜉', +    \ '\itomicron': '𝜊', +    \ '\itpi': '𝜋', +    \ '\itrho': '𝜌', +    \ '\itvarsigma': '𝜍', +    \ '\itsigma': '𝜎', +    \ '\ittau': '𝜏', +    \ '\itupsilon': '𝜐', +    \ '\itphi': '𝜑', +    \ '\itchi': '𝜒', +    \ '\itpsi': '𝜓', +    \ '\itomega': '𝜔', +    \ '\itpartial': '𝜕', +    \ '\itvarepsilon': '𝜖', +    \ '\itvartheta': '𝜗', +    \ '\itvarkappa': '𝜘', +    \ '\itvarphi': '𝜙', +    \ '\itvarrho': '𝜚', +    \ '\itvarpi': '𝜛', +    \ '\biAlpha': '𝜜', +    \ '\biBeta': '𝜝', +    \ '\biGamma': '𝜞', +    \ '\biDelta': '𝜟', +    \ '\biEpsilon': '𝜠', +    \ '\biZeta': '𝜡', +    \ '\biEta': '𝜢', +    \ '\biTheta': '𝜣', +    \ '\biIota': '𝜤', +    \ '\biKappa': '𝜥', +    \ '\biLambda': '𝜦', +    \ '\biMu': '𝜧', +    \ '\biNu': '𝜨', +    \ '\biXi': '𝜩', +    \ '\biOmicron': '𝜪', +    \ '\biPi': '𝜫', +    \ '\biRho': '𝜬', +    \ '\bivarTheta': '𝜭', +    \ '\biSigma': '𝜮', +    \ '\biTau': '𝜯', +    \ '\biUpsilon': '𝜰', +    \ '\biPhi': '𝜱', +    \ '\biChi': '𝜲', +    \ '\biPsi': '𝜳', +    \ '\biOmega': '𝜴', +    \ '\binabla': '𝜵', +    \ '\bialpha': '𝜶', +    \ '\bibeta': '𝜷', +    \ '\bigamma': '𝜸', +    \ '\bidelta': '𝜹', +    \ '\biepsilon': '𝜺', +    \ '\bizeta': '𝜻', +    \ '\bieta': '𝜼', +    \ '\bitheta': '𝜽', +    \ '\biiota': '𝜾', +    \ '\bikappa': '𝜿', +    \ '\bilambda': '𝝀', +    \ '\bimu': '𝝁', +    \ '\binu': '𝝂', +    \ '\bixi': '𝝃', +    \ '\biomicron': '𝝄', +    \ '\bipi': '𝝅', +    \ '\birho': '𝝆', +    \ '\bivarsigma': '𝝇', +    \ '\bisigma': '𝝈', +    \ '\bitau': '𝝉', +    \ '\biupsilon': '𝝊', +    \ '\biphi': '𝝋', +    \ '\bichi': '𝝌', +    \ '\bipsi': '𝝍', +    \ '\biomega': '𝝎', +    \ '\bipartial': '𝝏', +    \ '\bivarepsilon': '𝝐', +    \ '\bivartheta': '𝝑', +    \ '\bivarkappa': '𝝒', +    \ '\bivarphi': '𝝓', +    \ '\bivarrho': '𝝔', +    \ '\bivarpi': '𝝕', +    \ '\bsansAlpha': '𝝖', +    \ '\bsansBeta': '𝝗', +    \ '\bsansGamma': '𝝘', +    \ '\bsansDelta': '𝝙', +    \ '\bsansEpsilon': '𝝚', +    \ '\bsansZeta': '𝝛', +    \ '\bsansEta': '𝝜', +    \ '\bsansTheta': '𝝝', +    \ '\bsansIota': '𝝞', +    \ '\bsansKappa': '𝝟', +    \ '\bsansLambda': '𝝠', +    \ '\bsansMu': '𝝡', +    \ '\bsansNu': '𝝢', +    \ '\bsansXi': '𝝣', +    \ '\bsansOmicron': '𝝤', +    \ '\bsansPi': '𝝥', +    \ '\bsansRho': '𝝦', +    \ '\bsansvarTheta': '𝝧', +    \ '\bsansSigma': '𝝨', +    \ '\bsansTau': '𝝩', +    \ '\bsansUpsilon': '𝝪', +    \ '\bsansPhi': '𝝫', +    \ '\bsansChi': '𝝬', +    \ '\bsansPsi': '𝝭', +    \ '\bsansOmega': '𝝮', +    \ '\bsansnabla': '𝝯', +    \ '\bsansalpha': '𝝰', +    \ '\bsansbeta': '𝝱', +    \ '\bsansgamma': '𝝲', +    \ '\bsansdelta': '𝝳', +    \ '\bsansepsilon': '𝝴', +    \ '\bsanszeta': '𝝵', +    \ '\bsanseta': '𝝶', +    \ '\bsanstheta': '𝝷', +    \ '\bsansiota': '𝝸', +    \ '\bsanskappa': '𝝹', +    \ '\bsanslambda': '𝝺', +    \ '\bsansmu': '𝝻', +    \ '\bsansnu': '𝝼', +    \ '\bsansxi': '𝝽', +    \ '\bsansomicron': '𝝾', +    \ '\bsanspi': '𝝿', +    \ '\bsansrho': '𝞀', +    \ '\bsansvarsigma': '𝞁', +    \ '\bsanssigma': '𝞂', +    \ '\bsanstau': '𝞃', +    \ '\bsansupsilon': '𝞄', +    \ '\bsansphi': '𝞅', +    \ '\bsanschi': '𝞆', +    \ '\bsanspsi': '𝞇', +    \ '\bsansomega': '𝞈', +    \ '\bsanspartial': '𝞉', +    \ '\bsansvarepsilon': '𝞊', +    \ '\bsansvartheta': '𝞋', +    \ '\bsansvarkappa': '𝞌', +    \ '\bsansvarphi': '𝞍', +    \ '\bsansvarrho': '𝞎', +    \ '\bsansvarpi': '𝞏', +    \ '\bisansAlpha': '𝞐', +    \ '\bisansBeta': '𝞑', +    \ '\bisansGamma': '𝞒', +    \ '\bisansDelta': '𝞓', +    \ '\bisansEpsilon': '𝞔', +    \ '\bisansZeta': '𝞕', +    \ '\bisansEta': '𝞖', +    \ '\bisansTheta': '𝞗', +    \ '\bisansIota': '𝞘', +    \ '\bisansKappa': '𝞙', +    \ '\bisansLambda': '𝞚', +    \ '\bisansMu': '𝞛', +    \ '\bisansNu': '𝞜', +    \ '\bisansXi': '𝞝', +    \ '\bisansOmicron': '𝞞', +    \ '\bisansPi': '𝞟', +    \ '\bisansRho': '𝞠', +    \ '\bisansvarTheta': '𝞡', +    \ '\bisansSigma': '𝞢', +    \ '\bisansTau': '𝞣', +    \ '\bisansUpsilon': '𝞤', +    \ '\bisansPhi': '𝞥', +    \ '\bisansChi': '𝞦', +    \ '\bisansPsi': '𝞧', +    \ '\bisansOmega': '𝞨', +    \ '\bisansnabla': '𝞩', +    \ '\bisansalpha': '𝞪', +    \ '\bisansbeta': '𝞫', +    \ '\bisansgamma': '𝞬', +    \ '\bisansdelta': '𝞭', +    \ '\bisansepsilon': '𝞮', +    \ '\bisanszeta': '𝞯', +    \ '\bisanseta': '𝞰', +    \ '\bisanstheta': '𝞱', +    \ '\bisansiota': '𝞲', +    \ '\bisanskappa': '𝞳', +    \ '\bisanslambda': '𝞴', +    \ '\bisansmu': '𝞵', +    \ '\bisansnu': '𝞶', +    \ '\bisansxi': '𝞷', +    \ '\bisansomicron': '𝞸', +    \ '\bisanspi': '𝞹', +    \ '\bisansrho': '𝞺', +    \ '\bisansvarsigma': '𝞻', +    \ '\bisanssigma': '𝞼', +    \ '\bisanstau': '𝞽', +    \ '\bisansupsilon': '𝞾', +    \ '\bisansphi': '𝞿', +    \ '\bisanschi': '𝟀', +    \ '\bisanspsi': '𝟁', +    \ '\bisansomega': '𝟂', +    \ '\bisanspartial': '𝟃', +    \ '\bisansvarepsilon': '𝟄', +    \ '\bisansvartheta': '𝟅', +    \ '\bisansvarkappa': '𝟆', +    \ '\bisansvarphi': '𝟇', +    \ '\bisansvarrho': '𝟈', +    \ '\bisansvarpi': '𝟉', +    \ '\bfDigamma': '𝟊', +    \ '\bfdigamma': '𝟋', +    \ '\bfzero': '𝟎', +    \ '\bfone': '𝟏', +    \ '\bftwo': '𝟐', +    \ '\bfthree': '𝟑', +    \ '\bffour': '𝟒', +    \ '\bffive': '𝟓', +    \ '\bfsix': '𝟔', +    \ '\bfseven': '𝟕', +    \ '\bfeight': '𝟖', +    \ '\bfnine': '𝟗', +    \ '\bbzero': '𝟘', +    \ '\bbone': '𝟙', +    \ '\bbtwo': '𝟚', +    \ '\bbthree': '𝟛', +    \ '\bbfour': '𝟜', +    \ '\bbfive': '𝟝', +    \ '\bbsix': '𝟞', +    \ '\bbseven': '𝟟', +    \ '\bbeight': '𝟠', +    \ '\bbnine': '𝟡', +    \ '\sanszero': '𝟢', +    \ '\sansone': '𝟣', +    \ '\sanstwo': '𝟤', +    \ '\sansthree': '𝟥', +    \ '\sansfour': '𝟦', +    \ '\sansfive': '𝟧', +    \ '\sanssix': '𝟨', +    \ '\sansseven': '𝟩', +    \ '\sanseight': '𝟪', +    \ '\sansnine': '𝟫', +    \ '\bsanszero': '𝟬', +    \ '\bsansone': '𝟭', +    \ '\bsanstwo': '𝟮', +    \ '\bsansthree': '𝟯', +    \ '\bsansfour': '𝟰', +    \ '\bsansfive': '𝟱', +    \ '\bsanssix': '𝟲', +    \ '\bsansseven': '𝟳', +    \ '\bsanseight': '𝟴', +    \ '\bsansnine': '𝟵', +    \ '\ttzero': '𝟶', +    \ '\ttone': '𝟷', +    \ '\tttwo': '𝟸', +    \ '\ttthree': '𝟹', +    \ '\ttfour': '𝟺', +    \ '\ttfive': '𝟻', +    \ '\ttsix': '𝟼', +    \ '\ttseven': '𝟽', +    \ '\tteight': '𝟾', +    \ '\ttnine': '𝟿',      \ '\:mahjong:': '🀄',      \ '\:black_joker:': '🃏',      \ '\:a:': '🅰', diff --git a/autoload/rubycomplete.vim b/autoload/rubycomplete.vim index 1184c427..88dfaadd 100644 --- a/autoload/rubycomplete.vim +++ b/autoload/rubycomplete.vim @@ -105,7 +105,7 @@ function! s:GetBufferRubyEntity( name, type, ... )      endif      let curpos = getpos(".") -    let [enum,ecol] = searchpairpos( crex, '', '\(end\|}\)', 'wr' ) +    let [enum,ecol] = searchpairpos( crex, '', '\(end\|}\)', 'W' )      call cursor(lastpos[1], lastpos[2])      if lnum > enum @@ -255,15 +255,27 @@ class VimRubyCompletion  # {{{ buffer analysis magic    def load_requires + +    custom_paths = VIM::evaluate("get(g:, 'rubycomplete_load_paths', [])") + +    if !custom_paths.empty? +      $LOAD_PATH.concat(custom_paths).uniq! +    end +      buf = VIM::Buffer.current      enum = buf.line_number      nums = Range.new( 1, enum )      nums.each do |x| +        ln = buf[x]        begin -        eval( "require %s" % $1 ) if /.*require\s*(["'].*?["'])/.match( ln ) -      rescue Exception -        #ignore? +        if /.*require_relative\s*(.*)$/.match( ln ) +          eval( "require %s" % File.expand_path($1) ) +        elsif /.*require\s*(["'].*?["'])/.match( ln ) +          eval( "require %s" % $1 ) +        end +      rescue Exception => e +        dprint e.inspect        end      end    end @@ -346,8 +358,13 @@ class VimRubyCompletion          if x != cur_line            next if x == 0            ln = buf[x] -          if /^\s*(module|class|def|include)\s+/.match(ln) -            clscnt += 1 if $1 == "class" +          is_const = false +          if /^\s*(module|class|def|include)\s+/.match(ln) || is_const = /^\s*?[A-Z]([A-z]|[1-9])*\s*?[|]{0,2}=\s*?.+\s*?/.match(ln) +            clscnt += 1 if /class|module/.match($1) +            # We must make sure to load each constant only once to avoid errors +            if is_const +                ln.gsub!(/\s*?[|]{0,2}=\s*?/, '||=') +            end              #dprint "\$1$1              classdef += "%s\n" % ln              classdef += "end\n" if /def\s+/.match(ln) @@ -425,7 +442,6 @@ class VimRubyCompletion      return get_buffer_entity_list( "class" )    end -    def load_rails      allow_rails = VIM::evaluate("exists('g:rubycomplete_rails') && g:rubycomplete_rails")      return if allow_rails.to_i.zero? @@ -531,7 +547,6 @@ class VimRubyCompletion          ret += ActiveRecord::ConnectionAdapters::SchemaStatements.methods      end -      return ret    end @@ -616,7 +631,6 @@ class VimRubyCompletion      want_gems = VIM::evaluate("get(g:, 'rubycomplete_load_gemfile')")      load_gems unless want_gems.to_i.zero? -          input = VIM::Buffer.current.line      cpos = VIM::Window.current.cursor[1] - 1 @@ -670,6 +684,7 @@ class VimRubyCompletion          message = Regexp.quote($4)          dprint "const or cls 2 [recv: \'%s\', msg: \'%s\']" % [ receiver, message ]          load_buffer_class( receiver ) +        load_buffer_module( receiver )          begin            classes = eval("#{receiver}.constants")            #methods = eval("#{receiver}.methods") @@ -790,7 +805,6 @@ class VimRubyCompletion        methods += Kernel.public_methods      end -      include_object = VIM::evaluate("exists('g:rubycomplete_include_object') && g:rubycomplete_include_object")      methods = clean_sel( methods, message )      methods = (methods-Object.instance_methods) if include_object == "0" @@ -833,7 +847,6 @@ let s:rubycomplete_rails_loaded = 0  call s:DefRuby()  "}}} ruby-side code -  " vim:tw=78:sw=4:ts=8:et:fdm=marker:ft=vim:norl:  endif diff --git a/autoload/rust.vim b/autoload/rust.vim index 7e766da1..77c38b7c 100644 --- a/autoload/rust.vim +++ b/autoload/rust.vim @@ -86,7 +86,7 @@ function! s:Run(dict, rustc_args, args)      let pwd = a:dict.istemp ? a:dict.tmpdir : ''      let output = s:system(pwd, shellescape(rustc) . " " . join(map(rustc_args, 'shellescape(v:val)'))) -    if output != '' +    if output !=# ''          echohl WarningMsg          echo output          echohl None @@ -153,7 +153,7 @@ function! s:Expand(dict, pretty, args)  endfunction  function! rust#CompleteExpand(lead, line, pos) -    if a:line[: a:pos-1] =~ '^RustExpand!\s*\S*$' +    if a:line[: a:pos-1] =~# '^RustExpand!\s*\S*$'          " first argument and it has a !          let list = ["normal", "expanded", "typed", "expanded,identified", "flowgraph=", "everybody_loops"]          if !empty(a:lead) @@ -182,7 +182,7 @@ function! s:Emit(dict, type, args)          let args = [relpath, '--emit', a:type, '-o', output_path] + a:args          let pwd = a:dict.istemp ? a:dict.tmpdir : ''          let output = s:system(pwd, shellescape(rustc) . " " . join(map(args, 'shellescape(v:val)'))) -        if output != '' +        if output !=# ''              echohl WarningMsg              echo output              echohl None @@ -192,10 +192,10 @@ function! s:Emit(dict, type, args)              exe 'silent keepalt read' fnameescape(output_path)              1              d -            if a:type == "llvm-ir" +            if a:type ==# "llvm-ir"                  setl filetype=llvm                  let extension = 'll' -            elseif a:type == "asm" +            elseif a:type ==# "asm"                  setl filetype=asm                  let extension = 's'              endif @@ -261,8 +261,8 @@ function! s:WithPath(func, ...)              let dict.tmpdir_relpath = filename              let dict.path = dict.tmpdir.'/'.filename -            let saved.mod = &mod -            set nomod +            let saved.mod = &modified +            set nomodified              silent exe 'keepalt write! ' . fnameescape(dict.path)              if pathisempty @@ -343,7 +343,7 @@ function! s:ShellTokenize(text)              endif              let l:state = 3          elseif l:state == 5 " single-quoted -            if l:c == "'" +            if l:c ==# "'"                  let l:state = 1              else                  let l:current .= l:c @@ -361,7 +361,7 @@ function! s:RmDir(path)      if empty(a:path)          echoerr 'Attempted to delete empty path'          return 0 -    elseif a:path == '/' || a:path == $HOME +    elseif a:path ==# '/' || a:path ==# $HOME          echoerr 'Attempted to delete protected path: ' . a:path          return 0      endif @@ -414,22 +414,83 @@ function! rust#Play(count, line1, line2, ...) abort          call setreg('"', save_regcont, save_regtype)      endif -    let body = l:rust_playpen_url."?code=".webapi#http#encodeURI(content) +    let url = l:rust_playpen_url."?code=".webapi#http#encodeURI(content) -    if strlen(body) > 5000 -        echohl ErrorMsg | echomsg 'Buffer too large, max 5000 encoded characters ('.strlen(body).')' | echohl None +    if strlen(url) > 5000 +        echohl ErrorMsg | echomsg 'Buffer too large, max 5000 encoded characters ('.strlen(url).')' | echohl None          return      endif -    let payload = "format=simple&url=".webapi#http#encodeURI(body) +    let payload = "format=simple&url=".webapi#http#encodeURI(url)      let res = webapi#http#post(l:rust_shortener_url.'create.php', payload, {}) -    let url = res.content +    if res.status[0] ==# '2' +        let url = res.content +    endif +    let footer = ''      if exists('g:rust_clip_command')          call system(g:rust_clip_command, url) +        if !v:shell_error +            let footer = ' (copied to clipboard)' +        endif      endif +    redraw | echomsg 'Done: '.url.footer +endfunction -    redraw | echomsg 'Done: '.url +" Run a test under the cursor or all tests {{{1 + +" Finds a test function name under the cursor. Returns empty string when a +" test function is not found. +function! s:SearchTestFunctionNameUnderCursor() abort +    let cursor_line = line('.') + +    " Find #[test] attribute +    if search('#\[test]', 'bcW') is 0 +        return '' +    endif + +    " Move to an opening brace of the test function +    let test_func_line = search('^\s*fn\s\+\h\w*\s*(.\+{$', 'eW') +    if test_func_line is 0 +        return '' +    endif + +    " Search the end of test function (closing brace) to ensure that the +    " cursor position is within function definition +    normal! % +    if line('.') < cursor_line +        return '' +    endif + +    return matchstr(getline(test_func_line), '^\s*fn\s\+\zs\h\w*') +endfunction + +function! rust#Test(all, options) abort +    let pwd = expand('%:p:h') +    if findfile('Cargo.toml', pwd . ';') ==# '' +        return rust#Run(1, '--test ' . a:options) +    endif + +    let pwd = shellescape(pwd) + +    if a:all +        execute '!cd ' . pwd . ' && cargo test ' . a:options +        return +    endif + +    let saved = getpos('.') +    try +        let func_name = s:SearchTestFunctionNameUnderCursor() +        if func_name ==# '' +            echohl ErrorMsg +            echo 'No test function was found under the cursor. Please add ! to command if you want to run all tests' +            echohl None +            return +        endif +        execute '!cd ' . pwd . ' && cargo test ' . func_name . ' ' . a:options +    finally +        call setpos('.', saved) +    endtry  endfunction  " }}}1 diff --git a/autoload/rust/debugging.vim b/autoload/rust/debugging.vim index 352556d7..ff88e00c 100644 --- a/autoload/rust/debugging.vim +++ b/autoload/rust/debugging.vim @@ -18,6 +18,7 @@ let s:global_variable_list = [              \ 'rust_last_rustc_args',              \ 'rust_original_delimitMate_excluded_regions',              \ 'rust_playpen_url', +            \ 'rust_prev_delimitMate_quotes',              \ 'rust_recent_nearest_cargo_tol',              \ 'rust_recent_root_cargo_toml',              \ 'rust_recommended_style', diff --git a/autoload/rust/delimitmate.vim b/autoload/rust/delimitmate.vim new file mode 100644 index 00000000..e99cc87d --- /dev/null +++ b/autoload/rust/delimitmate.vim @@ -0,0 +1,48 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1 +   +let s:delimitMate_extra_excluded_regions = ',rustLifetimeCandidate,rustGenericLifetimeCandidate' + +" For this buffer, when delimitMate issues the `User delimitMate_map` +" event in the autocommand system, add the above-defined extra excluded +" regions to delimitMate's state, if they have not already been added. +function! rust#delimitmate#onMap() abort +    if &filetype !=# 'rust' +        return +    endif + +    if get(b:, "delimitMate_quotes") +        let b:rust_prev_delimitMate_quotes = b:delimitMate_quotes +    endif +    let b:delimitMate_quotes = "\" `" + +    if match(delimitMate#Get("excluded_regions"), +                \ s:delimitMate_extra_excluded_regions) == -1 +        call delimitMate#Set("excluded_regions", +                    \delimitMate#Get("excluded_regions").s:delimitMate_extra_excluded_regions) +    endif +endfunction + +" For this buffer, when delimitMate issues the `User delimitMate_unmap` +" event in the autocommand system, delete the above-defined extra excluded +" regions from delimitMate's state (the deletion being idempotent and +" having no effect if the extra excluded regions are not present in the +" targeted part of delimitMate's state). +function! rust#delimitmate#onUnmap() abort +    if &filetype !=# 'rust' +        return +    endif + +    if get(b:, "rust_prev_delimitMate_quotes") +        let b:delimitMate_quotes = b:rust_prev_delimitMate_quotes +    endif + +    call delimitMate#Set("excluded_regions", substitute( +               \ delimitMate#Get("excluded_regions"), +               \ '\C\V' . s:delimitMate_extra_excluded_regions, +               \ '', 'g')) +endfunction + +" vim: set et sw=4 sts=4 ts=8: + + +endif diff --git a/autoload/rustfmt.vim b/autoload/rustfmt.vim index c0335173..916736c0 100644 --- a/autoload/rustfmt.vim +++ b/autoload/rustfmt.vim @@ -63,6 +63,20 @@ function! s:RustfmtWriteMode()      endif  endfunction +function! s:RustfmtConfig() +    let l:rustfmt_toml = findfile('rustfmt.toml', expand('%:p:h') . ';') +    if l:rustfmt_toml !=# '' +        return '--config-path '.l:rustfmt_toml +    endif + +    let l:_rustfmt_toml = findfile('.rustfmt.toml', expand('%:p:h') . ';') +    if l:_rustfmt_toml !=# '' +        return '--config-path '.l:_rustfmt_toml +    endif + +    return '' +endfunction +  function! s:RustfmtCommandRange(filename, line1, line2)      if g:rustfmt_file_lines == 0          echo "--file-lines is not supported in the installed `rustfmt` executable" @@ -71,6 +85,7 @@ function! s:RustfmtCommandRange(filename, line1, line2)      let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]}      let l:write_mode = s:RustfmtWriteMode() +    let l:rustfmt_config = s:RustfmtConfig()      " FIXME: When --file-lines gets to be stable, enhance this version range checking      " accordingly. @@ -78,34 +93,73 @@ function! s:RustfmtCommandRange(filename, line1, line2)                  \ (s:rustfmt_unstable_features && (s:rustfmt_version < '1.'))                  \ ? '--unstable-features' : '' -    let l:cmd = printf("%s %s %s %s --file-lines '[%s]' %s", g:rustfmt_command,  -                \ l:write_mode, g:rustfmt_options,  -                \ l:unstable_features, json_encode(l:arg), shellescape(a:filename)) +    let l:cmd = printf("%s %s %s %s %s --file-lines '[%s]' %s", g:rustfmt_command, +                \ l:write_mode, g:rustfmt_options, +                \ l:unstable_features, l:rustfmt_config, +                \ json_encode(l:arg), shellescape(a:filename))      return l:cmd  endfunction -function! s:RustfmtCommand(filename) -    let l:write_mode = s:RustfmtWriteMode() -    return g:rustfmt_command . " ". l:write_mode . " " . g:rustfmt_options . " " . shellescape(a:filename) +function! s:RustfmtCommand() +    if g:rustfmt_emit_files +        let l:write_mode = "--emit=stdout" +    else +        let l:write_mode = "--write-mode=display" +    endif +    " rustfmt will pick on the right config on its own due to the +    " current directory change. +    return g:rustfmt_command . " ". l:write_mode . " " . g:rustfmt_options +endfunction + +function! s:DeleteLines(start, end) abort +    silent! execute a:start . ',' . a:end . 'delete _'  endfunction  function! s:RunRustfmt(command, tmpname, fail_silently)      mkview! -    if exists("*systemlist") -        let out = systemlist(a:command) +    let l:stderr_tmpname = tempname() +    let l:command = a:command . ' 2> ' . l:stderr_tmpname + +    if a:tmpname ==# '' +        " Rustfmt in stdin/stdout mode + +        " chdir to the directory of the file +        let l:has_lcd = haslocaldir() +        let l:prev_cd = getcwd() +        execute 'lchdir! '.expand('%:h') + +        let l:buffer = getline(1, '$') +        if exists("*systemlist") +            silent let out = systemlist(l:command, l:buffer) +        else +            silent let out = split(system(l:command, l:buffer), '\r\?\n') +        endif      else -        let out = split(system(a:command), '\r\?\n') +        if exists("*systemlist") +            silent let out = systemlist(l:command) +        else +            silent let out = split(system(l:command), '\r\?\n') +        endif      endif -    if v:shell_error == 0 || v:shell_error == 3 +    let l:stderr = readfile(l:stderr_tmpname) + +    call delete(l:stderr_tmpname) + +    if v:shell_error == 0          " remove undo point caused via BufWritePre          try | silent undojoin | catch | endtry -        " take the tmpfile's content, this is better than rename -        " because it preserves file modes. -        let l:content = readfile(a:tmpname) -        1,$d _ +        if a:tmpname ==# '' +            let l:content = l:out +        else +            " take the tmpfile's content, this is better than rename +            " because it preserves file modes. +            let l:content = readfile(a:tmpname) +        endif + +        call s:DeleteLines(len(l:content), line('$'))          call setline(1, l:content)          " only clear location list if it was previously filled to prevent @@ -117,61 +171,69 @@ function! s:RunRustfmt(command, tmpname, fail_silently)          endif      elseif g:rustfmt_fail_silently == 0 && a:fail_silently == 0          " otherwise get the errors and put them in the location list -        let errors = [] +        let l:errors = [] -        let prev_line = "" -        for line in out +        let l:prev_line = "" +        for l:line in l:stderr              " error: expected one of `;` or `as`, found `extern`              "  --> src/main.rs:2:1 -            let tokens = matchlist(line, '^\s-->\s\(.\{-}\):\(\d\+\):\(\d\+\)$') +            let tokens = matchlist(l:line, '^\s\+-->\s\(.\{-}\):\(\d\+\):\(\d\+\)$')              if !empty(tokens) -                call add(errors, {"filename": @%, +                call add(l:errors, {"filename": @%,                              \"lnum":	tokens[2],                              \"col":	tokens[3], -                            \"text":	prev_line}) +                            \"text":	l:prev_line})              endif -            let prev_line = line +            let l:prev_line = l:line          endfor -        if empty(errors) -            % | " Couldn't detect rustfmt error format, output errors -        endif - -        if !empty(errors) -            call setloclist(0, errors, 'r') +        if !empty(l:errors) +            call setloclist(0, l:errors, 'r')              echohl Error | echomsg "rustfmt returned error" | echohl None +        else +            echo "rust.vim: was not able to parse rustfmt messages. Here is the raw output:" +            echo "\n" +            for l:line in l:stderr +                echo l:line +            endfor          endif          let s:got_fmt_error = 1          lwindow      endif -    call delete(a:tmpname) +    " Restore the current directory if needed +    if a:tmpname ==# '' +        if l:has_lcd +            execute 'lchdir! '.l:prev_cd +        else +            execute 'chdir! '.l:prev_cd +        endif +    endif      silent! loadview  endfunction -function! s:rustfmtSaveToTmp() +function! rustfmt#FormatRange(line1, line2)      let l:tmpname = tempname()      call writefile(getline(1, '$'), l:tmpname) -    return l:tmpname -endfunction - -function! rustfmt#FormatRange(line1, line2) -    let l:tmpname = s:rustfmtSaveToTmp()      let command = s:RustfmtCommandRange(l:tmpname, a:line1, a:line2)      call s:RunRustfmt(command, l:tmpname, 0) +    call delete(l:tmpname)  endfunction  function! rustfmt#Format() -    let l:tmpname = s:rustfmtSaveToTmp() -    let command = s:RustfmtCommand(l:tmpname) -    call s:RunRustfmt(command, l:tmpname, 0) +    call s:RunRustfmt(s:RustfmtCommand(), '', 0) +endfunction + +function! rustfmt#Cmd() +    " Mainly for debugging +    return s:RustfmtCommand()  endfunction  function! rustfmt#PreWrite()      if rust#GetConfigVar('rustfmt_autosave_if_config_present', 0) -        if findfile('rustfmt.toml', '.;') !=# ''  +        if findfile('rustfmt.toml', '.;') !=# '' || findfile('.rustfmt.toml', '.;') !=# ''              let b:rustfmt_autosave = 1              let b:rustfmt_autosave_because_of_config = 1          endif @@ -181,9 +243,7 @@ function! rustfmt#PreWrite()          return      endif -    let l:tmpname = s:rustfmtSaveToTmp() -    let command = s:RustfmtCommand(l:tmpname) -    call s:RunRustfmt(command, l:tmpname, 1) +    call s:RunRustfmt(s:RustfmtCommand(), '', 1)  endfunction | 
