This commit is contained in:
Adam Stankiewicz 2017-05-17 11:07:28 +02:00
parent ef369d45a5
commit af87010071
No known key found for this signature in database
GPG Key ID: A62480DCEAC884DF
38 changed files with 1250 additions and 845 deletions

View File

@ -18,6 +18,38 @@ if g:terraform_align && exists(':Tabularize')
endfunction endfunction
endif endif
function! TerraformFolds()
let thisline = getline(v:lnum)
if match(thisline, '^resource') >= 0
return ">1"
elseif match(thisline, '^provider') >= 0
return ">1"
elseif match(thisline, '^module') >= 0
return ">1"
elseif match(thisline, '^variable') >= 0
return ">1"
elseif match(thisline, '^output') >= 0
return ">1"
else
return "="
endif
endfunction
setlocal foldmethod=expr
setlocal foldexpr=TerraformFolds()
setlocal foldlevel=1
function! TerraformFoldText()
let foldsize = (v:foldend-v:foldstart)
return getline(v:foldstart).' ('.foldsize.' lines)'
endfunction
setlocal foldtext=TerraformFoldText()
"inoremap <space> <C-O>za
nnoremap <space> za
onoremap <space> <C-C>za
vnoremap <space> zf
" Match the identation put in place by Hashicorp and :TerraformFmt, https://github.com/hashivim/vim-terraform/issues/21 " Match the identation put in place by Hashicorp and :TerraformFmt, https://github.com/hashivim/vim-terraform/issues/21
if get(g:, "terraform_align", 1) if get(g:, "terraform_align", 1)
setlocal tabstop=2 setlocal tabstop=2
@ -25,4 +57,5 @@ if get(g:, "terraform_align", 1)
setlocal shiftwidth=2 setlocal shiftwidth=2
endif endif
endif endif

View File

@ -38,8 +38,8 @@ syn keyword yamlConstant NULL Null null NONE None none NIL Nil nil
syn keyword yamlConstant TRUE True true YES Yes yes ON On on syn keyword yamlConstant TRUE True true YES Yes yes ON On on
syn keyword yamlConstant FALSE False false NO No no OFF Off off syn keyword yamlConstant FALSE False false NO No no OFF Off off
syn match yamlKey "^\s*\zs\S\+\ze\s*:" syn match yamlKey "^\s*\zs[^ \t\"]\+\ze\s*:"
syn match yamlKey "^\s*-\s*\zs\S\+\ze\s*:" syn match yamlKey "^\s*-\s*\zs[^ \t\"]\+\ze\s*:"
syn match yamlAnchor "&\S\+" syn match yamlAnchor "&\S\+"
syn match yamlAlias "*\S\+" syn match yamlAlias "*\S\+"

View File

@ -1,219 +1,347 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
let s:NO_COLON_BEFORE = ':\@<!' function! elixir#indent#debug(str)
let s:NO_COLON_AFTER = ':\@!' if exists("g:elixir_indent_debug") && g:elixir_indent_debug
let s:ENDING_SYMBOLS = '\]\|}\|)' echom a:str
let s:ARROW = '->' endif
let s:END_WITH_ARROW = s:ARROW.'$'
let s:SKIP_SYNTAX = '\%(Comment\|String\)$'
let s:BLOCK_SKIP = "synIDattr(synID(line('.'),col('.'),1),'name') =~? '".s:SKIP_SYNTAX."'"
let s:DEF = '^\s*def'
let s:FN = '\<fn\>'
let s:MULTILINE_FN = s:FN.'\%(.*end\)\@!'
let s:BLOCK_START = '\%(\<do\>\|'.s:FN.'\)\>'
let s:MULTILINE_BLOCK = '\%(\<do\>'.s:NO_COLON_AFTER.'\|'.s:MULTILINE_FN.'\)'
let s:BLOCK_MIDDLE = '\<\%(else\|match\|elsif\|catch\|after\|rescue\)\>'
let s:BLOCK_END = 'end'
let s:STARTS_WITH_PIPELINE = '^\s*|>.*$'
let s:QUERY_FROM = '^\s*\<from\>.*\<in\>.*,'
let s:ENDING_WITH_ASSIGNMENT = '=\s*$'
let s:INDENT_KEYWORDS = s:NO_COLON_BEFORE.'\%('.s:MULTILINE_BLOCK.'\|'.s:BLOCK_MIDDLE.'\)'
let s:DEINDENT_KEYWORDS = '^\s*\<\%('.s:BLOCK_END.'\|'.s:BLOCK_MIDDLE.'\)\>'
let s:PAIR_START = '\<\%('.s:NO_COLON_BEFORE.s:BLOCK_START.'\)\>'.s:NO_COLON_AFTER
let s:PAIR_MIDDLE = '^\s*\%('.s:BLOCK_MIDDLE.'\)\>'.s:NO_COLON_AFTER.'\zs'
let s:PAIR_END = '\<\%('.s:NO_COLON_BEFORE.s:BLOCK_END.'\)\>\zs'
let s:LINE_COMMENT = '^\s*#'
let s:MATCH_OPERATOR = '[^!><=]=[^~=>]'
function! s:pending_parenthesis(line)
if a:line.last_non_blank.text !~ s:ARROW
return elixir#util#count_indentable_symbol_diff(a:line.last_non_blank, '(', '\%(end\s*\)\@<!)')
end
endfunction endfunction
function! s:pending_square_brackets(line) " Returns 0 or 1 based on whether or not the text starts with the given
if a:line.last_non_blank.text !~ s:ARROW " expression and is not a string or comment
return elixir#util#count_indentable_symbol_diff(a:line.last_non_blank, '[', ']') function! elixir#indent#starts_with(text, expr, lnum)
end let pos = match(a:text, '^\s*'.a:expr)
endfunction if pos == -1
return 0
function! s:pending_brackets(line)
if a:line.last_non_blank.text !~ s:ARROW
return elixir#util#count_indentable_symbol_diff(a:line.last_non_blank, '{', '}')
end
endfunction
function! elixir#indent#deindent_case_arrow(ind, line)
if get(b:old_ind, 'arrow', 0) > 0
\ && (a:line.current.text =~ s:ARROW
\ || a:line.current.text =~ s:BLOCK_END)
let ind = b:old_ind.arrow
let b:old_ind.arrow = 0
return ind
else else
return a:ind " NOTE: @jbodah 2017-02-24: pos is the index of the match which is
end " zero-indexed. Add one to make it the column number
endfunction if elixir#indent#is_string_or_comment(a:lnum, pos + 1)
return 0
function! elixir#indent#deindent_ending_symbols(ind, line)
if a:line.current.text =~ '^\s*\('.s:ENDING_SYMBOLS.'\)'
return a:ind - &sw
else else
return a:ind return 1
end
end end
endfunction endfunction
function! elixir#indent#deindent_keywords(ind, line) " Returns 0 or 1 based on whether or not the text ends with the given
if a:line.current.text =~ s:DEINDENT_KEYWORDS " expression and is not a string or comment
let bslnum = searchpair( function! elixir#indent#ends_with(text, expr, lnum)
\ s:PAIR_START, let pos = match(a:text, a:expr.'\s*$')
\ s:PAIR_MIDDLE, if pos == -1
\ s:PAIR_END, return 0
\ 'nbW',
\ s:BLOCK_SKIP
\ )
return indent(bslnum)
else else
return a:ind if elixir#indent#is_string_or_comment(a:lnum, pos)
end return 0
endfunction
function! elixir#indent#deindent_opened_symbols(ind, line)
let s:opened_symbol =
\ s:pending_parenthesis(a:line)
\ + s:pending_square_brackets(a:line)
\ + s:pending_brackets(a:line)
if s:opened_symbol < 0
let ind = get(b:old_ind, 'symbol', a:ind + (s:opened_symbol * &sw))
let ind = float2nr(ceil(floor(ind)/&sw)*&sw)
return ind <= 0 ? 0 : ind
else else
return a:ind return 1
end
end end
endfunction endfunction
function! elixir#indent#indent_after_pipeline(ind, line) " Returns 0 or 1 based on whether or not the text matches the given expression
if exists("b:old_ind.pipeline") function! elixir#indent#contains(text, expr)
\ && elixir#util#is_blank(a:line.last.text) return a:text =~ a:expr
\ && a:line.current.text !~ s:STARTS_WITH_PIPELINE
" Reset indentation in pipelines if there is a blank line between
" pipes
let ind = b:old_ind.pipeline
unlet b:old_ind.pipeline
return ind
elseif a:line.last_non_blank.text =~ s:STARTS_WITH_PIPELINE
if empty(substitute(a:line.current.text, ' ', '', 'g'))
\ || a:line.current.text =~ s:STARTS_WITH_PIPELINE
return indent(a:line.last_non_blank.num)
elseif a:line.last_non_blank.text !~ s:INDENT_KEYWORDS
let ind = b:old_ind.pipeline
unlet b:old_ind.pipeline
return ind
end
end
return a:ind
endfunction endfunction
function! elixir#indent#indent_assignment(ind, line) " Returns 0 or 1 based on whether or not the given line number and column
if a:line.last_non_blank.text =~ s:ENDING_WITH_ASSIGNMENT " number pair is a string or comment
let b:old_ind.pipeline = indent(a:line.last_non_blank.num) " FIXME: side effect function! elixir#indent#is_string_or_comment(line, col)
return a:ind + &sw return synIDattr(synID(a:line, a:col, 1), "name") =~ '\%(String\|Comment\)'
endfunction
" Skip expression for searchpair. Returns 0 or 1 based on whether the value
" under the cursor is a string or comment
function! elixir#indent#searchpair_back_skip()
" NOTE: @jbodah 2017-02-27: for some reason this function gets called with
" and index that doesn't exist in the line sometimes. Detect and account for
" that situation
let curr_col = col('.')
if getline('.')[curr_col-1] == ''
let curr_col = curr_col-1
endif
return elixir#indent#is_string_or_comment(line('.'), curr_col)
endfunction
" DRY up searchpair calls
function! elixir#indent#searchpair_back(start, mid, end)
let line = line('.')
return searchpair(a:start, a:mid, a:end, 'bnW', "line('.') == " . line . " || elixir#indent#searchpair_back_skip()")
endfunction
" DRY up searchpairpos calls
function! elixir#indent#searchpairpos_back(start, mid, end)
let line = line('.')
return searchpairpos(a:start, a:mid, a:end, 'bnW', "line('.') == " . line . " || elixir#indent#searchpair_back_skip()")
endfunction
" DRY up regex for keywords that 1) makes sure we only look at complete words
" and 2) ignores atoms
function! elixir#indent#keyword(expr)
return ':\@<!\<\C\%('.a:expr.'\)\>:\@!'
endfunction
function! elixir#indent#starts_with_comment(text)
return match(a:text, '^\s*#') != -1
endfunction
" Start at the end of text and search backwards looking for a match. Also peek
" ahead if we get a match to make sure we get a complete match. This means
" that the result should be the position of the start of the right-most match
function! elixir#indent#find_last_pos(lnum, text, match)
let last = len(a:text) - 1
let c = last
while c >= 0
let substr = strpart(a:text, c, last)
let peek = strpart(a:text, c - 1, last)
let ss_match = match(substr, a:match)
if ss_match != -1
let peek_match = match(peek, a:match)
if peek_match == ss_match + 1
let syng = synIDattr(synID(a:lnum, c + ss_match, 1), 'name')
if syng !~ '\%(String\|Comment\)'
return c + ss_match
end
end
end
let c -= 1
endwhile
return -1
endfunction
function! elixir#indent#handle_top_of_file(_lnum, _text, prev_nb_lnum, _prev_nb_text)
if a:prev_nb_lnum == 0
return 0
else else
return a:ind return -1
end end
endfunction endfunction
function! elixir#indent#indent_brackets(ind, line) " TODO: @jbodah 2017-03-31: remove
if s:pending_brackets(a:line) > 0 function! elixir#indent#handle_following_trailing_do(lnum, text, prev_nb_lnum, prev_nb_text)
return a:ind + &sw if elixir#indent#ends_with(a:prev_nb_text, elixir#indent#keyword('do'), a:prev_nb_lnum)
if elixir#indent#starts_with(a:text, elixir#indent#keyword('end'), a:lnum)
return indent(a:prev_nb_lnum)
else else
return a:ind return indent(a:prev_nb_lnum) + &sw
end
endfunction
function! elixir#indent#indent_case_arrow(ind, line)
if a:line.last_non_blank.text =~ s:END_WITH_ARROW && a:line.last_non_blank.text !~ '\<fn\>'
let b:old_ind.arrow = a:ind
return a:ind + &sw
else
return a:ind
end
endfunction
function! elixir#indent#indent_ending_symbols(ind, line)
if a:line.last_non_blank.text =~ '^\s*\('.s:ENDING_SYMBOLS.'\)\s*$'
return a:ind + &sw
else
return a:ind
end
endfunction
function! elixir#indent#indent_keywords(ind, line)
if a:line.last_non_blank.text =~ s:INDENT_KEYWORDS && a:line.last_non_blank.text !~ s:LINE_COMMENT
return a:ind + &sw
else
return a:ind
end
endfunction
function! elixir#indent#indent_parenthesis(ind, line)
if s:pending_parenthesis(a:line) > 0
\ && a:line.last_non_blank.text !~ s:DEF
\ && a:line.last_non_blank.text !~ s:END_WITH_ARROW
let b:old_ind.symbol = a:ind
return matchend(a:line.last_non_blank.text, '(')
else
return a:ind
end
endfunction
function! elixir#indent#indent_pipeline_assignment(ind, line)
if a:line.current.text =~ s:STARTS_WITH_PIPELINE
\ && a:line.last_non_blank.text =~ s:MATCH_OPERATOR
let b:old_ind.pipeline = indent(a:line.last_non_blank.num)
" if line starts with pipeline
" and last_non_blank line is an attribution
" indents pipeline in same level as attribution
let assign_pos = match(a:line.last_non_blank.text, '=\s*\zs[^ ]')
return (elixir#util#is_indentable_at(a:line.last_non_blank.num, assign_pos) ? assign_pos : a:ind)
else
return a:ind
end
endfunction
function! elixir#indent#indent_pipeline_continuation(ind, line)
if a:line.last_non_blank.text =~ s:STARTS_WITH_PIPELINE
\ && a:line.current.text =~ s:STARTS_WITH_PIPELINE
return indent(a:line.last_non_blank.num)
else
return a:ind
end
endfunction
function! elixir#indent#indent_square_brackets(ind, line)
if s:pending_square_brackets(a:line) > 0
if a:line.last_non_blank.text =~ '[\s*$'
return a:ind + &sw
else
" if start symbol is followed by a character, indent based on the
" whitespace after the symbol, otherwise use the default shiftwidth
" Avoid negative indentation index
return matchend(a:line.last_non_blank.text, '[\s*')
end end
else else
return a:ind return -1
endif
endfunction
function! elixir#indent#handle_following_trailing_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text)
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
if elixir#indent#ends_with(a:prev_nb_text, binary_operator, a:prev_nb_lnum)
return indent(a:prev_nb_lnum) + &sw
else
return -1
endif
endfunction
function! elixir#indent#handle_starts_with_pipe(lnum, text, prev_nb_lnum, prev_nb_text)
if elixir#indent#starts_with(a:text, '|>', a:lnum)
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
let pos = elixir#indent#find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator)
if pos == -1
return indent(a:prev_nb_lnum)
else
let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S')
if next_word_pos == -1
return indent(a:prev_nb_lnum) + &sw
else
return pos + 1 + next_word_pos
end
end
else
return -1
endif
endfunction
function! elixir#indent#handle_starts_with_comment(_lnum, text, prev_nb_lnum, _prev_nb_text)
if elixir#indent#starts_with_comment(a:text)
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 elixir#indent#starts_with(a:text, elixir#indent#keyword('end'), a:lnum)
let pair_lnum = elixir#indent#searchpair_back(elixir#indent#keyword('do\|fn'), '', elixir#indent#keyword('end').'\zs')
return indent(pair_lnum)
else
return -1
endif
endfunction
function! elixir#indent#handle_starts_with_mid_or_end_block_keyword(lnum, text, _prev_nb_lnum, _prev_nb_text)
if elixir#indent#starts_with(a:text, elixir#indent#keyword('catch\|rescue\|after\|else'), a:lnum)
let pair_lnum = elixir#indent#searchpair_back(elixir#indent#keyword('with\|receive\|try\|if\|fn'), elixir#indent#keyword('catch\|rescue\|after\|else').'\zs', elixir#indent#keyword('end'))
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 elixir#indent#starts_with(a:text, '\%(\]\|}\|)\)', a:lnum)
let pair_lnum = elixir#indent#searchpair_back('\%(\[\|{\|(\)', '', '\%(\]\|}\|)\)')
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)
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
if elixir#indent#starts_with(a:text, binary_operator, a:lnum)
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
let pos = elixir#indent#find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator)
if pos == -1
return indent(a:prev_nb_lnum)
else
let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S')
if next_word_pos == -1
return indent(a:prev_nb_lnum) + &sw
else
return pos + 1 + next_word_pos
end
end
else
return -1
endif
endfunction
" To handle nested structures properly we need to find the innermost
" 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)
let start_pattern = '\C\%(\<if\>\|\<case\>\|\<cond\>\|\<try\>\|\<receive\>\|\<fn\>\|{\|\[\|(\)'
let end_pattern = '\C\%(\<end\>\|\]\|}\|)\)'
let pair_info = elixir#indent#searchpairpos_back(start_pattern, '', end_pattern)
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 elixir#indent#debug("testing elixir#indent#do_handle_inside_fn")
return elixir#indent#do_handle_inside_fn(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
elseif pair_char == '['
call elixir#indent#debug("testing elixir#indent#do_handle_inside_square_brace")
return elixir#indent#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 elixir#indent#debug("testing elixir#indent#do_handle_inside_curly_brace")
return elixir#indent#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 elixir#indent#debug("testing elixir#indent#do_handle_inside_parens")
return elixir#indent#do_handle_inside_parens(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
else
call elixir#indent#debug("testing elixir#indent#do_handle_inside_keyword_block")
return elixir#indent#do_handle_inside_keyword_block(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
end
else
return -1
end end
endfunction endfunction
function! elixir#indent#indent_ecto_queries(ind, line) function! elixir#indent#do_handle_inside_keyword_block(pair_lnum, _pair_col, _lnum, text, prev_nb_lnum, prev_nb_text)
if a:line.last_non_blank.text =~ s:QUERY_FROM let keyword_pattern = '\C\%(\<case\>\|\<cond\>\|\<try\>\|\<receive\>\|\<after\>\|\<catch\>\|\<rescue\>\|\<else\>\)'
return a:ind + &sw if a:pair_lnum
" last line is a "receive" or something
if elixir#indent#starts_with(a:prev_nb_text, keyword_pattern, a:prev_nb_lnum)
call elixir#indent#debug("prev nb line is keyword")
return indent(a:prev_nb_lnum) + &sw
elseif elixir#indent#contains(a:text, '->')
call elixir#indent#debug("contains ->")
" TODO: @jbodah 2017-03-31: test contains ignores str + comments
return indent(a:pair_lnum) + &sw
elseif elixir#indent#contains(a:prev_nb_text, '->')
call elixir#indent#debug("prev nb line contains ->")
return indent(a:prev_nb_lnum) + &sw
else else
return a:ind call elixir#indent#debug("doesnt start with comment or contain ->")
return indent(a:prev_nb_lnum)
end end
else
return -1
endif
endfunction
function! elixir#indent#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
if elixir#indent#contains(a:text, '->')
return indent(a:pair_lnum) + &sw
else
if elixir#indent#ends_with(a:prev_nb_text, '->', a:prev_nb_lnum)
return indent(a:prev_nb_lnum) + &sw
else
return indent(a:prev_nb_lnum)
end
end
else
return -1
endif
endfunction
function! elixir#indent#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) + &sw
endif
else
return -1
end
endfunction
function! elixir#indent#do_handle_inside_curly_brace(pair_lnum, _pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text)
return indent(a:pair_lnum) + &sw
endfunction
function! elixir#indent#do_handle_inside_parens(pair_lnum, pair_col, _lnum, _text, prev_nb_lnum, prev_nb_text)
if a:pair_lnum
if elixir#indent#ends_with(a:prev_nb_text, '(', a:prev_nb_lnum)
return indent(a:prev_nb_lnum) + &sw
elseif a:pair_lnum == a:prev_nb_lnum
" Align indent (e.g. "def add(a,")
let pos = elixir#indent#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(elixir#indent#keyword('do\|fn'), '', elixir#indent#keyword('end'), 'bW', "line('.') == ".a:lnum." || elixir#indent#is_string_or_comment(line('.'), col('.'))")
if pair_lnum
" TODO: @jbodah 2017-03-29: this should probably be the case in *all*
" blocks
if elixir#indent#ends_with(a:prev_nb_text, ',', a:prev_nb_lnum)
return indent(pair_lnum) + 2 * &sw
else
return indent(pair_lnum) + &sw
endif
else
return -1
endif
endfunction endfunction
endif endif

View File

@ -1,52 +1,28 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
let s:SKIP_SYNTAX = '\%(Comment\|String\)$' function! elixir#util#get_filename(word) abort
let word = a:word
function! elixir#util#is_indentable_at(line, col) " get first thing that starts uppercase, until the first space or end of line
if a:col == -1 " skip synID lookup for not found match let word = substitute(word,'^\s*\(\u[^ ]\+\).*$','\1','g')
return 1
end
" TODO: Remove these 2 lines
" I don't know why, but for the test on spec/indent/lists_spec.rb:24.
" Vim is making some mess on parsing the syntax of 'end', it is being
" recognized as 'elixirString' when should be recognized as 'elixirBlock'.
call synID(a:line, a:col, 1)
" This forces vim to sync the syntax. Using fromstart is very slow on files
" over 1k lines
syntax sync minlines=20 maxlines=150
return synIDattr(synID(a:line, a:col, 1), "name") " remove any trailing characters that don't look like a nested module
\ !~ s:SKIP_SYNTAX let word = substitute(word,'\.\U.*$','','g')
endfunction
function! elixir#util#count_indentable_symbol_diff(line, open, close) " replace module dots with slash
return let word = substitute(word,'\.','/','g')
\ s:match_count(a:line, a:open)
\ - s:match_count(a:line, a:close)
endfunction
function! s:match_count(line, pattern) " remove any special chars
let size = strlen(a:line.text) let word = substitute(word,'[^A-z0-9-_/]','','g')
let index = 0
let counter = 0
while index < size " convert to snake_case
let index = match(a:line.text, a:pattern, index) let word = substitute(word,'\(\u\+\)\(\u\l\)','\1_\2','g')
if index >= 0 let word = substitute(word,'\(\u\+\)\(\u\l\)','\1_\2','g')
let index += 1 let word = substitute(word,'\(\l\|\d\)\(\u\)','\1_\2','g')
if elixir#util#is_indentable_at(a:line.num, index) let word = substitute(word,'-','_','g')
let counter +=1 let word = tolower(word)
end
else
break
end
endwhile
return counter return word
endfunction
function elixir#util#is_blank(string)
return a:string =~ '^\s*$'
endfunction endfunction
endif endif

View File

@ -371,6 +371,7 @@ let linkreltypes = linkreltypes + ['pgpkey']
" a and button are special elements for interactive, some element can't be its descendent " a and button are special elements for interactive, some element can't be its descendent
let abutton_dec = 'details\\|embed\\|iframe\\|keygen\\|label\\|menu\\|select\\|textarea' let abutton_dec = 'details\\|embed\\|iframe\\|keygen\\|label\\|menu\\|select\\|textarea'
let crossorigin = ['anonymous', 'use-credentials']
let g:xmldata_html5 = { let g:xmldata_html5 = {
@ -582,7 +583,7 @@ let g:xmldata_html5 = {
\ ], \ ],
\ 'img': [ \ 'img': [
\ [], \ [],
\ extend(copy(global_attributes), {'src': [], 'alt': [], 'height': [], 'width': [], 'usemap': [], 'ismap': ['ismap', ''], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url']}) \ extend(copy(global_attributes), {'src': [], 'alt': [], 'height': [], 'width': [], 'usemap': [], 'ismap': ['ismap', ''], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url'], 'crossorigin': ['anonymous', 'use-credentials']})
\ ], \ ],
\ 'input': [ \ 'input': [
\ [], \ [],
@ -614,7 +615,7 @@ let g:xmldata_html5 = {
\ ], \ ],
\ 'link': [ \ 'link': [
\ [], \ [],
\ extend(copy(global_attributes), {'href': [], 'rel': linkreltypes, 'hreflang': lang_tag, 'media': [], 'type': [], 'sizes': ['any'], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url']}) \ extend(copy(global_attributes), {'href': [], 'rel': linkreltypes, 'hreflang': lang_tag, 'media': [], 'type': [], 'sizes': ['any'], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url'], 'crossorigin': crossorigin, 'preload': ['preload', ''], 'prefetch': ['prefetch', '']})
\ ], \ ],
\ 'main': [ \ 'main': [
\ flow_elements + ['style'], \ flow_elements + ['style'],
@ -722,7 +723,7 @@ let g:xmldata_html5 = {
\ ], \ ],
\ 'script': [ \ 'script': [
\ [], \ [],
\ extend(copy(global_attributes), {'src': [], 'defer': ['defer', ''], 'async': ['async', ''], 'type': [], 'charset': charset, 'nonce': []}) \ extend(copy(global_attributes), {'src': [], 'defer': ['defer', ''], 'async': ['async', ''], 'type': [], 'charset': charset, 'nonce': [], 'crossorigin': crossorigin})
\ ], \ ],
\ 'section': [ \ 'section': [
\ flow_elements + ['style'], \ flow_elements + ['style'],
@ -834,7 +835,7 @@ let g:xmldata_html5 = {
\ ], \ ],
\ 'video': [ \ 'video': [
\ flow_elements + ['source', 'track'], \ flow_elements + ['source', 'track'],
\ extend(copy(global_attributes), {'autoplay': ['autoplay', ''], 'preload': ['none', 'metadata', 'auto', ''], 'controls': ['controls', ''], 'loop': ['loop', ''], 'playsinline': ['playsinline', ''], 'poster': [], 'height': [], 'width': [], 'src': []}) \ extend(copy(global_attributes), {'autoplay': ['autoplay', ''], 'preload': ['none', 'metadata', 'auto', ''], 'controls': ['controls', ''], 'loop': ['loop', ''], 'playsinline': ['playsinline', ''], 'poster': [], 'height': [], 'width': [], 'src': [], 'crossorigin': crossorigin})
\ ], \ ],
\ 'wbr': [ \ 'wbr': [
\ [], \ [],

View File

@ -1,5 +1,10 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
" Vim compiler plugin
" Language: JavaScript
" Maintainer: vim-javascript community
" URL: https://github.com/pangloss/vim-javascript
if exists("current_compiler") if exists("current_compiler")
finish finish
endif endif

View File

@ -24,10 +24,10 @@ CompilerSet errorformat=
\%D(in\ %f), \%D(in\ %f),
\%\\s%#from\ %f:%l:%m, \%\\s%#from\ %f:%l:%m,
\%\\s%#from\ %f:%l:, \%\\s%#from\ %f:%l:,
\%\\s%##\ %f:%l:%m, \%\\s%##\ %f:%l:%m%\\&%.%#%\\D:%.%#,
\%\\s%##\ %f:%l, \%\\s%##\ %f:%l%\\&%.%#%\\D:%.%#,
\%\\s%#[%f:%l:\ %#%m, \%\\s%#[%f:%l:\ %#%m%\\&%.%#%\\D:%.%#,
\%\\s%#%f:%l:\ %#%m, \%\\s%#%f:%l:\ %#%m%\\&%.%#%\\D:%.%#,
\%\\s%#%f:%l:, \%\\s%#%f:%l:,
\%m\ [%f:%l]:, \%m\ [%f:%l]:,
\%+Erake\ aborted!, \%+Erake\ aborted!,

View File

@ -165,8 +165,6 @@ au BufRead,BufNewFile *.ex,*.exs call s:setf('elixir')
au BufRead,BufNewFile *.eex call s:setf('eelixir') au BufRead,BufNewFile *.eex call s:setf('eelixir')
au BufRead,BufNewFile * call s:DetectElixir() au BufRead,BufNewFile * call s:DetectElixir()
au FileType elixir,eelixir setl sw=2 sts=2 et iskeyword+=!,?
function! s:setf(filetype) abort function! s:setf(filetype) abort
let &filetype = a:filetype let &filetype = a:filetype
endfunction endfunction
@ -283,7 +281,9 @@ augroup filetypedetect
" Language: OpenGL Shading Language " Language: OpenGL Shading Language
" Maintainer: Sergey Tikhomirov <sergey@tikhomirov.io> " Maintainer: Sergey Tikhomirov <sergey@tikhomirov.io>
autocmd! BufNewFile,BufRead *.glsl,*.geom,*.vert,*.frag,*.gsh,*.vsh,*.fsh,*.vs,*.fs,*.gs,*.tcs,*.tes,*.tesc,*.tese,*.comp set filetype=glsl " Extensions supported by Khronos reference compiler
" https://github.com/KhronosGroup/glslang
autocmd! BufNewFile,BufRead *.vert,*.tesc,*.tese,*.geom,*.frag,*.comp set filetype=glsl
" vim:set sts=2 sw=2 : " vim:set sts=2 sw=2 :
augroup END augroup END
@ -376,10 +376,16 @@ augroup END
augroup filetypedetect augroup filetypedetect
" javascript:pangloss/vim-javascript:_JAVASCRIPT " javascript:pangloss/vim-javascript:_JAVASCRIPT
au BufNewFile,BufRead *.js setf javascript au BufNewFile,BufRead *.{js,jsm,es,es6},Jakefile setf javascript
au BufNewFile,BufRead *.jsm setf javascript
au BufNewFile,BufRead Jakefile setf javascript fun! s:SourceFlowSyntax()
au BufNewFile,BufRead *.es6 setf javascript if !exists('javascript_plugin_flow') && !exists('b:flow_active') &&
\ search('\v\C%^\_s*%(//\s*|/\*[ \t\n*]*)\@flow>','nw')
runtime extras/flow.vim
let b:flow_active = 1
endif
endfun
au FileType javascript au BufRead,BufWritePost <buffer> call s:SourceFlowSyntax()
fun! s:SelectJavascript() fun! s:SelectJavascript()
if getline(1) =~# '^#!.*/bin/\%(env\s\+\)\?node\>' if getline(1) =~# '^#!.*/bin/\%(env\s\+\)\?node\>'
@ -616,11 +622,6 @@ augroup END
augroup filetypedetect augroup filetypedetect
" plantuml:aklt/plantuml-syntax " plantuml:aklt/plantuml-syntax
" Vim ftdetect file
" Language: PlantUML
" Maintainer: Aaron C. Meadows < language name at shadowguarddev dot com>
" Version: 0.1
if did_filetype() if did_filetype()
finish finish
endif endif
@ -975,6 +976,12 @@ augroup END
augroup filetypedetect augroup filetypedetect
" twig:lumiliet/vim-twig " twig:lumiliet/vim-twig
if !exists('g:vim_twig_filetype_detected') && has("autocmd")
au BufNewFile,BufRead *.twig set filetype=html.twig
au BufNewFile,BufRead *.html.twig set filetype=html.twig
au BufNewFile,BufRead *.xml.twig set filetype=xml.twig
endif
augroup END augroup END
augroup filetypedetect augroup filetypedetect
@ -1002,7 +1009,7 @@ augroup END
augroup filetypedetect augroup filetypedetect
" vue:posva/vim-vue " vue:posva/vim-vue
au BufNewFile,BufRead *.vue setf vue.html.javascript.css au BufNewFile,BufRead *.vue setf vue
augroup END augroup END
augroup filetypedetect augroup filetypedetect

View File

@ -16,7 +16,7 @@ if !exists("g:eelixir_default_subtype")
endif endif
if !exists("b:eelixir_subtype") if !exists("b:eelixir_subtype")
let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$") let s:lines = join(getline(1, 5) + [getline('$')], "\n")
let b:eelixir_subtype = matchstr(s:lines,'eelixir_subtype=\zs\w\+') let b:eelixir_subtype = matchstr(s:lines,'eelixir_subtype=\zs\w\+')
if b:eelixir_subtype == '' if b:eelixir_subtype == ''
let b:eelixir_subtype = matchstr(&filetype,'^eex\.\zs\w\+') let b:eelixir_subtype = matchstr(&filetype,'^eex\.\zs\w\+')
@ -100,7 +100,7 @@ endif
setlocal comments=:<%# setlocal comments=:<%#
setlocal commentstring=<%#\ %s\ %> setlocal commentstring=<%#\ %s\ %>
let b:undo_ftplugin = "setl cms< " let b:undo_ftplugin = "setl cms< " .
\ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
let &cpo = s:save_cpo let &cpo = s:save_cpo

View File

@ -17,45 +17,24 @@ if exists("loaded_matchit") && !exists("b:match_words")
\ ',{:},\[:\],(:)' \ ',{:},\[:\],(:)'
endif endif
setlocal shiftwidth=2 softtabstop=2 expandtab iskeyword+=!,?
setlocal comments=:# setlocal comments=:#
setlocal commentstring=#\ %s setlocal commentstring=#\ %s
function! GetElixirFilename(word)
let word = a:word
" get first thing that starts uppercase, until the first space or end of line
let word = substitute(word,'^\s*\(\u[^ ]\+\).*$','\1','g')
" remove any trailing characters that don't look like a nested module
let word = substitute(word,'\.\U.*$','','g')
" replace module dots with slash
let word = substitute(word,'\.','/','g')
" remove any special chars
let word = substitute(word,'[^A-z0-9-_/]','','g')
" convert to snake_case
let word = substitute(word,'\(\u\+\)\(\u\l\)','\1_\2','g')
let word = substitute(word,'\(\u\+\)\(\u\l\)','\1_\2','g')
let word = substitute(word,'\(\l\|\d\)\(\u\)','\1_\2','g')
let word = substitute(word,'-','_','g')
let word = tolower(word)
return word
endfunction
let &l:path = let &l:path =
\ join([ \ join([
\ getcwd().'/lib', \ 'lib',
\ getcwd().'/src', \ 'src',
\ getcwd().'/deps/**/lib', \ 'deps/**/lib',
\ getcwd().'/deps/**/src', \ 'deps/**/src',
\ &g:path \ &g:path
\ ], ',') \ ], ',')
setlocal includeexpr=GetElixirFilename(v:fname) setlocal includeexpr=elixir#util#get_filename(v:fname)
setlocal suffixesadd=.ex,.exs,.eex,.erl,.yrl,.hrl setlocal suffixesadd=.ex,.exs,.eex,.erl,.yrl,.hrl
silent! setlocal formatoptions-=t formatoptions+=croqlj silent! setlocal formatoptions-=t formatoptions+=croqlj
let b:undo_ftplugin = 'setlocal sw< sts< et< isk< com< cms< path< inex< sua< '.
\ '| unlet! b:match_ignorecase b:match_words'
endif endif

View File

@ -1,22 +1,17 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'plantuml') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'plantuml') == -1
" Vim plugin file if exists('b:loaded_plantuml_plugin')
" Language: PlantUML
" Maintainer: Aaron C. Meadows < language name at shadowguarddev dot com>
" Version: 0.1
if exists("b:loaded_plantuml_plugin")
finish finish
endif endif
let b:loaded_plantuml_plugin = 1 let b:loaded_plantuml_plugin = 1
let s:cpo_save = &cpo let s:cpo_save = &cpo
set cpo&vim set cpo&vim
if !exists("g:plantuml_executable_script") if !exists('g:plantuml_executable_script')
let g:plantuml_executable_script="plantuml" let g:plantuml_executable_script='plantuml'
endif endif
if exists("loaded_matchit") if exists('loaded_matchit')
let b:match_ignorecase = 0 let b:match_ignorecase = 0
let b:match_words = let b:match_words =
\ '\(\<ref\>\|\<box\>\|\<opt\>\|\<alt\>\|\<group\>\|\<loop\>\|\<note\>\|\<legend\>\):\<else\>:\<end\>' . \ '\(\<ref\>\|\<box\>\|\<opt\>\|\<alt\>\|\<group\>\|\<loop\>\|\<note\>\|\<legend\>\):\<else\>:\<end\>' .
@ -27,7 +22,7 @@ if exists("loaded_matchit")
\ ',\<\while\>:\<endwhile\>' \ ',\<\while\>:\<endwhile\>'
endif endif
let &l:makeprg=g:plantuml_executable_script . " " . fnameescape(expand("%")) let &l:makeprg=g:plantuml_executable_script . ' ' . fnameescape(expand('%'))
setlocal comments=s1:/',mb:',ex:'/,:' commentstring=/'%s'/ formatoptions-=t formatoptions+=croql setlocal comments=s1:/',mb:',ex:'/,:' commentstring=/'%s'/ formatoptions-=t formatoptions+=croql

View File

@ -19,6 +19,8 @@ setlocal formatoptions=tcqro
" Enable autocompletion of hyphenated PowerShell commands, " Enable autocompletion of hyphenated PowerShell commands,
" e.g. Get-Content or Get-ADUser " e.g. Get-Content or Get-ADUser
setlocal iskeyword+=- setlocal iskeyword+=-
" MS applications (including PowerShell) require a Byte Order Mark (BOM) for UTF-8.
setlocal bomb
" Change the browse dialog on Win32 to show mainly PowerShell-related files " Change the browse dialog on Win32 to show mainly PowerShell-related files
if has("gui_win32") if has("gui_win32")

View File

@ -16,6 +16,8 @@ let b:did_ftplugin = 1
setlocal tw=0 setlocal tw=0
setlocal commentstring=#%s setlocal commentstring=#%s
setlocal formatoptions=tcqro setlocal formatoptions=tcqro
" MS applications (including PowerShell) require a Byte Order Mark (BOM) for UTF-8.
setlocal bomb
" Change the browse dialog on Win32 to show mainly PowerShell-related files " Change the browse dialog on Win32 to show mainly PowerShell-related files
if has("gui_win32") if has("gui_win32")

View File

@ -71,7 +71,7 @@ endif
function! s:query_path(root) abort function! s:query_path(root) abort
let code = "print $:.join %q{,}" let code = "print $:.join %q{,}"
if &shell =~# 'sh' if &shell =~# 'sh' && empty(&shellxquote)
let prefix = 'env PATH='.shellescape($PATH).' ' let prefix = 'env PATH='.shellescape($PATH).' '
else else
let prefix = '' let prefix = ''
@ -164,23 +164,23 @@ if !exists("g:no_plugin_maps") && !exists("g:no_ruby_maps")
nmap <buffer><script> <SID>: :<C-U> nmap <buffer><script> <SID>: :<C-U>
nmap <buffer><script> <SID>c: :<C-U><C-R>=v:count ? v:count : ''<CR> nmap <buffer><script> <SID>c: :<C-U><C-R>=v:count ? v:count : ''<CR>
nnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','b','n')<CR> nnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'b','n')<CR>
nnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','','n')<CR> nnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'','n')<CR>
nnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','b','n')<CR> nnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'b','n')<CR>
nnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','','n')<CR> nnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'','n')<CR>
xnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','b','v')<CR> xnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'b','v')<CR>
xnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','','v')<CR> xnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'','v')<CR>
xnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','b','v')<CR> xnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'b','v')<CR>
xnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','','v')<CR> xnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'','v')<CR>
nnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','b','n')<CR> nnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'b','n')<CR>
nnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','','n')<CR> nnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'','n')<CR>
nnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','b','n')<CR> nnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'b','n')<CR>
nnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','','n')<CR> nnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'','n')<CR>
xnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','b','v')<CR> xnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'b','v')<CR>
xnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','','v')<CR> xnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'','v')<CR>
xnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','b','v')<CR> xnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'b','v')<CR>
xnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','','v')<CR> xnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'','v')<CR>
let b:undo_ftplugin = b:undo_ftplugin let b:undo_ftplugin = b:undo_ftplugin
\."| sil! exe 'unmap <buffer> [[' | sil! exe 'unmap <buffer> ]]' | sil! exe 'unmap <buffer> []' | sil! exe 'unmap <buffer> ]['" \."| sil! exe 'unmap <buffer> [[' | sil! exe 'unmap <buffer> ]]' | sil! exe 'unmap <buffer> []' | sil! exe 'unmap <buffer> ]['"
@ -290,12 +290,13 @@ function! s:searchsyn(pattern, syn, flags, mode) abort
norm! gv norm! gv
endif endif
let i = 0 let i = 0
call map(a:syn, 'hlID(v:val)')
while i < cnt while i < cnt
let i = i + 1 let i = i + 1
let line = line('.') let line = line('.')
let col = col('.') let col = col('.')
let pos = search(a:pattern,'W'.a:flags) let pos = search(a:pattern,'W'.a:flags)
while pos != 0 && s:synname() !~# a:syn while pos != 0 && index(a:syn, s:synid()) < 0
let pos = search(a:pattern,'W'.a:flags) let pos = search(a:pattern,'W'.a:flags)
endwhile endwhile
if pos == 0 if pos == 0
@ -305,8 +306,8 @@ function! s:searchsyn(pattern, syn, flags, mode) abort
endwhile endwhile
endfunction endfunction
function! s:synname() abort function! s:synid() abort
return synIDattr(synID(line('.'),col('.'),0),'name') return synID(line('.'),col('.'),0)
endfunction endfunction
function! s:wrap_i(back,forward) abort function! s:wrap_i(back,forward) abort
@ -362,7 +363,7 @@ function! RubyCursorFile() abort
let pre = matchstr(strpart(getline('.'), 0, col('.')-1), '.*\f\@<!') let pre = matchstr(strpart(getline('.'), 0, col('.')-1), '.*\f\@<!')
let post = matchstr(strpart(getline('.'), col('.')), '\f\@!.*') let post = matchstr(strpart(getline('.'), col('.')), '\f\@!.*')
let ext = getline('.') =~# '^\s*\%(require\%(_relative\)\=\|autoload\)\>' && cfile !~# '\.rb$' ? '.rb' : '' let ext = getline('.') =~# '^\s*\%(require\%(_relative\)\=\|autoload\)\>' && cfile !~# '\.rb$' ? '.rb' : ''
if s:synname() ==# 'rubyConstant' if s:synid() ==# hlID('rubyConstant')
let cfile = substitute(cfile,'\.\w\+[?!=]\=$','','') let cfile = substitute(cfile,'\.\w\+[?!=]\=$','','')
let cfile = substitute(cfile,'::','/','g') let cfile = substitute(cfile,'::','/','g')
let cfile = substitute(cfile,'\(\u\+\)\(\u\l\)','\1_\2', 'g') let cfile = substitute(cfile,'\(\u\+\)\(\u\l\)','\1_\2', 'g')

View File

@ -13,4 +13,11 @@ runtime! ftplugin/html.vim
setlocal suffixesadd+=.vue setlocal suffixesadd+=.vue
if exists('g:loaded_ale')
let g:ale_linters = get(g:, 'ale_linters', {})
let g:ale_linters.vue = get(g:ale_linters, 'vue', ['eslint'])
let g:ale_linter_aliases = get(g:, 'ale_linter_aliases', {})
let g:ale_linter_aliases.vue = get(g:ale_linter_aliases, 'vue', 'javascript')
endif
endif endif

View File

@ -29,6 +29,11 @@ function GetAnsibleIndent(lnum)
if a:lnum == 1 || !prevnonblank(a:lnum-1) if a:lnum == 1 || !prevnonblank(a:lnum-1)
return 0 return 0
endif endif
if exists("g:ansible_unindent_after_newline")
if (a:lnum -1) != prevnonblank(a:lnum - 1)
return 0
endif
endif
let prevlnum = prevnonblank(a:lnum - 1) let prevlnum = prevnonblank(a:lnum - 1)
let maintain = indent(prevlnum) let maintain = indent(prevlnum)
let increase = maintain + &sw let increase = maintain + &sw

View File

@ -1,97 +1,48 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
setlocal nosmartindent if exists("b:did_indent")
setlocal indentexpr=elixir#indent()
setlocal indentkeys+=0),0],0=\|>,=->
setlocal indentkeys+=0=end,0=else,0=match,0=elsif,0=catch,0=after,0=rescue
if exists("b:did_indent") || exists("*elixir#indent")
finish finish
end end
let b:did_indent = 1 let b:did_indent = 1
let s:cpo_save = &cpo setlocal indentexpr=elixir#indent(v:lnum)
set cpo&vim
function! elixir#indent() setlocal indentkeys+=0=end,0=catch,0=rescue,0=after,0=else,=->,0},0],0),0=\|>,0=<>
" initiates the `old_ind` dictionary " TODO: @jbodah 2017-02-27: all operators should cause reindent when typed
let b:old_ind = get(b:, 'old_ind', {})
" initiates the `line` dictionary
let line = s:build_line(v:lnum)
if s:is_beginning_of_file(line) function! elixir#indent(lnum)
" Reset `old_ind` dictionary at the beginning of the file let lnum = a:lnum
let b:old_ind = {} let text = getline(lnum)
" At the start of the file use zero indent. let prev_nb_lnum = prevnonblank(lnum-1)
let prev_nb_text = getline(prev_nb_lnum)
call elixir#indent#debug("==> Indenting line " . lnum)
call elixir#indent#debug("text = '" . text . "'")
let handlers = [
\'top_of_file',
\'starts_with_end',
\'starts_with_mid_or_end_block_keyword',
\'following_trailing_do',
\'following_trailing_binary_operator',
\'starts_with_pipe',
\'starts_with_close_bracket',
\'starts_with_binary_operator',
\'inside_nested_construct',
\'starts_with_comment',
\'inside_generic_block'
\]
for handler in handlers
call elixir#indent#debug('testing handler elixir#indent#handle_'.handler)
let indent = function('elixir#indent#handle_'.handler)(lnum, text, prev_nb_lnum, prev_nb_text)
if indent != -1
call elixir#indent#debug('line '.lnum.': elixir#indent#handle_'.handler.' returned '.indent)
return indent
endif
endfor
call elixir#indent#debug("defaulting")
return 0 return 0
elseif !s:is_indentable_line(line)
" Keep last line indentation if the current line does not have an
" indentable syntax
return indent(line.last_non_blank.num)
else
" Calculates the indenation level based on the rules
" All the rules are defined in `autoload/elixir/indent.vim`
let ind = indent(line.last_non_blank.num)
call s:debug('>>> line = ' . string(line.current))
call s:debug('>>> ind = ' . ind)
let ind = s:indent('deindent_case_arrow', ind, line)
let ind = s:indent('indent_parenthesis', ind, line)
let ind = s:indent('indent_square_brackets', ind, line)
let ind = s:indent('indent_brackets', ind, line)
let ind = s:indent('deindent_opened_symbols', ind, line)
let ind = s:indent('indent_pipeline_assignment', ind, line)
let ind = s:indent('indent_pipeline_continuation', ind, line)
let ind = s:indent('indent_after_pipeline', ind, line)
let ind = s:indent('indent_assignment', ind, line)
let ind = s:indent('indent_ending_symbols', ind, line)
let ind = s:indent('indent_keywords', ind, line)
let ind = s:indent('deindent_keywords', ind, line)
let ind = s:indent('deindent_ending_symbols', ind, line)
let ind = s:indent('indent_case_arrow', ind, line)
let ind = s:indent('indent_ecto_queries', ind, line)
call s:debug('<<< final = ' . ind)
return ind
end
endfunction endfunction
function s:indent(rule, ind, line)
let Fn = function('elixir#indent#'.a:rule)
let ind = Fn(a:ind, a:line)
call s:debug(a:rule . ' = ' . ind)
return ind
endfunction
function s:debug(message)
if get(g:, 'elixir_indent_debug', 0)
echom a:message
end
endfunction
function! s:is_beginning_of_file(line)
return a:line.last_non_blank.num == 0
endfunction
function! s:is_indentable_line(line)
return elixir#util#is_indentable_at(a:line.current.num, 1)
endfunction
function! s:build_line(line)
let line = { 'current': {}, 'last': {}, 'last_non_blank': {} }
let line.current = s:new_line(a:line)
let line.last = s:new_line(line.current.num - 1)
let line.last_non_blank = s:new_line(prevnonblank(line.current.num - 1))
return line
endfunction
function! s:new_line(num)
return {
\ "num": a:num,
\ "text": getline(a:num)
\ }
endfunction
let &cpo = s:cpo_save
unlet s:cpo_save
endif endif

View File

@ -13,11 +13,7 @@ if exists('b:did_indent')
finish finish
endif endif
if !exists('g:haskell_indent_disable') if get(g:, 'haskell_indent_disable', 0)
let g:haskell_indent_disable = 0
endif
if g:haskell_indent_disable != 0
finish finish
endif endif
@ -68,7 +64,7 @@ if !exists('g:haskell_indent_guard')
endif endif
setlocal indentexpr=GetHaskellIndent() setlocal indentexpr=GetHaskellIndent()
setlocal indentkeys=0},0),0],!^F,o,O,0\=,0=where,0=let,0=deriving,<space> setlocal indentkeys=0},0),0],!^F,o,O,0=where,0=let,0=deriving,<space>
function! s:isInBlock(hlstack) function! s:isInBlock(hlstack)
return index(a:hlstack, 'haskellDelimiter') > -1 || index(a:hlstack, 'haskellParens') > -1 || index(a:hlstack, 'haskellBrackets') > -1 || index(a:hlstack, 'haskellBlock') > -1 || index(a:hlstack, 'haskellBlockComment') > -1 || index(a:hlstack, 'haskellPragma') > -1 return index(a:hlstack, 'haskellDelimiter') > -1 || index(a:hlstack, 'haskellParens') > -1 || index(a:hlstack, 'haskellBrackets') > -1 || index(a:hlstack, 'haskellBlock') > -1 || index(a:hlstack, 'haskellBlockComment') > -1 || index(a:hlstack, 'haskellPragma') > -1
@ -159,15 +155,6 @@ function! GetHaskellIndent()
return 0 return 0
endif endif
" " comment indentation
" if l:line =~ '^\s*--'
" let l:s = match(l:prevline, '-- ')
" if l:s > -1
" endif
" " if l:prevline =~ '^\s*--'
" " return match(l:prevline, '\S')
" " endif
" { foo :: Int " { foo :: Int
" >>, " >>,
" "
@ -258,12 +245,16 @@ function! GetHaskellIndent()
" where " where
" >>foo " >>foo
" "
if l:prevline =~ '\C\<where\>\s*$'
return match(l:prevline, '\S') + get(g:, 'haskell_indent_after_bare_where', &shiftwidth)
endif
" do " do
" >>foo " >>foo
" "
" foo = " foo =
" >>bar " >>bar
if l:prevline =~ '\C\(\<where\>\|\<do\>\|=\)\s*$' if l:prevline =~ '\C\(\<do\>\|=\)\s*$'
return match(l:prevline, '\S') + &shiftwidth return match(l:prevline, '\S') + &shiftwidth
endif endif
@ -279,7 +270,7 @@ function! GetHaskellIndent()
" case foo of " case foo of
" >>bar -> quux " >>bar -> quux
if l:prevline =~ '\C\<case\>.\+\<of\>\s*$' if l:prevline =~ '\C\<case\>.\+\<of\>\s*$'
if exists('g:haskell_indent_case_alternative') && g:haskell_indent_case_alternative if get(g:,'haskell_indent_case_alternative', 0)
return match(l:prevline, '\S') + &shiftwidth return match(l:prevline, '\S') + &shiftwidth
else else
return match(l:prevline, '\C\<case\>') + g:haskell_indent_case return match(l:prevline, '\C\<case\>') + g:haskell_indent_case
@ -319,6 +310,14 @@ function! GetHaskellIndent()
endif endif
endif endif
" foo :: Int
" -> Int
" >>>>-> Int
"
" foo :: Monad m
" => Functor f
" >>>>=> Int
"
" foo :: Int " foo :: Int
" -> Int " -> Int
" foo x " foo x
@ -327,9 +326,12 @@ function! GetHaskellIndent()
" :: Int " :: Int
" -> Int " -> Int
" foo x " foo x
if l:prevline =~ '^\s*[-=]>' && l:line !~ '^\s*[-=]>' if l:prevline =~ '^\s*[-=]>'
if l:line =~ '^\s*[-=]>'
return match(l:prevline, '[-=]')
else
if s:isInBlock(l:hlstack) if s:isInBlock(l:hlstack)
return match(l:prevline, '[^\s-=>]') return match(l:prevline, '[^-=]')
else else
let l:m = matchstr(l:line, '^\s*\zs\<\S\+\>\ze') let l:m = matchstr(l:line, '^\s*\zs\<\S\+\>\ze')
let l:l = l:prevline let l:l = l:prevline
@ -355,6 +357,7 @@ function! GetHaskellIndent()
return 0 return 0
endif endif
endif endif
endif
" | otherwise = ... " | otherwise = ...
" foo " foo
@ -403,12 +406,17 @@ function! GetHaskellIndent()
" in foo " in foo
" where bar " where bar
"
" or
"
" foo
" >>where
if l:line =~ '\C^\s*\<where\>' if l:line =~ '\C^\s*\<where\>'
if match(l:prevline, '\C^\s\+in\s\+') == 0 if match(l:prevline, '\C^\s\+in\s\+') == 0
return match(l:prevline, 'in') - g:haskell_indent_in return match(l:prevline, 'in') - g:haskell_indent_in
endif endif
return match(l:prevline, '\S') + &shiftwidth return match(l:prevline, '\S') + get(g:, 'haskell_indent_before_where', &shiftwidth)
endif endif
" let x = 1 " let x = 1

View File

@ -4,7 +4,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') ==
" Language: Javascript " Language: Javascript
" Maintainer: Chris Paul ( https://github.com/bounceme ) " Maintainer: Chris Paul ( https://github.com/bounceme )
" URL: https://github.com/pangloss/vim-javascript " URL: https://github.com/pangloss/vim-javascript
" Last Change: March 9, 2017 " Last Change: May 16, 2017
" Only load this indent file when no other was loaded. " Only load this indent file when no other was loaded.
if exists('b:did_indent') if exists('b:did_indent')
@ -12,6 +12,10 @@ if exists('b:did_indent')
endif endif
let b:did_indent = 1 let b:did_indent = 1
" indent correctly if inside <script>
" vim/vim@690afe1 for the switch from cindent
let b:html_indent_script1 = 'inc'
" Now, set up our indentation expression and keys that trigger it. " Now, set up our indentation expression and keys that trigger it.
setlocal indentexpr=GetJavascriptIndent() setlocal indentexpr=GetJavascriptIndent()
setlocal autoindent nolisp nosmartindent setlocal autoindent nolisp nosmartindent
@ -23,6 +27,13 @@ setlocal indentkeys+=0],0)
let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<' let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<'
" Regex of syntax group names that are or delimit string or are comments.
let b:syng_strcom = get(b:,'syng_strcom','string\|comment\|regex\|special\|doc\|template\%(braces\)\@!')
let b:syng_str = get(b:,'syng_str','string\|template\|special')
" template strings may want to be excluded when editing graphql:
" au! Filetype javascript let b:syng_str = '^\%(.*template\)\@!.*string\|special'
" au! Filetype javascript let b:syng_strcom = '^\%(.*template\)\@!.*string\|comment\|regex\|special\|doc'
" Only define the function once. " Only define the function once.
if exists('*GetJavascriptIndent') if exists('*GetJavascriptIndent')
finish finish
@ -38,7 +49,7 @@ if exists('*shiftwidth')
endfunction endfunction
else else
function s:sw() function s:sw()
return &l:shiftwidth == 0 ? &l:tabstop : &l:shiftwidth return &l:shiftwidth ? &l:shiftwidth : &l:tabstop
endfunction endfunction
endif endif
@ -46,6 +57,10 @@ endif
" matches before pos. " matches before pos.
let s:z = has('patch-7.4.984') ? 'z' : '' let s:z = has('patch-7.4.984') ? 'z' : ''
let s:syng_com = 'comment\|doc'
" Expression used to check whether we should skip a match with searchpair().
let s:skip_expr = "s:syn_at(line('.'),col('.')) =~? b:syng_strcom"
" searchpair() wrapper " searchpair() wrapper
if has('reltime') if has('reltime')
function s:GetPair(start,end,flags,skip,time,...) function s:GetPair(start,end,flags,skip,time,...)
@ -57,56 +72,80 @@ else
endfunction endfunction
endif endif
" Regex of syntax group names that are or delimit string or are comments. function s:syn_at(l,c)
let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template\%(braces\)\@!' let pos = join([a:l,a:c],',')
let s:syng_str = 'string\|template\|special' if has_key(s:synId_cache,pos)
let s:syng_com = 'comment\|doc' return s:synId_cache[pos]
" Expression used to check whether we should skip a match with searchpair(). endif
let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" let s:synId_cache[pos] = synIDattr(synID(a:l,a:c,0),'name')
return s:synId_cache[pos]
function s:parse_cino(f) abort
return float2nr(eval(substitute(substitute(join(split(
\ matchstr(&cino,'\C.*'.a:f.'\zs[^,]*'), 's',1), '*'.s:W)
\ , '^-\=\zs\*','',''), '^-\=\zs\.','0.','')))
endfunction endfunction
function s:parse_cino(f)
let [cin, divider, n] = [strridx(&cino,a:f), 0, '']
if cin == -1
return
endif
let [sign, cstr] = &cino[cin+1] ==# '-' ? [-1, &cino[cin+2:]] : [1, &cino[cin+1:]]
for c in split(cstr,'\zs')
if c ==# '.' && !divider
let divider = 1
elseif c ==# 's'
if n is ''
let n = s:W
else
let n = str2nr(n) * s:W
endif
break
elseif c =~ '\d'
let [n, divider] .= [c, 0]
else
break
endif
endfor
return sign * str2nr(n) / max([str2nr(divider),1])
endfunction
" Optimized {skip} expr, used only once per GetJavascriptIndent() call
function s:skip_func() function s:skip_func()
if getline('.') =~ '\%<'.col('.').'c\/.\{-}\/\|\%>'.col('.').'c[''"]\|\\$' if s:topCol == 1 || line('.') < s:scriptTag
return eval(s:skip_expr) return {} " E728, used as limit condition for loops and searchpair()
endif
let s:topCol = col('.')
if getline('.') =~ '\%<'.s:topCol.'c\/.\{-}\/\|\%>'.s:topCol.'c[''"]\|\\$'
if eval(s:skip_expr)
let s:topCol = 0
endif
return !s:topCol
elseif s:checkIn || search('\m`\|\${\|\*\/','nW'.s:z,s:looksyn) elseif s:checkIn || search('\m`\|\${\|\*\/','nW'.s:z,s:looksyn)
let s:checkIn = eval(s:skip_expr) let s:checkIn = eval(s:skip_expr)
if s:checkIn
let s:topCol = 0
endif
endif endif
let s:looksyn = line('.') let s:looksyn = line('.')
return s:checkIn return s:checkIn
endfunction endfunction
function s:alternatePair(stop) function s:alternatePair()
let pos = getpos('.')[1:2] let [l:pos, pat, l:for] = [getpos('.'), '[][(){};]', 3]
let pat = '[][(){};]' while search('\m'.pat,'bW')
while search('\m'.pat,'bW',a:stop)
if s:skip_func() | continue | endif if s:skip_func() | continue | endif
let idx = stridx('])};',s:looking_at()) let idx = stridx('])};',s:looking_at())
if idx is 3 | let pat = '[{}()]' | continue | endif if idx is 3
if idx + 1 if l:for is 1
if s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,a:stop) <= 0 return s:GetPair('{','}','bW','s:skip_func()',2000) > 0 || setpos('.',l:pos)
endif
let [pat, l:for] = ['[{}();]', l:for - 1]
elseif idx + 1
if s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000) < 1
break break
endif endif
else else
return return
endif endif
endwhile endwhile
call call('cursor',pos) call setpos('.',l:pos)
endfunction
function s:save_pos(f,...)
let l:pos = getpos('.')[1:2]
let ret = call(a:f,a:000)
call call('cursor',l:pos)
return ret
endfunction
function s:syn_at(l,c)
return synIDattr(synID(a:l,a:c,0),'name')
endfunction endfunction
function s:looking_at() function s:looking_at()
@ -118,10 +157,10 @@ function s:token()
endfunction endfunction
function s:previous_token() function s:previous_token()
let l:pos = getpos('.')[1:2] let l:pos = getpos('.')
if search('\m\k\{1,}\|\S','ebW') if search('\m\k\{1,}\|\S','ebW')
if (getline('.')[col('.')-2:col('.')-1] == '*/' || line('.') != l:pos[0] && if (strpart(getline('.'),col('.')-2,2) == '*/' || line('.') != l:pos[1] &&
\ getline('.') =~ '\%<'.col('.').'c\/\/') && s:syn_at(line('.'),col('.')) =~? s:syng_com \ getline('.')[:col('.')-1] =~ '\/\/') && s:syn_at(line('.'),col('.')) =~? s:syng_com
while search('\m\S\ze\_s*\/[/*]','bW') while search('\m\S\ze\_s*\/[/*]','bW')
if s:syn_at(line('.'),col('.')) !~? s:syng_com if s:syn_at(line('.'),col('.')) !~? s:syng_com
return s:token() return s:token()
@ -130,51 +169,66 @@ function s:previous_token()
else else
return s:token() return s:token()
endif endif
call setpos('.',l:pos)
endif endif
call call('cursor',l:pos)
return '' return ''
endfunction endfunction
for s:__ in ['__previous_token','__IsBlock']
function s:{s:__}(...)
let l:pos = getpos('.')
try
return call('s:'.matchstr(expand('<sfile>'),'.*__\zs\w\+'),a:000)
catch
finally
call setpos('.',l:pos)
endtry
endfunction
endfor
function s:expr_col() function s:expr_col()
if getline('.')[col('.')-2] == ':' if getline('.')[col('.')-2] == ':'
return 1 return 1
endif endif
let bal = 0 let [bal, l:pos] = [0, getpos('.')]
while search('\m[{}?:;]','bW') while bal < 1 && search('\m[{}?:;]','bW',s:scriptTag)
if eval(s:skip_expr) | continue | endif if eval(s:skip_expr)
" switch (looking_at()) continue
exe { '}': "if s:GetPair('{','}','bW',s:skip_expr,200) <= 0 | return | endif", elseif s:looking_at() == ':'
\ ';': "return", let bal -= strpart(getline('.'),col('.')-2,3) !~ '::'
\ '{': "return getpos('.')[1:2] != b:js_cache[1:] && !s:IsBlock()", elseif s:looking_at() == '?'
\ ':': "let bal -= getline('.')[max([col('.')-2,0]):col('.')] !~ '::'", let bal += 1
\ '?': "let bal += 1 | if bal > 0 | return 1 | endif" }[s:looking_at()] elseif s:looking_at() == '{' && getpos('.')[1:2] != b:js_cache[1:] && !s:IsBlock()
let bal = 1
elseif s:looking_at() != '}' || s:GetPair('{','}','bW',s:skip_expr,200) < 1
break
endif
endwhile endwhile
call setpos('.',l:pos)
return max([bal,0])
endfunction endfunction
" configurable regexes that define continuation lines, not including (, {, or [. " configurable regexes that define continuation lines, not including (, {, or [.
let s:opfirst = '^' . get(g:,'javascript_opfirst', let s:opfirst = '^' . get(g:,'javascript_opfirst',
\ '\C\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)') \ '\C\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)')
let s:continuation = get(g:,'javascript_continuation', let s:continuation = get(g:,'javascript_continuation',
\ '\C\%([-+<>=,.~!?/*^%|&:]\|\<\%(typeof\|new\|delete\|void\|in\|instanceof\|await\)\)') . '$' \ '\C\%([<=,.~!?/*^%|&:]\|+\@<!+\|-\@<!-\|=\@<!>\|\<\%(typeof\|new\|delete\|void\|in\|instanceof\|await\)\)') . '$'
function s:continues(ln,con) function s:continues(ln,con)
if !cursor(a:ln, match(' '.a:con,s:continuation)) let token = matchstr(a:con[-15:],s:continuation)
let teol = s:looking_at() if strlen(token)
if teol == '/' call cursor(a:ln,strlen(a:con))
return s:syn_at(line('.'),col('.')) !~? 'regex' if token =~ '[/>]'
elseif teol =~ '[-+>]' return s:syn_at(a:ln,col('.')) !~? (token == '>' ? 'jsflow\|^html' : 'regex')
return getline('.')[col('.')-2] != tr(teol,'>','=') elseif token =~ '\l'
elseif teol =~ '\l'
return s:previous_token() != '.' return s:previous_token() != '.'
elseif teol == ':' elseif token == ':'
return s:expr_col() return s:expr_col()
endif endif
return 1 return 1
endif endif
endfunction endfunction
" get the line of code stripped of comments and move cursor to the last
" non-comment char.
function s:Trim(ln) function s:Trim(ln)
let pline = substitute(getline(a:ln),'\s*$','','') let pline = substitute(getline(a:ln),'\s*$','','')
let l:max = max([strridx(pline,'//'), strridx(pline,'/*')]) let l:max = max([strridx(pline,'//'), strridx(pline,'/*')])
@ -183,24 +237,28 @@ function s:Trim(ln)
let l:max = max([strridx(pline,'//'), strridx(pline,'/*')]) let l:max = max([strridx(pline,'//'), strridx(pline,'/*')])
let pline = substitute(pline[:-2],'\s*$','','') let pline = substitute(pline[:-2],'\s*$','','')
endwhile endwhile
return pline is '' || cursor(a:ln,strlen(pline)) ? pline : pline return pline
endfunction endfunction
" Find line above 'lnum' that isn't empty or in a comment " Find line above 'lnum' that isn't empty or in a comment
function s:PrevCodeLine(lnum) function s:PrevCodeLine(lnum)
let [l:pos, l:n] = [getpos('.')[1:2], prevnonblank(a:lnum)] let l:n = prevnonblank(a:lnum)
while l:n while l:n
if getline(l:n) =~ '^\s*\/[/*]' if getline(l:n) =~ '^\s*\/[/*]'
if (stridx(getline(l:n),'`') > 0 || getline(l:n-1)[-1:] == '\') &&
\ s:syn_at(l:n,1) =~? b:syng_str
break
endif
let l:n = prevnonblank(l:n-1) let l:n = prevnonblank(l:n-1)
elseif stridx(getline(l:n), '*/') + 1 && s:syn_at(l:n,1) =~? s:syng_com elseif stridx(getline(l:n), '*/') + 1 && s:syn_at(l:n,1) =~? s:syng_com
let l:pos = getpos('.')
call cursor(l:n,1) call cursor(l:n,1)
keepjumps norm! [* let l:n = search('\m\S\_s*\/\*','nbW')
let l:n = search('\m\S','nbW') call setpos('.',l:pos)
else else
break break
endif endif
endwhile endwhile
call call('cursor',l:pos)
return l:n return l:n
endfunction endfunction
@ -210,7 +268,7 @@ function s:Balanced(lnum)
let l:line = getline(a:lnum) let l:line = getline(a:lnum)
let pos = match(l:line, '[][(){}]', 0) let pos = match(l:line, '[][(){}]', 0)
while pos != -1 while pos != -1
if s:syn_at(a:lnum,pos + 1) !~? s:syng_strcom if s:syn_at(a:lnum,pos + 1) !~? b:syng_strcom
let l:open += match(' ' . l:line[pos],'[[({]') let l:open += match(' ' . l:line[pos],'[[({]')
if l:open < 0 if l:open < 0
return return
@ -225,6 +283,7 @@ endfunction
function s:OneScope(lnum) function s:OneScope(lnum)
let pline = s:Trim(a:lnum) let pline = s:Trim(a:lnum)
call cursor(a:lnum,strlen(pline))
let kw = 'else do' let kw = 'else do'
if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0
if s:previous_token() =~# '^\%(await\|each\)$' if s:previous_token() =~# '^\%(await\|each\)$'
@ -235,7 +294,27 @@ function s:OneScope(lnum)
endif endif
endif endif
return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 && return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 &&
\ s:save_pos('s:previous_token') != '.' \ s:__previous_token() != '.' && !s:doWhile()
endfunction
function s:doWhile()
if expand('<cword>') ==# 'while'
let [bal, l:pos] = [0, getpos('.')]
call search('\m\<','cbW')
while bal < 1 && search('\m\C[{}]\|\<\%(do\|while\)\>','bW')
if eval(s:skip_expr)
continue
elseif s:looking_at() ==# 'd'
let bal += s:__IsBlock(1)
elseif s:looking_at() ==# 'w'
let bal -= s:__previous_token() != '.'
elseif s:looking_at() != '}' || s:GetPair('{','}','bW',s:skip_expr,200) < 1
break
endif
endwhile
call setpos('.',l:pos)
return max([bal,0])
endif
endfunction endfunction
" returns braceless levels started by 'i' and above lines * &sw. 'num' is the " returns braceless levels started by 'i' and above lines * &sw. 'num' is the
@ -259,32 +338,36 @@ function s:iscontOne(i,num,cont)
endfunction endfunction
" https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader
function s:IsBlock() function s:IsBlock(...)
if s:looking_at() == '{' if a:0 || s:looking_at() == '{'
let l:n = line('.') let l:n = line('.')
let char = s:previous_token() let char = s:previous_token()
if match(s:stack,'\cxml\|jsx') + 1 && s:syn_at(line('.'),col('.')-1) =~? 'xml\|jsx' if match(s:stack,'\cxml\|jsx') + 1 && s:syn_at(line('.'),col('.')-1) =~? 'xml\|jsx'
return char != '{' return char != '{'
elseif char =~ '\k' elseif char =~ '\k'
if char ==# 'type' if char ==# 'type'
return s:previous_token() !~# '^\%(im\|ex\)port$' return s:__previous_token() !~# '^\%(im\|ex\)port$'
endif endif
return index(split('return const let import export extends yield default delete var await void typeof throw case new of in instanceof') return index(split('return const let import export extends yield default delete var await void typeof throw case new of in instanceof')
\ ,char) < (line('.') != l:n) || s:save_pos('s:previous_token') == '.' \ ,char) < (line('.') != l:n) || s:__previous_token() == '.'
elseif char == '>' elseif char == '>'
return getline('.')[col('.')-2] == '=' || s:syn_at(line('.'),col('.')) =~? '^jsflow' return getline('.')[col('.')-2] == '=' || s:syn_at(line('.'),col('.')) =~? 'jsflow\|^html'
elseif char == '*'
return s:__previous_token() == ':'
elseif char == ':' elseif char == ':'
return !s:save_pos('s:expr_col') return !s:expr_col()
elseif char == '/' elseif char == '/'
return s:syn_at(line('.'),col('.')) =~? 'regex' return s:syn_at(line('.'),col('.')) =~? 'regex'
endif endif
return char !~ '[=~!<*,?^%|&([]' && return char !~ '[=~!<,.?^%|&([]' &&
\ (char !~ '[-+]' || l:n != line('.') && getline('.')[col('.')-2] == char) \ (char !~ '[-+]' || l:n != line('.') && getline('.')[col('.')-2] == char)
endif endif
endfunction endfunction
function GetJavascriptIndent() function GetJavascriptIndent()
let b:js_cache = get(b:,'js_cache',[0,0,0]) let b:js_cache = get(b:,'js_cache',[0,0,0])
let s:synId_cache = {}
" Get the current line. " Get the current line.
call cursor(v:lnum,1) call cursor(v:lnum,1)
let l:line = getline('.') let l:line = getline('.')
@ -299,7 +382,7 @@ function GetJavascriptIndent()
elseif l:line !~ '^\s*\/[/*]' elseif l:line !~ '^\s*\/[/*]'
return -1 return -1
endif endif
elseif syns =~? s:syng_str elseif syns =~? b:syng_str
if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1) if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1)
let b:js_cache[0] = v:lnum let b:js_cache[0] = v:lnum
endif endif
@ -319,37 +402,33 @@ function GetJavascriptIndent()
endif endif
" the containing paren, bracket, or curly. Many hacks for performance " the containing paren, bracket, or curly. Many hacks for performance
let idx = index([']',')','}'],l:line[0]) let [ s:scriptTag, idx ] = [ get(get(b:,'hi_indent',{}),'blocklnr'),
\ index([']',')','}'],l:line[0]) ]
if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum &&
\ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum)) \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum))
call call('cursor',b:js_cache[1:]) call call('cursor',b:js_cache[2] ? b:js_cache[1:] : [0,0])
else else
let [s:looksyn, s:checkIn, top] = [v:lnum - 1, 0, (!indent(l:lnum) && let [s:looksyn, s:checkIn, s:topCol] = [v:lnum - 1, 0, 0]
\ s:syn_at(l:lnum,1) !~? s:syng_str) * l:lnum]
if idx + 1 if idx + 1
call s:GetPair(['\[','(','{'][idx],'])}'[idx],'bW','s:skip_func()',2000,top) call s:GetPair(['\[','(','{'][idx],'])}'[idx],'bW','s:skip_func()',2000)
elseif getline(v:lnum) !~ '^\S' && syns =~? 'block' elseif getline(v:lnum) !~ '^\S' && syns =~? 'block'
call s:GetPair('{','}','bW','s:skip_func()',2000,top) call s:GetPair('{','}','bW','s:skip_func()',2000)
else else
call s:alternatePair(top) call s:alternatePair()
endif endif
endif endif
let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [0,0] : getpos('.')[1:2]) let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [s:scriptTag,0] : getpos('.')[1:2])
let num = b:js_cache[1] let num = b:js_cache[1]
let [s:W, isOp, bL, switch_offset] = [s:sw(),0,0,0] let [s:W, isOp, bL, switch_offset] = [s:sw(),0,0,0]
if !num || s:IsBlock() if !b:js_cache[2] || s:IsBlock()
let ilnum = line('.') let ilnum = line('.')
let pline = s:save_pos('s:Trim',l:lnum) let pline = s:Trim(l:lnum)
if num && s:looking_at() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 if b:js_cache[2] && s:looking_at() == ')' && s:GetPair('(',')','bW',s:skip_expr,100) > 0
let num = ilnum == num ? line('.') : num let num = ilnum == num ? line('.') : num
if idx < 0 && s:previous_token() ==# 'switch' && s:previous_token() != '.' if idx < 0 && s:previous_token() ==# 'switch' && s:previous_token() != '.'
if &cino !~ ':' let switch_offset = &cino !~ ':' ? s:W : max([-indent(num),s:parse_cino(':')])
let switch_offset = s:W
else
let switch_offset = max([-indent(num),s:parse_cino(':')])
endif
if pline[-1:] != '.' && l:line =~# '^\%(default\|case\)\>' if pline[-1:] != '.' && l:line =~# '^\%(default\|case\)\>'
return indent(num) + switch_offset return indent(num) + switch_offset
endif endif
@ -362,12 +441,13 @@ function GetJavascriptIndent()
endif endif
elseif idx < 0 && getline(b:js_cache[1])[b:js_cache[2]-1] == '(' && &cino =~ '(' elseif idx < 0 && getline(b:js_cache[1])[b:js_cache[2]-1] == '(' && &cino =~ '('
let pval = s:parse_cino('(') let pval = s:parse_cino('(')
return !pval ? (s:parse_cino('w') ? 0 : -(!!search('\m\S','W'.s:z,num))) + virtcol('.') : return !pval || !search('\m\S','nbW',num) && !s:parse_cino('U') ?
\ max([indent('.') + pval + (s:GetPair('(',')','nbrmW',s:skip_expr,100,num) * s:W),0]) \ (s:parse_cino('w') ? 0 : -!!search('\m\S','W'.s:z,num)) + virtcol('.') :
\ max([indent('.') + pval + s:GetPair('(',')','nbrmW',s:skip_expr,100,num) * s:W,0])
endif endif
" main return " main return
if l:line =~ '^\%([])}]\||}\)' if l:line =~ '^[])}]\|^|}'
return max([indent(num),0]) return max([indent(num),0])
elseif num elseif num
return indent(num) + s:W + switch_offset + bL + isOp return indent(num) + s:W + switch_offset + bL + isOp

View File

@ -1,6 +1,6 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'plantuml') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'plantuml') == -1
if exists("b:did_indent") if exists('b:did_indent')
finish finish
endif endif
let b:did_indent = 1 let b:did_indent = 1
@ -9,7 +9,7 @@ setlocal indentexpr=GetPlantUMLIndent()
setlocal indentkeys=o,O,<CR>,<:>,!^F,0end,0else,} setlocal indentkeys=o,O,<CR>,<:>,!^F,0end,0else,}
" only define the indent code once " only define the indent code once
if exists("*GetPlantUMLIndent") if exists('*GetPlantUMLIndent')
finish finish
endif endif

View File

@ -49,22 +49,21 @@ set cpo&vim
" 1. Variables {{{1 " 1. Variables {{{1
" ============ " ============
" Regex of syntax group names that are or delimit strings/symbols or are comments. " Syntax group names that are strings.
let s:syng_strcom = '\<ruby\%(Regexp\|RegexpDelimiter\|RegexpEscape' .
\ '\|Symbol\|String\|StringDelimiter\|StringEscape\|ASCIICode' .
\ '\|Interpolation\|InterpolationDelimiter\|NoInterpolation\|Comment\|Documentation\)\>'
" Regex of syntax group names that are strings.
let s:syng_string = let s:syng_string =
\ '\<ruby\%(String\|Interpolation\|InterpolationDelimiter\|NoInterpolation\|StringEscape\)\>' \ ['String', 'Interpolation', 'InterpolationDelimiter', 'NoInterpolation', 'StringEscape']
" Regex of syntax group names that are strings or documentation. " Syntax group names that are strings or documentation.
let s:syng_stringdoc = let s:syng_stringdoc = s:syng_string + ['Documentation']
\ '\<ruby\%(String\|Interpolation\|InterpolationDelimiter\|NoInterpolation\|StringEscape\|Documentation\)\>'
" Syntax group names that are or delimit strings/symbols/regexes or are comments.
let s:syng_strcom = s:syng_stringdoc +
\ ['Regexp', 'RegexpDelimiter', 'RegexpEscape',
\ 'Symbol', 'StringDelimiter', 'ASCIICode', 'Comment']
" Expression used to check whether we should skip a match with searchpair(). " Expression used to check whether we should skip a match with searchpair().
let s:skip_expr = let s:skip_expr =
\ "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'" \ 'index(map('.string(s:syng_strcom).',"hlID(''ruby''.v:val)"), synID(line("."),col("."),1)) >= 0'
" Regex used for words that, at the start of a line, add a level of indent. " Regex used for words that, at the start of a line, add a level of indent.
let s:ruby_indent_keywords = let s:ruby_indent_keywords =
@ -152,7 +151,7 @@ let s:leading_operator_regex = '^\s*[.]'
" 2. GetRubyIndent Function {{{1 " 2. GetRubyIndent Function {{{1
" ========================= " =========================
function GetRubyIndent(...) function! GetRubyIndent(...) abort
" 2.1. Setup {{{2 " 2.1. Setup {{{2
" ---------- " ----------
@ -255,7 +254,7 @@ endfunction
" 3. Indenting Logic Callbacks {{{1 " 3. Indenting Logic Callbacks {{{1
" ============================ " ============================
function! s:AccessModifier(cline_info) function! s:AccessModifier(cline_info) abort
let info = a:cline_info let info = a:cline_info
" If this line is an access modifier keyword, align according to the closest " If this line is an access modifier keyword, align according to the closest
@ -279,7 +278,7 @@ function! s:AccessModifier(cline_info)
return -1 return -1
endfunction endfunction
function! s:ClosingBracketOnEmptyLine(cline_info) function! s:ClosingBracketOnEmptyLine(cline_info) abort
let info = a:cline_info let info = a:cline_info
" If we got a closing bracket on an empty line, find its match and indent " If we got a closing bracket on an empty line, find its match and indent
@ -308,7 +307,7 @@ function! s:ClosingBracketOnEmptyLine(cline_info)
return -1 return -1
endfunction endfunction
function! s:BlockComment(cline_info) function! s:BlockComment(cline_info) abort
" If we have a =begin or =end set indent to first column. " If we have a =begin or =end set indent to first column.
if match(a:cline_info.cline, '^\s*\%(=begin\|=end\)$') != -1 if match(a:cline_info.cline, '^\s*\%(=begin\|=end\)$') != -1
return 0 return 0
@ -316,7 +315,7 @@ function! s:BlockComment(cline_info)
return -1 return -1
endfunction endfunction
function! s:DeindentingKeyword(cline_info) function! s:DeindentingKeyword(cline_info) abort
let info = a:cline_info let info = a:cline_info
" If we have a deindenting keyword, find its match and indent to its level. " If we have a deindenting keyword, find its match and indent to its level.
@ -357,7 +356,7 @@ function! s:DeindentingKeyword(cline_info)
return -1 return -1
endfunction endfunction
function! s:MultilineStringOrLineComment(cline_info) function! s:MultilineStringOrLineComment(cline_info) abort
let info = a:cline_info let info = a:cline_info
" If we are in a multi-line string or line-comment, don't do anything to it. " If we are in a multi-line string or line-comment, don't do anything to it.
@ -367,7 +366,7 @@ function! s:MultilineStringOrLineComment(cline_info)
return -1 return -1
endfunction endfunction
function! s:ClosingHeredocDelimiter(cline_info) function! s:ClosingHeredocDelimiter(cline_info) abort
let info = a:cline_info let info = a:cline_info
" If we are at the closing delimiter of a "<<" heredoc-style string, set the " If we are at the closing delimiter of a "<<" heredoc-style string, set the
@ -381,7 +380,7 @@ function! s:ClosingHeredocDelimiter(cline_info)
return -1 return -1
endfunction endfunction
function! s:LeadingOperator(cline_info) function! s:LeadingOperator(cline_info) abort
" If the current line starts with a leading operator, add a level of indent. " If the current line starts with a leading operator, add a level of indent.
if s:Match(a:cline_info.clnum, s:leading_operator_regex) if s:Match(a:cline_info.clnum, s:leading_operator_regex)
return indent(s:GetMSL(a:cline_info.clnum)) + a:cline_info.sw return indent(s:GetMSL(a:cline_info.clnum)) + a:cline_info.sw
@ -389,7 +388,7 @@ function! s:LeadingOperator(cline_info)
return -1 return -1
endfunction endfunction
function! s:EmptyInsideString(pline_info) function! s:EmptyInsideString(pline_info) abort
" If the line is empty and inside a string (plnum would not be the real " If the line is empty and inside a string (plnum would not be the real
" prevnonblank in that case), use the previous line's indent " prevnonblank in that case), use the previous line's indent
let info = a:pline_info let info = a:pline_info
@ -400,7 +399,7 @@ function! s:EmptyInsideString(pline_info)
return -1 return -1
endfunction endfunction
function! s:StartOfFile(pline_info) function! s:StartOfFile(pline_info) abort
" At the start of the file use zero indent. " At the start of the file use zero indent.
if a:pline_info.plnum == 0 if a:pline_info.plnum == 0
return 0 return 0
@ -408,7 +407,7 @@ function! s:StartOfFile(pline_info)
return -1 return -1
endfunction endfunction
function! s:AfterAccessModifier(pline_info) function! s:AfterAccessModifier(pline_info) abort
let info = a:pline_info let info = a:pline_info
if g:ruby_indent_access_modifier_style == 'indent' if g:ruby_indent_access_modifier_style == 'indent'
@ -434,7 +433,7 @@ endfunction
" puts "foo" " puts "foo"
" end " end
" "
function! s:ContinuedLine(pline_info) function! s:ContinuedLine(pline_info) abort
let info = a:pline_info let info = a:pline_info
let col = s:Match(info.plnum, s:ruby_indent_keywords) let col = s:Match(info.plnum, s:ruby_indent_keywords)
@ -456,7 +455,7 @@ function! s:ContinuedLine(pline_info)
return -1 return -1
endfunction endfunction
function! s:AfterBlockOpening(pline_info) function! s:AfterBlockOpening(pline_info) abort
let info = a:pline_info let info = a:pline_info
" If the previous line ended with a block opening, add a level of indent. " If the previous line ended with a block opening, add a level of indent.
@ -482,7 +481,7 @@ function! s:AfterBlockOpening(pline_info)
return -1 return -1
endfunction endfunction
function! s:AfterLeadingOperator(pline_info) function! s:AfterLeadingOperator(pline_info) abort
" If the previous line started with a leading operator, use its MSL's level " If the previous line started with a leading operator, use its MSL's level
" of indent " of indent
if s:Match(a:pline_info.plnum, s:leading_operator_regex) if s:Match(a:pline_info.plnum, s:leading_operator_regex)
@ -491,7 +490,7 @@ function! s:AfterLeadingOperator(pline_info)
return -1 return -1
endfunction endfunction
function! s:AfterHangingSplat(pline_info) function! s:AfterHangingSplat(pline_info) abort
let info = a:pline_info let info = a:pline_info
" If the previous line ended with the "*" of a splat, add a level of indent " If the previous line ended with the "*" of a splat, add a level of indent
@ -501,7 +500,7 @@ function! s:AfterHangingSplat(pline_info)
return -1 return -1
endfunction endfunction
function! s:AfterUnbalancedBracket(pline_info) function! s:AfterUnbalancedBracket(pline_info) abort
let info = a:pline_info let info = a:pline_info
" If the previous line contained unclosed opening brackets and we are still " If the previous line contained unclosed opening brackets and we are still
@ -541,7 +540,7 @@ function! s:AfterUnbalancedBracket(pline_info)
return -1 return -1
endfunction endfunction
function! s:AfterEndKeyword(pline_info) function! s:AfterEndKeyword(pline_info) abort
let info = a:pline_info let info = a:pline_info
" If the previous line ended with an "end", match that "end"s beginning's " If the previous line ended with an "end", match that "end"s beginning's
" indent. " indent.
@ -562,7 +561,7 @@ function! s:AfterEndKeyword(pline_info)
return -1 return -1
endfunction endfunction
function! s:AfterIndentKeyword(pline_info) function! s:AfterIndentKeyword(pline_info) abort
let info = a:pline_info let info = a:pline_info
let col = s:Match(info.plnum, s:ruby_indent_keywords) let col = s:Match(info.plnum, s:ruby_indent_keywords)
@ -589,7 +588,7 @@ function! s:AfterIndentKeyword(pline_info)
return -1 return -1
endfunction endfunction
function! s:PreviousNotMSL(msl_info) function! s:PreviousNotMSL(msl_info) abort
let info = a:msl_info let info = a:msl_info
" If the previous line wasn't a MSL " If the previous line wasn't a MSL
@ -608,7 +607,7 @@ function! s:PreviousNotMSL(msl_info)
return -1 return -1
endfunction endfunction
function! s:IndentingKeywordInMSL(msl_info) function! s:IndentingKeywordInMSL(msl_info) abort
let info = a:msl_info let info = a:msl_info
" If the MSL line had an indenting keyword in it, add a level of indent. " If the MSL line had an indenting keyword in it, add a level of indent.
" TODO: this does not take into account contrived things such as " TODO: this does not take into account contrived things such as
@ -632,7 +631,7 @@ function! s:IndentingKeywordInMSL(msl_info)
return -1 return -1
endfunction endfunction
function! s:ContinuedHangingOperator(msl_info) function! s:ContinuedHangingOperator(msl_info) abort
let info = a:msl_info let info = a:msl_info
" If the previous line ended with [*+/.,-=], but wasn't a block ending or a " If the previous line ended with [*+/.,-=], but wasn't a block ending or a
@ -652,32 +651,37 @@ endfunction
" 4. Auxiliary Functions {{{1 " 4. Auxiliary Functions {{{1
" ====================== " ======================
function! s:IsInRubyGroup(groups, lnum, col) abort
let ids = map(copy(a:groups), 'hlID("ruby".v:val)')
return index(ids, synID(a:lnum, a:col, 1)) >= 0
endfunction
" Check if the character at lnum:col is inside a string, comment, or is ascii. " Check if the character at lnum:col is inside a string, comment, or is ascii.
function s:IsInStringOrComment(lnum, col) function! s:IsInStringOrComment(lnum, col) abort
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom return s:IsInRubyGroup(s:syng_strcom, a:lnum, a:col)
endfunction endfunction
" Check if the character at lnum:col is inside a string. " Check if the character at lnum:col is inside a string.
function s:IsInString(lnum, col) function! s:IsInString(lnum, col) abort
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string return s:IsInRubyGroup(s:syng_string, a:lnum, a:col)
endfunction endfunction
" Check if the character at lnum:col is inside a string or documentation. " Check if the character at lnum:col is inside a string or documentation.
function s:IsInStringOrDocumentation(lnum, col) function! s:IsInStringOrDocumentation(lnum, col) abort
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_stringdoc return s:IsInRubyGroup(s:syng_stringdoc, a:lnum, a:col)
endfunction endfunction
" Check if the character at lnum:col is inside a string delimiter " Check if the character at lnum:col is inside a string delimiter
function s:IsInStringDelimiter(lnum, col) function! s:IsInStringDelimiter(lnum, col) abort
return synIDattr(synID(a:lnum, a:col, 1), 'name') == 'rubyStringDelimiter' return s:IsInRubyGroup(['StringDelimiter'], a:lnum, a:col)
endfunction endfunction
function s:IsAssignment(str, pos) function! s:IsAssignment(str, pos) abort
return strpart(a:str, 0, a:pos - 1) =~ '=\s*$' return strpart(a:str, 0, a:pos - 1) =~ '=\s*$'
endfunction endfunction
" Find line above 'lnum' that isn't empty, in a comment, or in a string. " Find line above 'lnum' that isn't empty, in a comment, or in a string.
function s:PrevNonBlankNonString(lnum) function! s:PrevNonBlankNonString(lnum) abort
let in_block = 0 let in_block = 0
let lnum = prevnonblank(a:lnum) let lnum = prevnonblank(a:lnum)
while lnum > 0 while lnum > 0
@ -702,7 +706,7 @@ function s:PrevNonBlankNonString(lnum)
endfunction endfunction
" Find line above 'lnum' that started the continuation 'lnum' may be part of. " Find line above 'lnum' that started the continuation 'lnum' may be part of.
function s:GetMSL(lnum) function! s:GetMSL(lnum) abort
" Start on the line we're at and use its indent. " Start on the line we're at and use its indent.
let msl = a:lnum let msl = a:lnum
let lnum = s:PrevNonBlankNonString(a:lnum - 1) let lnum = s:PrevNonBlankNonString(a:lnum - 1)
@ -807,7 +811,7 @@ function s:GetMSL(lnum)
endfunction endfunction
" Check if line 'lnum' has more opening brackets than closing ones. " Check if line 'lnum' has more opening brackets than closing ones.
function s:ExtraBrackets(lnum) function! s:ExtraBrackets(lnum) abort
let opening = {'parentheses': [], 'braces': [], 'brackets': []} let opening = {'parentheses': [], 'braces': [], 'brackets': []}
let closing = {'parentheses': [], 'braces': [], 'brackets': []} let closing = {'parentheses': [], 'braces': [], 'brackets': []}
@ -869,7 +873,7 @@ function s:ExtraBrackets(lnum)
return [rightmost_opening, rightmost_closing] return [rightmost_opening, rightmost_closing]
endfunction endfunction
function s:Match(lnum, regex) function! s:Match(lnum, regex) abort
let line = getline(a:lnum) let line = getline(a:lnum)
let offset = match(line, '\C'.a:regex) let offset = match(line, '\C'.a:regex)
let col = offset + 1 let col = offset + 1
@ -889,7 +893,7 @@ endfunction
" Locates the containing class/module's definition line, ignoring nested classes " Locates the containing class/module's definition line, ignoring nested classes
" along the way. " along the way.
" "
function! s:FindContainingClass() function! s:FindContainingClass() abort
let saved_position = getpos('.') let saved_position = getpos('.')
while searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW', while searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',

View File

@ -5,41 +5,64 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vue') == -1
" Maintainer: Eduardo San Martin Morote " Maintainer: Eduardo San Martin Morote
" Author: Adriaan Zonnenberg " Author: Adriaan Zonnenberg
if exists("b:did_indent") if exists('b:did_indent')
finish finish
endif endif
" Load indent files for required languages function! s:get_indentexpr(language)
for language in ['stylus', 'pug', 'css', 'javascript', 'html', 'coffee']
unlet! b:did_indent unlet! b:did_indent
exe "runtime! indent/".language.".vim" execute 'runtime! indent/' . a:language . '.vim'
exe "let s:".language."indent = &indentexpr" return &indentexpr
endfunction
" The order is important here, tags without attributes go last.
" HTML is left out, it will be used when there is no match.
let s:languages = [
\ { 'name': 'pug', 'pairs': ['<template lang="pug"', '</template>'] },
\ { 'name': 'stylus', 'pairs': ['<style lang="stylus"', '</style>'] },
\ { 'name': 'css', 'pairs': ['<style', '</style>'] },
\ { 'name': 'coffee', 'pairs': ['<script lang="coffee"', '</script>'] },
\ { 'name': 'javascript', 'pairs': ['<script', '</script>'] },
\ ]
for language in s:languages
" Set 'indentexpr' if the user has an indent file installed for the language
if strlen(globpath(&rtp, 'indent/'. language.name .'.vim'))
let language.indentexpr = s:get_indentexpr(language.name)
endif
endfor endfor
let s:html_indent = s:get_indentexpr('html')
let b:did_indent = 1 let b:did_indent = 1
setlocal indentexpr=GetVueIndent() setlocal indentexpr=GetVueIndent()
if exists("*GetVueIndent") if exists('*GetVueIndent')
finish finish
endif endif
function! GetVueIndent() function! GetVueIndent()
if searchpair('<template lang="pug"', '', '</template>', 'bWr') for language in s:languages
exe "let indent = ".s:pugindent let opening_tag_line = searchpair(language.pairs[0], '', language.pairs[1], 'bWr')
elseif searchpair('<style lang="stylus"', '', '</style>', 'bWr')
exe "let indent = ".s:stylusindent if opening_tag_line
elseif searchpair('<style', '', '</style>', 'bWr') execute 'let indent = ' . get(language, 'indentexpr', -1)
exe "let indent = ".s:cssindent break
elseif searchpair('<script lang="coffee"', '', '</script>', 'bWr') endif
exe "let indent = ".s:coffeeindent endfor
elseif searchpair('<script', '', '</script>', 'bWr')
exe "let indent = ".s:javascriptindent if exists('l:indent')
if (opening_tag_line == prevnonblank(v:lnum - 1) || opening_tag_line == v:lnum)
\ || getline(v:lnum) =~ '\v^\s*\</(script|style|template)'
return 0
endif
else else
exe "let indent = ".s:htmlindent " Couldn't find language, fall back to html
execute 'let indent = ' . s:html_indent
endif endif
return indent > -1 ? indent : s:htmlindent return indent
endfunction endfunction
endif endif

View File

@ -3,7 +3,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'c/c++') == -1
" Vim syntax file " Vim syntax file
" Language: C " Language: C
" Maintainer: Bram Moolenaar <Bram@vim.org> " Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2016 Nov 17 " Last Change: 2016 Nov 18
" Quit when a (custom) syntax file was already loaded " Quit when a (custom) syntax file was already loaded
if exists("b:current_syntax") if exists("b:current_syntax")
@ -365,7 +365,7 @@ syn match cPreConditMatch display "^\s*\zs\(%:\|#\)\s*\(else\|endif\)\>"
if !exists("c_no_if0") if !exists("c_no_if0")
syn cluster cCppOutInGroup contains=cCppInIf,cCppInElse,cCppInElse2,cCppOutIf,cCppOutIf2,cCppOutElse,cCppInSkip,cCppOutSkip syn cluster cCppOutInGroup contains=cCppInIf,cCppInElse,cCppInElse2,cCppOutIf,cCppOutIf2,cCppOutElse,cCppInSkip,cCppOutSkip
syn region cCppOutWrapper start="^\s*\zs\(%:\|#\)\s*if\s\+0\+\s*\($\|//\|/\*\|&\)" end=".\@=\|$" contains=cCppOutIf,cCppOutElse,@NoSpell fold syn region cCppOutWrapper start="^\s*\zs\(%:\|#\)\s*if\s\+0\+\s*\($\|//\|/\*\|&\)" end=".\@=\|$" contains=cCppOutIf,cCppOutElse,@NoSpell fold
syn region cCppOutIf contained start="0\+" matchgroup=cCppOutWrapper end="^\s*\zs\(%:\|#\)\s*endif\>" contains=cCppOutIf2,cCppOutElse syn region cCppOutIf contained start="0\+" matchgroup=cCppOutWrapper end="^\s*\(%:\|#\)\s*endif\>" contains=cCppOutIf2,cCppOutElse
if !exists("c_no_if0_fold") if !exists("c_no_if0_fold")
syn region cCppOutIf2 contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell fold syn region cCppOutIf2 contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell fold
else else

View File

@ -177,7 +177,7 @@ end
syn match crystalAliasDeclaration "[^[:space:];#.()]\+" contained contains=crystalSymbol,crystalGlobalVariable,crystalPredefinedVariable nextgroup=crystalAliasDeclaration2 skipwhite syn match crystalAliasDeclaration "[^[:space:];#.()]\+" contained contains=crystalSymbol,crystalGlobalVariable,crystalPredefinedVariable nextgroup=crystalAliasDeclaration2 skipwhite
syn match crystalAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=crystalSymbol,crystalGlobalVariable,crystalPredefinedVariable syn match crystalAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=crystalSymbol,crystalGlobalVariable,crystalPredefinedVariable
syn match crystalMethodDeclaration "[^[:space:];#(]\+" contained contains=crystalConstant,crystalBoolean,crystalPseudoVariable,crystalInstanceVariable,crystalClassVariable,crystalGlobalVariable syn match crystalMethodDeclaration "[^[:space:];#(]\+" contained contains=crystalConstant,crystalBoolean,crystalPseudoVariable,crystalInstanceVariable,crystalClassVariable,crystalGlobalVariable
syn match crystalFunctionDeclaration "[^[:space:];#=]\+" contained contains=crystalConstant syn match crystalFunctionDeclaration "[^[:space:];#(=]\+" contained contains=crystalConstant
syn match crystalTypeDeclaration "[^[:space:];#=]\+" contained contains=crystalConstant syn match crystalTypeDeclaration "[^[:space:];#=]\+" contained contains=crystalConstant
syn match crystalClassDeclaration "[^[:space:];#<]\+" contained contains=crystalConstant,crystalOperator syn match crystalClassDeclaration "[^[:space:];#<]\+" contained contains=crystalConstant,crystalOperator
syn match crystalModuleDeclaration "[^[:space:];#<]\+" contained contains=crystalConstant,crystalOperator syn match crystalModuleDeclaration "[^[:space:];#<]\+" contained contains=crystalConstant,crystalOperator

View File

@ -28,15 +28,15 @@ syn region glslPreProc start="^\s*#\s*\(error\|pragma\|extension\|versi
syn keyword glslBoolean true false syn keyword glslBoolean true false
" Integer Numbers " Integer Numbers
syn match glslDecimalInt display "\(0\|[1-9]\d*\)" syn match glslDecimalInt display "\(0\|[1-9]\d*\)[uU]\?"
syn match glslOctalInt display "0\o\+" syn match glslOctalInt display "0\o\+[uU]\?"
syn match glslHexInt display "0[xX]\x\+" syn match glslHexInt display "0[xX]\x\+[uU]\?"
" Float Numbers " Float Numbers
syn match glslFloat display "\d\+\.\([eE][+-]\=\d\+\)\=" syn match glslFloat display "\d\+\.\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
syn match glslFloat display "\.\d\+\([eE][+-]\=\d\+\)\=" syn match glslFloat display "\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
syn match glslFloat display "\d\+[eE][+-]\=\d\+" syn match glslFloat display "\d\+[eE][+-]\=\d\+\(lf\|LF\|f\|F\)\="
syn match glslFloat display "\d\+\.\d\+\([eE][+-]\=\d\+\)\=" syn match glslFloat display "\d\+\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
" Swizzles " Swizzles
syn match glslSwizzle display /\.[xyzw]\{1,4\}\>/ syn match glslSwizzle display /\.[xyzw]\{1,4\}\>/

View File

@ -76,8 +76,8 @@ hi def link goTplVariable Special
syn region gotplAction start="{{" end="}}" contains=@gotplLiteral,gotplControl,gotplFunctions,gotplVariable,goTplIdentifier display syn region gotplAction start="{{" end="}}" contains=@gotplLiteral,gotplControl,gotplFunctions,gotplVariable,goTplIdentifier display
syn region gotplAction start="\[\[" end="\]\]" contains=@gotplLiteral,gotplControl,gotplFunctions,gotplVariable display syn region gotplAction start="\[\[" end="\]\]" contains=@gotplLiteral,gotplControl,gotplFunctions,gotplVariable display
syn region goTplComment start="{{/\*" end="\*/}}" display syn region goTplComment start="{{\(- \)\?/\*" end="\*/\( -\)\?}}" display
syn region goTplComment start="\[\[/\*" end="\*/\]\]" display syn region goTplComment start="\[\[\(- \)\?/\*" end="\*/\( -\)\?\]\]" display
hi def link gotplAction PreProc hi def link gotplAction PreProc
hi def link goTplComment Comment hi def link goTplComment Comment

View File

@ -13,11 +13,7 @@ elseif exists("b:current_syntax")
finish finish
endif endif
if !exists('g:haskell_disable_TH') if get(g:, 'haskell_backpack', 0)
let g:haskell_disable_TH = 0
endif
if exists('g:haskell_backpack') && g:haskell_backpack == 1
syn keyword haskellBackpackStructure unit signature syn keyword haskellBackpackStructure unit signature
syn keyword haskellBackpackDependency dependency syn keyword haskellBackpackDependency dependency
endif endif
@ -63,7 +59,7 @@ syn match haskellImport "^\s*\<import\>\s\+\(\<safe\>\s\+\)\?\(\<qualified\>\s\+
\ haskellBlockComment, \ haskellBlockComment,
\ haskellPragma \ haskellPragma
syn keyword haskellKeyword do case of syn keyword haskellKeyword do case of
if exists('g:haskell_enable_static_pointers') && g:haskell_enable_static_pointers == 1 if get(g:, 'haskell_enable_static_pointers', 0)
syn keyword haskellStatic static syn keyword haskellStatic static
endif endif
syn keyword haskellConditional if then else syn keyword haskellConditional if then else
@ -107,29 +103,29 @@ syn match haskellPreProc "^#.*$"
syn keyword haskellTodo TODO FIXME contained syn keyword haskellTodo TODO FIXME contained
" Treat a shebang line at the start of the file as a comment " Treat a shebang line at the start of the file as a comment
syn match haskellShebang "\%^#!.*$" syn match haskellShebang "\%^#!.*$"
if exists('g:haskell_disable_TH') && g:haskell_disable_TH == 0 if !get(g:, 'haskell_disable_TH', 0)
syn match haskellQuasiQuoted "." containedin=haskellQuasiQuote contained syn match haskellQuasiQuoted "." containedin=haskellQuasiQuote contained
syn region haskellQuasiQuote matchgroup=haskellTH start="\[[_a-zA-Z][a-zA-z0-9._']*|" end="|\]" syn region haskellQuasiQuote matchgroup=haskellTH start="\[[_a-zA-Z][a-zA-z0-9._']*|" end="|\]"
syn region haskellTHBlock matchgroup=haskellTH start="\[\(d\|t\|p\)\?|" end="|]" contains=TOP syn region haskellTHBlock matchgroup=haskellTH start="\[\(d\|t\|p\)\?|" end="|]" contains=TOP
syn region haskellTHDoubleBlock matchgroup=haskellTH start="\[||" end="||]" contains=TOP syn region haskellTHDoubleBlock matchgroup=haskellTH start="\[||" end="||]" contains=TOP
endif endif
if exists('g:haskell_enable_typeroles') && g:haskell_enable_typeroles == 1 if get(g:, 'haskell_enable_typeroles', 0)
syn keyword haskellTypeRoles phantom representational nominal contained syn keyword haskellTypeRoles phantom representational nominal contained
syn region haskellTypeRoleBlock matchgroup=haskellTypeRoles start="type\s\+role" end="$" keepend syn region haskellTypeRoleBlock matchgroup=haskellTypeRoles start="type\s\+role" end="$" keepend
\ contains= \ contains=
\ haskellType, \ haskellType,
\ haskellTypeRoles \ haskellTypeRoles
endif endif
if exists('g:haskell_enable_quantification') && g:haskell_enable_quantification == 1 if get(g:, 'haskell_enable_quantification', 0)
syn keyword haskellForall forall syn keyword haskellForall forall
endif endif
if exists('g:haskell_enable_recursivedo') && g:haskell_enable_recursivedo == 1 if get(g:, 'haskell_enable_recursivedo', 0)
syn keyword haskellRecursiveDo mdo rec syn keyword haskellRecursiveDo mdo rec
endif endif
if exists('g:haskell_enable_arrowsyntax') && g:haskell_enable_arrowsyntax == 1 if get(g:, 'haskell_enable_arrowsyntax', 0)
syn keyword haskellArrowSyntax proc syn keyword haskellArrowSyntax proc
endif endif
if exists('g:haskell_enable_pattern_synonyms') && g:haskell_enable_pattern_synonyms == 1 if get(g:, 'haskell_enable_pattern_synonyms', 0)
syn keyword haskellPatternKeyword pattern syn keyword haskellPatternKeyword pattern
endif endif
@ -161,7 +157,7 @@ highlight def link haskellAssocType Type
highlight def link haskellQuotedType Type highlight def link haskellQuotedType Type
highlight def link haskellType Type highlight def link haskellType Type
highlight def link haskellImportKeywords Include highlight def link haskellImportKeywords Include
if exists('g:haskell_classic_highlighting') && g:haskell_classic_highlighting == 1 if get(g:, 'haskell_classic_highlighting', 0)
highlight def link haskellDeclKeyword Keyword highlight def link haskellDeclKeyword Keyword
highlight def link haskellDecl Keyword highlight def link haskellDecl Keyword
highlight def link haskellWhere Keyword highlight def link haskellWhere Keyword
@ -173,35 +169,35 @@ else
highlight def link haskellLet Structure highlight def link haskellLet Structure
endif endif
if exists('g:haskell_enable_quantification') && g:haskell_enable_quantification == 1 if get(g:, 'haskell_enable_quantification', 0)
highlight def link haskellForall Operator highlight def link haskellForall Operator
endif endif
if exists('g:haskell_enable_recursivedo') && g:haskell_enable_recursivedo == 1 if get(g:, 'haskell_enable_recursivedo', 0)
highlight def link haskellRecursiveDo Keyword highlight def link haskellRecursiveDo Keyword
endif endif
if exists('g:haskell_enable_arrowsyntax') && g:haskell_enable_arrowsyntax == 1 if get(g:, 'haskell_enable_arrowsyntax', 0)
highlight def link haskellArrowSyntax Keyword highlight def link haskellArrowSyntax Keyword
endif endif
if exists('g:haskell_enable_static_pointers') && g:haskell_enable_static_pointers == 1 if get(g:, 'haskell_enable_static_pointers', 0)
highlight def link haskellStatic Keyword highlight def link haskellStatic Keyword
endif endif
if exists('g:haskell_classic_highlighting') && g:haskell_classic_highlighting == 1 if get(g:, 'haskell_classic_highlighting', 0)
if exists('g:haskell_enable_pattern_synonyms') && g:haskell_enable_pattern_synonyms == 1 if get(g:, 'haskell_enable_pattern_synonyms', 0)
highlight def link haskellPatternKeyword Keyword highlight def link haskellPatternKeyword Keyword
endif endif
if exists('g:haskell_enable_typeroles') && g:haskell_enable_typeroles == 1 if get(g:, 'haskell_enable_typeroles', 0)
highlight def link haskellTypeRoles Keyword highlight def link haskellTypeRoles Keyword
endif endif
else else
if exists('g:haskell_enable_pattern_synonyms') && g:haskell_enable_pattern_synonyms == 1 if get(g:, 'haskell_enable_pattern_synonyms', 0)
highlight def link haskellPatternKeyword Structure highlight def link haskellPatternKeyword Structure
endif endif
if exists('g:haskell_enable_typeroles') && g:haskell_enable_typeroles == 1 if get(g:, 'haskell_enable_typeroles', 0)
highlight def link haskellTypeRoles Structure highlight def link haskellTypeRoles Structure
endif endif
endif endif
if exists('g:haskell_backpack') && g:haskell_backpack == 1 if get(g:, 'haskell_backpack', 0)
highlight def link haskellBackpackStructure Structure highlight def link haskellBackpackStructure Structure
highlight def link haskellBackpackDependency Include highlight def link haskellBackpackDependency Include
endif endif

View File

@ -121,9 +121,11 @@ syn keyword htmlArg contained download media
syn keyword htmlArg contained nonce syn keyword htmlArg contained nonce
" <area>, <a>, <img>, <iframe>, <link> " <area>, <a>, <img>, <iframe>, <link>
syn keyword htmlArg contained referrerpolicy syn keyword htmlArg contained referrerpolicy
" <script>
" https://w3c.github.io/webappsec-subresource-integrity/#the-integrity-attribute " https://w3c.github.io/webappsec-subresource-integrity/#the-integrity-attribute
syn keyword htmlArg contained integrity crossorigin syn keyword htmlArg contained integrity crossorigin
" <link>
syn keyword htmlArg contained prefetch
" syn keyword htmlArg contained preload
" Custom Data Attributes " Custom Data Attributes
" http://w3c.github.io/html/single-page.html#embedding-custom-non-visible-data-with-the-data-attributes " http://w3c.github.io/html/single-page.html#embedding-custom-non-visible-data-with-the-data-attributes

View File

@ -27,7 +27,7 @@ syntax sync fromstart
syntax case match syntax case match
syntax match jsNoise /[:,\;]\{1}/ syntax match jsNoise /[:,\;]\{1}/
syntax match jsNoise /[\.]\{1}/ skipwhite skipempty nextgroup=jsObjectProp,jsFuncCall syntax match jsNoise /[\.]\{1}/ skipwhite skipempty nextgroup=jsObjectProp,jsFuncCall,jsPrototype
syntax match jsObjectProp contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ syntax match jsObjectProp contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/
syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ syntax match jsFuncCall /\k\+\%(\s*(\)\@=/
syntax match jsParensError /[)}\]]/ syntax match jsParensError /[)}\]]/
@ -239,8 +239,8 @@ if exists("javascript_plugin_flow")
runtime extras/flow.vim runtime extras/flow.vim
endif endif
syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo,jsForAwait
syntax cluster jsAll contains=@jsExpression,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword,jsNoise,,jsBlockLabel syntax cluster jsAll contains=@jsExpression,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword,jsNoise,jsBlockLabel
" Define the default highlighting. " Define the default highlighting.
" For version 5.7 and earlier: only when not done already " For version 5.7 and earlier: only when not done already
@ -384,7 +384,7 @@ if version >= 508 || !exists("did_javascript_syn_inits")
endif endif
" Define the htmlJavaScript for HTML syntax html.vim " Define the htmlJavaScript for HTML syntax html.vim
syntax cluster htmlJavaScript contains=@jsAll syntax cluster htmlJavaScript contains=@jsAll,jsImport,jsExport
syntax cluster javaScriptExpression contains=@jsAll syntax cluster javaScriptExpression contains=@jsAll
" Vim's default html.vim highlights all javascript as 'Special' " Vim's default html.vim highlights all javascript as 'Special'

View File

@ -145,8 +145,8 @@ endif
if get(g:, 'vim_markdown_math', 0) if get(g:, 'vim_markdown_math', 0)
syn include @tex syntax/tex.vim syn include @tex syntax/tex.vim
syn region mkdMath start="\\\@<!\$" end="\$" contains=@tex keepend syn region mkdMath start="\\\@<!\$" end="\$" skip="\\\$" contains=@tex keepend
syn region mkdMath start="\\\@<!\$\$" end="\$\$" contains=@tex keepend syn region mkdMath start="\\\@<!\$\$" end="\$\$" skip="\\\$" contains=@tex keepend
endif endif
syn cluster mkdNonListItem contains=@htmlTop,htmlItalic,htmlBold,htmlBoldItalic,mkdFootnotes,mkdInlineURL,mkdLink,mkdLinkDef,mkdLineBreak,mkdBlockquote,mkdCode,mkdRule,htmlH1,htmlH2,htmlH3,htmlH4,htmlH5,htmlH6,mkdMath syn cluster mkdNonListItem contains=@htmlTop,htmlItalic,htmlBold,htmlBoldItalic,mkdFootnotes,mkdInlineURL,mkdLink,mkdLinkDef,mkdLineBreak,mkdBlockquote,mkdCode,mkdRule,htmlH1,htmlH2,htmlH3,htmlH4,htmlH5,htmlH6,mkdMath

View File

@ -10,9 +10,9 @@ end
" Patch 7.4.1142 " Patch 7.4.1142
if has("patch-7.4-1142") if has("patch-7.4-1142")
if has("win32") if has("win32")
syn iskeyword @,48-57,_,128-167,224-235,.,/,: syn iskeyword @,48-57,_,128-167,224-235,.,/,:,-
else else
syn iskeyword @,48-57,_,192-255,.,/,: syn iskeyword @,48-57,_,192-255,.,/,:,-
endif endif
endif endif
@ -25,6 +25,11 @@ syn region ngxString start=+[^:a-zA-Z>!\\@]\z(["']\)+lc=1 end=+\z1+ skip=+\\\\\|
syn keyword ngxBoolean on syn keyword ngxBoolean on
syn keyword ngxBoolean off syn keyword ngxBoolean off
" Number and Measures http://nginx.org/en/docs/syntax.html
syn match ngxNumber '\<\d\+\>'
syn match ngxMeasure '\<\d\+ms\>'
syn match ngxMeasure '\<\d\+[smhdwMy]\>'
syn match ngxMeasure '\<\d\+[kKmMgG]\>'
syn keyword ngxDirectiveBlock http syn keyword ngxDirectiveBlock http
syn keyword ngxDirectiveBlock mail syn keyword ngxDirectiveBlock mail
@ -48,7 +53,7 @@ syn keyword ngxDirectiveImportant root
syn keyword ngxDirectiveImportant server syn keyword ngxDirectiveImportant server
syn keyword ngxDirectiveImportant server_name syn keyword ngxDirectiveImportant server_name
syn keyword ngxDirectiveImportant listen contained syn keyword ngxDirectiveImportant listen contained
syn region ngxDirectiveImportantListen matchgroup=ngxDirectiveImportant start=+listen+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxListenOptions,ngxString syn region ngxDirectiveImportantListen matchgroup=ngxDirectiveImportant start=+listen+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxListenOptions,ngxNumber,ngxString
syn keyword ngxDirectiveImportant internal syn keyword ngxDirectiveImportant internal
syn keyword ngxDirectiveImportant proxy_pass syn keyword ngxDirectiveImportant proxy_pass
syn keyword ngxDirectiveImportant memcached_pass syn keyword ngxDirectiveImportant memcached_pass
@ -84,9 +89,9 @@ syn match ngxStatusCode /\d\d\d/ contained
syn match ngxStatusCodes /\d\d\d/ contained contains=ngxStatusCode nextgroup=ngxStatusCode skipwhite skipempty syn match ngxStatusCodes /\d\d\d/ contained contains=ngxStatusCode nextgroup=ngxStatusCode skipwhite skipempty
syn match ngxRewriteURI /\S\+/ contained contains=ngxVariableString nextgroup=ngxRewritedURI skipwhite skipempty syn match ngxRewriteURI /\S\+/ contained contains=ngxVariableString nextgroup=ngxRewritedURI skipwhite skipempty
syn region ngxRewriteURI start=+[^:a-zA-Z>!\\@]\z(["']\)+lc=1 end=+\z1+ skip=+\\\\\|\\\z1+ contains=ngxVariableString nextgroup=ngxRewritedURI skipwhite skipempty syn region ngxRewriteURI start=+[^:a-zA-Z>!\\@]\z(["']\)+lc=1 end=+\z1+ skip=+\\\\\|\\\z1+ contained contains=ngxVariableString nextgroup=ngxRewritedURI skipwhite skipempty
syn match ngxRewritedURI /\S\+/ contained contains=ngxVariableString nextgroup=ngxRewriteFlag skipwhite skipempty syn match ngxRewritedURI /\S\+/ contained contains=ngxVariableString nextgroup=ngxRewriteFlag skipwhite skipempty
syn region ngxRewritedURI start=+[^:a-zA-Z>!\\@]\z(["']\)+lc=1 end=+\z1+ skip=+\\\\\|\\\z1+ contains=ngxVariableString nextgroup=ngxRewriteFlag skipwhite skipempty syn region ngxRewritedURI start=+[^:a-zA-Z>!\\@]\z(["']\)+lc=1 end=+\z1+ skip=+\\\\\|\\\z1+ contained contains=ngxVariableString nextgroup=ngxRewriteFlag skipwhite skipempty
syn keyword ngxRewriteFlag last contained syn keyword ngxRewriteFlag last contained
syn keyword ngxRewriteFlag break contained syn keyword ngxRewriteFlag break contained
@ -137,7 +142,10 @@ syn keyword ngxDirective autoindex
syn keyword ngxDirective autoindex_exact_size syn keyword ngxDirective autoindex_exact_size
syn keyword ngxDirective autoindex_format syn keyword ngxDirective autoindex_format
syn keyword ngxDirective autoindex_localtime syn keyword ngxDirective autoindex_localtime
syn keyword ngxDirective charset syn keyword ngxDirective charset nextgroup=ngxCharset skipwhite skipempty
syn keyword ngxCharset utf-8 UTF-8
syn keyword ngxDirective charset_map syn keyword ngxDirective charset_map
syn keyword ngxDirective charset_types syn keyword ngxDirective charset_types
syn keyword ngxDirective chunked_transfer_encoding syn keyword ngxDirective chunked_transfer_encoding
@ -2189,27 +2197,34 @@ syn keyword ngxDirectiveThirdParty xss_input_types
" highlight " highlight
hi link ngxComment Comment hi link ngxComment Comment
hi link ngxVariable Identifier hi link ngxVariable PreProc
hi link ngxVariableString PreProc hi link ngxVariableString PreProc
hi link ngxString String hi link ngxString String
hi link ngxLocationPath String hi link ngxLocationPath String
hi link ngxLocationNamedLoc Identifier hi link ngxLocationNamedLoc PreProc
hi link ngxBoolean Boolean hi link ngxDirective Identifier
hi link ngxStatusCode Number
hi link ngxRewriteFlag Boolean
hi link ngxDirectiveBlock Statement hi link ngxDirectiveBlock Statement
hi link ngxDirectiveImportant Type hi link ngxDirectiveImportant Type
hi link ngxDirectiveControl Keyword hi link ngxDirectiveControl Keyword
hi link ngxDirectiveError Constant hi link ngxDirectiveError Constant
hi link ngxDirectiveThirdParty Identifier
hi link ngxDirectiveDeprecated Error hi link ngxDirectiveDeprecated Error
hi link ngxDirective Identifier
hi link ngxDirectiveThirdParty Special
hi link ngxBoolean Boolean
hi link ngxNumber Number
hi link ngxMeasure Number
hi link ngxStatusCode Number
hi link ngxRewriteFlag Boolean
hi link ngxCharset keyword
hi link ngxListenOptions Keyword hi link ngxListenOptions Keyword
hi link ngxMailProtocol Keyword hi link ngxMailProtocol Keyword
hi link ngxSSLProtocol Keyword hi link ngxSSLProtocol Keyword
hi link ngxRewriteURI Special
hi link ngxRewritedURI StorageClass
hi link ngxThirdPartyKeyword keyword hi link ngxThirdPartyKeyword keyword
let b:current_syntax = "nginx" let b:current_syntax = "nginx"

View File

@ -3,54 +3,82 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'plantuml') == -
" Vim syntax file " Vim syntax file
" Language: PlantUML " Language: PlantUML
" Maintainer: Anders Thøgersen <first name at bladre dot dk> " Maintainer: Anders Thøgersen <first name at bladre dot dk>
" Version: 0.2 if exists('b:current_syntax')
"
if exists("b:current_syntax")
finish finish
endif endif
if version < 600 scriptencoding utf-8
if v:version < 600
syntax clear syntax clear
endif endif
let s:cpo_orig=&cpo let s:cpo_orig=&cpo
set cpo&vim set cpo&vim
let b:current_syntax = "plantuml" let b:current_syntax = 'plantuml'
syntax sync minlines=100 syntax sync minlines=100
syntax match plantumlPreProc /\%(^@startuml\|^@enduml\)\|!\%(include\|define\|undev\|ifdef\|endif\|ifndef\)\s*.*/ contains=plantumlDir syntax match plantumlPreProc /\%(^@startuml\|^@enduml\)\|!\%(define|definelong|else|enddefinelong|endif|ifdef|ifndef|include|pragma|undef\)\s*.*/ contains=plantumlDir
syntax region plantumlDir start=/\s\+/ms=s+1 end=/$/ contained syntax region plantumlDir start=/\s\+/ms=s+1 end=/$/ contained
syntax keyword plantumlTypeKeyword actor participant usecase abstract enum component state object artifact folder rect node frame cloud database storage agent boundary control entity card rectangle syntax keyword plantumlTypeKeyword abstract actor agent artifact boundary card cloud component control
syntax keyword plantumlKeyword as also autonumber caption title newpage box alt opt loop par break critical note rnote hnote legend group left right of on link over end activate deactivate destroy create footbox hide show skinparam skin top bottom syntax keyword plantumlTypeKeyword database entity enum file folder frame node object package participant
syntax keyword plantumlKeyword package namespace page up down if else elseif endif partition footer header center rotate ref return is repeat start stop while endwhile fork again kill syntax keyword plantumlTypeKeyword queue rectangle stack state storage usecase
syntax keyword plantumlKeyword then detach
syntax keyword plantumlClassKeyword class interface syntax keyword plantumlClassKeyword class interface
syntax keyword plantumlKeyword activate again also alt as autonumber bottom box break caption center create
syntax keyword plantumlKeyword critical deactivate destroy down else elseif end endif endwhile footbox footer
syntax keyword plantumlKeyword fork group header hide hnote if is kill left legend link loop namespace newpage
syntax keyword plantumlKeyword note of on opt over package page par partition ref repeat return right rnote
syntax keyword plantumlKeyword rotate show skin skinparam start stop title top up while
" Not in 'java - jar plantuml.jar - language' output
syntax keyword plantumlKeyword then detach sprite
syntax keyword plantumlCommentTODO XXX TODO FIXME NOTE contained syntax keyword plantumlCommentTODO XXX TODO FIXME NOTE contained
syntax match plantumlColor /#[0-9A-Fa-f]\{6\}\>/ syntax match plantumlColor /#[0-9A-Fa-f]\{6\}\>/
syntax keyword plantumlColor AliceBlue AntiqueWhite Aqua Aquamarine Azure Beige Bisque Black BlanchedAlmond
syntax keyword plantumlColor Blue BlueViolet Brown BurlyWood CadetBlue Chartreuse Chocolate Coral
syntax keyword plantumlColor CornflowerBlue Cornsilk Crimson Cyan DarkBlue DarkCyan DarkGoldenRod DarkGray
syntax keyword plantumlColor DarkGreen DarkGrey DarkKhaki DarkMagenta DarkOliveGreen DarkOrchid DarkRed
syntax keyword plantumlColor DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkSlateGrey DarkTurquoise
syntax keyword plantumlColor DarkViolet Darkorange DeepPink DeepSkyBlue DimGray DimGrey DodgerBlue FireBrick
syntax keyword plantumlColor FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold GoldenRod Gray Green
syntax keyword plantumlColor GreenYellow Grey HoneyDew HotPink IndianRed Indigo Ivory Khaki Lavender
syntax keyword plantumlColor LavenderBlush LawnGreen LemonChiffon LightBlue LightCoral LightCyan
syntax keyword plantumlColor LightGoldenRodYellow LightGray LightGreen LightGrey LightPink LightSalmon
syntax keyword plantumlColor LightSeaGreen LightSkyBlue LightSlateGray LightSlateGrey LightSteelBlue
syntax keyword plantumlColor LightYellow Lime LimeGreen Linen Magenta Maroon MediumAquaMarine MediumBlue
syntax keyword plantumlColor MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen
syntax keyword plantumlColor MediumTurquoise MediumVioletRed MidnightBlue MintCream MistyRose Moccasin
syntax keyword plantumlColor NavajoWhite Navy OldLace Olive OliveDrab Orange OrangeRed Orchid PaleGoldenRod
syntax keyword plantumlColor PaleGreen PaleTurquoise PaleVioletRed PapayaWhip PeachPuff Peru Pink Plum
syntax keyword plantumlColor PowderBlue Purple Red RosyBrown RoyalBlue SaddleBrown Salmon SandyBrown SeaGreen
syntax keyword plantumlColor SeaShell Sienna Silver SkyBlue SlateBlue SlateGray SlateGrey Snow SpringGreen
syntax keyword plantumlColor SteelBlue Tan Teal Thistle Tomato Turquoise Violet Wheat White WhiteSmoke Yellow
syntax keyword plantumlColor YellowGreen
" Arrows - Differentiate between horizontal and vertical arrows " Arrows - Differentiate between horizontal and vertical arrows
syntax match plantumlHorizontalArrow /\%([-\.]\%(|>\|>\|\*\|o\>\|\\\\\|\\\|\/\/\|\/\|\.\|-\)\|\%(<|\|<\|\*\|\<o\|\\\\\|\\\|\/\/\|\/\)[\.-]\)\%(\[[^\]]*\]\)\?/ contains=plantumlLabel syntax match plantumlHorizontalArrow /\%([-\.]\%(|>\|>\|\*\|o\>\|\\\\\|\\\|\/\/\|\/\|\.\|-\)\|\%(<|\|<\|\*\|\<o\|\\\\\|\\\|\/\/\|\/\)[\.-]\)\%(\[[^\]]*\]\)\?/ contains=plantumlLabel
syntax match plantumlDirectedOrVerticalArrowLR /[-\.]\%(le\?f\?t\?\|ri\?g\?h\?t\?\|up\?\|\do\?w\?n\?\)\?[-\.]\%(|>\|>>\|>\|\*\|o\>\|\\\\\|\\\|\/\/\|\/\|\.\|-\)\%(\[[^\]]*\]\)\?/ contains=plantumlLabel syntax match plantumlDirectedOrVerticalArrowLR /[-\.]\%(le\?f\?t\?\|ri\?g\?h\?t\?\|up\?\|do\?w\?n\?\)\?[-\.]\%(|>\|>>\|>\|\*\|o\>\|\\\\\|\\\|\/\/\|\/\|\.\|-\)\%(\[[^\]]*\]\)\?/ contains=plantumlLabel
syntax match plantumlDirectedOrVerticalArrowRL /\%(<|\|<<\|<\|\*\|\<o\|\\\\\|\\\|\/\/\|\/\)[-\.]\%(le\?f\?t\?\|ri\?g\?h\?t\?\|up\?\|\do\?w\?n\?\)\?[-\.]\%(\[[^\]]*\]\)\?/ contains=plantumlLabel syntax match plantumlDirectedOrVerticalArrowRL /\%(<|\|<<\|<\|\*\|\<o\|\\\\\|\\\|\/\/\|\/\)[-\.]\%(le\?f\?t\?\|ri\?g\?h\?t\?\|up\?\|do\?w\?n\?\)\?[-\.]\%(\[[^\]]*\]\)\?/ contains=plantumlLabel
syntax region plantumlLabel start=/\[/ms=s+1 end=/\]/me=s-1 contained contains=plantumlText syntax region plantumlLabel start=/\[/ms=s+1 end=/\]/me=s-1 contained contains=plantumlText
syntax match plantumlText /\%([0-9A-Za-zÀ-ÿ]\|\s\|[\.,;_-]\)\+/ contained syntax match plantumlText /\%([0-9A-Za-zÀ-ÿ]\|\s\|[\.,;_-]\)\+/ contained
" Class " Class
syntax region plantumlClass start=/{/ end=/\s*}/ contains=plantumlClassArrows, syntax region plantumlClass start=/\%(class\s[^{]\+\)\@<=\zs{/ end=/^\s*}/ contains=plantumlClassArrows,
\ plantumlClassKeyword, \ plantumlClassKeyword,
\ @plantumlClassOp, \ @plantumlClassOp,
\ plantumlClassSeparator, \ plantumlClassSeparator,
\ plantumlComment \ plantumlComment
syntax match plantumlClassPublic /+\w\+/ contained syntax match plantumlClassPublic /^\s*+\s*\w\+/ contained
syntax match plantumlClassPrivate /-\w\+/ contained syntax match plantumlClassPrivate /^\s*-\s*\w\+/ contained
syntax match plantumlClassProtected /#\w\+/ contained syntax match plantumlClassProtected /^\s*#\s*\w\+/ contained
syntax match plantumlClassPackPrivate /\~\w\+/ contained syntax match plantumlClassPackPrivate /^\s*\~\s*\w\+/ contained
syntax match plantumlClassSeparator /__.\+__\|==.\+==/ contained syntax match plantumlClassSeparator /__\%(.\+__\)\?\|==\%(.\+==\)\?\|--\%(.\+--\)\?\|\.\.\%(.\+\.\.\)\?/ contained
syntax cluster plantumlClassOp contains=plantumlClassPublic, syntax cluster plantumlClassOp contains=plantumlClassPublic,
\ plantumlClassPrivate, \ plantumlClassPrivate,
@ -65,82 +93,184 @@ syntax match plantumlComment /'.*$/ contains=plantumlCommentTODO
syntax region plantumlMultilineComment start=/\/'/ end=/'\// contains=plantumlCommentTODO syntax region plantumlMultilineComment start=/\/'/ end=/'\// contains=plantumlCommentTODO
" Labels with a colon " Labels with a colon
syntax match plantumlColonLine /:[^:]\+$/ contains=plantumlText syntax match plantumlColonLine /\S\@<=\s*\zs:.\+$/ contains=plantumlSpecialString
" Stereotypes
syntax match plantumlStereotype /<<.\{-1,}>>/ contains=plantumlSpecialString
" Activity diagram " Activity diagram
syntax match plantumlActivityThing /([^)]*)/ syntax match plantumlActivityThing /([^)]*)/
syntax match plantumlActivitySynch /===[^=]\+===/ syntax match plantumlActivitySynch /===[^=]\+===/
" Sequence diagram
syntax match plantumlSequenceDivider /^\s*==[^=]\+==\s*$/
syntax match plantumlSequenceSpace /^\s*|||\+\s*$/
syntax match plantumlSequenceSpace /^\s*||\d\+||\+\s*$/
" Usecase diagram
syntax match plantumlUsecaseActor /:.\{-1,}:/ contains=plantumlSpecialString
" Skinparam keywords " Skinparam keywords
syntax case ignore
syntax keyword plantumlSkinparamKeyword ActivityBackgroundColor ActivityBarColor ActivityBorderColor
syntax keyword plantumlSkinparamKeyword ActivityBorderThickness ActivityDiamondBackgroundColor
syntax keyword plantumlSkinparamKeyword ActivityDiamondBorderColor ActivityDiamondFontColor ActivityDiamondFontName
syntax keyword plantumlSkinparamKeyword ActivityDiamondFontSize ActivityDiamondFontStyle ActivityEndColor
syntax keyword plantumlSkinparamKeyword ActivityFontColor ActivityFontName ActivityFontSize ActivityFontStyle
syntax keyword plantumlSkinparamKeyword ActivityStartColor ActorBackgroundColor ActorBorderColor ActorFontColor
syntax keyword plantumlSkinparamKeyword ActorFontName ActorFontSize ActorFontStyle ActorStereotypeFontColor
syntax keyword plantumlSkinparamKeyword ActorStereotypeFontName ActorStereotypeFontSize ActorStereotypeFontStyle
syntax keyword plantumlSkinparamKeyword AgentBackgroundColor AgentBorderColor AgentFontColor AgentFontName AgentFontSize
syntax keyword plantumlSkinparamKeyword AgentFontStyle AgentStereotypeFontColor AgentStereotypeFontName
syntax keyword plantumlSkinparamKeyword AgentStereotypeFontSize AgentStereotypeFontStyle ArrowColor ArrowFontColor
syntax keyword plantumlSkinparamKeyword ArrowFontName ArrowFontSize ArrowFontStyle ArtifactBackgroundColor
syntax keyword plantumlSkinparamKeyword ArtifactBorderColor ArtifactFontColor ArtifactFontName ArtifactFontSize
syntax keyword plantumlSkinparamKeyword ArtifactFontStyle ArtifactStereotypeFontColor ArtifactStereotypeFontName
syntax keyword plantumlSkinparamKeyword ArtifactStereotypeFontSize ArtifactStereotypeFontStyle BackgroundColor
syntax keyword plantumlSkinparamKeyword BoundaryBackgroundColor BoundaryBorderColor BoundaryFontColor BoundaryFontName
syntax keyword plantumlSkinparamKeyword BoundaryFontSize BoundaryFontStyle BoundaryStereotypeFontColor
syntax keyword plantumlSkinparamKeyword BoundaryStereotypeFontName BoundaryStereotypeFontSize
syntax keyword plantumlSkinparamKeyword BoundaryStereotypeFontStyle CaptionFontColor CaptionFontName CaptionFontSize
syntax keyword plantumlSkinparamKeyword CaptionFontStyle CircledCharacterFontColor CircledCharacterFontName
syntax keyword plantumlSkinparamKeyword CircledCharacterFontSize CircledCharacterFontStyle CircledCharacterRadius
syntax keyword plantumlSkinparamKeyword ClassAttributeFontColor ClassAttributeFontName ClassAttributeFontSize
syntax keyword plantumlSkinparamKeyword ClassAttributeFontStyle ClassAttributeIconSize ClassBackgroundColor
syntax keyword plantumlSkinparamKeyword ClassBorderColor ClassBorderThickness ClassFontColor ClassFontName ClassFontSize
syntax keyword plantumlSkinparamKeyword ClassFontStyle ClassHeaderBackgroundColor ClassStereotypeFontColor
syntax keyword plantumlSkinparamKeyword ClassStereotypeFontName ClassStereotypeFontSize ClassStereotypeFontStyle
syntax keyword plantumlSkinparamKeyword CloudBackgroundColor CloudBorderColor CloudFontColor CloudFontName CloudFontSize
syntax keyword plantumlSkinparamKeyword CloudFontStyle CloudStereotypeFontColor CloudStereotypeFontName
syntax keyword plantumlSkinparamKeyword CloudStereotypeFontSize CloudStereotypeFontStyle CollectionsBackgroundColor
syntax keyword plantumlSkinparamKeyword CollectionsBorderColor ColorArrowSeparationSpace ComponentBackgroundColor
syntax keyword plantumlSkinparamKeyword ComponentBorderColor ComponentFontColor ComponentFontName ComponentFontSize
syntax keyword plantumlSkinparamKeyword ComponentFontStyle ComponentStereotypeFontColor ComponentStereotypeFontName
syntax keyword plantumlSkinparamKeyword ComponentStereotypeFontSize ComponentStereotypeFontStyle ComponentStyle
syntax keyword plantumlSkinparamKeyword ConditionStyle ControlBackgroundColor ControlBorderColor ControlFontColor
syntax keyword plantumlSkinparamKeyword ControlFontName ControlFontSize ControlFontStyle ControlStereotypeFontColor
syntax keyword plantumlSkinparamKeyword ControlStereotypeFontName ControlStereotypeFontSize ControlStereotypeFontStyle
syntax keyword plantumlSkinparamKeyword DatabaseBackgroundColor DatabaseBorderColor DatabaseFontColor DatabaseFontName
syntax keyword plantumlSkinparamKeyword DatabaseFontSize DatabaseFontStyle DatabaseStereotypeFontColor
syntax keyword plantumlSkinparamKeyword DatabaseStereotypeFontName DatabaseStereotypeFontSize
syntax keyword plantumlSkinparamKeyword DatabaseStereotypeFontStyle DefaultFontColor DefaultFontName DefaultFontSize
syntax keyword plantumlSkinparamKeyword DefaultFontStyle DefaultMonospacedFontName DefaultTextAlignment
syntax keyword plantumlSkinparamKeyword DiagramBorderColor DiagramBorderThickness Dpi EntityBackgroundColor
syntax keyword plantumlSkinparamKeyword EntityBorderColor EntityFontColor EntityFontName EntityFontSize EntityFontStyle
syntax keyword plantumlSkinparamKeyword EntityStereotypeFontColor EntityStereotypeFontName EntityStereotypeFontSize
syntax keyword plantumlSkinparamKeyword EntityStereotypeFontStyle FileBackgroundColor FileBorderColor FileFontColor
syntax keyword plantumlSkinparamKeyword FileFontName FileFontSize FileFontStyle FileStereotypeFontColor
syntax keyword plantumlSkinparamKeyword FileStereotypeFontName FileStereotypeFontSize FileStereotypeFontStyle
syntax keyword plantumlSkinparamKeyword FolderBackgroundColor FolderBorderColor FolderFontColor FolderFontName
syntax keyword plantumlSkinparamKeyword FolderFontSize FolderFontStyle FolderStereotypeFontColor
syntax keyword plantumlSkinparamKeyword FolderStereotypeFontName FolderStereotypeFontSize FolderStereotypeFontStyle
syntax keyword plantumlSkinparamKeyword FooterFontColor FooterFontName FooterFontSize FooterFontStyle
syntax keyword plantumlSkinparamKeyword FrameBackgroundColor FrameBorderColor FrameFontColor FrameFontName FrameFontSize
syntax keyword plantumlSkinparamKeyword FrameFontStyle FrameStereotypeFontColor FrameStereotypeFontName
syntax keyword plantumlSkinparamKeyword FrameStereotypeFontSize FrameStereotypeFontStyle Guillemet Handwritten
syntax keyword plantumlSkinparamKeyword HeaderFontColor HeaderFontName HeaderFontSize HeaderFontStyle HyperlinkColor
syntax keyword plantumlSkinparamKeyword HyperlinkUnderline IconIEMandatoryColor IconPackageBackgroundColor
syntax keyword plantumlSkinparamKeyword IconPackageColor IconPrivateBackgroundColor IconPrivateColor
syntax keyword plantumlSkinparamKeyword IconProtectedBackgroundColor IconProtectedColor IconPublicBackgroundColor
syntax keyword plantumlSkinparamKeyword IconPublicColor InterfaceBackgroundColor InterfaceBorderColor InterfaceFontColor
syntax keyword plantumlSkinparamKeyword InterfaceFontName InterfaceFontSize InterfaceFontStyle
syntax keyword plantumlSkinparamKeyword InterfaceStereotypeFontColor InterfaceStereotypeFontName
syntax keyword plantumlSkinparamKeyword InterfaceStereotypeFontSize InterfaceStereotypeFontStyle LegendBackgroundColor
syntax keyword plantumlSkinparamKeyword LegendBorderColor LegendBorderThickness LegendFontColor LegendFontName
syntax keyword plantumlSkinparamKeyword LegendFontSize LegendFontStyle Linetype MaxAsciiMessageLength MaxMessageSize
syntax keyword plantumlSkinparamKeyword MinClassWidth Monochrome NodeBackgroundColor NodeBorderColor NodeFontColor
syntax keyword plantumlSkinparamKeyword NodeFontName NodeFontSize NodeFontStyle NodeStereotypeFontColor
syntax keyword plantumlSkinparamKeyword NodeStereotypeFontName NodeStereotypeFontSize NodeStereotypeFontStyle Nodesep
syntax keyword plantumlSkinparamKeyword NoteBackgroundColor NoteBorderColor NoteBorderThickness NoteFontColor
syntax keyword plantumlSkinparamKeyword NoteFontName NoteFontSize NoteFontStyle NoteShadowing ObjectAttributeFontColor
syntax keyword plantumlSkinparamKeyword ObjectAttributeFontName ObjectAttributeFontSize ObjectAttributeFontStyle
syntax keyword plantumlSkinparamKeyword ObjectBackgroundColor ObjectBorderColor ObjectBorderThickness ObjectFontColor
syntax keyword plantumlSkinparamKeyword ObjectFontName ObjectFontSize ObjectFontStyle ObjectStereotypeFontColor
syntax keyword plantumlSkinparamKeyword ObjectStereotypeFontName ObjectStereotypeFontSize ObjectStereotypeFontStyle
syntax keyword plantumlSkinparamKeyword PackageBackgroundColor PackageBorderColor PackageBorderThickness
syntax keyword plantumlSkinparamKeyword PackageFontColor PackageFontName PackageFontSize PackageFontStyle
syntax keyword plantumlSkinparamKeyword PackageStereotypeFontColor PackageStereotypeFontName PackageStereotypeFontSize
syntax keyword plantumlSkinparamKeyword PackageStereotypeFontStyle PackageStyle Padding ParticipantBackgroundColor
syntax keyword plantumlSkinparamKeyword ParticipantBorderColor ParticipantFontColor ParticipantFontName
syntax keyword plantumlSkinparamKeyword ParticipantFontSize ParticipantFontStyle PartitionBackgroundColor
syntax keyword plantumlSkinparamKeyword PartitionBorderColor PartitionBorderThickness PartitionFontColor
syntax keyword plantumlSkinparamKeyword PartitionFontName PartitionFontSize PartitionFontStyle QueueBackgroundColor
syntax keyword plantumlSkinparamKeyword QueueBorderColor QueueFontColor QueueFontName QueueFontSize QueueFontStyle
syntax keyword plantumlSkinparamKeyword QueueStereotypeFontColor QueueStereotypeFontName QueueStereotypeFontSize
syntax keyword plantumlSkinparamKeyword QueueStereotypeFontStyle Ranksep RectangleBackgroundColor RectangleBorderColor
syntax keyword plantumlSkinparamKeyword RectangleBorderThickness RectangleFontColor RectangleFontName RectangleFontSize
syntax keyword plantumlSkinparamKeyword RectangleFontStyle RectangleStereotypeFontColor RectangleStereotypeFontName
syntax keyword plantumlSkinparamKeyword RectangleStereotypeFontSize RectangleStereotypeFontStyle RoundCorner
syntax keyword plantumlSkinparamKeyword SameClassWidth SequenceActorBorderThickness SequenceArrowThickness
syntax keyword plantumlSkinparamKeyword SequenceBoxBackgroundColor SequenceBoxBorderColor SequenceBoxFontColor
syntax keyword plantumlSkinparamKeyword SequenceBoxFontName SequenceBoxFontSize SequenceBoxFontStyle
syntax keyword plantumlSkinparamKeyword SequenceDelayFontColor SequenceDelayFontName SequenceDelayFontSize
syntax keyword plantumlSkinparamKeyword SequenceDelayFontStyle SequenceDividerBackgroundColor SequenceDividerBorderColor
syntax keyword plantumlSkinparamKeyword SequenceDividerBorderThickness SequenceDividerFontColor SequenceDividerFontName
syntax keyword plantumlSkinparamKeyword SequenceDividerFontSize SequenceDividerFontStyle SequenceGroupBackgroundColor
syntax keyword plantumlSkinparamKeyword SequenceGroupBodyBackgroundColor SequenceGroupBorderColor
syntax keyword plantumlSkinparamKeyword SequenceGroupBorderThickness SequenceGroupFontColor SequenceGroupFontName
syntax keyword plantumlSkinparamKeyword SequenceGroupFontSize SequenceGroupFontStyle SequenceGroupHeaderFontColor
syntax keyword plantumlSkinparamKeyword SequenceGroupHeaderFontName SequenceGroupHeaderFontSize
syntax keyword plantumlSkinparamKeyword SequenceGroupHeaderFontStyle SequenceLifeLineBackgroundColor
syntax keyword plantumlSkinparamKeyword SequenceLifeLineBorderColor SequenceLifeLineBorderThickness
syntax keyword plantumlSkinparamKeyword SequenceNewpageSeparatorColor SequenceParticipant
syntax keyword plantumlSkinparamKeyword SequenceParticipantBorderThickness SequenceReferenceBackgroundColor
syntax keyword plantumlSkinparamKeyword SequenceReferenceBorderColor SequenceReferenceBorderThickness
syntax keyword plantumlSkinparamKeyword SequenceReferenceFontColor SequenceReferenceFontName SequenceReferenceFontSize
syntax keyword plantumlSkinparamKeyword SequenceReferenceFontStyle SequenceReferenceHeaderBackgroundColor
syntax keyword plantumlSkinparamKeyword SequenceStereotypeFontColor SequenceStereotypeFontName
syntax keyword plantumlSkinparamKeyword SequenceStereotypeFontSize SequenceStereotypeFontStyle SequenceTitleFontColor
syntax keyword plantumlSkinparamKeyword SequenceTitleFontName SequenceTitleFontSize SequenceTitleFontStyle Shadowing
syntax keyword plantumlSkinparamKeyword StackBackgroundColor StackBorderColor StackFontColor StackFontName StackFontSize
syntax keyword plantumlSkinparamKeyword StackFontStyle StackStereotypeFontColor StackStereotypeFontName
syntax keyword plantumlSkinparamKeyword StackStereotypeFontSize StackStereotypeFontStyle StateAttributeFontColor
syntax keyword plantumlSkinparamKeyword StateAttributeFontName StateAttributeFontSize StateAttributeFontStyle
syntax keyword plantumlSkinparamKeyword StateBackgroundColor StateBorderColor StateEndColor StateFontColor StateFontName
syntax keyword plantumlSkinparamKeyword StateFontSize StateFontStyle StateStartColor StereotypeABackgroundColor
syntax keyword plantumlSkinparamKeyword StereotypeCBackgroundColor StereotypeEBackgroundColor StereotypeIBackgroundColor
syntax keyword plantumlSkinparamKeyword StereotypeNBackgroundColor StereotypePosition StorageBackgroundColor
syntax keyword plantumlSkinparamKeyword StorageBorderColor StorageFontColor StorageFontName StorageFontSize
syntax keyword plantumlSkinparamKeyword StorageFontStyle StorageStereotypeFontColor StorageStereotypeFontName
syntax keyword plantumlSkinparamKeyword StorageStereotypeFontSize StorageStereotypeFontStyle Style SvglinkTarget
syntax keyword plantumlSkinparamKeyword SwimlaneBorderColor SwimlaneBorderThickness SwimlaneTitleFontColor
syntax keyword plantumlSkinparamKeyword SwimlaneTitleFontName SwimlaneTitleFontSize SwimlaneTitleFontStyle TabSize
syntax keyword plantumlSkinparamKeyword TitleBackgroundColor TitleBorderColor TitleBorderRoundCorner
syntax keyword plantumlSkinparamKeyword TitleBorderThickness TitleFontColor TitleFontName TitleFontSize TitleFontStyle
syntax keyword plantumlSkinparamKeyword UsecaseBackgroundColor UsecaseBorderColor UsecaseFontColor UsecaseFontName
syntax keyword plantumlSkinparamKeyword UsecaseFontSize UsecaseFontStyle UsecaseStereotypeFontColor
syntax keyword plantumlSkinparamKeyword UsecaseStereotypeFontName UsecaseStereotypeFontSize UsecaseStereotypeFontStyle
" Not in 'java - jar plantuml.jar - language' output
syntax keyword plantumlSkinparamKeyword activityArrowColor activityArrowFontColor activityArrowFontName syntax keyword plantumlSkinparamKeyword activityArrowColor activityArrowFontColor activityArrowFontName
syntax keyword plantumlSkinparamKeyword activityArrowFontSize activityArrowFontStyle activityBackgroundColor syntax keyword plantumlSkinparamKeyword activityArrowFontSize activityArrowFontStyle BarColor BorderColor BoxPadding
syntax keyword plantumlSkinparamKeyword activityBarColor activityBorderColor activityEndColor activityFontColor syntax keyword plantumlSkinparamKeyword CharacterFontColor CharacterFontName CharacterFontSize CharacterFontStyle
syntax keyword plantumlSkinparamKeyword activityFontName activityFontSize activityFontStyle activityStartColor syntax keyword plantumlSkinparamKeyword CharacterRadius classArrowColor classArrowFontColor classArrowFontName
syntax keyword plantumlSkinparamKeyword backgroundColor circledCharacterFontColor circledCharacterFontName syntax keyword plantumlSkinparamKeyword classArrowFontSize classArrowFontStyle Color componentArrowColor
syntax keyword plantumlSkinparamKeyword circledCharacterFontSize circledCharacterFontStyle circledCharacterRadius
syntax keyword plantumlSkinparamKeyword classArrowColor classArrowFontColor classArrowFontName classArrowFontSize
syntax keyword plantumlSkinparamKeyword classArrowFontStyle classAttributeFontColor classAttributeFontName
syntax keyword plantumlSkinparamKeyword classAttributeFontSize classAttributeFontStyle classAttributeIconSize
syntax keyword plantumlSkinparamKeyword classBackgroundColor classBorderColor classFontColor classFontName
syntax keyword plantumlSkinparamKeyword classFontSize classFontStyle classStereotypeFontColor classStereotypeFontName
syntax keyword plantumlSkinparamKeyword classStereotypeFontSize classStereotypeFontStyle componentArrowColor
syntax keyword plantumlSkinparamKeyword componentArrowFontColor componentArrowFontName componentArrowFontSize syntax keyword plantumlSkinparamKeyword componentArrowFontColor componentArrowFontName componentArrowFontSize
syntax keyword plantumlSkinparamKeyword componentArrowFontStyle componentBackgroundColor componentBorderColor syntax keyword plantumlSkinparamKeyword componentArrowFontStyle componentInterfaceBackgroundColor
syntax keyword plantumlSkinparamKeyword componentFontColor componentFontName componentFontSize componentFontStyle syntax keyword plantumlSkinparamKeyword componentInterfaceBorderColor DividerBackgroundColor DividerFontColor
syntax keyword plantumlSkinparamKeyword componentInterfaceBackgroundColor componentInterfaceBorderColor syntax keyword plantumlSkinparamKeyword DividerFontName DividerFontSize DividerFontStyle EndColor FontColor FontName
syntax keyword plantumlSkinparamKeyword componentStereotypeFontColor componentStereotypeFontName syntax keyword plantumlSkinparamKeyword FontSize FontStyle GroupBackgroundColor GroupingFontColor GroupingFontName
syntax keyword plantumlSkinparamKeyword componentStereotypeFontSize componentStereotypeFontStyle footerFontColor syntax keyword plantumlSkinparamKeyword GroupingFontSize GroupingFontStyle GroupingHeaderFontColor
syntax keyword plantumlSkinparamKeyword footerFontName footerFontSize footerFontStyle headerFontColor headerFontName syntax keyword plantumlSkinparamKeyword GroupingHeaderFontName GroupingHeaderFontSize GroupingHeaderFontStyle
syntax keyword plantumlSkinparamKeyword headerFontSize headerFontStyle noteBackgroundColor noteBorderColor syntax keyword plantumlSkinparamKeyword LifeLineBackgroundColor LifeLineBorderColor ParticipantPadding
syntax keyword plantumlSkinparamKeyword noteFontColor noteFontName noteFontSize noteFontStyle packageBackgroundColor syntax keyword plantumlSkinparamKeyword sequenceActorBackgroundColor sequenceActorBorderColor sequenceActorFontColor
syntax keyword plantumlSkinparamKeyword packageBorderColor packageFontColor packageFontName packageFontSize syntax keyword plantumlSkinparamKeyword sequenceActorFontName sequenceActorFontSize sequenceActorFontStyle
syntax keyword plantumlSkinparamKeyword packageFontStyle sequenceActorBackgroundColor sequenceActorBorderColor syntax keyword plantumlSkinparamKeyword sequenceArrowColor sequenceArrowFontColor sequenceArrowFontName
syntax keyword plantumlSkinparamKeyword sequenceActorFontColor sequenceActorFontName sequenceActorFontSize syntax keyword plantumlSkinparamKeyword sequenceArrowFontSize sequenceArrowFontStyle sequenceGroupingFontColor
syntax keyword plantumlSkinparamKeyword sequenceActorFontStyle sequenceArrowColor sequenceArrowFontColor syntax keyword plantumlSkinparamKeyword sequenceGroupingFontName sequenceGroupingFontSize sequenceGroupingFontStyle
syntax keyword plantumlSkinparamKeyword sequenceArrowFontName sequenceArrowFontSize sequenceArrowFontStyle syntax keyword plantumlSkinparamKeyword sequenceGroupingHeaderFontColor sequenceGroupingHeaderFontName
syntax keyword plantumlSkinparamKeyword sequenceDividerBackgroundColor sequenceDividerFontColor sequenceDividerFontName syntax keyword plantumlSkinparamKeyword sequenceGroupingHeaderFontSize sequenceGroupingHeaderFontStyle
syntax keyword plantumlSkinparamKeyword sequenceDividerFontSize sequenceDividerFontStyle sequenceGroupBackgroundColor syntax keyword plantumlSkinparamKeyword sequenceParticipantBackgroundColor sequenceParticipantBorderColor
syntax keyword plantumlSkinparamKeyword sequenceGroupingFontColor sequenceGroupingFontName sequenceGroupingFontSize syntax keyword plantumlSkinparamKeyword sequenceParticipantFontColor sequenceParticipantFontName
syntax keyword plantumlSkinparamKeyword sequenceGroupingFontStyle sequenceGroupingHeaderFontColor syntax keyword plantumlSkinparamKeyword sequenceParticipantFontSize sequenceParticipantFontStyle StartColor
syntax keyword plantumlSkinparamKeyword sequenceGroupingHeaderFontName sequenceGroupingHeaderFontSize syntax keyword plantumlSkinparamKeyword stateArrowColor stateArrowFontColor stateArrowFontName stateArrowFontSize
syntax keyword plantumlSkinparamKeyword sequenceGroupingHeaderFontStyle sequenceLifeLineBackgroundColor syntax keyword plantumlSkinparamKeyword stateArrowFontStyle StereotypeFontColor StereotypeFontName StereotypeFontSize
syntax keyword plantumlSkinparamKeyword sequenceLifeLineBorderColor sequenceParticipantBackgroundColor syntax keyword plantumlSkinparamKeyword StereotypeFontStyle usecaseActorBackgroundColor usecaseActorBorderColor
syntax keyword plantumlSkinparamKeyword sequenceParticipantBorderColor sequenceParticipantFontColor syntax keyword plantumlSkinparamKeyword usecaseActorFontColor usecaseActorFontName usecaseActorFontSize
syntax keyword plantumlSkinparamKeyword sequenceParticipantFontName sequenceParticipantFontSize syntax keyword plantumlSkinparamKeyword usecaseActorFontStyle usecaseActorStereotypeFontColor
syntax keyword plantumlSkinparamKeyword sequenceParticipantFontStyle sequenceTitleFontColor sequenceTitleFontName
syntax keyword plantumlSkinparamKeyword sequenceTitleFontSize sequenceTitleFontStyle stateArrowColor
syntax keyword plantumlSkinparamKeyword stateArrowFontColor stateArrowFontName stateArrowFontSize stateArrowFontStyle
syntax keyword plantumlSkinparamKeyword stateAttributeFontColor stateAttributeFontName stateAttributeFontSize
syntax keyword plantumlSkinparamKeyword stateAttributeFontStyle stateBackgroundColor stateBorderColor stateEndColor
syntax keyword plantumlSkinparamKeyword stateFontColor stateFontName stateFontSize stateFontStyle stateStartColor
syntax keyword plantumlSkinparamKeyword stereotypeABackgroundColor stereotypeCBackgroundColor
syntax keyword plantumlSkinparamKeyword stereotypeEBackgroundColor stereotypeIBackgroundColor titleFontColor
syntax keyword plantumlSkinparamKeyword titleFontName titleFontSize titleFontStyle usecaseActorBackgroundColor
syntax keyword plantumlSkinparamKeyword usecaseActorBorderColor usecaseActorFontColor usecaseActorFontName
syntax keyword plantumlSkinparamKeyword usecaseActorFontSize usecaseActorFontStyle usecaseActorStereotypeFontColor
syntax keyword plantumlSkinparamKeyword usecaseActorStereotypeFontName usecaseActorStereotypeFontSize syntax keyword plantumlSkinparamKeyword usecaseActorStereotypeFontName usecaseActorStereotypeFontSize
syntax keyword plantumlSkinparamKeyword usecaseActorStereotypeFontStyle usecaseArrowColor usecaseArrowFontColor syntax keyword plantumlSkinparamKeyword usecaseActorStereotypeFontStyle usecaseArrowColor usecaseArrowFontColor
syntax keyword plantumlSkinparamKeyword usecaseArrowFontName usecaseArrowFontSize usecaseArrowFontStyle syntax keyword plantumlSkinparamKeyword usecaseArrowFontName usecaseArrowFontSize usecaseArrowFontStyle
syntax keyword plantumlSkinparamKeyword usecaseBackgroundColor usecaseBorderColor usecaseFontColor usecaseFontName syntax case match
syntax keyword plantumlSkinparamKeyword usecaseFontSize usecaseFontStyle usecaseStereotypeFontColor
syntax keyword plantumlSkinparamKeyword usecaseStereotypeFontName usecaseStereotypeFontSize usecaseStereotypeFontStyle
syntax keyword plantumlSkinparamKeyword ActorBackgroundColor ActorBorderColor ActorFontColor ActorFontName
syntax keyword plantumlSkinparamKeyword ActorFontSize ActorFontStyle ActorStereotypeFontColor ActorStereotypeFontName
syntax keyword plantumlSkinparamKeyword ActorStereotypeFontSize ActorStereotypeFontStyle ArrowColor ArrowFontColor
syntax keyword plantumlSkinparamKeyword ArrowFontName ArrowFontSize ArrowFontStyle AttributeFontColor AttributeFontName
syntax keyword plantumlSkinparamKeyword AttributeFontSize AttributeFontStyle AttributeIconSize BarColor
syntax keyword plantumlSkinparamKeyword BorderColor BoxPadding CharacterFontColor CharacterFontName CharacterFontSize
syntax keyword plantumlSkinparamKeyword CharacterFontStyle CharacterRadius Color DividerBackgroundColor
syntax keyword plantumlSkinparamKeyword DividerFontColor DividerFontName DividerFontSize DividerFontStyle EndColor
syntax keyword plantumlSkinparamKeyword FontColor FontName FontSize FontStyle GroupBackgroundColor GroupingFontColor
syntax keyword plantumlSkinparamKeyword GroupingFontName GroupingFontSize GroupingFontStyle GroupingHeaderFontColor
syntax keyword plantumlSkinparamKeyword GroupingHeaderFontName GroupingHeaderFontSize GroupingHeaderFontStyle
syntax keyword plantumlSkinparamKeyword InterfaceBackgroundColor InterfaceBorderColor LifeLineBackgroundColor
syntax keyword plantumlSkinparamKeyword LifeLineBorderColor ParticipantBackgroundColor ParticipantBorderColor
syntax keyword plantumlSkinparamKeyword ParticipantFontColor ParticipantFontName ParticipantFontSize
syntax keyword plantumlSkinparamKeyword ParticipantFontStyle ParticipantPadding StartColor StereotypeFontColor
syntax keyword plantumlSkinparamKeyword StereotypeFontName StereotypeFontSize StereotypeFontStyle
" Highlight " Highlight
highlight default link plantumlCommentTODO Todo highlight default link plantumlCommentTODO Todo
@ -151,8 +281,8 @@ highlight default link plantumlPreProc PreProc
highlight default link plantumlDir Constant highlight default link plantumlDir Constant
highlight default link plantumlColor Constant highlight default link plantumlColor Constant
highlight default link plantumlHorizontalArrow Identifier highlight default link plantumlHorizontalArrow Identifier
highlight default link plantumlDirectedOrVerticalArrowLR Special highlight default link plantumlDirectedOrVerticalArrowLR Identifier
highlight default link plantumlDirectedOrVerticalArrowRL Special highlight default link plantumlDirectedOrVerticalArrowRL Identifier
highlight default link plantumlLabel Special highlight default link plantumlLabel Special
highlight default link plantumlText Label highlight default link plantumlText Label
highlight default link plantumlClass Type highlight default link plantumlClass Type
@ -161,6 +291,8 @@ highlight default link plantumlClassPrivate Macro
highlight default link plantumlClassProtected Statement highlight default link plantumlClassProtected Statement
highlight default link plantumlClassPackPrivate Function highlight default link plantumlClassPackPrivate Function
highlight default link plantumlClassSeparator Comment highlight default link plantumlClassSeparator Comment
highlight default link plantumlSequenceDivider Comment
highlight default link plantumlSequenceSpace Comment
highlight default link plantumlSpecialString Special highlight default link plantumlSpecialString Special
highlight default link plantumlString String highlight default link plantumlString String
highlight default link plantumlComment Comment highlight default link plantumlComment Comment
@ -169,6 +301,8 @@ highlight default link plantumlColonLine Comment
highlight default link plantumlActivityThing Type highlight default link plantumlActivityThing Type
highlight default link plantumlActivitySynch Type highlight default link plantumlActivitySynch Type
highlight default link plantumlSkinparamKeyword Identifier highlight default link plantumlSkinparamKeyword Identifier
highlight default link plantumlUsecaseActor String
highlight default link plantumlStereotype Type
let &cpo=s:cpo_orig let &cpo=s:cpo_orig
unlet s:cpo_orig unlet s:cpo_orig

View File

@ -39,7 +39,9 @@ syn match pugComment '\(\s\+\|^\)\/\/.*$' contains=pugCommentTodo,@Spell
syn region pugCommentBlock start="\z(\s\+\|^\)\/\/.*$" end="^\%(\z1\s\|\s*$\)\@!" contains=pugCommentTodo,@Spell keepend syn region pugCommentBlock start="\z(\s\+\|^\)\/\/.*$" end="^\%(\z1\s\|\s*$\)\@!" contains=pugCommentTodo,@Spell keepend
syn region pugHtmlConditionalComment start="<!--\%(.*\)>" end="<!\%(.*\)-->" contains=pugCommentTodo,@Spell syn region pugHtmlConditionalComment start="<!--\%(.*\)>" end="<!\%(.*\)-->" contains=pugCommentTodo,@Spell
syn region pugAngular2 start="(" end=")" contains=htmlEvent syn region pugAngular2 start="(" end=")" contains=htmlEvent
syn region pugAttributes matchgroup=pugAttributesDelimiter start="(" end=")" contained contains=@htmlJavascript,pugHtmlArg,pugAngular2,htmlArg,htmlEvent,htmlCssDefinition nextgroup=@pugComponent syn region pugJavascriptString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contained
syn region pugJavascriptString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contained
syn region pugAttributes matchgroup=pugAttributesDelimiter start="(" end=")" contained contains=pugJavascriptString,pugHtmlArg,pugAngular2,htmlArg,htmlEvent,htmlCssDefinition nextgroup=@pugComponent
syn match pugClassChar "\." containedin=htmlTagName nextgroup=pugClass syn match pugClassChar "\." containedin=htmlTagName nextgroup=pugClass
syn match pugBlockExpansionChar ":\s\+" contained nextgroup=pugTag,pugClassChar,pugIdChar syn match pugBlockExpansionChar ":\s\+" contained nextgroup=pugTag,pugClassChar,pugIdChar
syn match pugIdChar "#[[{]\@!" contained nextgroup=pugId syn match pugIdChar "#[[{]\@!" contained nextgroup=pugId
@ -101,6 +103,7 @@ hi def link pugCommentTodo Todo
hi def link pugComment Comment hi def link pugComment Comment
hi def link pugCommentBlock Comment hi def link pugCommentBlock Comment
hi def link pugHtmlConditionalComment pugComment hi def link pugHtmlConditionalComment pugComment
hi def link pugJavascriptString String
let b:current_syntax = "pug" let b:current_syntax = "pug"

View File

@ -124,6 +124,8 @@ syn match rubyFloat "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*
syn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent syn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
syn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent syn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent
syn match rubyClassName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!"
syn match rubyModuleName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!"
syn match rubyConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" syn match rubyConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!"
syn match rubyClassVariable "@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display syn match rubyClassVariable "@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display
syn match rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display syn match rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display
@ -159,10 +161,10 @@ syn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(RUBY_\%(VERSION
" Normal Regular Expression {{{1 " Normal Regular Expression {{{1
if s:foldable('/') if s:foldable('/')
syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/[ \t=]\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/\%([ \t=]\|$\)\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
else else
syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial
syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/[ \t=]\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/\%([ \t=]\|$\)\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial
endif endif
" Generalized Regular Expression {{{1 " Generalized Regular Expression {{{1
@ -313,8 +315,8 @@ end
syn match rubyAliasDeclaration "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable nextgroup=rubyAliasDeclaration2 skipwhite syn match rubyAliasDeclaration "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable nextgroup=rubyAliasDeclaration2 skipwhite
syn match rubyAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable syn match rubyAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable
syn match rubyMethodDeclaration "[^[:space:];#(]\+" contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable syn match rubyMethodDeclaration "[^[:space:];#(]\+" contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable
syn match rubyClassDeclaration "[^[:space:];#<]\+" contained contains=rubyConstant,rubyOperator syn match rubyClassDeclaration "[^[:space:];#<]\+" contained contains=rubyClassName,rubyOperator
syn match rubyModuleDeclaration "[^[:space:];#<]\+" contained contains=rubyConstant,rubyOperator syn match rubyModuleDeclaration "[^[:space:];#<]\+" contained contains=rubyModuleName,rubyOperator
syn match rubyFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=rubyMethodDeclaration syn match rubyFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=rubyMethodDeclaration
syn match rubyFunction "\%(\s\|^\)\@1<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2 syn match rubyFunction "\%(\s\|^\)\@1<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2
syn match rubyFunction "\%([[:space:].]\|^\)\@2<=\%(\[\]=\=\|\*\*\|[-+!~]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration syn match rubyFunction "\%([[:space:].]\|^\)\@2<=\%(\[\]=\=\|\*\*\|[-+!~]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
@ -500,6 +502,8 @@ else
endif endif
hi def link rubyClassVariable rubyIdentifier hi def link rubyClassVariable rubyIdentifier
hi def link rubyConstant Type hi def link rubyConstant Type
hi def link rubyClassName rubyConstant
hi def link rubyModuleName rubyConstant
hi def link rubyGlobalVariable rubyIdentifier hi def link rubyGlobalVariable rubyIdentifier
hi def link rubyBlockParameter rubyIdentifier hi def link rubyBlockParameter rubyIdentifier
hi def link rubyInstanceVariable rubyIdentifier hi def link rubyInstanceVariable rubyIdentifier

View File

@ -152,7 +152,6 @@ syntax keyword swiftKeywords
\ public \ public
\ repeat \ repeat
\ required \ required
\ rethrows
\ return \ return
\ self \ self
\ set \ set
@ -161,7 +160,6 @@ syntax keyword swiftKeywords
\ super \ super
\ switch \ switch
\ throw \ throw
\ throws
\ try \ try
\ typealias \ typealias
\ unowned \ unowned
@ -171,6 +169,10 @@ syntax keyword swiftKeywords
\ while \ while
\ willSet \ willSet
syntax keyword swiftDefinitionModifier
\ rethrows
\ throws
syntax match swiftMultiwordKeywords "indirect case" syntax match swiftMultiwordKeywords "indirect case"
syntax match swiftMultiwordKeywords "indirect enum" syntax match swiftMultiwordKeywords "indirect enum"
" }}} " }}}
@ -226,6 +228,7 @@ syntax region swiftGenericsWrapper start="\v\<" end="\v\>" contains=swiftType tr
syntax region swiftLiteralWrapper start="\v\=\s*" skip="\v[^\[\]]\(\)" end="\v(\[\]|\(\))" contains=ALL transparent oneline syntax region swiftLiteralWrapper start="\v\=\s*" skip="\v[^\[\]]\(\)" end="\v(\[\]|\(\))" contains=ALL transparent oneline
syntax region swiftReturnWrapper start="\v-\>\s*" end="\v(\{|$)" contains=swiftType transparent oneline syntax region swiftReturnWrapper start="\v-\>\s*" end="\v(\{|$)" contains=swiftType transparent oneline
syntax match swiftType "\v<\u\w*" contained containedin=swiftTypeWrapper,swiftLiteralWrapper,swiftGenericsWrapper,swiftTypeCastWrapper syntax match swiftType "\v<\u\w*" contained containedin=swiftTypeWrapper,swiftLiteralWrapper,swiftGenericsWrapper,swiftTypeCastWrapper
syntax match swiftTypeDeclaration /->/ skipwhite nextgroup=swiftType
syntax keyword swiftImports import syntax keyword swiftImports import
syntax keyword swiftCastKeyword is as contained syntax keyword swiftCastKeyword is as contained
@ -255,6 +258,7 @@ highlight default link swiftMarker Comment
highlight default link swiftString String highlight default link swiftString String
highlight default link swiftInterpolatedWrapper Delimiter highlight default link swiftInterpolatedWrapper Delimiter
highlight default link swiftTypeDeclaration Delimiter
highlight default link swiftNumber Number highlight default link swiftNumber Number
highlight default link swiftBoolean Boolean highlight default link swiftBoolean Boolean
@ -273,6 +277,7 @@ highlight default link swiftPreprocessor PreProc
highlight default link swiftMethod Function highlight default link swiftMethod Function
highlight default link swiftProperty Identifier highlight default link swiftProperty Identifier
highlight default link swiftDefinitionModifier Define
highlight default link swiftConditionStatement PreProc highlight default link swiftConditionStatement PreProc
highlight default link swiftAvailability Normal highlight default link swiftAvailability Normal
highlight default link swiftAvailabilityArg Normal highlight default link swiftAvailabilityArg Normal

View File

@ -42,6 +42,7 @@ syn keyword terraDataTypeBI
\ aws_elb_service_account \ aws_elb_service_account
\ aws_iam_account_alias \ aws_iam_account_alias
\ aws_iam_policy_document \ aws_iam_policy_document
\ aws_iam_role
\ aws_iam_server_certificate \ aws_iam_server_certificate
\ aws_instance \ aws_instance
\ aws_ip_ranges \ aws_ip_ranges
@ -54,14 +55,25 @@ syn keyword terraDataTypeBI
\ aws_route_table \ aws_route_table
\ aws_s3_bucket_object \ aws_s3_bucket_object
\ aws_security_group \ aws_security_group
\ aws_sns_topic
\ aws_subnet \ aws_subnet
\ aws_subnet_ids
\ aws_vpc \ aws_vpc
\ aws_vpc_endpoint \ aws_vpc_endpoint
\ aws_vpc_endpoint_service \ aws_vpc_endpoint_service
\ aws_vpc_peering_connection \ aws_vpc_peering_connection
\ aws_vpn_gateway \ aws_vpn_gateway
\ azurerm_client_config \ azurerm_client_config
\ circonus_account
\ circonus_collector
\ consul_agent_self
\ consul_catalog_nodes
\ consul_catalog_service
\ consul_catalog_services
\ consul_keys \ consul_keys
\ dns_a_record_set
\ dns_cname_record_set
\ dns_txt_record_set
\ docker_registry_image \ docker_registry_image
\ external \ external
\ fastly_ip_ranges \ fastly_ip_ranges
@ -70,11 +82,16 @@ syn keyword terraDataTypeBI
\ newrelic_application \ newrelic_application
\ ns1_datasource \ ns1_datasource
\ null_data_source \ null_data_source
\ openstack_images_image_v2
\ openstack_networking_network_v2
\ opsgenie_user \ opsgenie_user
\ pagerduty_escalation_policy \ pagerduty_escalation_policy
\ pagerduty_schedule \ pagerduty_schedule
\ pagerduty_user \ pagerduty_user
\ pagerduty_vendor \ pagerduty_vendor
\ profitbricks_datacenter
\ profitbricks_image
\ profitbricks_location
\ scaleway_bootscript \ scaleway_bootscript
\ scaleway_image \ scaleway_image
\ template_cloudinit_config \ template_cloudinit_config
@ -84,6 +101,7 @@ syn keyword terraDataTypeBI
""" resource """ resource
syn keyword terraResourceTypeBI syn keyword terraResourceTypeBI
\ alicloud_db_instance
\ alicloud_disk \ alicloud_disk
\ alicloud_disk_attachment \ alicloud_disk_attachment
\ alicloud_eip \ alicloud_eip
@ -120,9 +138,13 @@ syn keyword terraResourceTypeBI
\ aws_api_gateway_integration_response \ aws_api_gateway_integration_response
\ aws_api_gateway_method \ aws_api_gateway_method
\ aws_api_gateway_method_response \ aws_api_gateway_method_response
\ aws_api_gateway_method_settings
\ aws_api_gateway_model \ aws_api_gateway_model
\ aws_api_gateway_resource \ aws_api_gateway_resource
\ aws_api_gateway_rest_api \ aws_api_gateway_rest_api
\ aws_api_gateway_stage
\ aws_api_gateway_usage_plan
\ aws_api_gateway_usage_plan_key
\ aws_app_cookie_stickiness_policy \ aws_app_cookie_stickiness_policy
\ aws_appautoscaling_policy \ aws_appautoscaling_policy
\ aws_appautoscaling_target \ aws_appautoscaling_target
@ -138,6 +160,8 @@ syn keyword terraResourceTypeBI
\ aws_cloudtrail \ aws_cloudtrail
\ aws_cloudwatch_event_rule \ aws_cloudwatch_event_rule
\ aws_cloudwatch_event_target \ aws_cloudwatch_event_target
\ aws_cloudwatch_log_destination
\ aws_cloudwatch_log_destination_policy
\ aws_cloudwatch_log_group \ aws_cloudwatch_log_group
\ aws_cloudwatch_log_metric_filter \ aws_cloudwatch_log_metric_filter
\ aws_cloudwatch_log_stream \ aws_cloudwatch_log_stream
@ -149,6 +173,7 @@ syn keyword terraResourceTypeBI
\ aws_codedeploy_app \ aws_codedeploy_app
\ aws_codedeploy_deployment_config \ aws_codedeploy_deployment_config
\ aws_codedeploy_deployment_group \ aws_codedeploy_deployment_group
\ aws_codepipeline
\ aws_config_config_rule \ aws_config_config_rule
\ aws_config_configuration_recorder \ aws_config_configuration_recorder
\ aws_config_configuration_recorder_status \ aws_config_configuration_recorder_status
@ -179,9 +204,11 @@ syn keyword terraResourceTypeBI
\ aws_ecs_task_definition \ aws_ecs_task_definition
\ aws_efs_file_system \ aws_efs_file_system
\ aws_efs_mount_target \ aws_efs_mount_target
\ aws_egress_only_internet_gateway
\ aws_eip \ aws_eip
\ aws_eip_association \ aws_eip_association
\ aws_elastic_beanstalk_application \ aws_elastic_beanstalk_application
\ aws_elastic_beanstalk_application_version
\ aws_elastic_beanstalk_configuration_template \ aws_elastic_beanstalk_configuration_template
\ aws_elastic_beanstalk_environment \ aws_elastic_beanstalk_environment
\ aws_elasticache_cluster \ aws_elasticache_cluster
@ -200,12 +227,14 @@ syn keyword terraResourceTypeBI
\ aws_flow_log \ aws_flow_log
\ aws_glacier_vault \ aws_glacier_vault
\ aws_iam_access_key \ aws_iam_access_key
\ aws_iam_account_alias
\ aws_iam_account_password_policy \ aws_iam_account_password_policy
\ aws_iam_group \ aws_iam_group
\ aws_iam_group_membership \ aws_iam_group_membership
\ aws_iam_group_policy \ aws_iam_group_policy
\ aws_iam_group_policy_attachment \ aws_iam_group_policy_attachment
\ aws_iam_instance_profile \ aws_iam_instance_profile
\ aws_iam_openid_connect_provider
\ aws_iam_policy \ aws_iam_policy
\ aws_iam_policy_attachment \ aws_iam_policy_attachment
\ aws_iam_role \ aws_iam_role
@ -238,6 +267,8 @@ syn keyword terraResourceTypeBI
\ aws_lightsail_domain \ aws_lightsail_domain
\ aws_lightsail_instance \ aws_lightsail_instance
\ aws_lightsail_key_pair \ aws_lightsail_key_pair
\ aws_lightsail_static_ip
\ aws_lightsail_static_ip_attachment
\ aws_load_balancer_backend_server_policy \ aws_load_balancer_backend_server_policy
\ aws_load_balancer_listener_policy \ aws_load_balancer_listener_policy
\ aws_load_balancer_policy \ aws_load_balancer_policy
@ -287,6 +318,7 @@ syn keyword terraResourceTypeBI
\ aws_security_group_rule \ aws_security_group_rule
\ aws_ses_active_receipt_rule_set \ aws_ses_active_receipt_rule_set
\ aws_ses_configuration_set \ aws_ses_configuration_set
\ aws_ses_domain_identity
\ aws_ses_event_destination \ aws_ses_event_destination
\ aws_ses_receipt_filter \ aws_ses_receipt_filter
\ aws_ses_receipt_rule \ aws_ses_receipt_rule
@ -367,6 +399,7 @@ syn keyword terraResourceTypeBI
\ azurerm_lb_probe \ azurerm_lb_probe
\ azurerm_lb_rule \ azurerm_lb_rule
\ azurerm_local_network_gateway \ azurerm_local_network_gateway
\ azurerm_managed_disk
\ azurerm_network_interface \ azurerm_network_interface
\ azurerm_network_security_group \ azurerm_network_security_group
\ azurerm_network_security_rule \ azurerm_network_security_rule
@ -408,6 +441,12 @@ syn keyword terraResourceTypeBI
\ chef_environment \ chef_environment
\ chef_node \ chef_node
\ chef_role \ chef_role
\ circonus_check
\ circonus_contact_group
\ circonus_graph
\ circonus_metric
\ circonus_metric_cluster
\ circonus_rule_set
\ clc_group \ clc_group
\ clc_load_balancer \ clc_load_balancer
\ clc_load_balancer_pool \ clc_load_balancer_pool
@ -450,16 +489,23 @@ syn keyword terraResourceTypeBI
\ consul_node \ consul_node
\ consul_prepared_query \ consul_prepared_query
\ consul_service \ consul_service
\ datadog_downtime
\ datadog_monitor \ datadog_monitor
\ datadog_timeboard \ datadog_timeboard
\ datadog_user
\ digitalocean_domain \ digitalocean_domain
\ digitalocean_droplet \ digitalocean_droplet
\ digitalocean_floating_ip \ digitalocean_floating_ip
\ digitalocean_loadbalancer
\ digitalocean_record \ digitalocean_record
\ digitalocean_ssh_key \ digitalocean_ssh_key
\ digitalocean_tag \ digitalocean_tag
\ digitalocean_volume \ digitalocean_volume
\ dme_record \ dme_record
\ dns_a_record_set
\ dns_aaaa_record_set
\ dns_cname_record
\ dns_ptr_record
\ dnsimple_record \ dnsimple_record
\ docker_container \ docker_container
\ docker_image \ docker_image
@ -469,8 +515,10 @@ syn keyword terraResourceTypeBI
\ fastly_service_v1 \ fastly_service_v1
\ github_issue_label \ github_issue_label
\ github_membership \ github_membership
\ github_organization_webhook
\ github_repository \ github_repository
\ github_repository_collaborator \ github_repository_collaborator
\ github_repository_webhook
\ github_team \ github_team
\ github_team_membership \ github_team_membership
\ github_team_repository \ github_team_repository
@ -503,6 +551,7 @@ syn keyword terraResourceTypeBI
\ google_compute_vpn_gateway \ google_compute_vpn_gateway
\ google_compute_vpn_tunnel \ google_compute_vpn_tunnel
\ google_container_cluster \ google_container_cluster
\ google_container_node_pool
\ google_dns_managed_zone \ google_dns_managed_zone
\ google_dns_record_set \ google_dns_record_set
\ google_project \ google_project
@ -539,6 +588,11 @@ syn keyword terraResourceTypeBI
\ influxdb_continuous_query \ influxdb_continuous_query
\ influxdb_database \ influxdb_database
\ influxdb_user \ influxdb_user
\ kubernetes_config_map
\ kubernetes_namespace
\ kubernetes_persistent_volume
\ kubernetes_persistent_volume_claim
\ kubernetes_secret
\ librato_alert \ librato_alert
\ librato_service \ librato_service
\ librato_space \ librato_space
@ -558,6 +612,7 @@ syn keyword terraResourceTypeBI
\ openstack_blockstorage_volume_attach_v2 \ openstack_blockstorage_volume_attach_v2
\ openstack_blockstorage_volume_v1 \ openstack_blockstorage_volume_v1
\ openstack_blockstorage_volume_v2 \ openstack_blockstorage_volume_v2
\ openstack_compute_floatingip_associate_v2
\ openstack_compute_floatingip_v2 \ openstack_compute_floatingip_v2
\ openstack_compute_instance_v2 \ openstack_compute_instance_v2
\ openstack_compute_keypair_v2 \ openstack_compute_keypair_v2
@ -567,6 +622,7 @@ syn keyword terraResourceTypeBI
\ openstack_fw_firewall_v1 \ openstack_fw_firewall_v1
\ openstack_fw_policy_v1 \ openstack_fw_policy_v1
\ openstack_fw_rule_v1 \ openstack_fw_rule_v1
\ openstack_images_image_v2
\ openstack_lb_listener_v2 \ openstack_lb_listener_v2
\ openstack_lb_loadbalancer_v2 \ openstack_lb_loadbalancer_v2
\ openstack_lb_member_v1 \ openstack_lb_member_v1
@ -619,12 +675,15 @@ syn keyword terraResourceTypeBI
\ rabbitmq_queue \ rabbitmq_queue
\ rabbitmq_user \ rabbitmq_user
\ rabbitmq_vhost \ rabbitmq_vhost
\ rancher_certificate
\ rancher_environment \ rancher_environment
\ rancher_host
\ rancher_registration_token \ rancher_registration_token
\ rancher_registry \ rancher_registry
\ rancher_registry_credential \ rancher_registry_credential
\ rancher_stack \ rancher_stack
\ random_id \ random_id
\ random_pet
\ random_shuffle \ random_shuffle
\ rundeck_job \ rundeck_job
\ rundeck_private_key \ rundeck_private_key
@ -638,6 +697,9 @@ syn keyword terraResourceTypeBI
\ scaleway_volume_attachment \ scaleway_volume_attachment
\ softlayer_ssh_key \ softlayer_ssh_key
\ softlayer_virtual_guest \ softlayer_virtual_guest
\ spotinst_aws_group
\ spotinst_healthcheck
\ spotinst_subscription
\ statuscake_test \ statuscake_test
\ tls_cert_request \ tls_cert_request
\ tls_locally_signed_cert \ tls_locally_signed_cert

View File

@ -28,7 +28,7 @@ endif
setlocal iskeyword+=- setlocal iskeyword+=-
syntax case match syntax case match
syn keyword tmuxAction any current none syn keyword tmuxAction any current default none
syn keyword tmuxBoolean off on syn keyword tmuxBoolean off on
syn keyword tmuxCmds syn keyword tmuxCmds
@ -261,24 +261,36 @@ syn keyword tmuxOptsSetw
\ force-width \ force-width
\ main-pane-height \ main-pane-height
\ main-pane-width \ main-pane-width
\ message-attr
\ message-bg
\ message-fg
\ mode-keys \ mode-keys
\ mode-style \ mode-style
\ monitor-activity \ monitor-activity
\ monitor-silence \ monitor-silence
\ other-pane-height \ other-pane-height
\ other-pane-width \ other-pane-width
\ pane-active-border-bg
\ pane-active-border-fg
\ pane-active-border-style \ pane-active-border-style
\ pane-base-index \ pane-base-index
\ pane-border-fg
\ pane-border-style \ pane-border-style
\ remain-on-exit \ remain-on-exit
\ synchronize-panes \ synchronize-panes
\ window-active-style \ window-active-style
\ window-status-activity-attr
\ window-status-activity-bg
\ window-status-activity-fg
\ window-status-activity-style \ window-status-activity-style
\ window-status-bell-style \ window-status-bell-style
\ window-status-bg
\ window-status-current-attr
\ window-status-current-bg \ window-status-current-bg
\ window-status-current-fg \ window-status-current-fg
\ window-status-current-format \ window-status-current-format
\ window-status-current-style \ window-status-current-style
\ window-status-fg
\ window-status-format \ window-status-format
\ window-status-last-style \ window-status-last-style
\ window-status-separator \ window-status-separator
@ -290,7 +302,7 @@ syn keyword tmuxOptsSetw
syn keyword tmuxTodo FIXME NOTE TODO XXX contained syn keyword tmuxTodo FIXME NOTE TODO XXX contained
syn match tmuxKey /\(C-\|M-\|\^\)\+\S\+/ display syn match tmuxKey /\(C-\|M-\|\^\)\+\S\+/ display
syn match tmuxNumber /\d\+/ display syn match tmuxNumber /\<\d\+\>/ display
syn match tmuxOptions /\s-\a\+/ display syn match tmuxOptions /\s-\a\+/ display
syn match tmuxVariable /\w\+=/ display syn match tmuxVariable /\w\+=/ display
syn match tmuxVariableExpansion /\${\=\w\+}\=/ display syn match tmuxVariableExpansion /\${\=\w\+}\=/ display

View File

@ -8,90 +8,55 @@ if exists("b:current_syntax")
finish finish
endif endif
if !exists("s:syntaxes") runtime! syntax/html.vim
" Search available syntax files. unlet! b:current_syntax
function s:search_syntaxes(...)
let syntaxes = {}
let names = a:000
for name in names
let syntaxes[name] = 0
endfor
for path in split(&runtimepath, ',') ""
if isdirectory(path . '/syntax') " Get the pattern for a HTML {name} attribute with {value}.
for name in names function! s:attr(name, value)
let syntaxes[name] = syntaxes[name] || filereadable(path . '/syntax/' . name . '.vim') return a:name . '=\("\|''\)[^\1]*' . a:value . '[^\1]*\1'
endfor endfunction
""
" Check whether a syntax file for a given {language} exists.
function! s:syntax_available(language)
return !empty(globpath(&runtimepath, 'syntax/' . a:language . '.vim'))
endfunction
""
" Register {language} for a given {tag}. If [attr_override] is given and not
" empty, it will be used for the attribute pattern.
function! s:register_language(language, tag, ...)
let attr_override = a:0 ? a:1 : ''
let attr = !empty(attr_override) ? attr_override : s:attr('lang', a:language)
if s:syntax_available(a:language)
execute 'syntax include @' . a:language . ' syntax/' . a:language . '.vim'
unlet! b:current_syntax
execute 'syntax region vue_' . a:language
\ 'keepend'
\ 'start=/<' . a:tag . ' \_[^>]*' . attr . '\_[^>]*>/'
\ 'end="</' . a:tag . '>"me=s-1'
\ 'contains=@' . a:language . ',vueSurroundingTag'
\ 'fold'
endif endif
endfor endfunction
return syntaxes
endfunction
let s:syntaxes = s:search_syntaxes('pug', 'slm', 'coffee', 'stylus', 'sass', 'scss', 'less', 'typescript') call s:register_language('pug', 'template', s:attr('lang', '\%(pug\|jade\)'))
endif call s:register_language('slm', 'template')
call s:register_language('handlebars', 'template')
call s:register_language('haml', 'template')
call s:register_language('typescript', 'script', '\%(lang=\("\|''\)[^\1]*\(ts\|typescript\)[^\1]*\1\|ts\)')
call s:register_language('coffee', 'script')
call s:register_language('stylus', 'style')
call s:register_language('sass', 'style')
call s:register_language('scss', 'style')
call s:register_language('less', 'style')
syn region vueSurroundingTag contained start=+<\(script\|style\|template\)+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
syntax include @HTML syntax/html.vim syn keyword htmlSpecialTagName contained template
unlet! b:current_syntax syn keyword htmlArg contained scoped ts
syntax region html keepend start=/^<template\_[^>]*>/ end=/^<\/template>/ contains=@HTML fold syn match htmlArg "[@v:][-:.0-9_a-z]*\>" contained
if s:syntaxes.pug
syntax include @PUG syntax/pug.vim
unlet! b:current_syntax
syntax region pug keepend start=/<template lang=\("\|'\)[^\1]*pug[^\1]*\1>/ end="</template>" contains=@PUG fold
syntax region pug keepend start=/<template lang=\("\|'\)[^\1]*jade[^\1]*\1>/ end="</template>" contains=@PUG fold
endif
if s:syntaxes.slm
syntax include @SLM syntax/slm.vim
unlet! b:current_syntax
syntax region slm keepend start=/<template lang=\("\|'\)[^\1]*slm[^\1]*\1>/ end="</template>" contains=@SLM fold
endif
syntax include @JS syntax/javascript.vim
unlet! b:current_syntax
syntax region javascript keepend matchgroup=Delimiter start=/<script\( lang="babel"\)\?\( type="text\/babel"\)\?>/ end="</script>" contains=@JS fold
if s:syntaxes.typescript
syntax include @TS syntax/typescript.vim
unlet! b:current_syntax
syntax region typescript keepend matchgroup=Delimiter start=/<script \_[^>]*\(lang=\("\|'\)[^\2]*\(ts\|typescript\)[^\2]*\2\|ts\)\_[^>]*>/ end="</script>" contains=@TS fold
endif
if s:syntaxes.coffee
syntax include @COFFEE syntax/coffee.vim
unlet! b:current_syntax
" Matchgroup seems to be necessary for coffee
syntax region coffee keepend matchgroup=Delimiter start="<script lang=\"coffee\">" end="</script>" contains=@COFFEE fold
endif
syntax include @CSS syntax/css.vim
unlet! b:current_syntax
syntax region css keepend start=/<style\_[^>]*>/ end="</style>" contains=@CSS fold
if s:syntaxes.stylus
syntax include @stylus syntax/stylus.vim
unlet! b:current_syntax
syntax region stylus keepend start=/<style \_[^>]*lang=\("\|'\)[^\1]*stylus[^\1]*\1\_[^>]*>/ end="</style>" contains=@stylus fold
endif
if s:syntaxes.sass
syntax include @sass syntax/sass.vim
unlet! b:current_syntax
syntax region sass keepend start=/<style \_[^>]*lang=\("\|'\)[^\1]*sass[^\1]*\1\_[^>]*>/ end="</style>" contains=@sass fold
endif
if s:syntaxes.scss
syntax include @scss syntax/scss.vim
unlet! b:current_syntax
syntax region scss keepend start=/<style \_[^>]*lang=\("\|'\)[^\1]*scss[^\1]*\1\_[^>]*>/ end="</style>" contains=@scss fold
endif
if s:syntaxes.less
syntax include @less syntax/less.vim
unlet! b:current_syntax
syntax region less keepend matchgroup=PreProc start=/<style \_[^>]*lang=\("\|'\)[^\1]*less[^\1]*\1\_[^>]*>/ end="</style>" contains=@less fold
endif
let b:current_syntax = "vue" let b:current_syntax = "vue"