Update
This commit is contained in:
parent
9f735b1fe7
commit
0801eac01a
@ -18,4 +18,11 @@ if g:terraform_align && exists(':Tabularize')
|
|||||||
endfunction
|
endfunction
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Match the identation put in place by Hashicorp and :TerraformFmt, https://github.com/hashivim/vim-terraform/issues/21
|
||||||
|
if get(g:, "terraform_align", 1)
|
||||||
|
setlocal tabstop=2
|
||||||
|
setlocal softtabstop=2
|
||||||
|
setlocal shiftwidth=2
|
||||||
|
endif
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -24,6 +24,16 @@ syn match cCustomParen "(" contains=cParen contains=cCppParen
|
|||||||
syn match cCustomFunc "\w\+\s*(\@=" contains=cCustomParen
|
syn match cCustomFunc "\w\+\s*(\@=" contains=cCustomParen
|
||||||
hi def link cCustomFunc Function
|
hi def link cCustomFunc Function
|
||||||
|
|
||||||
|
" -----------------------------------------------------------------------------
|
||||||
|
" Highlight member variable names.
|
||||||
|
" -----------------------------------------------------------------------------
|
||||||
|
if exists('g:cpp_member_variable_highlight') && g:cpp_member_variable_highlight
|
||||||
|
syn match cCustomDot "\." contained
|
||||||
|
syn match cCustomPtr "->" contained
|
||||||
|
syn match cCustomMemVar "\(\.\|->\)\w\+" contains=cCustomDot,cCustomPtr
|
||||||
|
hi def link cCustomMemVar Function
|
||||||
|
endif
|
||||||
|
|
||||||
" -----------------------------------------------------------------------------
|
" -----------------------------------------------------------------------------
|
||||||
" Source: aftersyntaxc.vim
|
" Source: aftersyntaxc.vim
|
||||||
" -----------------------------------------------------------------------------
|
" -----------------------------------------------------------------------------
|
||||||
|
@ -557,6 +557,7 @@ syntax keyword cppSTLios defaultfloat
|
|||||||
syntax keyword cppSTLios endl
|
syntax keyword cppSTLios endl
|
||||||
syntax keyword cppSTLios ends
|
syntax keyword cppSTLios ends
|
||||||
syntax keyword cppSTLios fixed
|
syntax keyword cppSTLios fixed
|
||||||
|
syntax keyword cppSTLios floatfield
|
||||||
syntax keyword cppSTLios flush
|
syntax keyword cppSTLios flush
|
||||||
syntax keyword cppSTLios get_money
|
syntax keyword cppSTLios get_money
|
||||||
syntax keyword cppSTLios get_time
|
syntax keyword cppSTLios get_time
|
||||||
|
@ -34,6 +34,22 @@ syn region ShaderScript
|
|||||||
\ end="</script>"me=s-1
|
\ end="</script>"me=s-1
|
||||||
\ contains=@GLSL,htmlScriptTag,@htmlPreproc
|
\ contains=@GLSL,htmlScriptTag,@htmlPreproc
|
||||||
|
|
||||||
|
endif
|
||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'html5') == -1
|
||||||
|
|
||||||
|
" Vim syntax file
|
||||||
|
" Language: HTML (version 5.1)
|
||||||
|
" Last Change: 2017 Feb 15
|
||||||
|
" License: Public domain
|
||||||
|
" (but let me know if you like :) )
|
||||||
|
"
|
||||||
|
" Maintainer: Kao, Wei-Ko(othree) ( othree AT gmail DOT com )
|
||||||
|
|
||||||
|
" Comment
|
||||||
|
" https://github.com/w3c/html/issues/694
|
||||||
|
syntax region htmlComment start=+<!--+ end=+-->+ contains=@Spell
|
||||||
|
syntax region htmlComment start=+<!DOCTYPE+ keepend end=+>+
|
||||||
|
|
||||||
endif
|
endif
|
||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'less') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'less') == -1
|
||||||
|
|
||||||
|
@ -21,9 +21,7 @@ if version < 600
|
|||||||
endif
|
endif
|
||||||
syntax clear
|
syntax clear
|
||||||
|
|
||||||
syn match yamlDelimiter "[:,-]"
|
|
||||||
syn match yamlBlock "[\[\]\{\}\|\>]"
|
syn match yamlBlock "[\[\]\{\}\|\>]"
|
||||||
syn match yamlOperator "[?^+-]\|=>"
|
|
||||||
|
|
||||||
syn region yamlComment start="\#" end="$"
|
syn region yamlComment start="\#" end="$"
|
||||||
syn match yamlIndicator "#YAML:\S\+"
|
syn match yamlIndicator "#YAML:\S\+"
|
||||||
@ -41,10 +39,11 @@ 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\S\+\ze\s*:"
|
||||||
|
syn match yamlKey "^\s*-\s*\zs\S\+\ze\s*:"
|
||||||
syn match yamlAnchor "&\S\+"
|
syn match yamlAnchor "&\S\+"
|
||||||
syn match yamlAlias "*\S\+"
|
syn match yamlAlias "*\S\+"
|
||||||
|
|
||||||
" Setupt the hilighting links
|
" Setup the highlighting links
|
||||||
|
|
||||||
hi link yamlConstant Keyword
|
hi link yamlConstant Keyword
|
||||||
hi link yamlIndicator PreCondit
|
hi link yamlIndicator PreCondit
|
||||||
@ -55,10 +54,7 @@ hi link yamlType Type
|
|||||||
|
|
||||||
hi link yamlComment Comment
|
hi link yamlComment Comment
|
||||||
hi link yamlBlock Operator
|
hi link yamlBlock Operator
|
||||||
hi link yamlOperator Operator
|
|
||||||
hi link yamlDelimiter Delimiter
|
|
||||||
hi link yamlString String
|
hi link yamlString String
|
||||||
hi link yamlEscape Special
|
hi link yamlEscape Special
|
||||||
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -68,5 +68,86 @@ function! dart#tojs(q_args) abort
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" Finds the path to `uri`.
|
||||||
|
"
|
||||||
|
" If the file is a package: uri, looks for a .packages file to resolve the path.
|
||||||
|
" If the path cannot be resolved, or is not a package: uri, returns the
|
||||||
|
" original.
|
||||||
|
function! dart#resolveUri(uri) abort
|
||||||
|
if a:uri !~ 'package:'
|
||||||
|
return a:uri
|
||||||
|
endif
|
||||||
|
let package_name = substitute(a:uri, 'package:\(\w\+\)\/.*', '\1', '')
|
||||||
|
let [found, package_map] = s:PackageMap()
|
||||||
|
if !found
|
||||||
|
call s:error('cannot find .packages file')
|
||||||
|
return a:uri
|
||||||
|
endif
|
||||||
|
if !has_key(package_map, package_name)
|
||||||
|
call s:error('no package mapping for '.package_name)
|
||||||
|
return a:uri
|
||||||
|
endif
|
||||||
|
let package_lib = package_map[package_name]
|
||||||
|
return substitute(a:uri,
|
||||||
|
\ 'package:'.package_name,
|
||||||
|
\ escape(package_map[package_name], '\'),
|
||||||
|
\ '')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" A map from package name to lib directory parse from a '.packages' file.
|
||||||
|
"
|
||||||
|
" Returns [found, package_map]
|
||||||
|
function! s:PackageMap() abort
|
||||||
|
let [found, dot_packages] = s:DotPackagesFile()
|
||||||
|
if !found
|
||||||
|
return [v:false, {}]
|
||||||
|
endif
|
||||||
|
let dot_packages_dir = fnamemodify(dot_packages, ':p:h')
|
||||||
|
let lines = readfile(dot_packages)
|
||||||
|
let map = {}
|
||||||
|
for line in lines
|
||||||
|
if line =~ '\s*#'
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
let package = substitute(line, ':.*$', '', '')
|
||||||
|
let lib_dir = substitute(line, '^[^:]*:', '', '')
|
||||||
|
if lib_dir =~ 'file:/'
|
||||||
|
let lib_dir = substitute(lib_dir, 'file://', '', '')
|
||||||
|
if lib_dir =~ '/[A-Z]:/'
|
||||||
|
let lib_dir = lib_dir[1:]
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let lib_dir = resolve(dot_packages_dir.'/'.lib_dir)
|
||||||
|
endif
|
||||||
|
if lib_dir =~ '/$'
|
||||||
|
let lib_dir = lib_dir[:len(lib_dir) - 2]
|
||||||
|
endif
|
||||||
|
let map[package] = lib_dir
|
||||||
|
endfor
|
||||||
|
return [v:true, map]
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Finds a file name '.packages' in the cwd, or in any directory above the open
|
||||||
|
" file.
|
||||||
|
"
|
||||||
|
" Returns [found, file].
|
||||||
|
function! s:DotPackagesFile() abort
|
||||||
|
if filereadable('.packages')
|
||||||
|
return [v:true, '.packages']
|
||||||
|
endif
|
||||||
|
let dir_path = expand('%:p:h')
|
||||||
|
while v:true
|
||||||
|
let file_path = dir_path.'/.packages'
|
||||||
|
if filereadable(file_path)
|
||||||
|
return [v:true, file_path]
|
||||||
|
endif
|
||||||
|
let parent = fnamemodify(dir_path, ':h')
|
||||||
|
if dir_path == parent
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let dir_path = parent
|
||||||
|
endwhile
|
||||||
|
return [v:false, '']
|
||||||
|
endfunction
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -589,13 +589,15 @@ class VimRubyCompletion
|
|||||||
# {{{ main completion code
|
# {{{ main completion code
|
||||||
def self.preload_rails
|
def self.preload_rails
|
||||||
a = VimRubyCompletion.new
|
a = VimRubyCompletion.new
|
||||||
require 'Thread'
|
if VIM::evaluate("has('nvim')") == 0
|
||||||
|
require 'thread'
|
||||||
Thread.new(a) do |b|
|
Thread.new(a) do |b|
|
||||||
begin
|
begin
|
||||||
b.load_rails
|
b.load_rails
|
||||||
rescue
|
rescue
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
a.load_rails
|
a.load_rails
|
||||||
rescue
|
rescue
|
||||||
end
|
end
|
||||||
|
@ -3,33 +3,220 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'html5') == -1
|
|||||||
" Vim completion for WAI-ARIA data file
|
" Vim completion for WAI-ARIA data file
|
||||||
" Language: HTML + WAI-ARIA
|
" Language: HTML + WAI-ARIA
|
||||||
" Maintainer: othree <othree@gmail.com>
|
" Maintainer: othree <othree@gmail.com>
|
||||||
" Last Change: 2010 Sep 09
|
" Last Change: 2017 Mar 07
|
||||||
|
|
||||||
" WAI_ARIA: {{{
|
" WAI_ARIA: {{{
|
||||||
" Ref: http://www.w3.org/TR/wai-aria/
|
" Ref: https://www.w3.org/TR/wai-aria-1.1/
|
||||||
" Version: Draft 15 December 2009
|
" Version: W3C Candidate Recommendation 27 October 2016
|
||||||
|
|
||||||
let abstract_role = {}
|
let abstract_role = {}
|
||||||
let role_attributes = {}
|
let role_attributes = {}
|
||||||
let default_role = {}
|
let default_role = {}
|
||||||
|
|
||||||
" Ref: http://www.w3.org/TR/wai-aria/roles
|
" Ref: https://www.w3.org/TR/wai-aria-1.1/#roles_categorization
|
||||||
" Version: Draft 15 December 2009
|
" Version: W3C Candidate Recommendation 27 October 2016
|
||||||
let widget_role = ['alert', 'alertdialog', 'button', 'checkbox', 'combobox', 'dialog', 'gridcell', 'link', 'log', 'marquee', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'progressbar', 'radio', 'radiogroup', 'scrollbar', 'slider', 'spinbutton', 'status', 'tab', 'tabpanel', 'textbox', 'timer', 'tooltip', 'treeitem', 'combobox', 'grid', 'listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid']
|
let widget_role = [
|
||||||
let document_structure = ['article', 'columnheader', 'definition', 'directory', 'document', 'group', 'heading', 'img', 'list', 'listitem', 'math', 'note', 'presentation', 'region', 'row', 'rowheader', 'separator']
|
\ 'alert',
|
||||||
let landmark_role = ['application', 'banner', 'complementary', 'contentinfo', 'form', 'main', 'navigation', 'search']
|
\ 'alertdialog',
|
||||||
let dpub_role = ['dpub-abstract', 'dpub-afterword', 'dpub-appendix', 'dpub-biblioentry', 'dpub-bibliography', 'dpub-biblioref', 'dpub-chapter', 'dpub-cover', 'dpub-epilogue', 'dpub-footnote', 'dpub-footnotes', 'dpub-foreword', 'dpub-glossary', 'dpub-glossdef', 'dpub-glossref', 'dpub-glossterm', 'dpub-index', 'dpub-locator', 'dpub-noteref', 'dpub-notice', 'dpub-pagebreak', 'dpub-pagelist', 'dpub-part', 'dpub-preface', 'dpub-prologue', 'dpub-pullquote', 'dpub-qna', 'dpub-subtitle', 'dpub-tip', 'dpub-title', 'dpub-toc']
|
\ 'button',
|
||||||
|
\ 'checkbox',
|
||||||
|
\ 'combobox',
|
||||||
|
\ 'dialog',
|
||||||
|
\ 'gridcell',
|
||||||
|
\ 'link',
|
||||||
|
\ 'log',
|
||||||
|
\ 'marquee',
|
||||||
|
\ 'menuitem',
|
||||||
|
\ 'menuitemcheckbox',
|
||||||
|
\ 'menuitemradio',
|
||||||
|
\ 'option',
|
||||||
|
\ 'progressbar',
|
||||||
|
\ 'radio',
|
||||||
|
\ 'radiogroup',
|
||||||
|
\ 'scrollbar',
|
||||||
|
\ 'searchbox',
|
||||||
|
\ 'slider',
|
||||||
|
\ 'spinbutton',
|
||||||
|
\ 'status',
|
||||||
|
\ 'switch',
|
||||||
|
\ 'tab',
|
||||||
|
\ 'tabpanel',
|
||||||
|
\ 'textbox',
|
||||||
|
\ 'timer',
|
||||||
|
\ 'tooltip',
|
||||||
|
\ 'treeitem',
|
||||||
|
\ 'combobox',
|
||||||
|
\ 'grid',
|
||||||
|
\ 'listbox',
|
||||||
|
\ 'menu',
|
||||||
|
\ 'menubar',
|
||||||
|
\ 'radiogroup',
|
||||||
|
\ 'tablist',
|
||||||
|
\ 'tree',
|
||||||
|
\ 'treegrid'
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
let document_structure = [
|
||||||
|
\ 'article',
|
||||||
|
\ 'cell',
|
||||||
|
\ 'columnheader',
|
||||||
|
\ 'definition',
|
||||||
|
\ 'directory',
|
||||||
|
\ 'document',
|
||||||
|
\ 'feed',
|
||||||
|
\ 'figure',
|
||||||
|
\ 'group',
|
||||||
|
\ 'heading',
|
||||||
|
\ 'img',
|
||||||
|
\ 'list',
|
||||||
|
\ 'listitem',
|
||||||
|
\ 'math',
|
||||||
|
\ 'none',
|
||||||
|
\ 'note',
|
||||||
|
\ 'presentation',
|
||||||
|
\ 'region',
|
||||||
|
\ 'row',
|
||||||
|
\ 'rowheader',
|
||||||
|
\ 'separator',
|
||||||
|
\ 'table',
|
||||||
|
\ 'term'
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
let landmark_role = [
|
||||||
|
\ 'application',
|
||||||
|
\ 'banner',
|
||||||
|
\ 'complementary',
|
||||||
|
\ 'contentinfo',
|
||||||
|
\ 'form',
|
||||||
|
\ 'main',
|
||||||
|
\ 'navigation',
|
||||||
|
\ 'search'
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
" Ref: https://www.w3.org/TR/dpub-aria-1.0/
|
||||||
|
" Version: W3C Candidate Recommendation 15 December 2016
|
||||||
|
let dpub_role = [
|
||||||
|
\ 'dpub-abstract',
|
||||||
|
\ 'dpub-afterword',
|
||||||
|
\ 'dpub-appendix',
|
||||||
|
\ 'dpub-biblioentry',
|
||||||
|
\ 'dpub-bibliography',
|
||||||
|
\ 'dpub-biblioref',
|
||||||
|
\ 'dpub-chapter',
|
||||||
|
\ 'dpub-cover',
|
||||||
|
\ 'dpub-epilogue',
|
||||||
|
\ 'dpub-footnote',
|
||||||
|
\ 'dpub-footnotes',
|
||||||
|
\ 'dpub-foreword',
|
||||||
|
\ 'dpub-glossary',
|
||||||
|
\ 'dpub-glossdef',
|
||||||
|
\ 'dpub-glossref',
|
||||||
|
\ 'dpub-glossterm',
|
||||||
|
\ 'dpub-index',
|
||||||
|
\ 'dpub-locator',
|
||||||
|
\ 'dpub-noteref',
|
||||||
|
\ 'dpub-notice',
|
||||||
|
\ 'dpub-pagebreak',
|
||||||
|
\ 'dpub-pagelist',
|
||||||
|
\ 'dpub-part',
|
||||||
|
\ 'dpub-preface',
|
||||||
|
\ 'dpub-prologue',
|
||||||
|
\ 'dpub-pullquote',
|
||||||
|
\ 'dpub-qna',
|
||||||
|
\ 'dpub-subtitle',
|
||||||
|
\ 'dpub-tip',
|
||||||
|
\ 'dpub-title',
|
||||||
|
\ 'dpub-toc'
|
||||||
|
\ ]
|
||||||
|
|
||||||
let role = extend(widget_role, document_structure)
|
let role = extend(widget_role, document_structure)
|
||||||
let role = extend(role, landmark_role)
|
let role = extend(role, landmark_role)
|
||||||
let role = extend(role, dpub_role)
|
let role = extend(role, dpub_role)
|
||||||
|
|
||||||
" http://www.w3.org/TR/wai-aria/states_and_properties#state_prop_taxonomy
|
" https://www.w3.org/TR/wai-aria-1.1/#states_and_properties
|
||||||
"let global_states_and_properties = {'aria-atomic': ['true', 'false'], 'aria-busy': ['true', 'false'], 'aria-controls': [], 'aria-describedby': [], 'aria-disabled': ['true', 'false'], 'aria-dropeffect': ['copy', 'move', 'link', 'execute', 'popup', 'none'], 'aria-flowto': [], 'aria-grabbed': ['true', 'false', 'undefined'], 'aria-haspopup': ['true', 'false'], 'aria-hidden': ['true', 'false'], 'aria-invalid': ['grammar', 'spelling', 'true', 'false'], 'aria-label': [], 'aria-labelledby': [], 'aria-live': ['off', 'polite', 'assertive'], 'aria-owns': [], 'aria-relevant': ['additions', 'removals', 'text', 'all']}
|
let global_states_and_properties = {
|
||||||
let widget_attributes = {'aria-autocomplete': ['inline', 'list', 'both', 'none'], 'aria-checked': ['true', 'false', 'mixed', 'undefined'], 'aria-disabled': ['true', 'false'], 'aria-expanded': ['true', 'false', 'undefined'], 'aria-haspopup': ['true', 'false'], 'aria-hidden': ['true', 'false'], 'aria-invalid': ['grammar', 'spelling', 'true', 'false'], 'aria-label': [], 'aria-level': [], 'aria-multiline': ['true', 'false'], 'aria-multiselectable': ['true', 'false'], 'aria-orientation': ['horizontal', 'vertical'], 'aria-pressed': ['true', 'false', 'mixed', 'undefined'], 'aria-readonly': ['true', 'false'], 'aria-required': ['true', 'false'], 'aria-selected': ['true', 'false', 'undefined'], 'aria-sort': ['ascending', 'descending', 'none', 'other'], 'aria-valuemax': [], 'aria-valuemin': [], 'aria-valuenow': [], 'aria-valuetext': []}
|
\ 'aria-atomic': ['true', 'false'],
|
||||||
let live_region_attributes = {'aria-atomic': ['true', 'false'], 'aria-busy': ['true', 'false'], 'aria-live': ['off', 'polite', 'assertive'], 'aria-relevant': ['additions', 'removals', 'text', 'all', 'additions text']}
|
\ 'aria-busy': ['true', 'false'],
|
||||||
let drag_and_drop_attributes = {'aria-dropeffect': ['copy', 'move', 'link', 'execute', 'popup', 'none'], 'aria-grabbed': ['true', 'false', 'undefined']}
|
\ 'aria-controls': [],
|
||||||
let relationship_attributes = {'aria-activedescendant': [], 'aria-controls': [], 'aria-describedby': [], 'aria-flowto': [], 'aria-labelledby': [], 'aria-owns': [], 'aria-posinset': [], 'aria-setsize': []}
|
\ 'aria-current': [],
|
||||||
let aria_attributes = widget_attributes
|
\ 'aria-describedby': [],
|
||||||
|
\ 'aria-disabled': ['true', 'false'],
|
||||||
|
\ 'aria-dropeffect': ['copy', 'move', 'link', 'execute', 'popup', 'none'],
|
||||||
|
\ 'aria-errormessage': [],
|
||||||
|
\ 'aria-flowto': [],
|
||||||
|
\ 'aria-grabbed': ['true', 'false', 'undefined'],
|
||||||
|
\ 'aria-haspopup': ['true', 'false'],
|
||||||
|
\ 'aria-hidden': ['true', 'false'],
|
||||||
|
\ 'aria-invalid': ['grammar', 'spelling', 'true', 'false'],
|
||||||
|
\ 'aria-keyshortcuts': [],
|
||||||
|
\ 'aria-label': [],
|
||||||
|
\ 'aria-labelledby': [],
|
||||||
|
\ 'aria-live': ['off', 'polite', 'assertive'],
|
||||||
|
\ 'aria-owns': [],
|
||||||
|
\ 'aria-relevant': ['additions', 'removals', 'text', 'all'],
|
||||||
|
\ 'aria-roledescription': [],
|
||||||
|
\ }
|
||||||
|
|
||||||
|
let widget_attributes = {
|
||||||
|
\ 'aria-autocomplete': ['inline', 'list', 'both', 'none'],
|
||||||
|
\ 'aria-checked': ['true', 'false', 'mixed', 'undefined'],
|
||||||
|
\ 'aria-disabled': ['true', 'false'],
|
||||||
|
\ 'aria-errormessage': [],
|
||||||
|
\ 'aria-expanded': ['true', 'false', 'undefined'],
|
||||||
|
\ 'aria-haspopup': ['true', 'false'],
|
||||||
|
\ 'aria-hidden': ['true', 'false'],
|
||||||
|
\ 'aria-invalid': ['grammar', 'spelling', 'true', 'false'],
|
||||||
|
\ 'aria-label': [],
|
||||||
|
\ 'aria-level': [],
|
||||||
|
\ 'aria-modal': ['true', 'false'],
|
||||||
|
\ 'aria-multiline': ['true', 'false'],
|
||||||
|
\ 'aria-multiselectable': ['true', 'false'],
|
||||||
|
\ 'aria-orientation': ['horizontal', 'vertical'],
|
||||||
|
\ 'aria-placeholder': [],
|
||||||
|
\ 'aria-pressed': ['true', 'false', 'mixed', 'undefined'],
|
||||||
|
\ 'aria-readonly': ['true', 'false'],
|
||||||
|
\ 'aria-required': ['true', 'false'],
|
||||||
|
\ 'aria-selected': ['true', 'false', 'undefined'],
|
||||||
|
\ 'aria-sort': ['ascending', 'descending', 'none', 'other'],
|
||||||
|
\ 'aria-valuemax': [],
|
||||||
|
\ 'aria-valuemin': [],
|
||||||
|
\ 'aria-valuenow': [],
|
||||||
|
\ 'aria-valuetext': []
|
||||||
|
\ }
|
||||||
|
|
||||||
|
let live_region_attributes = {
|
||||||
|
\ 'aria-atomic': ['true', 'false'],
|
||||||
|
\ 'aria-busy': ['true', 'false'],
|
||||||
|
\ 'aria-live': ['off', 'polite', 'assertive'],
|
||||||
|
\ 'aria-relevant': ['additions', 'removals', 'text', 'all', 'additions text']
|
||||||
|
\ }
|
||||||
|
|
||||||
|
let drag_and_drop_attributes = {
|
||||||
|
\ 'aria-dropeffect': ['copy', 'move', 'link', 'execute', 'popup', 'none'],
|
||||||
|
\ 'aria-grabbed': ['true', 'false', 'undefined']
|
||||||
|
\ }
|
||||||
|
|
||||||
|
let relationship_attributes = {
|
||||||
|
\ 'aria-activedescendant': [],
|
||||||
|
\ 'aria-colcount': [],
|
||||||
|
\ 'aria-colindex': [],
|
||||||
|
\ 'aria-colspan': [],
|
||||||
|
\ 'aria-controls': [],
|
||||||
|
\ 'aria-describedby': [],
|
||||||
|
\ 'aria-details': [],
|
||||||
|
\ 'aria-errormessage': [],
|
||||||
|
\ 'aria-flowto': [],
|
||||||
|
\ 'aria-labelledby': [],
|
||||||
|
\ 'aria-owns': [],
|
||||||
|
\ 'aria-posinset': [],
|
||||||
|
\ 'aria-rowcount': [],
|
||||||
|
\ 'aria-rowindex': [],
|
||||||
|
\ 'aria-rowspan': [],
|
||||||
|
\ 'aria-setsize': []
|
||||||
|
\ }
|
||||||
|
|
||||||
|
let aria_attributes = global_states_and_properties
|
||||||
|
let aria_attributes = extend(aria_attributes, widget_attributes)
|
||||||
let aria_attributes = extend(aria_attributes, live_region_attributes)
|
let aria_attributes = extend(aria_attributes, live_region_attributes)
|
||||||
let aria_attributes = extend(aria_attributes, drag_and_drop_attributes)
|
let aria_attributes = extend(aria_attributes, drag_and_drop_attributes)
|
||||||
let aria_attributes = extend(aria_attributes, relationship_attributes)
|
let aria_attributes = extend(aria_attributes, relationship_attributes)
|
||||||
@ -84,6 +271,8 @@ let role_attributes['status'] = abstract_role['composite'] + role_attributes['re
|
|||||||
let role_attributes['tab'] = abstract_role['sectionhead'] + abstract_role['widget'] + ['aria-selected']
|
let role_attributes['tab'] = abstract_role['sectionhead'] + abstract_role['widget'] + ['aria-selected']
|
||||||
let role_attributes['tabpanel'] = role_attributes['region']
|
let role_attributes['tabpanel'] = role_attributes['region']
|
||||||
let role_attributes['textbox'] = abstract_role['input'] + ['aria-autocomplete', 'aria-multiline', 'aria-readonly', 'aria-required']
|
let role_attributes['textbox'] = abstract_role['input'] + ['aria-autocomplete', 'aria-multiline', 'aria-readonly', 'aria-required']
|
||||||
|
let role_attributes['searchbox'] = role_attributes['textbox']
|
||||||
|
let role_attributes['switch'] = role_attributes['checkbox']
|
||||||
let role_attributes['timer'] = role_attributes['status']
|
let role_attributes['timer'] = role_attributes['status']
|
||||||
let role_attributes['tooltip'] = abstract_role['section']
|
let role_attributes['tooltip'] = abstract_role['section']
|
||||||
let role_attributes['treeitem'] = role_attributes['listitem'] + role_attributes['option']
|
let role_attributes['treeitem'] = role_attributes['listitem'] + role_attributes['option']
|
||||||
@ -101,16 +290,22 @@ let role_attributes['treegrid'] = role_attributes['grid'] + role_attributes['tre
|
|||||||
let role_attributes['document'] = abstract_role['structure'] + ['aria-expanded']
|
let role_attributes['document'] = abstract_role['structure'] + ['aria-expanded']
|
||||||
|
|
||||||
let role_attributes['article'] = role_attributes['document'] + role_attributes['region']
|
let role_attributes['article'] = role_attributes['document'] + role_attributes['region']
|
||||||
|
let role_attributes['cell'] = abstract_role['section'] + ['aria-colindex', 'aria-colspan', 'aria-rowindex', 'aria-rowspan']
|
||||||
let role_attributes['columnheader'] = role_attributes['gridcell'] + abstract_role['sectionhead'] + ['aria-sort']
|
let role_attributes['columnheader'] = role_attributes['gridcell'] + abstract_role['sectionhead'] + ['aria-sort']
|
||||||
let role_attributes['definition'] = abstract_role['section']
|
let role_attributes['definition'] = abstract_role['section']
|
||||||
|
let role_attributes['feed'] = role_attributes['list']
|
||||||
|
let role_attributes['figure'] = abstract_role['section']
|
||||||
let role_attributes['heading'] = abstract_role['sectionhead'] + ['aria-level']
|
let role_attributes['heading'] = abstract_role['sectionhead'] + ['aria-level']
|
||||||
let role_attributes['img'] = abstract_role['section']
|
let role_attributes['img'] = abstract_role['section']
|
||||||
let role_attributes['math'] = abstract_role['section']
|
let role_attributes['math'] = abstract_role['section']
|
||||||
let role_attributes['note'] = abstract_role['section']
|
let role_attributes['note'] = abstract_role['section']
|
||||||
let role_attributes['presentation'] = abstract_role['structure']
|
let role_attributes['presentation'] = abstract_role['structure']
|
||||||
|
let role_attributes['none'] = role_attributes['presentation']
|
||||||
let role_attributes['row'] = role_attributes['group'] + ['aria-level', 'aria-selected']
|
let role_attributes['row'] = role_attributes['group'] + ['aria-level', 'aria-selected']
|
||||||
let role_attributes['rowheader'] = role_attributes['gridcell'] + abstract_role['sectionhead']
|
let role_attributes['rowheader'] = role_attributes['gridcell'] + abstract_role['sectionhead']
|
||||||
let role_attributes['separator'] = abstract_role['structure'] + ['aria-expanded']
|
let role_attributes['separator'] = abstract_role['structure'] + ['aria-expanded']
|
||||||
|
let role_attributes['table'] = abstract_role['section'] + ['aria-colcount', 'aria-rowcount']
|
||||||
|
let role_attributes['term'] = abstract_role['section']
|
||||||
|
|
||||||
" Landmark Roles
|
" Landmark Roles
|
||||||
let role_attributes['application'] = abstract_role['landmark']
|
let role_attributes['application'] = abstract_role['landmark']
|
||||||
@ -126,19 +321,30 @@ let role_attributes['search'] = abstract_role['landmark']
|
|||||||
let aria_attributes_value = {
|
let aria_attributes_value = {
|
||||||
\ 'aria-autocomplete': ['ID', ''],
|
\ 'aria-autocomplete': ['ID', ''],
|
||||||
\ 'aria-checked': ['Token', ''],
|
\ 'aria-checked': ['Token', ''],
|
||||||
|
\ 'aria-colcount': ['Number', ''],
|
||||||
|
\ 'aria-colindex': ['Number', ''],
|
||||||
|
\ 'aria-colspan': ['Number', ''],
|
||||||
\ 'aria-disabled': ['true/false', ''],
|
\ 'aria-disabled': ['true/false', ''],
|
||||||
|
\ 'aria-errormessage': ['ID', ''],
|
||||||
\ 'aria-expanded': ['Token', ''],
|
\ 'aria-expanded': ['Token', ''],
|
||||||
\ 'aria-haspopup': ['true/false', ''],
|
\ 'aria-haspopup': ['Token', ''],
|
||||||
\ 'aria-hidden': ['true/false', ''],
|
\ 'aria-hidden': ['true/false', ''],
|
||||||
\ 'aria-invalid': ['Token', ''],
|
\ 'aria-invalid': ['Token', ''],
|
||||||
|
\ 'aria-keyshortcuts': ['String', ''],
|
||||||
\ 'aria-label': ['String', ''],
|
\ 'aria-label': ['String', ''],
|
||||||
\ 'aria-level': ['Int', ''],
|
\ 'aria-level': ['Int', ''],
|
||||||
|
\ 'aria-modal': ['true/false', ''],
|
||||||
\ 'aria-multiline': ['true/false', ''],
|
\ 'aria-multiline': ['true/false', ''],
|
||||||
\ 'aria-multiselectable': ['true/false', ''],
|
\ 'aria-multiselectable': ['true/false', ''],
|
||||||
\ 'aria-orientation': ['Token', ''],
|
\ 'aria-orientation': ['Token', ''],
|
||||||
|
\ 'aria-placeholder': ['String', ''],
|
||||||
\ 'aria-pressed': ['Token', ''],
|
\ 'aria-pressed': ['Token', ''],
|
||||||
\ 'aria-readonly': ['true/false', ''],
|
\ 'aria-readonly': ['true/false', ''],
|
||||||
\ 'aria-required': ['true/false', ''],
|
\ 'aria-required': ['true/false', ''],
|
||||||
|
\ 'aria-roledescription': ['String', ''],
|
||||||
|
\ 'aria-rowcount': ['Number', ''],
|
||||||
|
\ 'aria-rowindex': ['Number', ''],
|
||||||
|
\ 'aria-rowspan': ['Number', ''],
|
||||||
\ 'aria-selected': ['Token', ''],
|
\ 'aria-selected': ['Token', ''],
|
||||||
\ 'aria-sort': ['Token', ''],
|
\ 'aria-sort': ['Token', ''],
|
||||||
\ 'aria-valuemax': ['Number', ''],
|
\ 'aria-valuemax': ['Number', ''],
|
||||||
|
@ -80,6 +80,9 @@ let attributes_value = {
|
|||||||
\ 'accept-charset': ['Charset', ''],
|
\ 'accept-charset': ['Charset', ''],
|
||||||
\ 'accesskey': ['Character', ''],
|
\ 'accesskey': ['Character', ''],
|
||||||
\ 'action': ['URL', ''],
|
\ 'action': ['URL', ''],
|
||||||
|
\ 'allowfullscreen': ['Bool', ''],
|
||||||
|
\ 'allowpaymentrequest': ['Bool', ''],
|
||||||
|
\ 'allowusermedia': ['Bool', ''],
|
||||||
\ 'alt': ['Text', ''],
|
\ 'alt': ['Text', ''],
|
||||||
\ 'async': ['Bool', ''],
|
\ 'async': ['Bool', ''],
|
||||||
\ 'autocomplete': ['*Token', ''],
|
\ 'autocomplete': ['*Token', ''],
|
||||||
@ -142,6 +145,7 @@ let attributes_value = {
|
|||||||
\ 'optimum': ['Number', ''],
|
\ 'optimum': ['Number', ''],
|
||||||
\ 'pattern': ['Pattern', ''],
|
\ 'pattern': ['Pattern', ''],
|
||||||
\ 'placeholder': ['Text', ''],
|
\ 'placeholder': ['Text', ''],
|
||||||
|
\ 'playsinline': ['Bool', ''],
|
||||||
\ 'poster': ['URL', ''],
|
\ 'poster': ['URL', ''],
|
||||||
\ 'preload': ['Token', ''],
|
\ 'preload': ['Token', ''],
|
||||||
\ 'pubdate': ['Bool', ''],
|
\ 'pubdate': ['Bool', ''],
|
||||||
@ -315,10 +319,10 @@ if !exists('g:html5_aria_attributes_complete')
|
|||||||
let g:html5_aria_attributes_complete = 1
|
let g:html5_aria_attributes_complete = 1
|
||||||
endif
|
endif
|
||||||
if g:html5_aria_attributes_complete == 1
|
if g:html5_aria_attributes_complete == 1
|
||||||
" Ref: http://www.w3.org/TR/wai-aria/roles
|
" Ref: https://www.w3.org/TR/wai-aria-1.1/#role_definitions
|
||||||
" Version: Draft 15 December 2009
|
" Version: W3C Candidate Recommendation 27 October 2016
|
||||||
let widget_role = ['alert', 'alertdialog', 'button', 'checkbox', 'combobox', 'dialog', 'gridcell', 'link', 'log', 'marquee', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'progressbar', 'radio', 'radiogroup', 'scrollbar', 'slider', 'spinbutton', 'status', 'tab', 'tabpanel', 'textbox', 'timer', 'tooltip', 'treeitem', 'combobox', 'grid', 'listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid']
|
let widget_role = ['alert', 'alertdialog', 'button', 'checkbox', 'combobox', 'dialog', 'gridcell', 'link', 'log', 'marquee', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'progressbar', 'radio', 'radiogroup', 'scrollbar', 'searchbox', 'slider', 'spinbutton', 'status', 'switch', 'tab', 'tabpanel', 'textbox', 'timer', 'tooltip', 'treeitem', 'combobox', 'grid', 'listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid']
|
||||||
let document_structure = ['article', 'columnheader', 'definition', 'directory', 'document', 'group', 'heading', 'img', 'list', 'listitem', 'math', 'note', 'presentation', 'region', 'row', 'rowheader', 'separator']
|
let document_structure = ['article', 'cell', 'columnheader', 'definition', 'directory', 'document', 'feed', 'figure', 'group', 'heading', 'img', 'list', 'listitem', 'math', 'none', 'note', 'presentation', 'region', 'row', 'rowheader', 'separator', 'table', 'term']
|
||||||
let landmark_role = ['application', 'banner', 'complementary', 'contentinfo', 'form', 'main', 'navigation', 'search']
|
let landmark_role = ['application', 'banner', 'complementary', 'contentinfo', 'form', 'main', 'navigation', 'search']
|
||||||
let dpub_role = ['dpub-abstract', 'dpub-afterword', 'dpub-appendix', 'dpub-biblioentry', 'dpub-bibliography', 'dpub-biblioref', 'dpub-chapter', 'dpub-cover', 'dpub-epilogue', 'dpub-footnote', 'dpub-footnotes', 'dpub-foreword', 'dpub-glossary', 'dpub-glossdef', 'dpub-glossref', 'dpub-glossterm', 'dpub-index', 'dpub-locator', 'dpub-noteref', 'dpub-notice', 'dpub-pagebreak', 'dpub-pagelist', 'dpub-part', 'dpub-preface', 'dpub-prologue', 'dpub-pullquote', 'dpub-qna', 'dpub-subtitle', 'dpub-tip', 'dpub-title', 'dpub-toc']
|
let dpub_role = ['dpub-abstract', 'dpub-afterword', 'dpub-appendix', 'dpub-biblioentry', 'dpub-bibliography', 'dpub-biblioref', 'dpub-chapter', 'dpub-cover', 'dpub-epilogue', 'dpub-footnote', 'dpub-footnotes', 'dpub-foreword', 'dpub-glossary', 'dpub-glossdef', 'dpub-glossref', 'dpub-glossterm', 'dpub-index', 'dpub-locator', 'dpub-noteref', 'dpub-notice', 'dpub-pagebreak', 'dpub-pagelist', 'dpub-part', 'dpub-preface', 'dpub-prologue', 'dpub-pullquote', 'dpub-qna', 'dpub-subtitle', 'dpub-tip', 'dpub-title', 'dpub-toc']
|
||||||
let role = extend(widget_role, document_structure)
|
let role = extend(widget_role, document_structure)
|
||||||
@ -336,10 +340,33 @@ let metadata_elements = ['link', 'style', 'meta', 'script', 'noscript', 'command
|
|||||||
|
|
||||||
let flow_elements = phrasing_elements + ['p', 'hr', 'pre', 'ul', 'ol', 'dl', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup', 'address', 'blockquote', 'ins', 'del', 'element', 'object', 'main', 'map', 'noscript', 'section', 'nav', 'article', 'aside', 'header', 'footer', 'video', 'audio', 'figure', 'table', 'template', 'form', 'fieldset', 'menu', 'canvas', 'details']
|
let flow_elements = phrasing_elements + ['p', 'hr', 'pre', 'ul', 'ol', 'dl', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup', 'address', 'blockquote', 'ins', 'del', 'element', 'object', 'main', 'map', 'noscript', 'section', 'nav', 'article', 'aside', 'header', 'footer', 'video', 'audio', 'figure', 'table', 'template', 'form', 'fieldset', 'menu', 'canvas', 'details']
|
||||||
|
|
||||||
" http://dev.w3.org/html5/spec/Overview.html#linkTypes
|
" https://html.spec.whatwg.org/#linkTypes
|
||||||
let linktypes = ['alternate', 'author', 'bookmark', 'external', 'help', 'icon', 'license', 'next', 'nofollow', 'noreferrer', 'pingback', 'prefetch', 'prev', 'search', 'stylesheet', 'sidebar', 'tag']
|
let linktypes = ['alternate', 'author', 'bookmark', 'dns-prefetch', 'external', 'help', 'icon', 'license', 'next', 'nofollow', 'noreferrer', 'noopener', 'pingback', 'preconnect', 'prefetch', 'preload', 'prerender', 'prev', 'search', 'stylesheet', 'tag']
|
||||||
|
" https://w3c.github.io/manifest/
|
||||||
|
let linkreltypes = linktypes
|
||||||
|
let linkreltypes = linkreltypes + ['manifest']
|
||||||
" http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html
|
" http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html
|
||||||
let linkreltypes = linktypes + ['canonical', 'import']
|
" http://www.ysearchblog.com/2009/02/12/fighting-duplication-adding-more-arrows-to-your-quiver/
|
||||||
|
" http://blogs.bing.com/webmaster/2009/02/12/partnering-to-help-solve-duplicate-content-issues
|
||||||
|
let linkreltypes = linkreltypes + ['canonical']
|
||||||
|
" http://w3c.github.io/webcomponents/spec/imports/
|
||||||
|
let linkreltypes = linkreltypes + ['import']
|
||||||
|
" https://www.w3.org/TR/webmention/#sender-discovers-receiver-webmention-endpoint
|
||||||
|
let linkreltypes = linkreltypes + ['webmention']
|
||||||
|
" http://www.opensearch.org/Specifications/OpenSearch/1.1#Autodiscovery_in_HTML.2FXHTML
|
||||||
|
let linkreltypes = linkreltypes + ['search']
|
||||||
|
" http://microformats.org/wiki/rel-sitemap
|
||||||
|
let linkreltypes = linkreltypes + ['sitemap']
|
||||||
|
" https://www.ampproject.org/docs/get_started/create/prepare_for_discovery
|
||||||
|
let linkreltypes = linkreltypes + ['amphtml']
|
||||||
|
" https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html
|
||||||
|
let linkreltypes = linkreltypes + ['apple-touch-icon', 'apple-touch-icon-precomposed', 'apple-touch-startup-image']
|
||||||
|
" https://developer.chrome.com/webstore/inline_installation
|
||||||
|
let linkreltypes = linkreltypes + ['chrome-webstore-item']
|
||||||
|
" http://pubsubhubbub.github.io/PubSubHubbub/pubsubhubbub-core-0.4.html#rfc.section.4
|
||||||
|
let linkreltypes = linkreltypes + ['hub']
|
||||||
|
" https://golem.ph.utexas.edu/~distler/blog/archives/000320.html
|
||||||
|
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'
|
||||||
@ -551,7 +578,7 @@ let g:xmldata_html5 = {
|
|||||||
\ ],
|
\ ],
|
||||||
\ 'iframe': [
|
\ 'iframe': [
|
||||||
\ [],
|
\ [],
|
||||||
\ extend(copy(global_attributes), {'src': [], 'srcdoc': [], 'name': [], 'width': [], 'height': [], 'sandbox': ['allow-same-origin', 'allow-forms', 'allow-scripts'], 'seamless': ['seamless', ''], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url']})
|
\ extend(copy(global_attributes), {'src': [], 'srcdoc': [], 'name': [], 'width': [], 'height': [], 'sandbox': ['allow-same-origin', 'allow-forms', 'allow-scripts'], 'seamless': ['seamless', ''], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url'], 'allowfullscreen': [], 'allowpaymentrequest': [], 'allowusermedia': []})
|
||||||
\ ],
|
\ ],
|
||||||
\ 'img': [
|
\ 'img': [
|
||||||
\ [],
|
\ [],
|
||||||
@ -807,7 +834,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', ''], 'poster': [], 'height': [], 'width': [], 'src': []})
|
\ extend(copy(global_attributes), {'autoplay': ['autoplay', ''], 'preload': ['none', 'metadata', 'auto', ''], 'controls': ['controls', ''], 'loop': ['loop', ''], 'playsinline': ['playsinline', ''], 'poster': [], 'height': [], 'width': [], 'src': []})
|
||||||
\ ],
|
\ ],
|
||||||
\ 'wbr': [
|
\ 'wbr': [
|
||||||
\ [],
|
\ [],
|
||||||
|
@ -985,14 +985,17 @@ endif
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'toml') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'toml') == -1
|
||||||
|
|
||||||
" Rust uses several TOML config files that are not named with .toml.
|
" Rust uses several TOML config files that are not named with .toml.
|
||||||
autocmd BufNewFile,BufRead *.toml,Cargo.lock,.cargo/config set filetype=toml
|
autocmd BufNewFile,BufRead *.toml,Cargo.lock,*/.cargo/config set filetype=toml
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" ftdetect/typescript.vim
|
" ftdetect/typescript.vim
|
||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'typescript') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'typescript') == -1
|
||||||
|
|
||||||
autocmd BufNewFile,BufRead *.ts,*.tsx setlocal filetype=typescript
|
" use `set filetype` to override default filetype=xml for *.ts files
|
||||||
|
autocmd BufNewFile,BufRead *.ts set filetype=typescript
|
||||||
|
" use `setfiletype` to not override any other plugins like ianks/vim-tsx
|
||||||
|
autocmd BufNewFile,BufRead *.tsx setfiletype typescript
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -1016,6 +1019,20 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vm') == -1
|
|||||||
|
|
||||||
au BufRead,BufNewFile *.vm set ft=velocity syntax=velocity
|
au BufRead,BufNewFile *.vm set ft=velocity syntax=velocity
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
" ftdetect/vim-literate-coffeescript.vim
|
||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'coffee-script') == -1
|
||||||
|
|
||||||
|
" Language: Literate CoffeeScript
|
||||||
|
" Maintainer: Michael Smith <michael@diglumi.com>
|
||||||
|
" URL: https://github.com/mintplant/vim-literate-coffeescript
|
||||||
|
" License: MIT
|
||||||
|
|
||||||
|
autocmd BufNewFile,BufRead *.litcoffee set filetype=litcoffee
|
||||||
|
autocmd BufNewFile,BufRead *.coffee.md set filetype=litcoffee
|
||||||
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" ftdetect/vue.vim
|
" ftdetect/vue.vim
|
||||||
|
@ -23,7 +23,8 @@ setlocal comments+=s:{{--,m:\ \ \ \ ,e:--}}
|
|||||||
if exists('loaded_matchit') && exists('b:match_words')
|
if exists('loaded_matchit') && exists('b:match_words')
|
||||||
" Append to html matchit words
|
" Append to html matchit words
|
||||||
let b:match_words .= ',' .
|
let b:match_words .= ',' .
|
||||||
\ '@\%(section\|if\|unless\|foreach\|forelse\|for\|while\|push\|can\|cannot\|hasSection\|php\|verbatim\)\>' .
|
\ '@\%(section\s*([^\,]*)\|if\|unless\|foreach\|forelse\|for\|while\|push\|can\|cannot\|hasSection\|' .
|
||||||
|
\ 'php\s*(\@!\|verbatim\|component\|slot\|prepend\)' .
|
||||||
\ ':' .
|
\ ':' .
|
||||||
\ '@\%(else\|elseif\|empty\|break\|continue\|elsecan\|elsecannot\)\>' .
|
\ '@\%(else\|elseif\|empty\|break\|continue\|elsecan\|elsecannot\)\>' .
|
||||||
\ ':' .
|
\ ':' .
|
||||||
|
@ -25,7 +25,9 @@ let &l:errorformat =
|
|||||||
\ '%m'
|
\ '%m'
|
||||||
\ ], ',')
|
\ ], ',')
|
||||||
|
|
||||||
|
setlocal includeexpr=dart#resolveUri(v:fname)
|
||||||
|
setlocal isfname+=:
|
||||||
|
|
||||||
let b:undo_ftplugin = 'setl et< fo< sw< sts< com< cms<'
|
let b:undo_ftplugin = 'setl et< fo< sw< sts< com< cms< inex< isf<'
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vue') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'coffee-script') == -1
|
||||||
|
|
||||||
setlocal suffixesadd+=.vue
|
runtime ftplugin/coffee.vim
|
||||||
|
|
||||||
endif
|
endif
|
@ -2,4 +2,8 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nginx') == -1
|
|||||||
|
|
||||||
setlocal commentstring=#\ %s
|
setlocal commentstring=#\ %s
|
||||||
|
|
||||||
|
setlocal iskeyword+=.
|
||||||
|
setlocal iskeyword+=/
|
||||||
|
setlocal iskeyword+=:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -11,4 +11,6 @@ endif
|
|||||||
|
|
||||||
runtime! ftplugin/html.vim
|
runtime! ftplugin/html.vim
|
||||||
|
|
||||||
|
setlocal suffixesadd+=.vue
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -4,22 +4,22 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'blade') == -1
|
|||||||
" Language: Blade (Laravel)
|
" Language: Blade (Laravel)
|
||||||
" Maintainer: Jason Walton <jwalton512@gmail.com>
|
" Maintainer: Jason Walton <jwalton512@gmail.com>
|
||||||
|
|
||||||
if exists("b:did_indent")
|
if exists('b:did_indent')
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
runtime! indent/html.vim
|
runtime! indent/html.vim
|
||||||
let s:htmlindent = &indentexpr
|
let s:htmlindent = &indentexpr
|
||||||
unlet! b:did_indent
|
|
||||||
|
|
||||||
|
unlet! b:did_indent
|
||||||
runtime! indent/php.vim
|
runtime! indent/php.vim
|
||||||
let s:phpindent = &indentexpr
|
let s:phpindent = &indentexpr
|
||||||
unlet! b:did_indent
|
|
||||||
|
|
||||||
let b:did_indent = 1
|
let b:did_indent = 1
|
||||||
|
|
||||||
" Doesn't include 'foreach' and 'forelse' because these already get matched by 'for'.
|
" Doesn't include 'foreach' and 'forelse' because these already get matched by 'for'.
|
||||||
let s:directives_start = 'if\|else\|unless\|for\|while\|empty\|push\|section\|can\|hasSection\|verbatim'
|
let s:directives_start = 'if\|else\|unless\|for\|while\|empty\|push\|section\|can\|hasSection\|verbatim\|php\|' .
|
||||||
|
\ 'component\|slot\|prepend'
|
||||||
let s:directives_end = 'else\|end\|empty\|show\|stop\|append\|overwrite'
|
let s:directives_end = 'else\|end\|empty\|show\|stop\|append\|overwrite'
|
||||||
|
|
||||||
if exists('g:blade_custom_directives_pairs')
|
if exists('g:blade_custom_directives_pairs')
|
||||||
@ -29,55 +29,71 @@ endif
|
|||||||
|
|
||||||
setlocal autoindent
|
setlocal autoindent
|
||||||
setlocal indentexpr=GetBladeIndent()
|
setlocal indentexpr=GetBladeIndent()
|
||||||
exe "setlocal indentkeys=o,O,<>>,!^F,0=}},0=!!},=@" . substitute(s:directives_end, '\\|', ',=@', 'g')
|
exe 'setlocal indentkeys=o,O,<>>,!^F,0=}},0=!!},=@' . substitute(s:directives_end, '\\|', ',=@', 'g')
|
||||||
|
|
||||||
" Only define the function once.
|
" Only define the function once.
|
||||||
if exists("*GetBladeIndent")
|
if exists('*GetBladeIndent')
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
function! s:IsStartingDelimiter(lnum)
|
||||||
|
let line = getline(a:lnum)
|
||||||
|
return line =~# '\%(\w\|@\)\@<!@\%(' . s:directives_start . '\)\%(.*@end\|.*@stop\)\@!'
|
||||||
|
\ || line =~# '{{\%(.*}}\)\@!'
|
||||||
|
\ || line =~# '{!!\%(.*!!}\)\@!'
|
||||||
|
\ || line =~# '<?\%(.*?>\)\@!'
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! GetBladeIndent()
|
function! GetBladeIndent()
|
||||||
let lnum = prevnonblank(v:lnum-1)
|
let lnum = prevnonblank(v:lnum - 1)
|
||||||
if lnum == 0
|
if lnum == 0
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let line = substitute(substitute(getline(lnum), '\s\+$', '', ''), '^\s\+', '', '')
|
let line = getline(lnum)
|
||||||
let cline = substitute(substitute(getline(v:lnum), '\s\+$', '', ''), '^\s\+', '', '')
|
let cline = getline(v:lnum)
|
||||||
let indent = indent(lnum)
|
let indent = indent(lnum)
|
||||||
if cline =~# '@\%(' . s:directives_end . '\)' ||
|
|
||||||
\ cline =~# '\%(<?.*\)\@<!?>\|\%({{.*\)\@<!}}\|\%({!!.*\)\@<!!!}'
|
" 1. Check for special directives
|
||||||
let indent = indent - &sw
|
" @section is a single-line directive if it has a second argument.
|
||||||
elseif line =~# '<?\%(.*?>\)\@!\|@php\%(\s*(\)\@!'
|
" @php is a single-line directive if it is followed by parentheses.
|
||||||
let indent = indent + &sw
|
if (line =~# '@section\%(.*@end\)\@!' && line !~# '@section\s*([^,]*)')
|
||||||
else
|
\ || line =~# '@php\s*('
|
||||||
if exists("*GetBladeIndentCustom")
|
return indent
|
||||||
let hindent = GetBladeIndentCustom()
|
endif
|
||||||
" Don't use PHP indentation if line is a comment
|
|
||||||
|
" 2. When the current line is an ending delimiter: decrease indentation
|
||||||
|
" if the previous line wasn't a starting delimiter.
|
||||||
|
if cline =~# '^\s*@\%(' . s:directives_end . '\)'
|
||||||
|
\ || cline =~# '\%(<?.*\)\@<!?>'
|
||||||
|
\ || cline =~# '\%({{.*\)\@<!}}'
|
||||||
|
\ || cline =~# '\%({!!.*\)\@<!!!}'
|
||||||
|
return s:IsStartingDelimiter(lnum) ? indent : indent - &sw
|
||||||
|
endif
|
||||||
|
|
||||||
|
" 3. Increase indentation if the line contains a starting delimiter.
|
||||||
|
if s:IsStartingDelimiter(lnum)
|
||||||
|
return indent + &sw
|
||||||
|
endif
|
||||||
|
|
||||||
|
" 4. External indent scripts (PHP and HTML)
|
||||||
|
execute 'let indent = ' . s:htmlindent
|
||||||
|
|
||||||
|
if exists('*GetBladeIndentCustom')
|
||||||
|
let indent = GetBladeIndentCustom()
|
||||||
elseif line !~# '^\s*\%(#\|//\)\|\*/\s*$' && (
|
elseif line !~# '^\s*\%(#\|//\)\|\*/\s*$' && (
|
||||||
\ searchpair('@include\%(If\)\?\s*(', '', ')', 'bWr') ||
|
\ searchpair('@include\%(If\)\?\s*(', '', ')', 'bWr') ||
|
||||||
\ searchpair('{!!', '', '!!}', 'bWr') ||
|
\ searchpair('{!!', '', '!!}', 'bWr') ||
|
||||||
\ searchpair('{{', '', '}}', 'bWr') ||
|
\ searchpair('{{', '', '}}', 'bWr') ||
|
||||||
\ searchpair('<?', '', '?>', 'bWr') ||
|
\ searchpair('<?', '', '?>', 'bWr') ||
|
||||||
\ searchpair('@php\%(\s*(\)\@!', '', '@endphp', 'bWr') )
|
\ searchpair('@php\s*(\@!', '', '@endphp', 'bWr') )
|
||||||
execute 'let hindent = ' . s:phpindent
|
" Only use PHP's indent if the region spans multiple lines
|
||||||
else
|
if !s:IsStartingDelimiter(v:lnum)
|
||||||
execute 'let hindent = ' . s:htmlindent
|
execute 'let indent = ' . s:phpindent
|
||||||
endif
|
|
||||||
if hindent > -1
|
|
||||||
let indent = hindent
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
let increase = indent + &sw
|
|
||||||
|
|
||||||
if line =~# '@\%(section\)\%(.*@end\)\@!' && line !~# '@\%(section\)\s*([^,]*)'
|
|
||||||
return indent
|
return indent
|
||||||
elseif line =~# '@\%(' . s:directives_start . '\)\%(.*@end\|.*@stop\)\@!' ||
|
|
||||||
\ line =~# '{{\%(.*}}\)\@!' || line =~# '{!!\%(.*!!}\)\@!'
|
|
||||||
return increase
|
|
||||||
else
|
|
||||||
return indent
|
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -6,9 +6,9 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'erlang') == -1
|
|||||||
" Contributors: Edwin Fine <efine145_nospam01 at usa dot net>
|
" Contributors: Edwin Fine <efine145_nospam01 at usa dot net>
|
||||||
" Pawel 'kTT' Salata <rockplayer.pl@gmail.com>
|
" Pawel 'kTT' Salata <rockplayer.pl@gmail.com>
|
||||||
" Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
|
" Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
|
||||||
" Last Update: 2013-Jul-21
|
" Last Update: 2017-Feb-28
|
||||||
" License: Vim license
|
" License: Vim license
|
||||||
" URL: https://github.com/hcs42/vim-erlang
|
" URL: https://github.com/vim-erlang/vim-erlang-runtime
|
||||||
|
|
||||||
" Note About Usage:
|
" Note About Usage:
|
||||||
" This indentation script works best with the Erlang syntax file created by
|
" This indentation script works best with the Erlang syntax file created by
|
||||||
@ -528,7 +528,9 @@ endfunction
|
|||||||
" ok. % IsLineAtomContinuation = false
|
" ok. % IsLineAtomContinuation = false
|
||||||
function! s:IsLineAtomContinuation(lnum)
|
function! s:IsLineAtomContinuation(lnum)
|
||||||
if has('syntax_items')
|
if has('syntax_items')
|
||||||
return synIDattr(synID(a:lnum, 1, 0), 'name') =~# '^erlangQuotedAtom'
|
let syn_name = synIDattr(synID(a:lnum, 1, 0), 'name')
|
||||||
|
return syn_name =~# '^erlangQuotedAtom' ||
|
||||||
|
\ syn_name =~# '^erlangQuotedRecord'
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
@ -682,7 +684,7 @@ function! s:BeginningOfClauseFound(stack, token, stored_vcol, lnum, i)
|
|||||||
call s:Pop(a:stack)
|
call s:Pop(a:stack)
|
||||||
if empty(a:stack)
|
if empty(a:stack)
|
||||||
call s:Log(' Stack is ["when"], so LTI is in a guard -> return')
|
call s:Log(' Stack is ["when"], so LTI is in a guard -> return')
|
||||||
return [1, a:stored_vcol + &sw + 2]
|
return [1, a:stored_vcol + shiftwidth() + 2]
|
||||||
else
|
else
|
||||||
return [1, s:UnexpectedToken(a:token, a:stack)]
|
return [1, s:UnexpectedToken(a:token, a:stack)]
|
||||||
endif
|
endif
|
||||||
@ -691,7 +693,7 @@ function! s:BeginningOfClauseFound(stack, token, stored_vcol, lnum, i)
|
|||||||
call s:Pop(a:stack)
|
call s:Pop(a:stack)
|
||||||
if empty(a:stack)
|
if empty(a:stack)
|
||||||
call s:Log(' Stack is ["->"], so LTI is in function body -> return')
|
call s:Log(' Stack is ["->"], so LTI is in function body -> return')
|
||||||
return [1, a:stored_vcol + &sw]
|
return [1, a:stored_vcol + shiftwidth()]
|
||||||
elseif a:stack[0] ==# ';'
|
elseif a:stack[0] ==# ';'
|
||||||
call s:Pop(a:stack)
|
call s:Pop(a:stack)
|
||||||
|
|
||||||
@ -843,7 +845,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
|
|||||||
|
|
||||||
elseif token ==# 'begin'
|
elseif token ==# 'begin'
|
||||||
let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
|
let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
|
||||||
\stored_vcol, 'end', &sw)
|
\stored_vcol, 'end', shiftwidth())
|
||||||
if ret | return res | endif
|
if ret | return res | endif
|
||||||
|
|
||||||
" case EXPR of BRANCHES end
|
" case EXPR of BRANCHES end
|
||||||
@ -894,11 +896,11 @@ function! s:ErlangCalcIndent2(lnum, stack)
|
|||||||
elseif stack == ['->']
|
elseif stack == ['->']
|
||||||
call s:Log(' LTI is in a branch after ' .
|
call s:Log(' LTI is in a branch after ' .
|
||||||
\'"of/receive/after/if/catch" -> return')
|
\'"of/receive/after/if/catch" -> return')
|
||||||
return stored_vcol + &sw
|
return stored_vcol + shiftwidth()
|
||||||
elseif stack == ['when']
|
elseif stack == ['when']
|
||||||
call s:Log(' LTI is in a guard after ' .
|
call s:Log(' LTI is in a guard after ' .
|
||||||
\'"of/receive/after/if/catch" -> return')
|
\'"of/receive/after/if/catch" -> return')
|
||||||
return stored_vcol + &sw
|
return stored_vcol + shiftwidth()
|
||||||
else
|
else
|
||||||
return s:UnexpectedToken(token, stack)
|
return s:UnexpectedToken(token, stack)
|
||||||
endif
|
endif
|
||||||
@ -934,7 +936,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
|
|||||||
if empty(stack)
|
if empty(stack)
|
||||||
call s:Log(' LTI is in a condition; matching ' .
|
call s:Log(' LTI is in a condition; matching ' .
|
||||||
\'"case/if/try/receive" found')
|
\'"case/if/try/receive" found')
|
||||||
let stored_vcol = curr_vcol + &sw
|
let stored_vcol = curr_vcol + shiftwidth()
|
||||||
elseif stack[0] ==# 'align_to_begin_element'
|
elseif stack[0] ==# 'align_to_begin_element'
|
||||||
call s:Pop(stack)
|
call s:Pop(stack)
|
||||||
let stored_vcol = curr_vcol
|
let stored_vcol = curr_vcol
|
||||||
@ -943,23 +945,23 @@ function! s:ErlangCalcIndent2(lnum, stack)
|
|||||||
\'"case/if/try/receive" found')
|
\'"case/if/try/receive" found')
|
||||||
call s:Pop(stack)
|
call s:Pop(stack)
|
||||||
call s:Pop(stack)
|
call s:Pop(stack)
|
||||||
let stored_vcol = curr_vcol + &sw
|
let stored_vcol = curr_vcol + shiftwidth()
|
||||||
elseif stack[0] ==# '->'
|
elseif stack[0] ==# '->'
|
||||||
call s:Log(' LTI is in a branch; matching ' .
|
call s:Log(' LTI is in a branch; matching ' .
|
||||||
\'"case/if/try/receive" found')
|
\'"case/if/try/receive" found')
|
||||||
call s:Pop(stack)
|
call s:Pop(stack)
|
||||||
let stored_vcol = curr_vcol + 2 * &sw
|
let stored_vcol = curr_vcol + 2 * shiftwidth()
|
||||||
elseif stack[0] ==# 'when'
|
elseif stack[0] ==# 'when'
|
||||||
call s:Log(' LTI is in a guard; matching ' .
|
call s:Log(' LTI is in a guard; matching ' .
|
||||||
\'"case/if/try/receive" found')
|
\'"case/if/try/receive" found')
|
||||||
call s:Pop(stack)
|
call s:Pop(stack)
|
||||||
let stored_vcol = curr_vcol + 2 * &sw + 2
|
let stored_vcol = curr_vcol + 2 * shiftwidth() + 2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
|
let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
|
||||||
\stored_vcol, 'end', &sw)
|
\stored_vcol, 'end', shiftwidth())
|
||||||
if ret | return res | endif
|
if ret | return res | endif
|
||||||
|
|
||||||
elseif token ==# 'fun'
|
elseif token ==# 'fun'
|
||||||
@ -985,7 +987,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
|
|||||||
" stack = ['when'] => LTI is in a guard
|
" stack = ['when'] => LTI is in a guard
|
||||||
if empty(stack)
|
if empty(stack)
|
||||||
call s:Log(' LTI is in a condition; matching "fun" found')
|
call s:Log(' LTI is in a condition; matching "fun" found')
|
||||||
let stored_vcol = curr_vcol + &sw
|
let stored_vcol = curr_vcol + shiftwidth()
|
||||||
elseif len(stack) > 1 && stack[0] ==# '->' && stack[1] ==# ';'
|
elseif len(stack) > 1 && stack[0] ==# '->' && stack[1] ==# ';'
|
||||||
call s:Log(' LTI is in a condition; matching "fun" found')
|
call s:Log(' LTI is in a condition; matching "fun" found')
|
||||||
call s:Pop(stack)
|
call s:Pop(stack)
|
||||||
@ -993,15 +995,15 @@ function! s:ErlangCalcIndent2(lnum, stack)
|
|||||||
elseif stack[0] ==# '->'
|
elseif stack[0] ==# '->'
|
||||||
call s:Log(' LTI is in a branch; matching "fun" found')
|
call s:Log(' LTI is in a branch; matching "fun" found')
|
||||||
call s:Pop(stack)
|
call s:Pop(stack)
|
||||||
let stored_vcol = curr_vcol + 2 * &sw
|
let stored_vcol = curr_vcol + 2 * shiftwidth()
|
||||||
elseif stack[0] ==# 'when'
|
elseif stack[0] ==# 'when'
|
||||||
call s:Log(' LTI is in a guard; matching "fun" found')
|
call s:Log(' LTI is in a guard; matching "fun" found')
|
||||||
call s:Pop(stack)
|
call s:Pop(stack)
|
||||||
let stored_vcol = curr_vcol + 2 * &sw + 2
|
let stored_vcol = curr_vcol + 2 * shiftwidth() + 2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
|
let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
|
||||||
\stored_vcol, 'end', &sw)
|
\stored_vcol, 'end', shiftwidth())
|
||||||
if ret | return res | endif
|
if ret | return res | endif
|
||||||
else
|
else
|
||||||
" Pass: we have a function reference (e.g. "fun f/0")
|
" Pass: we have a function reference (e.g. "fun f/0")
|
||||||
@ -1275,7 +1277,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
|
|||||||
" when A,
|
" when A,
|
||||||
" LTI
|
" LTI
|
||||||
let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol,
|
let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol,
|
||||||
\stored_vcol, &sw)
|
\stored_vcol, shiftwidth())
|
||||||
if ret | return res | endif
|
if ret | return res | endif
|
||||||
else
|
else
|
||||||
" Example:
|
" Example:
|
||||||
@ -1307,7 +1309,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
|
|||||||
" If LTI is between an 'after' and the corresponding
|
" If LTI is between an 'after' and the corresponding
|
||||||
" 'end', then let's return
|
" 'end', then let's return
|
||||||
let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol,
|
let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol,
|
||||||
\stored_vcol, &sw)
|
\stored_vcol, shiftwidth())
|
||||||
if ret | return res | endif
|
if ret | return res | endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -97,6 +97,7 @@ function! GetErubyIndent(...)
|
|||||||
let ind = ind + sw
|
let ind = ind + sw
|
||||||
endif
|
endif
|
||||||
if line !~# '^\s*<%' && line =~# '%>\s*$' && line !~# '^\s*end\>'
|
if line !~# '^\s*<%' && line =~# '%>\s*$' && line !~# '^\s*end\>'
|
||||||
|
\ && synID(v:lnum, match(cline, '\S') + 1, 1) != hlID('htmlEndTag')
|
||||||
let ind = ind - sw
|
let ind = ind - sw
|
||||||
endif
|
endif
|
||||||
if cline =~# '^\s*[-=]\=%>\s*$'
|
if cline =~# '^\s*[-=]\=%>\s*$'
|
||||||
|
@ -13,12 +13,16 @@ if exists('b:did_indent')
|
|||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let b:did_indent = 1
|
|
||||||
|
|
||||||
if !exists('g:haskell_indent_disable')
|
if !exists('g:haskell_indent_disable')
|
||||||
let g:haskell_indent_disable = 0
|
let g:haskell_indent_disable = 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if g:haskell_indent_disable != 0
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
if !exists('g:haskell_indent_if')
|
if !exists('g:haskell_indent_if')
|
||||||
" if x
|
" if x
|
||||||
" >>>then ...
|
" >>>then ...
|
||||||
@ -63,22 +67,16 @@ if !exists('g:haskell_indent_guard')
|
|||||||
let g:haskell_indent_guard = 2
|
let g:haskell_indent_guard = 2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if exists("g:haskell_indent_disable") && g:haskell_indent_disable == 0
|
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(,0),0[,0],!^F,o,O,0\=,0=where,0=let,0=deriving,<space>
|
|
||||||
else
|
|
||||||
setlocal nocindent
|
|
||||||
setlocal nosmartindent
|
|
||||||
setlocal autoindent
|
|
||||||
endif
|
|
||||||
|
|
||||||
function! s:isInBlock(hlstack)
|
function! s:isInBlock(hlstack)
|
||||||
return 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
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:stripTrailingComment(line)
|
function! s:stripComment(line)
|
||||||
if a:line =~ '^\s*--\(-\+\|\s\+\)' || a:line =~ '^\s*{-'
|
if a:line =~ '^\s*--\(-*\s\+\|$\)'
|
||||||
return a:line
|
return ''
|
||||||
else
|
else
|
||||||
let l:stripped = split(a:line, '-- ')
|
let l:stripped = split(a:line, '-- ')
|
||||||
if len(l:stripped) > 1
|
if len(l:stripped) > 1
|
||||||
@ -144,7 +142,7 @@ function! GetHaskellIndent()
|
|||||||
return -1
|
return -1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let l:prevline = s:stripTrailingComment(getline(v:lnum - 1))
|
let l:prevline = s:stripComment(getline(v:lnum - 1))
|
||||||
let l:line = getline(v:lnum)
|
let l:line = getline(v:lnum)
|
||||||
|
|
||||||
" indent multiline strings
|
" indent multiline strings
|
||||||
@ -161,13 +159,14 @@ function! GetHaskellIndent()
|
|||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" comment indentation
|
" " comment indentation
|
||||||
if l:line =~ '^\s*--'
|
" if l:line =~ '^\s*--'
|
||||||
return match(l:prevline, '-- ')
|
" let l:s = match(l:prevline, '-- ')
|
||||||
endif
|
" if l:s > -1
|
||||||
if l:prevline =~ '^\s*--'
|
" endif
|
||||||
return match(l:prevline, '\S')
|
" " if l:prevline =~ '^\s*--'
|
||||||
endif
|
" " return match(l:prevline, '\S')
|
||||||
|
" " endif
|
||||||
|
|
||||||
" { foo :: Int
|
" { foo :: Int
|
||||||
" >>,
|
" >>,
|
||||||
@ -176,7 +175,7 @@ function! GetHaskellIndent()
|
|||||||
" ...
|
" ...
|
||||||
" >>,
|
" >>,
|
||||||
if l:line =~ '^\s*,'
|
if l:line =~ '^\s*,'
|
||||||
if s:isInBlock(l:hlstack)
|
if s:isInBlock(s:getHLStack(line('.'), col('.')))
|
||||||
normal! 0
|
normal! 0
|
||||||
call search(',', 'cW')
|
call search(',', 'cW')
|
||||||
let l:n = s:getNesting(s:getHLStack(line('.'), col('.')))
|
let l:n = s:getNesting(s:getHLStack(line('.'), col('.')))
|
||||||
@ -395,7 +394,7 @@ function! GetHaskellIndent()
|
|||||||
|
|
||||||
" foo
|
" foo
|
||||||
" >>{
|
" >>{
|
||||||
if l:line =~ '^\s*{' && l:prevline !~ '^{'
|
if l:line =~ '^\s*{ '
|
||||||
let l:s = match(l:prevline, '\S')
|
let l:s = match(l:prevline, '\S')
|
||||||
if l:s >= 0
|
if l:s >= 0
|
||||||
return l:s + &shiftwidth
|
return l:s + &shiftwidth
|
||||||
@ -477,16 +476,7 @@ function! GetHaskellIndent()
|
|||||||
return s:indentMatching(']')
|
return s:indentMatching(']')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" do not reindent indented lines
|
|
||||||
if match(l:prevline, '\S') < match(l:line, '\S')
|
|
||||||
return -1
|
return -1
|
||||||
endif
|
|
||||||
|
|
||||||
if l:line !~ '^\s*[=-]>\s' && l:line =~ '^\s*[!#$%&*+./<>?@\\^|~-]\+'
|
|
||||||
return -1
|
|
||||||
endif
|
|
||||||
|
|
||||||
return match(l:prevline, '\S')
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -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: January 24, 2017
|
" Last Change: March 9, 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')
|
||||||
@ -16,6 +16,10 @@ let b:did_indent = 1
|
|||||||
setlocal indentexpr=GetJavascriptIndent()
|
setlocal indentexpr=GetJavascriptIndent()
|
||||||
setlocal autoindent nolisp nosmartindent
|
setlocal autoindent nolisp nosmartindent
|
||||||
setlocal indentkeys+=0],0)
|
setlocal indentkeys+=0],0)
|
||||||
|
" Testable with something like:
|
||||||
|
" vim -eNs "+filetype plugin indent on" "+syntax on" "+set ft=javascript" \
|
||||||
|
" "+norm! gg=G" '+%print' '+:q!' testfile.js \
|
||||||
|
" | diff -uBZ testfile.js -
|
||||||
|
|
||||||
let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<'
|
let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<'
|
||||||
|
|
||||||
@ -34,10 +38,14 @@ if exists('*shiftwidth')
|
|||||||
endfunction
|
endfunction
|
||||||
else
|
else
|
||||||
function s:sw()
|
function s:sw()
|
||||||
return &sw
|
return &l:shiftwidth == 0 ? &l:tabstop : &l:shiftwidth
|
||||||
endfunction
|
endfunction
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Performance for forwards search(): start search at pos rather than masking
|
||||||
|
" matches before pos.
|
||||||
|
let s:z = has('patch-7.4.984') ? 'z' : ''
|
||||||
|
|
||||||
" 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,...)
|
||||||
@ -51,27 +59,34 @@ endif
|
|||||||
|
|
||||||
" Regex of syntax group names that are or delimit string or are comments.
|
" Regex of syntax group names that are or delimit string or are comments.
|
||||||
let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template\%(braces\)\@!'
|
let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template\%(braces\)\@!'
|
||||||
let s:syng_str = 'string\|template'
|
let s:syng_str = 'string\|template\|special'
|
||||||
let s:syng_com = 'comment\|doc'
|
let s:syng_com = 'comment\|doc'
|
||||||
" 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 = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'"
|
let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'"
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
function s:skip_func()
|
function s:skip_func()
|
||||||
if !s:free || search('\m`\|\${\|\*\/','nW',s:looksyn)
|
if getline('.') =~ '\%<'.col('.').'c\/.\{-}\/\|\%>'.col('.').'c[''"]\|\\$'
|
||||||
let s:free = !eval(s:skip_expr)
|
return eval(s:skip_expr)
|
||||||
let s:looksyn = line('.')
|
elseif s:checkIn || search('\m`\|\${\|\*\/','nW'.s:z,s:looksyn)
|
||||||
return !s:free
|
let s:checkIn = eval(s:skip_expr)
|
||||||
endif
|
endif
|
||||||
let s:looksyn = line('.')
|
let s:looksyn = line('.')
|
||||||
return getline('.') =~ '\%<'.col('.').'c\/.\{-}\/\|\%>'.col('.').'c[''"]\|\\$' &&
|
return s:checkIn
|
||||||
\ eval(s:skip_expr)
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:alternatePair(stop)
|
function s:alternatePair(stop)
|
||||||
let pos = getpos('.')[1:2]
|
let pos = getpos('.')[1:2]
|
||||||
while search('\m[][(){}]','bW',a:stop)
|
let pat = '[][(){};]'
|
||||||
if !s:skip_func()
|
while search('\m'.pat,'bW',a:stop)
|
||||||
let idx = stridx('])}',s:looking_at())
|
if s:skip_func() | continue | endif
|
||||||
|
let idx = stridx('])};',s:looking_at())
|
||||||
|
if idx is 3 | let pat = '[{}()]' | continue | endif
|
||||||
if idx + 1
|
if idx + 1
|
||||||
if s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,a:stop) <= 0
|
if s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,a:stop) <= 0
|
||||||
break
|
break
|
||||||
@ -79,7 +94,6 @@ function s:alternatePair(stop)
|
|||||||
else
|
else
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
endif
|
|
||||||
endwhile
|
endwhile
|
||||||
call call('cursor',pos)
|
call call('cursor',pos)
|
||||||
endfunction
|
endfunction
|
||||||
@ -104,14 +118,12 @@ function s:token()
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:previous_token()
|
function s:previous_token()
|
||||||
let l:n = line('.')
|
let l:pos = getpos('.')[1:2]
|
||||||
if (s:looking_at() !~ '\k' || search('\m\<','cbW')) && search('\m\S','bW')
|
if search('\m\k\{1,}\|\S','ebW')
|
||||||
if (getline('.')[col('.')-2:col('.')-1] == '*/' || line('.') != l:n &&
|
if (getline('.')[col('.')-2:col('.')-1] == '*/' || line('.') != l:pos[0] &&
|
||||||
\ getline('.') =~ '\%<'.col('.').'c\/\/') && s:syn_at(line('.'),col('.')) =~? s:syng_com
|
\ getline('.') =~ '\%<'.col('.').'c\/\/') && s:syn_at(line('.'),col('.')) =~? s:syng_com
|
||||||
while search('\m\/\ze[/*]','cbW')
|
while search('\m\S\ze\_s*\/[/*]','bW')
|
||||||
if !search('\m\S','bW')
|
if s:syn_at(line('.'),col('.')) !~? s:syng_com
|
||||||
break
|
|
||||||
elseif s:syn_at(line('.'),col('.')) !~? s:syng_com
|
|
||||||
return s:token()
|
return s:token()
|
||||||
endif
|
endif
|
||||||
endwhile
|
endwhile
|
||||||
@ -119,73 +131,77 @@ function s:previous_token()
|
|||||||
return s:token()
|
return s:token()
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
call call('cursor',l:pos)
|
||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:others(p)
|
function s:expr_col()
|
||||||
return "((line2byte(line('.')) + col('.')) <= ".(line2byte(a:p[0]) + a:p[1]).") || ".s:skip_expr
|
if getline('.')[col('.')-2] == ':'
|
||||||
endfunction
|
return 1
|
||||||
|
|
||||||
function s:tern_skip(p)
|
|
||||||
return s:GetPair('{','}','nbW',s:others(a:p),200,a:p[0]) > 0
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function s:tern_col(p)
|
|
||||||
return s:GetPair('?',':\@<!::\@!','nbW',s:others(a:p)
|
|
||||||
\ .' || s:tern_skip('.string(a:p).')',200,a:p[0]) > 0
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function s:label_col()
|
|
||||||
let pos = getpos('.')[1:2]
|
|
||||||
let [s:looksyn,s:free] = pos
|
|
||||||
call s:alternatePair(0)
|
|
||||||
if s:save_pos('s:IsBlock')
|
|
||||||
let poss = getpos('.')[1:2]
|
|
||||||
return call('cursor',pos) || !s:tern_col(poss)
|
|
||||||
elseif s:looking_at() == ':'
|
|
||||||
return !s:tern_col([0,0])
|
|
||||||
endif
|
endif
|
||||||
|
let bal = 0
|
||||||
|
while search('\m[{}?:;]','bW')
|
||||||
|
if eval(s:skip_expr) | continue | endif
|
||||||
|
" switch (looking_at())
|
||||||
|
exe { '}': "if s:GetPair('{','}','bW',s:skip_expr,200) <= 0 | return | endif",
|
||||||
|
\ ';': "return",
|
||||||
|
\ '{': "return getpos('.')[1:2] != b:js_cache[1:] && !s:IsBlock()",
|
||||||
|
\ ':': "let bal -= getline('.')[max([col('.')-2,0]):col('.')] !~ '::'",
|
||||||
|
\ '?': "let bal += 1 | if bal > 0 | return 1 | endif" }[s:looking_at()]
|
||||||
|
endwhile
|
||||||
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',
|
||||||
\ '\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)')
|
\ '\C\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)')
|
||||||
let s:continuation = get(g:,'javascript_continuation',
|
let s:continuation = get(g:,'javascript_continuation',
|
||||||
\ '\%([-+<>=,.~!?/*^%|&:]\|\<\%(typeof\|delete\|void\|in\|instanceof\)\)') . '$'
|
\ '\C\%([-+<>=,.~!?/*^%|&:]\|\<\%(typeof\|new\|delete\|void\|in\|instanceof\|await\)\)') . '$'
|
||||||
|
|
||||||
function s:continues(ln,con)
|
function s:continues(ln,con)
|
||||||
return !cursor(a:ln, match(' '.a:con,s:continuation)) &&
|
if !cursor(a:ln, match(' '.a:con,s:continuation))
|
||||||
\ eval( (['s:syn_at(line("."),col(".")) !~? "regex"'] +
|
let teol = s:looking_at()
|
||||||
\ repeat(['getline(".")[col(".")-2] != tr(s:looking_at(),">","=")'],3) +
|
if teol == '/'
|
||||||
\ repeat(['s:previous_token() != "."'],5) + [1])[
|
return s:syn_at(line('.'),col('.')) !~? 'regex'
|
||||||
\ index(split('/ > - + typeof in instanceof void delete'),s:token())])
|
elseif teol =~ '[-+>]'
|
||||||
|
return getline('.')[col('.')-2] != tr(teol,'>','=')
|
||||||
|
elseif teol =~ '\l'
|
||||||
|
return s:previous_token() != '.'
|
||||||
|
elseif teol == ':'
|
||||||
|
return s:expr_col()
|
||||||
|
endif
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" get the line of code stripped of comments and move cursor to the last
|
" get the line of code stripped of comments and move cursor to the last
|
||||||
" non-comment char.
|
" non-comment char.
|
||||||
function s:Trim(ln)
|
function s:Trim(ln)
|
||||||
call cursor(a:ln+1,1)
|
let pline = substitute(getline(a:ln),'\s*$','','')
|
||||||
call s:previous_token()
|
let l:max = max([strridx(pline,'//'), strridx(pline,'/*')])
|
||||||
return strpart(getline('.'),0,col('.'))
|
while l:max != -1 && s:syn_at(a:ln, strlen(pline)) =~? s:syng_com
|
||||||
|
let pline = pline[: l:max]
|
||||||
|
let l:max = max([strridx(pline,'//'), strridx(pline,'/*')])
|
||||||
|
let pline = substitute(pline[:-2],'\s*$','','')
|
||||||
|
endwhile
|
||||||
|
return pline is '' || cursor(a:ln,strlen(pline)) ? pline : 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:n = prevnonblank(a:lnum)
|
let [l:pos, l:n] = [getpos('.')[1:2], 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) =~? s:syng_str
|
|
||||||
return l:n
|
|
||||||
endif
|
|
||||||
let l:n = prevnonblank(l:n-1)
|
let l:n = prevnonblank(l:n-1)
|
||||||
elseif 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:n = s:save_pos('eval',
|
call cursor(l:n,1)
|
||||||
\ 'cursor('.l:n.',1) + search(''\m\/\*'',"bW")')
|
keepjumps norm! [*
|
||||||
|
let l:n = search('\m\S','nbW')
|
||||||
else
|
else
|
||||||
return l:n
|
break
|
||||||
endif
|
endif
|
||||||
endwhile
|
endwhile
|
||||||
|
call call('cursor',l:pos)
|
||||||
|
return l:n
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Check if line 'lnum' has a balanced amount of parentheses.
|
" Check if line 'lnum' has a balanced amount of parentheses.
|
||||||
@ -200,7 +216,9 @@ function s:Balanced(lnum)
|
|||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
let pos = match(l:line, '[][(){}]', pos + 1)
|
let pos = match(l:line, (l:open ?
|
||||||
|
\ '['.escape(tr(l:line[pos],'({[]})',')}][{(').l:line[pos],']').']' :
|
||||||
|
\ '[][(){}]'), pos + 1)
|
||||||
endwhile
|
endwhile
|
||||||
return !l:open
|
return !l:open
|
||||||
endfunction
|
endfunction
|
||||||
@ -209,11 +227,11 @@ function s:OneScope(lnum)
|
|||||||
let pline = s:Trim(a:lnum)
|
let pline = s:Trim(a:lnum)
|
||||||
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
|
||||||
call s:previous_token()
|
if s:previous_token() =~# '^\%(await\|each\)$'
|
||||||
let kw = 'for if let while with'
|
|
||||||
if index(split('await each'),s:token()) + 1
|
|
||||||
call s:previous_token()
|
call s:previous_token()
|
||||||
let kw = 'for'
|
let kw = 'for'
|
||||||
|
else
|
||||||
|
let kw = 'for if let while with'
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 &&
|
return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 &&
|
||||||
@ -245,18 +263,22 @@ function s:IsBlock()
|
|||||||
if s:looking_at() == '{'
|
if s:looking_at() == '{'
|
||||||
let l:n = line('.')
|
let l:n = line('.')
|
||||||
let char = s:previous_token()
|
let char = s:previous_token()
|
||||||
let syn = char =~ '[{>/]' ? s:syn_at(line('.'),col('.')-(char == '{')) : ''
|
if match(s:stack,'\cxml\|jsx') + 1 && s:syn_at(line('.'),col('.')-1) =~? 'xml\|jsx'
|
||||||
if syn =~? 'xml\|jsx'
|
|
||||||
return char != '{'
|
return char != '{'
|
||||||
elseif char =~ '\k'
|
elseif char =~ '\k'
|
||||||
return index(split('return const let import export yield default delete var await void typeof throw case new in instanceof')
|
if char ==# 'type'
|
||||||
\ ,char) < (line('.') != l:n) || s:previous_token() == '.'
|
return s:previous_token() !~# '^\%(im\|ex\)port$'
|
||||||
elseif char == '>'
|
|
||||||
return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow'
|
|
||||||
elseif char == ':'
|
|
||||||
return getline('.')[col('.')-2] != ':' && s:label_col()
|
|
||||||
endif
|
endif
|
||||||
return syn =~? 'regex' || char !~ '[=~!<*,/?^%|&([]' &&
|
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') == '.'
|
||||||
|
elseif char == '>'
|
||||||
|
return getline('.')[col('.')-2] == '=' || s:syn_at(line('.'),col('.')) =~? '^jsflow'
|
||||||
|
elseif char == ':'
|
||||||
|
return !s:save_pos('s:expr_col')
|
||||||
|
elseif char == '/'
|
||||||
|
return s:syn_at(line('.'),col('.')) =~? 'regex'
|
||||||
|
endif
|
||||||
|
return char !~ '[=~!<*,?^%|&([]' &&
|
||||||
\ (char !~ '[-+]' || l:n != line('.') && getline('.')[col('.')-2] == char)
|
\ (char !~ '[-+]' || l:n != line('.') && getline('.')[col('.')-2] == char)
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
@ -266,7 +288,9 @@ function GetJavascriptIndent()
|
|||||||
" 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('.')
|
||||||
let syns = s:syn_at(v:lnum, 1)
|
" use synstack as it validates syn state and works in an empty line
|
||||||
|
let s:stack = map(synstack(v:lnum,1),"synIDattr(v:val,'name')")
|
||||||
|
let syns = get(s:stack,-1,'')
|
||||||
|
|
||||||
" start with strings,comments,etc.
|
" start with strings,comments,etc.
|
||||||
if syns =~? s:syng_com
|
if syns =~? s:syng_com
|
||||||
@ -275,7 +299,7 @@ function GetJavascriptIndent()
|
|||||||
elseif l:line !~ '^\s*\/[/*]'
|
elseif l:line !~ '^\s*\/[/*]'
|
||||||
return -1
|
return -1
|
||||||
endif
|
endif
|
||||||
elseif syns =~? s:syng_str && l:line !~ '^[''"]'
|
elseif syns =~? s: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
|
||||||
@ -300,11 +324,11 @@ function GetJavascriptIndent()
|
|||||||
\ (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[1:])
|
||||||
else
|
else
|
||||||
let [s:looksyn, s:free, top] = [v:lnum - 1, 1, (!indent(l:lnum) &&
|
let [s:looksyn, s:checkIn, top] = [v:lnum - 1, 0, (!indent(l:lnum) &&
|
||||||
\ s:syn_at(l:lnum,1) !~? s:syng_str) * l:lnum]
|
\ 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,top)
|
||||||
elseif indent(v:lnum) && 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,top)
|
||||||
else
|
else
|
||||||
call s:alternatePair(top)
|
call s:alternatePair(top)
|
||||||
@ -324,31 +348,27 @@ function GetJavascriptIndent()
|
|||||||
if &cino !~ ':'
|
if &cino !~ ':'
|
||||||
let switch_offset = s:W
|
let switch_offset = s:W
|
||||||
else
|
else
|
||||||
let cinc = matchlist(&cino,'.*:\zs\(-\)\=\(\d*\)\(\.\d\+\)\=\(s\)\=\C')
|
let switch_offset = max([-indent(num),s:parse_cino(':')])
|
||||||
let switch_offset = max([cinc[0] is '' ? 0 : (cinc[1].1) *
|
|
||||||
\ ((strlen(cinc[2].cinc[3]) ? str2nr(cinc[2].str2nr(cinc[3][1])) : 10) *
|
|
||||||
\ (cinc[4] is '' ? 1 : s:W)) / 10, -indent(num)])
|
|
||||||
endif
|
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
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
if idx < 0 && pline !~ '[{;]$'
|
if idx < 0 && pline[-1:] !~ '[{;]'
|
||||||
if pline =~# ':\@<!:$'
|
|
||||||
call cursor(l:lnum,strlen(pline))
|
|
||||||
let isOp = s:tern_col(b:js_cache[1:2]) * s:W
|
|
||||||
else
|
|
||||||
let isOp = (l:line =~# s:opfirst || s:continues(l:lnum,pline)) * s:W
|
let isOp = (l:line =~# s:opfirst || s:continues(l:lnum,pline)) * s:W
|
||||||
endif
|
|
||||||
let bL = s:iscontOne(l:lnum,b:js_cache[1],isOp)
|
let bL = s:iscontOne(l:lnum,b:js_cache[1],isOp)
|
||||||
let bL -= (bL && l:line[0] == '{') * s:W
|
let bL -= (bL && l:line[0] == '{') * s:W
|
||||||
endif
|
endif
|
||||||
|
elseif idx < 0 && getline(b:js_cache[1])[b:js_cache[2]-1] == '(' && &cino =~ '('
|
||||||
|
let pval = s:parse_cino('(')
|
||||||
|
return !pval ? (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 idx + 1 || l:line[:1] == '|}'
|
if l:line =~ '^\%([])}]\||}\)'
|
||||||
return indent(num)
|
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
|
||||||
endif
|
endif
|
||||||
|
26
indent/litcoffee.vim
Normal file
26
indent/litcoffee.vim
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'coffee-script') == -1
|
||||||
|
|
||||||
|
if exists('b:did_indent')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
runtime! indent/coffee.vim
|
||||||
|
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
setlocal indentexpr=GetLitCoffeeIndent()
|
||||||
|
|
||||||
|
if exists('*GetLitCoffeeIndent')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
function GetLitCoffeeIndent()
|
||||||
|
if searchpair('^ \|\t', '', '$', 'bWnm') > 0
|
||||||
|
return GetCoffeeIndent(v:lnum)
|
||||||
|
else
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
|
endif
|
808
indent/ruby.vim
808
indent/ruby.vim
@ -20,6 +20,11 @@ if !exists('g:ruby_indent_access_modifier_style')
|
|||||||
let g:ruby_indent_access_modifier_style = 'normal'
|
let g:ruby_indent_access_modifier_style = 'normal'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !exists('g:ruby_indent_assignment_style')
|
||||||
|
" Possible values: "variable", "hanging"
|
||||||
|
let g:ruby_indent_assignment_style = 'hanging'
|
||||||
|
endif
|
||||||
|
|
||||||
if !exists('g:ruby_indent_block_style')
|
if !exists('g:ruby_indent_block_style')
|
||||||
" Possible values: "expression", "do"
|
" Possible values: "expression", "do"
|
||||||
let g:ruby_indent_block_style = 'expression'
|
let g:ruby_indent_block_style = 'expression'
|
||||||
@ -144,7 +149,507 @@ let s:block_continuation_regex = '^\s*[^])}\t ].*'.s:block_regex
|
|||||||
" Regex that describes a leading operator (only a method call's dot for now)
|
" Regex that describes a leading operator (only a method call's dot for now)
|
||||||
let s:leading_operator_regex = '^\s*[.]'
|
let s:leading_operator_regex = '^\s*[.]'
|
||||||
|
|
||||||
" 2. Auxiliary Functions {{{1
|
" 2. GetRubyIndent Function {{{1
|
||||||
|
" =========================
|
||||||
|
|
||||||
|
function GetRubyIndent(...)
|
||||||
|
" 2.1. Setup {{{2
|
||||||
|
" ----------
|
||||||
|
|
||||||
|
let indent_info = {}
|
||||||
|
|
||||||
|
" The value of a single shift-width
|
||||||
|
if exists('*shiftwidth')
|
||||||
|
let indent_info.sw = shiftwidth()
|
||||||
|
else
|
||||||
|
let indent_info.sw = &sw
|
||||||
|
endif
|
||||||
|
|
||||||
|
" For the current line, use the first argument if given, else v:lnum
|
||||||
|
let indent_info.clnum = a:0 ? a:1 : v:lnum
|
||||||
|
let indent_info.cline = getline(indent_info.clnum)
|
||||||
|
|
||||||
|
" Set up variables for restoring position in file. Could use clnum here.
|
||||||
|
let indent_info.col = col('.')
|
||||||
|
|
||||||
|
" 2.2. Work on the current line {{{2
|
||||||
|
" -----------------------------
|
||||||
|
let indent_callback_names = [
|
||||||
|
\ 's:AccessModifier',
|
||||||
|
\ 's:ClosingBracketOnEmptyLine',
|
||||||
|
\ 's:BlockComment',
|
||||||
|
\ 's:DeindentingKeyword',
|
||||||
|
\ 's:MultilineStringOrLineComment',
|
||||||
|
\ 's:ClosingHeredocDelimiter',
|
||||||
|
\ 's:LeadingOperator',
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
for callback_name in indent_callback_names
|
||||||
|
" Decho "Running: ".callback_name
|
||||||
|
let indent = call(function(callback_name), [indent_info])
|
||||||
|
|
||||||
|
if indent >= 0
|
||||||
|
" Decho "Match: ".callback_name." indent=".indent." info=".string(indent_info)
|
||||||
|
return indent
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" 2.3. Work on the previous line. {{{2
|
||||||
|
" -------------------------------
|
||||||
|
let indent_callback_names = [
|
||||||
|
\ 's:EmptyInsideString',
|
||||||
|
\ 's:StartOfFile',
|
||||||
|
\ 's:AfterAccessModifier',
|
||||||
|
\ 's:ContinuedLine',
|
||||||
|
\ 's:AfterBlockOpening',
|
||||||
|
\ 's:AfterHangingSplat',
|
||||||
|
\ 's:AfterUnbalancedBracket',
|
||||||
|
\ 's:AfterLeadingOperator',
|
||||||
|
\ 's:AfterEndKeyword',
|
||||||
|
\ 's:AfterIndentKeyword',
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
" Previous line number
|
||||||
|
let indent_info.plnum = s:PrevNonBlankNonString(indent_info.clnum - 1)
|
||||||
|
let indent_info.pline = getline(indent_info.plnum)
|
||||||
|
|
||||||
|
for callback_name in indent_callback_names
|
||||||
|
" Decho "Running: ".callback_name
|
||||||
|
let indent = call(function(callback_name), [indent_info])
|
||||||
|
|
||||||
|
if indent >= 0
|
||||||
|
" Decho "Match: ".callback_name." indent=".indent." info=".string(indent_info)
|
||||||
|
return indent
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" 2.4. Work on the MSL line. {{{2
|
||||||
|
" --------------------------
|
||||||
|
let indent_callback_names = [
|
||||||
|
\ 's:PreviousNotMSL',
|
||||||
|
\ 's:IndentingKeywordInMSL',
|
||||||
|
\ 's:ContinuedHangingOperator',
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
" Most Significant line based on the previous one -- in case it's a
|
||||||
|
" contination of something above
|
||||||
|
let indent_info.plnum_msl = s:GetMSL(indent_info.plnum)
|
||||||
|
|
||||||
|
for callback_name in indent_callback_names
|
||||||
|
" Decho "Running: ".callback_name
|
||||||
|
let indent = call(function(callback_name), [indent_info])
|
||||||
|
|
||||||
|
if indent >= 0
|
||||||
|
" Decho "Match: ".callback_name." indent=".indent." info=".string(indent_info)
|
||||||
|
return indent
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" }}}2
|
||||||
|
|
||||||
|
" By default, just return the previous line's indent
|
||||||
|
" Decho "Default case matched"
|
||||||
|
return indent(indent_info.plnum)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" 3. Indenting Logic Callbacks {{{1
|
||||||
|
" ============================
|
||||||
|
|
||||||
|
function! s:AccessModifier(cline_info)
|
||||||
|
let info = a:cline_info
|
||||||
|
|
||||||
|
" If this line is an access modifier keyword, align according to the closest
|
||||||
|
" class declaration.
|
||||||
|
if g:ruby_indent_access_modifier_style == 'indent'
|
||||||
|
if s:Match(info.clnum, s:access_modifier_regex)
|
||||||
|
let class_lnum = s:FindContainingClass()
|
||||||
|
if class_lnum > 0
|
||||||
|
return indent(class_lnum) + info.sw
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
elseif g:ruby_indent_access_modifier_style == 'outdent'
|
||||||
|
if s:Match(info.clnum, s:access_modifier_regex)
|
||||||
|
let class_lnum = s:FindContainingClass()
|
||||||
|
if class_lnum > 0
|
||||||
|
return indent(class_lnum)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:ClosingBracketOnEmptyLine(cline_info)
|
||||||
|
let info = a:cline_info
|
||||||
|
|
||||||
|
" If we got a closing bracket on an empty line, find its match and indent
|
||||||
|
" according to it. For parentheses we indent to its column - 1, for the
|
||||||
|
" others we indent to the containing line's MSL's level. Return -1 if fail.
|
||||||
|
let col = matchend(info.cline, '^\s*[]})]')
|
||||||
|
|
||||||
|
if col > 0 && !s:IsInStringOrComment(info.clnum, col)
|
||||||
|
call cursor(info.clnum, col)
|
||||||
|
let closing_bracket = info.cline[col - 1]
|
||||||
|
let bracket_pair = strpart('(){}[]', stridx(')}]', closing_bracket) * 2, 2)
|
||||||
|
|
||||||
|
if searchpair(escape(bracket_pair[0], '\['), '', bracket_pair[1], 'bW', s:skip_expr) > 0
|
||||||
|
if closing_bracket == ')' && col('.') != col('$') - 1
|
||||||
|
let ind = virtcol('.') - 1
|
||||||
|
elseif g:ruby_indent_block_style == 'do'
|
||||||
|
let ind = indent(line('.'))
|
||||||
|
else " g:ruby_indent_block_style == 'expression'
|
||||||
|
let ind = indent(s:GetMSL(line('.')))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ind
|
||||||
|
endif
|
||||||
|
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:BlockComment(cline_info)
|
||||||
|
" If we have a =begin or =end set indent to first column.
|
||||||
|
if match(a:cline_info.cline, '^\s*\%(=begin\|=end\)$') != -1
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:DeindentingKeyword(cline_info)
|
||||||
|
let info = a:cline_info
|
||||||
|
|
||||||
|
" If we have a deindenting keyword, find its match and indent to its level.
|
||||||
|
" TODO: this is messy
|
||||||
|
if s:Match(info.clnum, s:ruby_deindent_keywords)
|
||||||
|
call cursor(info.clnum, 1)
|
||||||
|
|
||||||
|
if searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
|
||||||
|
\ s:end_skip_expr) > 0
|
||||||
|
let msl = s:GetMSL(line('.'))
|
||||||
|
let line = getline(line('.'))
|
||||||
|
|
||||||
|
if s:IsAssignment(line, col('.')) &&
|
||||||
|
\ strpart(line, col('.') - 1, 2) !~ 'do'
|
||||||
|
" assignment to case/begin/etc, on the same line
|
||||||
|
if g:ruby_indent_assignment_style == 'hanging'
|
||||||
|
" hanging indent
|
||||||
|
let ind = virtcol('.') - 1
|
||||||
|
else
|
||||||
|
" align with variable
|
||||||
|
let ind = indent(line('.'))
|
||||||
|
endif
|
||||||
|
elseif g:ruby_indent_block_style == 'do'
|
||||||
|
" align to line of the "do", not to the MSL
|
||||||
|
let ind = indent(line('.'))
|
||||||
|
elseif getline(msl) =~ '=\s*\(#.*\)\=$'
|
||||||
|
" in the case of assignment to the MSL, align to the starting line,
|
||||||
|
" not to the MSL
|
||||||
|
let ind = indent(line('.'))
|
||||||
|
else
|
||||||
|
" align to the MSL
|
||||||
|
let ind = indent(msl)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return ind
|
||||||
|
endif
|
||||||
|
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:MultilineStringOrLineComment(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 s:IsInStringOrDocumentation(info.clnum, matchend(info.cline, '^\s*') + 1)
|
||||||
|
return indent(info.clnum)
|
||||||
|
endif
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:ClosingHeredocDelimiter(cline_info)
|
||||||
|
let info = a:cline_info
|
||||||
|
|
||||||
|
" If we are at the closing delimiter of a "<<" heredoc-style string, set the
|
||||||
|
" indent to 0.
|
||||||
|
if info.cline =~ '^\k\+\s*$'
|
||||||
|
\ && s:IsInStringDelimiter(info.clnum, 1)
|
||||||
|
\ && search('\V<<'.info.cline, 'nbW') > 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:LeadingOperator(cline_info)
|
||||||
|
" 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)
|
||||||
|
return indent(s:GetMSL(a:cline_info.clnum)) + a:cline_info.sw
|
||||||
|
endif
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:EmptyInsideString(pline_info)
|
||||||
|
" 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
|
||||||
|
let info = a:pline_info
|
||||||
|
|
||||||
|
if info.cline =~ '^\s*$' && info.plnum != prevnonblank(info.clnum - 1)
|
||||||
|
return indent(prevnonblank(info.clnum))
|
||||||
|
endif
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:StartOfFile(pline_info)
|
||||||
|
" At the start of the file use zero indent.
|
||||||
|
if a:pline_info.plnum == 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:AfterAccessModifier(pline_info)
|
||||||
|
let info = a:pline_info
|
||||||
|
|
||||||
|
if g:ruby_indent_access_modifier_style == 'indent'
|
||||||
|
" If the previous line was a private/protected keyword, add a
|
||||||
|
" level of indent.
|
||||||
|
if s:Match(info.plnum, s:indent_access_modifier_regex)
|
||||||
|
return indent(info.plnum) + info.sw
|
||||||
|
endif
|
||||||
|
elseif g:ruby_indent_access_modifier_style == 'outdent'
|
||||||
|
" If the previous line was a private/protected/public keyword, add
|
||||||
|
" a level of indent, since the keyword has been out-dented.
|
||||||
|
if s:Match(info.plnum, s:access_modifier_regex)
|
||||||
|
return indent(info.plnum) + info.sw
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Example:
|
||||||
|
"
|
||||||
|
" if foo || bar ||
|
||||||
|
" baz || bing
|
||||||
|
" puts "foo"
|
||||||
|
" end
|
||||||
|
"
|
||||||
|
function! s:ContinuedLine(pline_info)
|
||||||
|
let info = a:pline_info
|
||||||
|
|
||||||
|
let col = s:Match(info.plnum, s:ruby_indent_keywords)
|
||||||
|
if s:Match(info.plnum, s:continuable_regex) &&
|
||||||
|
\ s:Match(info.plnum, s:continuation_regex)
|
||||||
|
if col > 0 && s:IsAssignment(info.pline, col)
|
||||||
|
if g:ruby_indent_assignment_style == 'hanging'
|
||||||
|
" hanging indent
|
||||||
|
let ind = col - 1
|
||||||
|
else
|
||||||
|
" align with variable
|
||||||
|
let ind = indent(info.plnum)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let ind = indent(s:GetMSL(info.plnum))
|
||||||
|
endif
|
||||||
|
return ind + info.sw + info.sw
|
||||||
|
endif
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:AfterBlockOpening(pline_info)
|
||||||
|
let info = a:pline_info
|
||||||
|
|
||||||
|
" If the previous line ended with a block opening, add a level of indent.
|
||||||
|
if s:Match(info.plnum, s:block_regex)
|
||||||
|
if g:ruby_indent_block_style == 'do'
|
||||||
|
" don't align to the msl, align to the "do"
|
||||||
|
let ind = indent(info.plnum) + info.sw
|
||||||
|
else
|
||||||
|
let plnum_msl = s:GetMSL(info.plnum)
|
||||||
|
|
||||||
|
if getline(plnum_msl) =~ '=\s*\(#.*\)\=$'
|
||||||
|
" in the case of assignment to the msl, align to the starting line,
|
||||||
|
" not to the msl
|
||||||
|
let ind = indent(info.plnum) + info.sw
|
||||||
|
else
|
||||||
|
let ind = indent(plnum_msl) + info.sw
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ind
|
||||||
|
endif
|
||||||
|
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:AfterLeadingOperator(pline_info)
|
||||||
|
" If the previous line started with a leading operator, use its MSL's level
|
||||||
|
" of indent
|
||||||
|
if s:Match(a:pline_info.plnum, s:leading_operator_regex)
|
||||||
|
return indent(s:GetMSL(a:pline_info.plnum))
|
||||||
|
endif
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:AfterHangingSplat(pline_info)
|
||||||
|
let info = a:pline_info
|
||||||
|
|
||||||
|
" If the previous line ended with the "*" of a splat, add a level of indent
|
||||||
|
if info.pline =~ s:splat_regex
|
||||||
|
return indent(info.plnum) + info.sw
|
||||||
|
endif
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:AfterUnbalancedBracket(pline_info)
|
||||||
|
let info = a:pline_info
|
||||||
|
|
||||||
|
" If the previous line contained unclosed opening brackets and we are still
|
||||||
|
" in them, find the rightmost one and add indent depending on the bracket
|
||||||
|
" type.
|
||||||
|
"
|
||||||
|
" If it contained hanging closing brackets, find the rightmost one, find its
|
||||||
|
" match and indent according to that.
|
||||||
|
if info.pline =~ '[[({]' || info.pline =~ '[])}]\s*\%(#.*\)\=$'
|
||||||
|
let [opening, closing] = s:ExtraBrackets(info.plnum)
|
||||||
|
|
||||||
|
if opening.pos != -1
|
||||||
|
if opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
|
||||||
|
if col('.') + 1 == col('$')
|
||||||
|
return indent(info.plnum) + info.sw
|
||||||
|
else
|
||||||
|
return virtcol('.')
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let nonspace = matchend(info.pline, '\S', opening.pos + 1) - 1
|
||||||
|
return nonspace > 0 ? nonspace : indent(info.plnum) + info.sw
|
||||||
|
endif
|
||||||
|
elseif closing.pos != -1
|
||||||
|
call cursor(info.plnum, closing.pos + 1)
|
||||||
|
normal! %
|
||||||
|
|
||||||
|
if s:Match(line('.'), s:ruby_indent_keywords)
|
||||||
|
return indent('.') + info.sw
|
||||||
|
else
|
||||||
|
return indent(s:GetMSL(line('.')))
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
call cursor(info.clnum, info.col)
|
||||||
|
end
|
||||||
|
endif
|
||||||
|
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:AfterEndKeyword(pline_info)
|
||||||
|
let info = a:pline_info
|
||||||
|
" If the previous line ended with an "end", match that "end"s beginning's
|
||||||
|
" indent.
|
||||||
|
let col = s:Match(info.plnum, '\%(^\|[^.:@$]\)\<end\>\s*\%(#.*\)\=$')
|
||||||
|
if col > 0
|
||||||
|
call cursor(info.plnum, col)
|
||||||
|
if searchpair(s:end_start_regex, '', s:end_end_regex, 'bW',
|
||||||
|
\ s:end_skip_expr) > 0
|
||||||
|
let n = line('.')
|
||||||
|
let ind = indent('.')
|
||||||
|
let msl = s:GetMSL(n)
|
||||||
|
if msl != n
|
||||||
|
let ind = indent(msl)
|
||||||
|
end
|
||||||
|
return ind
|
||||||
|
endif
|
||||||
|
end
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:AfterIndentKeyword(pline_info)
|
||||||
|
let info = a:pline_info
|
||||||
|
let col = s:Match(info.plnum, s:ruby_indent_keywords)
|
||||||
|
|
||||||
|
if col > 0
|
||||||
|
call cursor(info.plnum, col)
|
||||||
|
let ind = virtcol('.') - 1 + info.sw
|
||||||
|
" TODO: make this better (we need to count them) (or, if a searchpair
|
||||||
|
" fails, we know that something is lacking an end and thus we indent a
|
||||||
|
" level
|
||||||
|
if s:Match(info.plnum, s:end_end_regex)
|
||||||
|
let ind = indent('.')
|
||||||
|
elseif s:IsAssignment(info.pline, col)
|
||||||
|
if g:ruby_indent_assignment_style == 'hanging'
|
||||||
|
" hanging indent
|
||||||
|
let ind = col + info.sw - 1
|
||||||
|
else
|
||||||
|
" align with variable
|
||||||
|
let ind = indent(info.plnum) + info.sw
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return ind
|
||||||
|
endif
|
||||||
|
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:PreviousNotMSL(msl_info)
|
||||||
|
let info = a:msl_info
|
||||||
|
|
||||||
|
" If the previous line wasn't a MSL
|
||||||
|
if info.plnum != info.plnum_msl
|
||||||
|
" If previous line ends bracket and begins non-bracket continuation decrease indent by 1.
|
||||||
|
if s:Match(info.plnum, s:bracket_switch_continuation_regex)
|
||||||
|
" TODO (2016-10-07) Wrong/unused? How could it be "1"?
|
||||||
|
return indent(info.plnum) - 1
|
||||||
|
" If previous line is a continuation return its indent.
|
||||||
|
" TODO: the || s:IsInString() thing worries me a bit.
|
||||||
|
elseif s:Match(info.plnum, s:non_bracket_continuation_regex) || s:IsInString(info.plnum, strlen(line))
|
||||||
|
return indent(info.plnum)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:IndentingKeywordInMSL(msl_info)
|
||||||
|
let info = a:msl_info
|
||||||
|
" 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
|
||||||
|
" module Foo; class Bar; end
|
||||||
|
let col = s:Match(info.plnum_msl, s:ruby_indent_keywords)
|
||||||
|
if col > 0
|
||||||
|
let ind = indent(info.plnum_msl) + info.sw
|
||||||
|
if s:Match(info.plnum_msl, s:end_end_regex)
|
||||||
|
let ind = ind - info.sw
|
||||||
|
elseif s:IsAssignment(getline(info.plnum_msl), col)
|
||||||
|
if g:ruby_indent_assignment_style == 'hanging'
|
||||||
|
" hanging indent
|
||||||
|
let ind = col + info.sw - 1
|
||||||
|
else
|
||||||
|
" align with variable
|
||||||
|
let ind = indent(info.plnum_msl) + info.sw
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return ind
|
||||||
|
endif
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:ContinuedHangingOperator(msl_info)
|
||||||
|
let info = a:msl_info
|
||||||
|
|
||||||
|
" If the previous line ended with [*+/.,-=], but wasn't a block ending or a
|
||||||
|
" closing bracket, indent one extra level.
|
||||||
|
if s:Match(info.plnum_msl, s:non_bracket_continuation_regex) && !s:Match(info.plnum_msl, '^\s*\([\])}]\|end\)')
|
||||||
|
if info.plnum_msl == info.plnum
|
||||||
|
let ind = indent(info.plnum_msl) + info.sw
|
||||||
|
else
|
||||||
|
let ind = indent(info.plnum_msl)
|
||||||
|
endif
|
||||||
|
return ind
|
||||||
|
endif
|
||||||
|
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" 4. Auxiliary Functions {{{1
|
||||||
" ======================
|
" ======================
|
||||||
|
|
||||||
" 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.
|
||||||
@ -167,6 +672,10 @@ function s:IsInStringDelimiter(lnum, col)
|
|||||||
return synIDattr(synID(a:lnum, a:col, 1), 'name') == 'rubyStringDelimiter'
|
return synIDattr(synID(a:lnum, a:col, 1), 'name') == 'rubyStringDelimiter'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function s:IsAssignment(str, pos)
|
||||||
|
return strpart(a:str, 0, a:pos - 1) =~ '=\s*$'
|
||||||
|
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)
|
||||||
let in_block = 0
|
let in_block = 0
|
||||||
@ -196,7 +705,6 @@ endfunction
|
|||||||
function s:GetMSL(lnum)
|
function s:GetMSL(lnum)
|
||||||
" 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 msl_body = getline(msl)
|
|
||||||
let lnum = s:PrevNonBlankNonString(a:lnum - 1)
|
let lnum = s:PrevNonBlankNonString(a:lnum - 1)
|
||||||
while lnum > 0
|
while lnum > 0
|
||||||
" If we have a continuation line, or we're in a string, use line as MSL.
|
" If we have a continuation line, or we're in a string, use line as MSL.
|
||||||
@ -293,7 +801,6 @@ function s:GetMSL(lnum)
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let msl_body = getline(msl)
|
|
||||||
let lnum = s:PrevNonBlankNonString(lnum - 1)
|
let lnum = s:PrevNonBlankNonString(lnum - 1)
|
||||||
endwhile
|
endwhile
|
||||||
return msl
|
return msl
|
||||||
@ -398,301 +905,6 @@ function! s:FindContainingClass()
|
|||||||
return 0
|
return 0
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" 3. GetRubyIndent Function {{{1
|
|
||||||
" =========================
|
|
||||||
|
|
||||||
function GetRubyIndent(...)
|
|
||||||
" 3.1. Setup {{{2
|
|
||||||
" ----------
|
|
||||||
|
|
||||||
" The value of a single shift-width
|
|
||||||
if exists('*shiftwidth')
|
|
||||||
let sw = shiftwidth()
|
|
||||||
else
|
|
||||||
let sw = &sw
|
|
||||||
endif
|
|
||||||
|
|
||||||
" For the current line, use the first argument if given, else v:lnum
|
|
||||||
let clnum = a:0 ? a:1 : v:lnum
|
|
||||||
|
|
||||||
" Set up variables for restoring position in file. Could use clnum here.
|
|
||||||
let vcol = col('.')
|
|
||||||
|
|
||||||
" 3.2. Work on the current line {{{2
|
|
||||||
" -----------------------------
|
|
||||||
|
|
||||||
" Get the current line.
|
|
||||||
let line = getline(clnum)
|
|
||||||
let ind = -1
|
|
||||||
|
|
||||||
" If this line is an access modifier keyword, align according to the closest
|
|
||||||
" class declaration.
|
|
||||||
if g:ruby_indent_access_modifier_style == 'indent'
|
|
||||||
if s:Match(clnum, s:access_modifier_regex)
|
|
||||||
let class_line = s:FindContainingClass()
|
|
||||||
if class_line > 0
|
|
||||||
return indent(class_line) + sw
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
elseif g:ruby_indent_access_modifier_style == 'outdent'
|
|
||||||
if s:Match(clnum, s:access_modifier_regex)
|
|
||||||
let class_line = s:FindContainingClass()
|
|
||||||
if class_line > 0
|
|
||||||
return indent(class_line)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If we got a closing bracket on an empty line, find its match and indent
|
|
||||||
" according to it. For parentheses we indent to its column - 1, for the
|
|
||||||
" others we indent to the containing line's MSL's level. Return -1 if fail.
|
|
||||||
let col = matchend(line, '^\s*[]})]')
|
|
||||||
if col > 0 && !s:IsInStringOrComment(clnum, col)
|
|
||||||
call cursor(clnum, col)
|
|
||||||
let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
|
|
||||||
if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0
|
|
||||||
if line[col-1]==')' && col('.') != col('$') - 1
|
|
||||||
let ind = virtcol('.') - 1
|
|
||||||
elseif g:ruby_indent_block_style == 'do'
|
|
||||||
let ind = indent(line('.'))
|
|
||||||
else " g:ruby_indent_block_style == 'expression'
|
|
||||||
let ind = indent(s:GetMSL(line('.')))
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
return ind
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If we have a =begin or =end set indent to first column.
|
|
||||||
if match(line, '^\s*\%(=begin\|=end\)$') != -1
|
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If we have a deindenting keyword, find its match and indent to its level.
|
|
||||||
" TODO: this is messy
|
|
||||||
if s:Match(clnum, s:ruby_deindent_keywords)
|
|
||||||
call cursor(clnum, 1)
|
|
||||||
if searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
|
|
||||||
\ s:end_skip_expr) > 0
|
|
||||||
let msl = s:GetMSL(line('.'))
|
|
||||||
let line = getline(line('.'))
|
|
||||||
|
|
||||||
if strpart(line, 0, col('.') - 1) =~ '=\s*$' &&
|
|
||||||
\ strpart(line, col('.') - 1, 2) !~ 'do'
|
|
||||||
" assignment to case/begin/etc, on the same line, hanging indent
|
|
||||||
let ind = virtcol('.') - 1
|
|
||||||
elseif g:ruby_indent_block_style == 'do'
|
|
||||||
" align to line of the "do", not to the MSL
|
|
||||||
let ind = indent(line('.'))
|
|
||||||
elseif getline(msl) =~ '=\s*\(#.*\)\=$'
|
|
||||||
" in the case of assignment to the MSL, align to the starting line,
|
|
||||||
" not to the MSL
|
|
||||||
let ind = indent(line('.'))
|
|
||||||
else
|
|
||||||
" align to the MSL
|
|
||||||
let ind = indent(msl)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
return ind
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If we are in a multi-line string or line-comment, don't do anything to it.
|
|
||||||
if s:IsInStringOrDocumentation(clnum, matchend(line, '^\s*') + 1)
|
|
||||||
return indent('.')
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If we are at the closing delimiter of a "<<" heredoc-style string, set the
|
|
||||||
" indent to 0.
|
|
||||||
if line =~ '^\k\+\s*$'
|
|
||||||
\ && s:IsInStringDelimiter(clnum, 1)
|
|
||||||
\ && search('\V<<'.line, 'nbW') > 0
|
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If the current line starts with a leading operator, add a level of indent.
|
|
||||||
if s:Match(clnum, s:leading_operator_regex)
|
|
||||||
return indent(s:GetMSL(clnum)) + sw
|
|
||||||
endif
|
|
||||||
|
|
||||||
" 3.3. Work on the previous line. {{{2
|
|
||||||
" -------------------------------
|
|
||||||
|
|
||||||
" Find a non-blank, non-multi-line string line above the current line.
|
|
||||||
let lnum = s:PrevNonBlankNonString(clnum - 1)
|
|
||||||
|
|
||||||
" If the line is empty and inside a string, use the previous line.
|
|
||||||
if line =~ '^\s*$' && lnum != prevnonblank(clnum - 1)
|
|
||||||
return indent(prevnonblank(clnum))
|
|
||||||
endif
|
|
||||||
|
|
||||||
" At the start of the file use zero indent.
|
|
||||||
if lnum == 0
|
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Set up variables for the previous line.
|
|
||||||
let line = getline(lnum)
|
|
||||||
let ind = indent(lnum)
|
|
||||||
|
|
||||||
if g:ruby_indent_access_modifier_style == 'indent'
|
|
||||||
" If the previous line was a private/protected keyword, add a
|
|
||||||
" level of indent.
|
|
||||||
if s:Match(lnum, s:indent_access_modifier_regex)
|
|
||||||
return indent(lnum) + sw
|
|
||||||
endif
|
|
||||||
elseif g:ruby_indent_access_modifier_style == 'outdent'
|
|
||||||
" If the previous line was a private/protected/public keyword, add
|
|
||||||
" a level of indent, since the keyword has been out-dented.
|
|
||||||
if s:Match(lnum, s:access_modifier_regex)
|
|
||||||
return indent(lnum) + sw
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
if s:Match(lnum, s:continuable_regex) && s:Match(lnum, s:continuation_regex)
|
|
||||||
return indent(s:GetMSL(lnum)) + sw + sw
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If the previous line ended with a block opening, add a level of indent.
|
|
||||||
if s:Match(lnum, s:block_regex)
|
|
||||||
let msl = s:GetMSL(lnum)
|
|
||||||
|
|
||||||
if g:ruby_indent_block_style == 'do'
|
|
||||||
" don't align to the msl, align to the "do"
|
|
||||||
let ind = indent(lnum) + sw
|
|
||||||
elseif getline(msl) =~ '=\s*\(#.*\)\=$'
|
|
||||||
" in the case of assignment to the msl, align to the starting line,
|
|
||||||
" not to the msl
|
|
||||||
let ind = indent(lnum) + sw
|
|
||||||
else
|
|
||||||
let ind = indent(msl) + sw
|
|
||||||
endif
|
|
||||||
return ind
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If the previous line started with a leading operator, use its MSL's level
|
|
||||||
" of indent
|
|
||||||
if s:Match(lnum, s:leading_operator_regex)
|
|
||||||
return indent(s:GetMSL(lnum))
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If the previous line ended with the "*" of a splat, add a level of indent
|
|
||||||
if line =~ s:splat_regex
|
|
||||||
return indent(lnum) + sw
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If the previous line contained unclosed opening brackets and we are still
|
|
||||||
" in them, find the rightmost one and add indent depending on the bracket
|
|
||||||
" type.
|
|
||||||
"
|
|
||||||
" If it contained hanging closing brackets, find the rightmost one, find its
|
|
||||||
" match and indent according to that.
|
|
||||||
if line =~ '[[({]' || line =~ '[])}]\s*\%(#.*\)\=$'
|
|
||||||
let [opening, closing] = s:ExtraBrackets(lnum)
|
|
||||||
|
|
||||||
if opening.pos != -1
|
|
||||||
if opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
|
|
||||||
if col('.') + 1 == col('$')
|
|
||||||
return ind + sw
|
|
||||||
else
|
|
||||||
return virtcol('.')
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
let nonspace = matchend(line, '\S', opening.pos + 1) - 1
|
|
||||||
return nonspace > 0 ? nonspace : ind + sw
|
|
||||||
endif
|
|
||||||
elseif closing.pos != -1
|
|
||||||
call cursor(lnum, closing.pos + 1)
|
|
||||||
normal! %
|
|
||||||
|
|
||||||
if s:Match(line('.'), s:ruby_indent_keywords)
|
|
||||||
return indent('.') + sw
|
|
||||||
else
|
|
||||||
return indent(s:GetMSL(line('.')))
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
call cursor(clnum, vcol)
|
|
||||||
end
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If the previous line ended with an "end", match that "end"s beginning's
|
|
||||||
" indent.
|
|
||||||
let col = s:Match(lnum, '\%(^\|[^.:@$]\)\<end\>\s*\%(#.*\)\=$')
|
|
||||||
if col > 0
|
|
||||||
call cursor(lnum, col)
|
|
||||||
if searchpair(s:end_start_regex, '', s:end_end_regex, 'bW',
|
|
||||||
\ s:end_skip_expr) > 0
|
|
||||||
let n = line('.')
|
|
||||||
let ind = indent('.')
|
|
||||||
let msl = s:GetMSL(n)
|
|
||||||
if msl != n
|
|
||||||
let ind = indent(msl)
|
|
||||||
end
|
|
||||||
return ind
|
|
||||||
endif
|
|
||||||
end
|
|
||||||
|
|
||||||
let col = s:Match(lnum, s:ruby_indent_keywords)
|
|
||||||
if col > 0
|
|
||||||
call cursor(lnum, col)
|
|
||||||
let ind = virtcol('.') - 1 + sw
|
|
||||||
" TODO: make this better (we need to count them) (or, if a searchpair
|
|
||||||
" fails, we know that something is lacking an end and thus we indent a
|
|
||||||
" level
|
|
||||||
if s:Match(lnum, s:end_end_regex)
|
|
||||||
let ind = indent('.')
|
|
||||||
endif
|
|
||||||
return ind
|
|
||||||
endif
|
|
||||||
|
|
||||||
" 3.4. Work on the MSL line. {{{2
|
|
||||||
" --------------------------
|
|
||||||
|
|
||||||
" Set up variables to use and search for MSL to the previous line.
|
|
||||||
let p_lnum = lnum
|
|
||||||
let lnum = s:GetMSL(lnum)
|
|
||||||
|
|
||||||
" If the previous line wasn't a MSL.
|
|
||||||
if p_lnum != lnum
|
|
||||||
" If previous line ends bracket and begins non-bracket continuation decrease indent by 1.
|
|
||||||
if s:Match(p_lnum, s:bracket_switch_continuation_regex)
|
|
||||||
return ind - 1
|
|
||||||
" If previous line is a continuation return its indent.
|
|
||||||
" TODO: the || s:IsInString() thing worries me a bit.
|
|
||||||
elseif s:Match(p_lnum, s:non_bracket_continuation_regex) || s:IsInString(p_lnum,strlen(line))
|
|
||||||
return ind
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Set up more variables, now that we know we wasn't continuation bound.
|
|
||||||
let line = getline(lnum)
|
|
||||||
let msl_ind = indent(lnum)
|
|
||||||
|
|
||||||
" 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
|
|
||||||
" module Foo; class Bar; end
|
|
||||||
if s:Match(lnum, s:ruby_indent_keywords)
|
|
||||||
let ind = msl_ind + sw
|
|
||||||
if s:Match(lnum, s:end_end_regex)
|
|
||||||
let ind = ind - sw
|
|
||||||
endif
|
|
||||||
return ind
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If the previous line ended with [*+/.,-=], but wasn't a block ending or a
|
|
||||||
" closing bracket, indent one extra level.
|
|
||||||
if s:Match(lnum, s:non_bracket_continuation_regex) && !s:Match(lnum, '^\s*\([\])}]\|end\)')
|
|
||||||
if lnum == p_lnum
|
|
||||||
let ind = msl_ind + sw
|
|
||||||
else
|
|
||||||
let ind = msl_ind
|
|
||||||
endif
|
|
||||||
return ind
|
|
||||||
endif
|
|
||||||
|
|
||||||
" }}}2
|
|
||||||
|
|
||||||
return ind
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
|
||||||
let &cpo = s:cpo_save
|
let &cpo = s:cpo_save
|
||||||
|
@ -2,504 +2,362 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'typescript') ==
|
|||||||
|
|
||||||
" Vim indent file
|
" Vim indent file
|
||||||
" Language: Typescript
|
" Language: Typescript
|
||||||
" Acknowledgement: Based off of vim-ruby maintained by Nikolai Weibull http://vim-ruby.rubyforge.org
|
" Acknowledgement: Almost direct copy from https://github.com/pangloss/vim-javascript
|
||||||
|
|
||||||
" 0. Initialization {{{1
|
|
||||||
" =================
|
|
||||||
|
|
||||||
" 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') || get(g:, 'typescript_indent_disable', 0)
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
let b:did_indent = 1
|
let b:did_indent = 1
|
||||||
|
|
||||||
setlocal nosmartindent
|
|
||||||
|
|
||||||
" Now, set up our indentation expression and keys that trigger it.
|
" Now, set up our indentation expression and keys that trigger it.
|
||||||
setlocal indentexpr=GetTypescriptIndent()
|
setlocal indentexpr=GetTypescriptIndent()
|
||||||
setlocal formatexpr=Fixedgq(v:lnum,v:count)
|
setlocal autoindent nolisp nosmartindent
|
||||||
setlocal indentkeys=0{,0},0),0],0\,,!^F,o,O,e
|
setlocal indentkeys+=0],0)
|
||||||
|
|
||||||
|
let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<'
|
||||||
|
|
||||||
" Only define the function once.
|
" Only define the function once.
|
||||||
if exists("*GetTypescriptIndent")
|
if exists('*GetTypescriptIndent')
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let s:cpo_save = &cpo
|
let s:cpo_save = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
|
||||||
" 1. Variables {{{1
|
" Get shiftwidth value
|
||||||
" ============
|
if exists('*shiftwidth')
|
||||||
|
function s:sw()
|
||||||
|
return shiftwidth()
|
||||||
|
endfunction
|
||||||
|
else
|
||||||
|
function s:sw()
|
||||||
|
return &sw
|
||||||
|
endfunction
|
||||||
|
endif
|
||||||
|
|
||||||
let s:ts_keywords = '^\s*\(break\|case\|catch\|continue\|debugger\|default\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)'
|
" searchpair() wrapper
|
||||||
|
if has('reltime')
|
||||||
|
function s:GetPair(start,end,flags,skip,time,...)
|
||||||
|
return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 2000,0] + a:000),a:time)
|
||||||
|
endfunction
|
||||||
|
else
|
||||||
|
function s:GetPair(start,end,flags,skip,...)
|
||||||
|
return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 1000,get(a:000,1)]))
|
||||||
|
endfunction
|
||||||
|
endif
|
||||||
|
|
||||||
" Regex of syntax group names that are or delimit string or are comments.
|
" Regex of syntax group names that are or delimit string or are comments.
|
||||||
let s:syng_strcom = 'string\|regex\|comment\c'
|
let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template\%(braces\)\@!'
|
||||||
|
let s:syng_str = 'string\|template\|special'
|
||||||
" Regex of syntax group names that are strings.
|
let s:syng_com = 'comment\|doc'
|
||||||
let s:syng_string = 'regex\c'
|
|
||||||
|
|
||||||
" Regex of syntax group names that are strings or documentation.
|
|
||||||
let s:syng_multiline = 'comment\c'
|
|
||||||
|
|
||||||
" Regex of syntax group names that are line comment.
|
|
||||||
let s:syng_linecom = 'linecomment\c'
|
|
||||||
|
|
||||||
" 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 = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'"
|
let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'"
|
||||||
|
|
||||||
let s:line_term = '\s*\%(\%(\/\/\).*\)\=$'
|
function s:skip_func()
|
||||||
|
if !s:free || search('\m`\|\${\|\*\/','nW',s:looksyn)
|
||||||
" Regex that defines continuation lines, not including (, {, or [.
|
let s:free = !eval(s:skip_expr)
|
||||||
let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\|[^=]=[^=].*,\)' . s:line_term
|
let s:looksyn = line('.')
|
||||||
|
return !s:free
|
||||||
" Regex that defines continuation lines.
|
endif
|
||||||
" TODO: this needs to deal with if ...: and so on
|
let s:looksyn = line('.')
|
||||||
let s:msl_regex = s:continuation_regex
|
return getline('.') =~ '\%<'.col('.').'c\/.\{-}\/\|\%>'.col('.').'c[''"]\|\\$' &&
|
||||||
|
\ eval(s:skip_expr)
|
||||||
let s:one_line_scope_regex = '\<\%(if\|else\|for\|while\)\>[^{;]*' . s:line_term
|
|
||||||
|
|
||||||
" Regex that defines blocks.
|
|
||||||
let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term
|
|
||||||
|
|
||||||
let s:var_stmt = '^\s*var'
|
|
||||||
|
|
||||||
let s:comma_first = '^\s*,'
|
|
||||||
let s:comma_last = ',\s*$'
|
|
||||||
|
|
||||||
let s:ternary = '^\s\+[?|:]'
|
|
||||||
let s:ternary_q = '^\s\+?'
|
|
||||||
|
|
||||||
" 2. Auxiliary Functions {{{1
|
|
||||||
" ======================
|
|
||||||
|
|
||||||
" Check if the character at lnum:col is inside a string, comment, or is ascii.
|
|
||||||
function s:IsInStringOrComment(lnum, col)
|
|
||||||
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Check if the character at lnum:col is inside a string.
|
function s:alternatePair(stop)
|
||||||
function s:IsInString(lnum, col)
|
let pos = getpos('.')[1:2]
|
||||||
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string
|
while search('\m[][(){}]','bW',a:stop)
|
||||||
endfunction
|
if !s:skip_func()
|
||||||
|
let idx = stridx('])}',s:looking_at())
|
||||||
" Check if the character at lnum:col is inside a multi-line comment.
|
if idx + 1
|
||||||
function s:IsInMultilineComment(lnum, col)
|
if s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,a:stop) <= 0
|
||||||
return !s:IsLineComment(a:lnum, a:col) && synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_multiline
|
break
|
||||||
endfunction
|
endif
|
||||||
|
|
||||||
" Check if the character at lnum:col is a line comment.
|
|
||||||
function s:IsLineComment(lnum, col)
|
|
||||||
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_linecom
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Find line above 'lnum' that isn't empty, in a comment, or in a string.
|
|
||||||
function s:PrevNonBlankNonString(lnum)
|
|
||||||
let in_block = 0
|
|
||||||
let lnum = prevnonblank(a:lnum)
|
|
||||||
while lnum > 0
|
|
||||||
" Go in and out of blocks comments as necessary.
|
|
||||||
" If the line isn't empty (with opt. comment) or in a string, end search.
|
|
||||||
let line = getline(lnum)
|
|
||||||
if line =~ '/\*'
|
|
||||||
if in_block
|
|
||||||
let in_block = 0
|
|
||||||
else
|
else
|
||||||
break
|
return
|
||||||
endif
|
endif
|
||||||
elseif !in_block && line =~ '\*/'
|
|
||||||
let in_block = 1
|
|
||||||
elseif !in_block && line !~ '^\s*\%(//\).*$' && !(s:IsInStringOrComment(lnum, 1) && s:IsInStringOrComment(lnum, strlen(line)))
|
|
||||||
break
|
|
||||||
endif
|
endif
|
||||||
let lnum = prevnonblank(lnum - 1)
|
|
||||||
endwhile
|
endwhile
|
||||||
return lnum
|
call call('cursor',pos)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Find line above 'lnum' that started the continuation 'lnum' may be part of.
|
function s:save_pos(f,...)
|
||||||
function s:GetMSL(lnum, in_one_line_scope)
|
let l:pos = getpos('.')[1:2]
|
||||||
" Start on the line we're at and use its indent.
|
let ret = call(a:f,a:000)
|
||||||
let msl = a:lnum
|
call call('cursor',l:pos)
|
||||||
let lnum = s:PrevNonBlankNonString(a:lnum - 1)
|
return ret
|
||||||
while lnum > 0
|
endfunction
|
||||||
" If we have a continuation line, or we're in a string, use line as MSL.
|
|
||||||
" Otherwise, terminate search as we have found our MSL already.
|
function s:syn_at(l,c)
|
||||||
let line = getline(lnum)
|
return synIDattr(synID(a:l,a:c,0),'name')
|
||||||
let col = match(line, s:msl_regex) + 1
|
endfunction
|
||||||
if (col > 0 && !s:IsInStringOrComment(lnum, col)) || s:IsInString(lnum, strlen(line))
|
|
||||||
let msl = lnum
|
function s:looking_at()
|
||||||
|
return getline('.')[col('.')-1]
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function s:token()
|
||||||
|
return s:looking_at() =~ '\k' ? expand('<cword>') : s:looking_at()
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function s:previous_token()
|
||||||
|
let l:n = line('.')
|
||||||
|
if (s:looking_at() !~ '\k' || search('\m\<','cbW')) && search('\m\S','bW')
|
||||||
|
if (getline('.')[col('.')-2:col('.')-1] == '*/' || line('.') != l:n &&
|
||||||
|
\ getline('.') =~ '\%<'.col('.').'c\/\/') && s:syn_at(line('.'),col('.')) =~? s:syng_com
|
||||||
|
while search('\m\/\ze[/*]','cbW')
|
||||||
|
if !search('\m\S','bW')
|
||||||
|
break
|
||||||
|
elseif s:syn_at(line('.'),col('.')) !~? s:syng_com
|
||||||
|
return s:token()
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
else
|
else
|
||||||
" Don't use lines that are part of a one line scope as msl unless the
|
return s:token()
|
||||||
" flag in_one_line_scope is set to 1
|
|
||||||
"
|
|
||||||
if a:in_one_line_scope
|
|
||||||
break
|
|
||||||
end
|
|
||||||
let msl_one_line = s:Match(lnum, s:one_line_scope_regex)
|
|
||||||
if msl_one_line == 0
|
|
||||||
break
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
let lnum = s:PrevNonBlankNonString(lnum - 1)
|
return ''
|
||||||
endwhile
|
|
||||||
return msl
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:RemoveTrailingComments(content)
|
function s:others(p)
|
||||||
let single = '\/\/\(.*\)\s*$'
|
return "((line2byte(line('.')) + col('.')) <= ".(line2byte(a:p[0]) + a:p[1]).") || ".s:skip_expr
|
||||||
let multi = '\/\*\(.*\)\*\/\s*$'
|
|
||||||
return substitute(substitute(a:content, single, '', ''), multi, '', '')
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Find if the string is inside var statement (but not the first string)
|
function s:tern_skip(p)
|
||||||
function s:InMultiVarStatement(lnum)
|
return s:GetPair('{','}','nbW',s:others(a:p),200,a:p[0]) > 0
|
||||||
let lnum = s:PrevNonBlankNonString(a:lnum - 1)
|
|
||||||
|
|
||||||
" let type = synIDattr(synID(lnum, indent(lnum) + 1, 0), 'name')
|
|
||||||
|
|
||||||
" loop through previous expressions to find a var statement
|
|
||||||
while lnum > 0
|
|
||||||
let line = getline(lnum)
|
|
||||||
|
|
||||||
" if the line is a ts keyword
|
|
||||||
if (line =~ s:ts_keywords)
|
|
||||||
" check if the line is a var stmt
|
|
||||||
" if the line has a comma first or comma last then we can assume that we
|
|
||||||
" are in a multiple var statement
|
|
||||||
if (line =~ s:var_stmt)
|
|
||||||
return lnum
|
|
||||||
endif
|
|
||||||
|
|
||||||
" other ts keywords, not a var
|
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
let lnum = s:PrevNonBlankNonString(lnum - 1)
|
|
||||||
endwhile
|
|
||||||
|
|
||||||
" beginning of program, not a var
|
|
||||||
return 0
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Find line above with beginning of the var statement or returns 0 if it's not
|
function s:tern_col(p)
|
||||||
" this statement
|
return s:GetPair('?',':\@<!::\@!','nbW',s:others(a:p)
|
||||||
function s:GetVarIndent(lnum)
|
\ .' || s:tern_skip('.string(a:p).')',200,a:p[0]) > 0
|
||||||
let lvar = s:InMultiVarStatement(a:lnum)
|
endfunction
|
||||||
let prev_lnum = s:PrevNonBlankNonString(a:lnum - 1)
|
|
||||||
|
|
||||||
if lvar
|
function s:label_col()
|
||||||
let line = s:RemoveTrailingComments(getline(prev_lnum))
|
let pos = getpos('.')[1:2]
|
||||||
|
let [s:looksyn,s:free] = pos
|
||||||
|
call s:alternatePair(0)
|
||||||
|
if s:save_pos('s:IsBlock')
|
||||||
|
let poss = getpos('.')[1:2]
|
||||||
|
return call('cursor',pos) || !s:tern_col(poss)
|
||||||
|
elseif s:looking_at() == ':'
|
||||||
|
return !s:tern_col([0,0])
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
" if the previous line doesn't end in a comma, return to regular indent
|
" configurable regexes that define continuation lines, not including (, {, or [.
|
||||||
if (line !~ s:comma_last)
|
let s:opfirst = '^' . get(g:,'typescript_opfirst',
|
||||||
return indent(prev_lnum) - &sw
|
\ '\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)')
|
||||||
|
let s:continuation = get(g:,'typescript_continuation',
|
||||||
|
\ '\%([-+<>=,.~!?/*^%|&:]\|\<\%(typeof\|delete\|void\|in\|instanceof\)\)') . '$'
|
||||||
|
|
||||||
|
function s:continues(ln,con)
|
||||||
|
return !cursor(a:ln, match(' '.a:con,s:continuation)) &&
|
||||||
|
\ eval( (['s:syn_at(line("."),col(".")) !~? "regex"'] +
|
||||||
|
\ repeat(['getline(".")[col(".")-2] != tr(s:looking_at(),">","=")'],3) +
|
||||||
|
\ repeat(['s:previous_token() != "."'],5) + [1])[
|
||||||
|
\ index(split('/ > - + typeof in instanceof void delete'),s:token())])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" get the line of code stripped of comments and move cursor to the last
|
||||||
|
" non-comment char.
|
||||||
|
function s:Trim(ln)
|
||||||
|
call cursor(a:ln+1,1)
|
||||||
|
call s:previous_token()
|
||||||
|
return strpart(getline('.'),0,col('.'))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Find line above 'lnum' that isn't empty or in a comment
|
||||||
|
function s:PrevCodeLine(lnum)
|
||||||
|
let l:n = prevnonblank(a:lnum)
|
||||||
|
while l:n
|
||||||
|
if getline(l:n) =~ '^\s*\/[/*]'
|
||||||
|
if (stridx(getline(l:n),'`') > 0 || getline(l:n-1)[-1:] == '\') &&
|
||||||
|
\ s:syn_at(l:n,1) =~? s:syng_str
|
||||||
|
return l:n
|
||||||
|
endif
|
||||||
|
let l:n = prevnonblank(l:n-1)
|
||||||
|
elseif getline(l:n) =~ '\([/*]\)\1\@![/*]' && s:syn_at(l:n,1) =~? s:syng_com
|
||||||
|
let l:n = s:save_pos('eval',
|
||||||
|
\ 'cursor('.l:n.',1) + search(''\m\/\*'',"bW")')
|
||||||
else
|
else
|
||||||
return indent(lvar) + &sw
|
return l:n
|
||||||
endif
|
endif
|
||||||
endif
|
endwhile
|
||||||
|
|
||||||
return -1
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" Check if line 'lnum' has a balanced amount of parentheses.
|
||||||
" Check if line 'lnum' has more opening brackets than closing ones.
|
function s:Balanced(lnum)
|
||||||
function s:LineHasOpeningBrackets(lnum)
|
let l:open = 0
|
||||||
let open_0 = 0
|
let l:line = getline(a:lnum)
|
||||||
let open_2 = 0
|
let pos = match(l:line, '[][(){}]', 0)
|
||||||
let open_4 = 0
|
|
||||||
let line = getline(a:lnum)
|
|
||||||
let pos = match(line, '[][(){}]', 0)
|
|
||||||
while pos != -1
|
while pos != -1
|
||||||
if !s:IsInStringOrComment(a:lnum, pos + 1)
|
if s:syn_at(a:lnum,pos + 1) !~? s:syng_strcom
|
||||||
let idx = stridx('(){}[]', line[pos])
|
let l:open += match(' ' . l:line[pos],'[[({]')
|
||||||
if idx % 2 == 0
|
if l:open < 0
|
||||||
let open_{idx} = open_{idx} + 1
|
return
|
||||||
else
|
|
||||||
let open_{idx - 1} = open_{idx - 1} - 1
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
let pos = match(line, '[][(){}]', pos + 1)
|
let pos = match(l:line, '[][(){}]', pos + 1)
|
||||||
endwhile
|
endwhile
|
||||||
return (open_0 > 0) . (open_2 > 0) . (open_4 > 0)
|
return !l:open
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:Match(lnum, regex)
|
function s:OneScope(lnum)
|
||||||
let col = match(getline(a:lnum), a:regex) + 1
|
let pline = s:Trim(a:lnum)
|
||||||
return col > 0 && !s:IsInStringOrComment(a:lnum, col) ? col : 0
|
let kw = 'else do'
|
||||||
|
if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0
|
||||||
|
call s:previous_token()
|
||||||
|
let kw = 'for if let while with'
|
||||||
|
if index(split('await each'),s:token()) + 1
|
||||||
|
call s:previous_token()
|
||||||
|
let kw = 'for'
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 &&
|
||||||
|
\ s:save_pos('s:previous_token') != '.'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:IndentWithContinuation(lnum, ind, width)
|
" returns braceless levels started by 'i' and above lines * &sw. 'num' is the
|
||||||
" Set up variables to use and search for MSL to the previous line.
|
" lineNr which encloses the entire context, 'cont' if whether line 'i' + 1 is
|
||||||
let p_lnum = a:lnum
|
" a continued expression, which could have started in a braceless context
|
||||||
let lnum = s:GetMSL(a:lnum, 1)
|
function s:iscontOne(i,num,cont)
|
||||||
let line = getline(lnum)
|
let [l:i, l:num, bL] = [a:i, a:num + !a:num, 0]
|
||||||
|
let pind = a:num ? indent(l:num) + s:W : 0
|
||||||
" If the previous line wasn't a MSL and is continuation return its indent.
|
let ind = indent(l:i) + (a:cont ? 0 : s:W)
|
||||||
" TODO: the || s:IsInString() thing worries me a bit.
|
while l:i >= l:num && (ind > pind || l:i == l:num)
|
||||||
if p_lnum != lnum
|
if indent(l:i) < ind && s:OneScope(l:i)
|
||||||
if s:Match(p_lnum,s:continuation_regex)||s:IsInString(p_lnum,strlen(line))
|
let bL += s:W
|
||||||
return a:ind
|
let l:i = line('.')
|
||||||
|
elseif !a:cont || bL || ind < indent(a:i)
|
||||||
|
break
|
||||||
endif
|
endif
|
||||||
endif
|
let ind = min([ind, indent(l:i)])
|
||||||
|
let l:i = s:PrevCodeLine(l:i - 1)
|
||||||
" Set up more variables now that we know we aren't continuation bound.
|
endwhile
|
||||||
let msl_ind = indent(lnum)
|
return bL
|
||||||
|
|
||||||
" If the previous line ended with [*+/.-=], start a continuation that
|
|
||||||
" indents an extra level.
|
|
||||||
if s:Match(lnum, s:continuation_regex)
|
|
||||||
if lnum == p_lnum
|
|
||||||
return msl_ind + a:width
|
|
||||||
else
|
|
||||||
return msl_ind
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
return a:ind
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:InOneLineScope(lnum)
|
" https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader
|
||||||
let msl = s:GetMSL(a:lnum, 1)
|
function s:IsBlock()
|
||||||
if msl > 0 && s:Match(msl, s:one_line_scope_regex)
|
if s:looking_at() == '{'
|
||||||
return msl
|
let l:n = line('.')
|
||||||
|
let char = s:previous_token()
|
||||||
|
if match(s:stack,'xml\|jsx') + 1 && s:syn_at(line('.'),col('.')-1) =~? 'xml\|jsx'
|
||||||
|
return char != '{'
|
||||||
|
elseif char =~ '\k'
|
||||||
|
return index(split('return const let import export yield default delete var await void typeof throw case new in instanceof')
|
||||||
|
\ ,char) < (line('.') != l:n) || s:previous_token() == '.'
|
||||||
|
elseif char == '>'
|
||||||
|
return getline('.')[col('.')-2] == '=' || s:syn_at(line('.'),col('.')) =~? '^jsflow'
|
||||||
|
elseif char == ':'
|
||||||
|
return getline('.')[col('.')-2] != ':' && s:label_col()
|
||||||
|
elseif char == '/'
|
||||||
|
return s:syn_at(line('.'),col('.')) =~? 'regex'
|
||||||
|
endif
|
||||||
|
return char !~ '[=~!<*,?^%|&([]' &&
|
||||||
|
\ (char !~ '[-+]' || l:n != line('.') && getline('.')[col('.')-2] == char)
|
||||||
endif
|
endif
|
||||||
return 0
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:ExitingOneLineScope(lnum)
|
|
||||||
let msl = s:GetMSL(a:lnum, 1)
|
|
||||||
if msl > 0
|
|
||||||
" if the current line is in a one line scope ..
|
|
||||||
if s:Match(msl, s:one_line_scope_regex)
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
let prev_msl = s:GetMSL(msl - 1, 1)
|
|
||||||
if s:Match(prev_msl, s:one_line_scope_regex)
|
|
||||||
return prev_msl
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
return 0
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" 3. GetTypescriptIndent Function {{{1
|
|
||||||
" =========================
|
|
||||||
|
|
||||||
function GetTypescriptIndent()
|
function GetTypescriptIndent()
|
||||||
" 3.1. Setup {{{2
|
let b:js_cache = get(b:,'js_cache',[0,0,0])
|
||||||
" ----------
|
|
||||||
|
|
||||||
" Set up variables for restoring position in file. Could use v:lnum here.
|
|
||||||
let vcol = col('.')
|
|
||||||
|
|
||||||
" 3.2. Work on the current line {{{2
|
|
||||||
" -----------------------------
|
|
||||||
|
|
||||||
let ind = -1
|
|
||||||
" Get the current line.
|
" Get the current line.
|
||||||
let line = getline(v:lnum)
|
call cursor(v:lnum,1)
|
||||||
" previous nonblank line number
|
let l:line = getline('.')
|
||||||
let prevline = prevnonblank(v:lnum - 1)
|
" use synstack as it validates syn state and works in an empty line
|
||||||
|
let s:stack = synstack(v:lnum,1)
|
||||||
|
let syns = synIDattr(get(s:stack,-1),'name')
|
||||||
|
|
||||||
" If we got a closing bracket on an empty line, find its match and indent
|
" start with strings,comments,etc.
|
||||||
" according to it. For parentheses we indent to its column - 1, for the
|
if syns =~? s:syng_com
|
||||||
" others we indent to the containing line's MSL's level. Return -1 if fail.
|
if l:line =~ '^\s*\*'
|
||||||
let col = matchend(line, '^\s*[],})]')
|
|
||||||
if col > 0 && !s:IsInStringOrComment(v:lnum, col)
|
|
||||||
call cursor(v:lnum, col)
|
|
||||||
|
|
||||||
let lvar = s:InMultiVarStatement(v:lnum)
|
|
||||||
if lvar
|
|
||||||
let prevline_contents = s:RemoveTrailingComments(getline(prevline))
|
|
||||||
|
|
||||||
" check for comma first
|
|
||||||
if (line[col - 1] =~ ',')
|
|
||||||
" if the previous line ends in comma or semicolon don't indent
|
|
||||||
if (prevline_contents =~ '[;,]\s*$')
|
|
||||||
return indent(s:GetMSL(line('.'), 0))
|
|
||||||
" get previous line indent, if it's comma first return prevline indent
|
|
||||||
elseif (prevline_contents =~ s:comma_first)
|
|
||||||
return indent(prevline)
|
|
||||||
" otherwise we indent 1 level
|
|
||||||
else
|
|
||||||
return indent(lvar) + &sw
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
|
|
||||||
if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0
|
|
||||||
if line[col-1]==')' && col('.') != col('$') - 1
|
|
||||||
let ind = virtcol('.')-1
|
|
||||||
else
|
|
||||||
let ind = indent(s:GetMSL(line('.'), 0))
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
return ind
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If the line is comma first, dedent 1 level
|
|
||||||
if (getline(prevline) =~ s:comma_first)
|
|
||||||
return indent(prevline) - &sw
|
|
||||||
endif
|
|
||||||
|
|
||||||
if (line =~ s:ternary)
|
|
||||||
if (getline(prevline) =~ s:ternary_q)
|
|
||||||
return indent(prevline)
|
|
||||||
else
|
|
||||||
return indent(prevline) + &sw
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If we are in a multi-line comment, cindent does the right thing.
|
|
||||||
if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1)
|
|
||||||
return cindent(v:lnum)
|
return cindent(v:lnum)
|
||||||
|
elseif l:line !~ '^\s*\/[/*]'
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
elseif syns =~? s:syng_str && l:line !~ '^[''"]'
|
||||||
|
if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1)
|
||||||
|
let b:js_cache[0] = v:lnum
|
||||||
|
endif
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
let l:lnum = s:PrevCodeLine(v:lnum - 1)
|
||||||
|
if !l:lnum
|
||||||
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Check for multiple var assignments
|
let l:line = substitute(l:line,'^\s*','','')
|
||||||
" let var_indent = s:GetVarIndent(v:lnum)
|
if l:line[:1] == '/*'
|
||||||
" if var_indent >= 0
|
let l:line = substitute(l:line,'^\%(\/\*.\{-}\*\/\s*\)*','','')
|
||||||
" return var_indent
|
endif
|
||||||
" endif
|
if l:line =~ '^\/[/*]'
|
||||||
|
let l:line = ''
|
||||||
" 3.3. Work on the previous line. {{{2
|
|
||||||
" -------------------------------
|
|
||||||
|
|
||||||
" If the line is empty and the previous nonblank line was a multi-line
|
|
||||||
" comment, use that comment's indent. Deduct one char to account for the
|
|
||||||
" space in ' */'.
|
|
||||||
if line =~ '^\s*$' && s:IsInMultilineComment(prevline, 1)
|
|
||||||
return indent(prevline) - 1
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Find a non-blank, non-multi-line string line above the current line.
|
" the containing paren, bracket, or curly. Many hacks for performance
|
||||||
let lnum = s:PrevNonBlankNonString(v:lnum - 1)
|
let idx = index([']',')','}'],l:line[0])
|
||||||
|
if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum &&
|
||||||
" If the line is empty and inside a string, use the previous line.
|
\ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum))
|
||||||
if line =~ '^\s*$' && lnum != prevline
|
call call('cursor',b:js_cache[1:])
|
||||||
return indent(prevnonblank(v:lnum))
|
|
||||||
endif
|
|
||||||
|
|
||||||
" At the start of the file use zero indent.
|
|
||||||
if lnum == 0
|
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Set up variables for current line.
|
|
||||||
let line = getline(lnum)
|
|
||||||
let ind = indent(lnum)
|
|
||||||
|
|
||||||
" If the previous line ended with a block opening, add a level of indent.
|
|
||||||
if s:Match(lnum, s:block_regex)
|
|
||||||
return indent(s:GetMSL(lnum, 0)) + &sw
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If the previous line contained an opening bracket, and we are still in it,
|
|
||||||
" add indent depending on the bracket type.
|
|
||||||
if line =~ '[[({]'
|
|
||||||
let counts = s:LineHasOpeningBrackets(lnum)
|
|
||||||
if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
|
|
||||||
if col('.') + 1 == col('$')
|
|
||||||
return ind + &sw
|
|
||||||
else
|
else
|
||||||
return virtcol('.')
|
let [s:looksyn, s:free, top] = [v:lnum - 1, 1, (!indent(l:lnum) &&
|
||||||
endif
|
\ s:syn_at(l:lnum,1) !~? s:syng_str) * l:lnum]
|
||||||
elseif counts[1] == '1' || counts[2] == '1'
|
if idx + 1
|
||||||
return ind + &sw
|
call s:GetPair(['\[','(','{'][idx],'])}'[idx],'bW','s:skip_func()',2000,top)
|
||||||
|
elseif getline(v:lnum) !~ '^\S' && syns =~? 'block'
|
||||||
|
call s:GetPair('{','}','bW','s:skip_func()',2000,top)
|
||||||
else
|
else
|
||||||
call cursor(v:lnum, vcol)
|
call s:alternatePair(top)
|
||||||
end
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" 3.4. Work on the MSL line. {{{2
|
let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [0,0] : getpos('.')[1:2])
|
||||||
" --------------------------
|
let num = b:js_cache[1]
|
||||||
|
|
||||||
let ind_con = ind
|
let [s:W, isOp, bL, switch_offset] = [s:sw(),0,0,0]
|
||||||
let ind = s:IndentWithContinuation(lnum, ind_con, &sw)
|
if !num || s:IsBlock()
|
||||||
|
let ilnum = line('.')
|
||||||
" }}}2
|
let pline = s:save_pos('s:Trim',l:lnum)
|
||||||
"
|
if num && s:looking_at() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0
|
||||||
"
|
let num = ilnum == num ? line('.') : num
|
||||||
let ols = s:InOneLineScope(lnum)
|
if idx < 0 && s:previous_token() ==# 'switch' && s:previous_token() != '.'
|
||||||
if ols > 0
|
if &cino !~ ':'
|
||||||
let ind = ind + &sw
|
let switch_offset = s:W
|
||||||
else
|
else
|
||||||
let ols = s:ExitingOneLineScope(lnum)
|
let cinc = matchlist(&cino,'.*:\zs\(-\)\=\(\d*\)\(\.\d\+\)\=\(s\)\=\C')
|
||||||
while ols > 0 && ind > 0
|
let switch_offset = max([cinc[0] is '' ? 0 : (cinc[1].1) *
|
||||||
let ind = ind - &sw
|
\ ((strlen(cinc[2].cinc[3]) ? str2nr(cinc[2].str2nr(cinc[3][1])) : 10) *
|
||||||
let ols = s:InOneLineScope(ols - 1)
|
\ (cinc[4] is '' ? 1 : s:W)) / 10, -indent(num)])
|
||||||
endwhile
|
endif
|
||||||
|
if pline[-1:] != '.' && l:line =~# '^\%(default\|case\)\>'
|
||||||
|
return indent(num) + switch_offset
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
if idx < 0 && pline !~ '[{;]$'
|
||||||
|
if pline =~# ':\@<!:$'
|
||||||
|
call cursor(l:lnum,strlen(pline))
|
||||||
|
let isOp = s:tern_col(b:js_cache[1:2]) * s:W
|
||||||
|
else
|
||||||
|
let isOp = (l:line =~# s:opfirst || s:continues(l:lnum,pline)) * s:W
|
||||||
|
endif
|
||||||
|
let bL = s:iscontOne(l:lnum,b:js_cache[1],isOp)
|
||||||
|
let bL -= (bL && l:line[0] == '{') * s:W
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return ind
|
" main return
|
||||||
|
if idx + 1 || l:line[:1] == '|}'
|
||||||
|
return indent(num)
|
||||||
|
elseif num
|
||||||
|
return indent(num) + s:W + switch_offset + bL + isOp
|
||||||
|
endif
|
||||||
|
return bL + isOp
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}1
|
|
||||||
|
|
||||||
let &cpo = s:cpo_save
|
let &cpo = s:cpo_save
|
||||||
unlet s:cpo_save
|
unlet s:cpo_save
|
||||||
|
|
||||||
function! Fixedgq(lnum, count)
|
|
||||||
let l:tw = &tw ? &tw : 80
|
|
||||||
|
|
||||||
let l:count = a:count
|
|
||||||
let l:first_char = indent(a:lnum) + 1
|
|
||||||
|
|
||||||
if mode() == 'i' " gq was not pressed, but tw was set
|
|
||||||
return 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
" This gq is only meant to do code with strings, not comments
|
|
||||||
if s:IsLineComment(a:lnum, l:first_char) || s:IsInMultilineComment(a:lnum, l:first_char)
|
|
||||||
return 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
if len(getline(a:lnum)) < l:tw && l:count == 1 " No need for gq
|
|
||||||
return 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Put all the lines on one line and do normal spliting after that
|
|
||||||
if l:count > 1
|
|
||||||
while l:count > 1
|
|
||||||
let l:count -= 1
|
|
||||||
normal J
|
|
||||||
endwhile
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:winview = winsaveview()
|
|
||||||
|
|
||||||
call cursor(a:lnum, l:tw + 1)
|
|
||||||
let orig_breakpoint = searchpairpos(' ', '', '\.', 'bcW', '', a:lnum)
|
|
||||||
call cursor(a:lnum, l:tw + 1)
|
|
||||||
let breakpoint = searchpairpos(' ', '', '\.', 'bcW', s:skip_expr, a:lnum)
|
|
||||||
|
|
||||||
" No need for special treatment, normal gq handles edgecases better
|
|
||||||
if breakpoint[1] == orig_breakpoint[1]
|
|
||||||
call winrestview(l:winview)
|
|
||||||
return 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Try breaking after string
|
|
||||||
if breakpoint[1] <= indent(a:lnum)
|
|
||||||
call cursor(a:lnum, l:tw + 1)
|
|
||||||
let breakpoint = searchpairpos('\.', '', ' ', 'cW', s:skip_expr, a:lnum)
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
if breakpoint[1] != 0
|
|
||||||
call feedkeys("r\<CR>")
|
|
||||||
else
|
|
||||||
let l:count = l:count - 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
" run gq on new lines
|
|
||||||
if l:count == 1
|
|
||||||
call feedkeys("gqq")
|
|
||||||
endif
|
|
||||||
|
|
||||||
return 0
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -33,12 +33,12 @@ syn region bladeComment matchgroup=bladeDelimiter start="{{--" end="--}}" c
|
|||||||
|
|
||||||
syn keyword bladeKeyword @if @elseif @foreach @forelse @for @while @can @cannot @elsecan @elsecannot @include
|
syn keyword bladeKeyword @if @elseif @foreach @forelse @for @while @can @cannot @elsecan @elsecannot @include
|
||||||
\ @includeIf @each @inject @extends @section @stack @push @unless @yield @parent @hasSection @break @continue
|
\ @includeIf @each @inject @extends @section @stack @push @unless @yield @parent @hasSection @break @continue
|
||||||
\ @unset @lang @choice @component @slot
|
\ @unset @lang @choice @component @slot @prepend
|
||||||
\ nextgroup=bladePhpParenBlock skipwhite containedin=ALLBUT,@bladeExempt
|
\ nextgroup=bladePhpParenBlock skipwhite containedin=ALLBUT,@bladeExempt
|
||||||
|
|
||||||
syn keyword bladeKeyword @else @endif @endunless @endfor @endforeach @empty @endforelse @endwhile @endcan
|
syn keyword bladeKeyword @else @endif @endunless @endfor @endforeach @empty @endforelse @endwhile @endcan
|
||||||
\ @endcannot @stop @append @endsection @endpush @show @overwrite @verbatim @endverbatim @endcomponent
|
\ @endcannot @stop @append @endsection @endpush @show @overwrite @verbatim @endverbatim @endcomponent
|
||||||
\ @endslot
|
\ @endslot @endprepend
|
||||||
\ containedin=ALLBUT,@bladeExempt
|
\ containedin=ALLBUT,@bladeExempt
|
||||||
|
|
||||||
if exists('g:blade_custom_directives')
|
if exists('g:blade_custom_directives')
|
||||||
@ -49,7 +49,7 @@ if exists('g:blade_custom_directives_pairs')
|
|||||||
exe "syn keyword bladeKeyword @" . join(values(g:blade_custom_directives_pairs), ' @') . " containedin=ALLBUT,@bladeExempt"
|
exe "syn keyword bladeKeyword @" . join(values(g:blade_custom_directives_pairs), ' @') . " containedin=ALLBUT,@bladeExempt"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
syn region bladePhpRegion matchgroup=bladeKeyword start="\<@php\>\%(\s*(\)\@!" end="\<@endphp\>" contains=@bladePhp containedin=ALLBUT,@bladeExempt keepend
|
syn region bladePhpRegion matchgroup=bladeKeyword start="\<@php\>\s*(\@!" end="\<@endphp\>" contains=@bladePhp containedin=ALLBUT,@bladeExempt keepend
|
||||||
syn match bladeKeyword "@php\ze\s*(" nextgroup=bladePhpParenBlock skipwhite containedin=ALLBUT,@bladeExempt
|
syn match bladeKeyword "@php\ze\s*(" nextgroup=bladePhpParenBlock skipwhite containedin=ALLBUT,@bladeExempt
|
||||||
|
|
||||||
syn region bladePhpParenBlock matchgroup=bladeDelimiter start="\s*(" end=")" contains=@bladePhp,bladePhpParenBlock skipwhite contained
|
syn region bladePhpParenBlock matchgroup=bladeDelimiter start="\s*(" end=")" contains=@bladePhp,bladePhpParenBlock skipwhite contained
|
||||||
|
@ -34,7 +34,7 @@ hi def link coffeeConditional Conditional
|
|||||||
syn match coffeeException /\<\%(try\|catch\|finally\)\>/ display
|
syn match coffeeException /\<\%(try\|catch\|finally\)\>/ display
|
||||||
hi def link coffeeException Exception
|
hi def link coffeeException Exception
|
||||||
|
|
||||||
syn match coffeeKeyword /\<\%(new\|in\|of\|by\|and\|or\|not\|is\|isnt\|class\|extends\|super\|do\|yield\|debugger\|import\|export\)\>/
|
syn match coffeeKeyword /\<\%(new\|in\|of\|by\|and\|or\|not\|is\|isnt\|class\|extends\|super\|do\|yield\|debugger\|import\|export\|await\)\>/
|
||||||
\ display
|
\ display
|
||||||
" The `own` keyword is only a keyword after `for`.
|
" The `own` keyword is only a keyword after `for`.
|
||||||
syn match coffeeKeyword /\<for\s\+own\>/ contained containedin=coffeeRepeat
|
syn match coffeeKeyword /\<for\s\+own\>/ contained containedin=coffeeRepeat
|
||||||
|
@ -4,9 +4,9 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'erlang') == -1
|
|||||||
" Language: Erlang (http://www.erlang.org)
|
" Language: Erlang (http://www.erlang.org)
|
||||||
" Maintainer: Csaba Hoch <csaba.hoch@gmail.com>
|
" Maintainer: Csaba Hoch <csaba.hoch@gmail.com>
|
||||||
" Contributor: Adam Rutkowski <hq@mtod.org>
|
" Contributor: Adam Rutkowski <hq@mtod.org>
|
||||||
" Last Update: 2013-Nov-23
|
" Last Update: 2017-Mar-05
|
||||||
" License: Vim license
|
" License: Vim license
|
||||||
" URL: https://github.com/hcs42/vim-erlang
|
" URL: https://github.com/vim-erlang/vim-erlang-runtime
|
||||||
|
|
||||||
" Acknowledgements: This script was originally created by Kresimir Marzic [1].
|
" Acknowledgements: This script was originally created by Kresimir Marzic [1].
|
||||||
" The script was then revamped by Csaba Hoch [2]. During the revamp, the new
|
" The script was then revamped by Csaba Hoch [2]. During the revamp, the new
|
||||||
@ -31,11 +31,8 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'erlang') == -1
|
|||||||
"
|
"
|
||||||
" syn keyword erlangAttribute myattr1 myattr2 contained
|
" syn keyword erlangAttribute myattr1 myattr2 contained
|
||||||
|
|
||||||
" For version 5.x: Clear all syntax items
|
" quit when a syntax file was already loaded
|
||||||
" For version 6.x: Quit when a syntax file was already loaded
|
if exists("b:current_syntax")
|
||||||
if version < 600
|
|
||||||
syntax clear
|
|
||||||
elseif exists("b:current_syntax")
|
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -45,9 +42,7 @@ set cpo&vim
|
|||||||
" Case sensitive
|
" Case sensitive
|
||||||
syn case match
|
syn case match
|
||||||
|
|
||||||
if version >= 600
|
setlocal iskeyword+=$,@-@
|
||||||
setlocal iskeyword+=$,@-@
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Comments
|
" Comments
|
||||||
syn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo
|
syn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo
|
||||||
@ -88,6 +83,7 @@ syn match erlangMacro '??\=[[:alnum:]_@]\+'
|
|||||||
syn match erlangMacro '\%(-define(\)\@<=[[:alnum:]_@]\+'
|
syn match erlangMacro '\%(-define(\)\@<=[[:alnum:]_@]\+'
|
||||||
syn match erlangMap '#'
|
syn match erlangMap '#'
|
||||||
syn match erlangRecord '#\s*\l[[:alnum:]_@]*'
|
syn match erlangRecord '#\s*\l[[:alnum:]_@]*'
|
||||||
|
syn region erlangQuotedRecord start=/#\s*'/ end=/'/ contains=erlangQuotedAtomModifier
|
||||||
|
|
||||||
" Shebang (this line has to be after the ErlangMap)
|
" Shebang (this line has to be after the ErlangMap)
|
||||||
syn match erlangShebang '^#!.*'
|
syn match erlangShebang '^#!.*'
|
||||||
@ -153,118 +149,109 @@ let b:erlang_syntax_synced = 1
|
|||||||
let s:old_style = (exists("g:erlang_old_style_highlight") &&
|
let s:old_style = (exists("g:erlang_old_style_highlight") &&
|
||||||
\g:erlang_old_style_highlight == 1)
|
\g:erlang_old_style_highlight == 1)
|
||||||
|
|
||||||
" For version 5.7 and earlier: only when not done already
|
|
||||||
" For version 5.8 and later: only when an item doesn't have highlighting yet
|
|
||||||
if version >= 508 || !exists("did_erlang_inits")
|
|
||||||
if version < 508
|
|
||||||
let did_erlang_inits = 1
|
|
||||||
command -nargs=+ HiLink hi link <args>
|
|
||||||
else
|
|
||||||
command -nargs=+ HiLink hi def link <args>
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Comments
|
" Comments
|
||||||
HiLink erlangComment Comment
|
hi def link erlangComment Comment
|
||||||
HiLink erlangCommentAnnotation Special
|
hi def link erlangCommentAnnotation Special
|
||||||
HiLink erlangTodo Todo
|
hi def link erlangTodo Todo
|
||||||
HiLink erlangShebang Comment
|
hi def link erlangShebang Comment
|
||||||
|
|
||||||
" Numbers
|
" Numbers
|
||||||
HiLink erlangNumberInteger Number
|
hi def link erlangNumberInteger Number
|
||||||
HiLink erlangNumberFloat Float
|
hi def link erlangNumberFloat Float
|
||||||
|
|
||||||
" Strings, atoms, characters
|
" Strings, atoms, characters
|
||||||
HiLink erlangString String
|
hi def link erlangString String
|
||||||
|
|
||||||
if s:old_style
|
if s:old_style
|
||||||
HiLink erlangQuotedAtom Type
|
hi def link erlangQuotedAtom Type
|
||||||
else
|
else
|
||||||
HiLink erlangQuotedAtom String
|
hi def link erlangQuotedAtom String
|
||||||
endif
|
|
||||||
|
|
||||||
HiLink erlangStringModifier Special
|
|
||||||
HiLink erlangQuotedAtomModifier Special
|
|
||||||
HiLink erlangModifier Special
|
|
||||||
|
|
||||||
" Operators, separators
|
|
||||||
HiLink erlangOperator Operator
|
|
||||||
HiLink erlangRightArrow Operator
|
|
||||||
if s:old_style
|
|
||||||
HiLink erlangBracket Normal
|
|
||||||
HiLink erlangPipe Normal
|
|
||||||
else
|
|
||||||
HiLink erlangBracket Delimiter
|
|
||||||
HiLink erlangPipe Delimiter
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Atoms, functions, variables, macros
|
|
||||||
if s:old_style
|
|
||||||
HiLink erlangAtom Normal
|
|
||||||
HiLink erlangLocalFuncCall Normal
|
|
||||||
HiLink erlangLocalFuncRef Normal
|
|
||||||
HiLink erlangGlobalFuncCall Function
|
|
||||||
HiLink erlangGlobalFuncRef Function
|
|
||||||
HiLink erlangVariable Normal
|
|
||||||
HiLink erlangMacro Normal
|
|
||||||
HiLink erlangRecord Normal
|
|
||||||
HiLink erlangMap Normal
|
|
||||||
else
|
|
||||||
HiLink erlangAtom String
|
|
||||||
HiLink erlangLocalFuncCall Normal
|
|
||||||
HiLink erlangLocalFuncRef Normal
|
|
||||||
HiLink erlangGlobalFuncCall Normal
|
|
||||||
HiLink erlangGlobalFuncRef Normal
|
|
||||||
HiLink erlangVariable Identifier
|
|
||||||
HiLink erlangMacro Macro
|
|
||||||
HiLink erlangRecord Structure
|
|
||||||
HiLink erlangMap Structure
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Bitstrings
|
|
||||||
if !s:old_style
|
|
||||||
HiLink erlangBitType Type
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Constants and Directives
|
|
||||||
if s:old_style
|
|
||||||
HiLink erlangAttribute Type
|
|
||||||
HiLink erlangMacroDef Type
|
|
||||||
HiLink erlangUnknownAttribute Normal
|
|
||||||
HiLink erlangInclude Type
|
|
||||||
HiLink erlangRecordDef Type
|
|
||||||
HiLink erlangDefine Type
|
|
||||||
HiLink erlangPreCondit Type
|
|
||||||
HiLink erlangType Type
|
|
||||||
else
|
|
||||||
HiLink erlangAttribute Keyword
|
|
||||||
HiLink erlangMacroDef Macro
|
|
||||||
HiLink erlangUnknownAttribute Normal
|
|
||||||
HiLink erlangInclude Include
|
|
||||||
HiLink erlangRecordDef Keyword
|
|
||||||
HiLink erlangDefine Define
|
|
||||||
HiLink erlangPreCondit PreCondit
|
|
||||||
HiLink erlangType Type
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Keywords
|
|
||||||
HiLink erlangKeyword Keyword
|
|
||||||
|
|
||||||
" Build-in-functions (BIFs)
|
|
||||||
HiLink erlangBIF Function
|
|
||||||
|
|
||||||
if s:old_style
|
|
||||||
HiLink erlangBoolean Statement
|
|
||||||
HiLink erlangExtra Statement
|
|
||||||
HiLink erlangSignal Statement
|
|
||||||
else
|
|
||||||
HiLink erlangBoolean Boolean
|
|
||||||
HiLink erlangExtra Statement
|
|
||||||
HiLink erlangSignal Statement
|
|
||||||
endif
|
|
||||||
|
|
||||||
delcommand HiLink
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
hi def link erlangStringModifier Special
|
||||||
|
hi def link erlangQuotedAtomModifier Special
|
||||||
|
hi def link erlangModifier Special
|
||||||
|
|
||||||
|
" Operators, separators
|
||||||
|
hi def link erlangOperator Operator
|
||||||
|
hi def link erlangRightArrow Operator
|
||||||
|
if s:old_style
|
||||||
|
hi def link erlangBracket Normal
|
||||||
|
hi def link erlangPipe Normal
|
||||||
|
else
|
||||||
|
hi def link erlangBracket Delimiter
|
||||||
|
hi def link erlangPipe Delimiter
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Atoms, functions, variables, macros
|
||||||
|
if s:old_style
|
||||||
|
hi def link erlangAtom Normal
|
||||||
|
hi def link erlangLocalFuncCall Normal
|
||||||
|
hi def link erlangLocalFuncRef Normal
|
||||||
|
hi def link erlangGlobalFuncCall Function
|
||||||
|
hi def link erlangGlobalFuncRef Function
|
||||||
|
hi def link erlangVariable Normal
|
||||||
|
hi def link erlangMacro Normal
|
||||||
|
hi def link erlangRecord Normal
|
||||||
|
hi def link erlangQuotedRecord Normal
|
||||||
|
hi def link erlangMap Normal
|
||||||
|
else
|
||||||
|
hi def link erlangAtom String
|
||||||
|
hi def link erlangLocalFuncCall Normal
|
||||||
|
hi def link erlangLocalFuncRef Normal
|
||||||
|
hi def link erlangGlobalFuncCall Normal
|
||||||
|
hi def link erlangGlobalFuncRef Normal
|
||||||
|
hi def link erlangVariable Identifier
|
||||||
|
hi def link erlangMacro Macro
|
||||||
|
hi def link erlangRecord Structure
|
||||||
|
hi def link erlangQuotedRecord Structure
|
||||||
|
hi def link erlangMap Structure
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Bitstrings
|
||||||
|
if !s:old_style
|
||||||
|
hi def link erlangBitType Type
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Constants and Directives
|
||||||
|
if s:old_style
|
||||||
|
hi def link erlangAttribute Type
|
||||||
|
hi def link erlangMacroDef Type
|
||||||
|
hi def link erlangUnknownAttribute Normal
|
||||||
|
hi def link erlangInclude Type
|
||||||
|
hi def link erlangRecordDef Type
|
||||||
|
hi def link erlangDefine Type
|
||||||
|
hi def link erlangPreCondit Type
|
||||||
|
hi def link erlangType Type
|
||||||
|
else
|
||||||
|
hi def link erlangAttribute Keyword
|
||||||
|
hi def link erlangMacroDef Macro
|
||||||
|
hi def link erlangUnknownAttribute Normal
|
||||||
|
hi def link erlangInclude Include
|
||||||
|
hi def link erlangRecordDef Keyword
|
||||||
|
hi def link erlangDefine Define
|
||||||
|
hi def link erlangPreCondit PreCondit
|
||||||
|
hi def link erlangType Type
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Keywords
|
||||||
|
hi def link erlangKeyword Keyword
|
||||||
|
|
||||||
|
" Build-in-functions (BIFs)
|
||||||
|
hi def link erlangBIF Function
|
||||||
|
|
||||||
|
if s:old_style
|
||||||
|
hi def link erlangBoolean Statement
|
||||||
|
hi def link erlangExtra Statement
|
||||||
|
hi def link erlangSignal Statement
|
||||||
|
else
|
||||||
|
hi def link erlangBoolean Boolean
|
||||||
|
hi def link erlangExtra Statement
|
||||||
|
hi def link erlangSignal Statement
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
let b:current_syntax = "erlang"
|
let b:current_syntax = "erlang"
|
||||||
|
|
||||||
let &cpo = s:cpo_save
|
let &cpo = s:cpo_save
|
||||||
|
@ -24,14 +24,14 @@ endif
|
|||||||
|
|
||||||
syn spell notoplevel
|
syn spell notoplevel
|
||||||
syn match haskellRecordField contained containedin=haskellBlock
|
syn match haskellRecordField contained containedin=haskellBlock
|
||||||
\ "[_a-z][a-zA-Z0-9_']*\(,\s*[_a-z][a-zA-Z0-9_']*\)*\(\s*::\|\n\s\+::\)"
|
\ "[_a-z][a-zA-Z0-9_']*\(,\s*[_a-z][a-zA-Z0-9_']*\)*\_s\+::\s"
|
||||||
\ contains=
|
\ contains=
|
||||||
\ haskellIdentifier,
|
\ haskellIdentifier,
|
||||||
\ haskellOperators,
|
\ haskellOperators,
|
||||||
\ haskellSeparator,
|
\ haskellSeparator,
|
||||||
\ haskellParens
|
\ haskellParens
|
||||||
syn match haskellTypeSig
|
syn match haskellTypeSig
|
||||||
\ "^\s*\(where\s\+\|let\s\+\|default\s\+\)\?[_a-z][a-zA-Z0-9_']*\(,\s*[_a-z][a-zA-Z0-9_']*\)*\(\s*::\|\n\s\+::\)"
|
\ "^\s*\(where\s\+\|let\s\+\|default\s\+\)\?[_a-z][a-zA-Z0-9_']*\(,\s*[_a-z][a-zA-Z0-9_']*\)*\_s\+::\s"
|
||||||
\ contains=
|
\ contains=
|
||||||
\ haskellWhere,
|
\ haskellWhere,
|
||||||
\ haskellLet,
|
\ haskellLet,
|
||||||
@ -47,7 +47,7 @@ syn match haskellDecl "\<\(type\|data\)\>\s\+\(\<family\>\)\?"
|
|||||||
syn keyword haskellDefault default
|
syn keyword haskellDefault default
|
||||||
syn keyword haskellImportKeywords import qualified safe as hiding contained
|
syn keyword haskellImportKeywords import qualified safe as hiding contained
|
||||||
syn keyword haskellForeignKeywords foreign export import ccall safe unsafe interruptible capi prim contained
|
syn keyword haskellForeignKeywords foreign export import ccall safe unsafe interruptible capi prim contained
|
||||||
syn region haskellForeignImport start="\<foreign\>" end="::" keepend
|
syn region haskellForeignImport start="\<foreign\>" end="\_s\+::\s" keepend
|
||||||
\ contains=
|
\ contains=
|
||||||
\ haskellString,
|
\ haskellString,
|
||||||
\ haskellOperators,
|
\ haskellOperators,
|
||||||
|
@ -2,8 +2,9 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'html5') == -1
|
|||||||
|
|
||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" Language: HTML (version 5.1)
|
" Language: HTML (version 5.1)
|
||||||
" SVG (SVG 1.1 (Second Edition) )
|
" SVG (SVG 1.1 Second Edition)
|
||||||
" Last Change: 2016 Jan 20
|
" MathML (MathML 3.0 Second Edition)
|
||||||
|
" Last Change: 2017 Mar 07
|
||||||
" License: Public domain
|
" License: Public domain
|
||||||
" (but let me know if you like :) )
|
" (but let me know if you like :) )
|
||||||
"
|
"
|
||||||
@ -18,6 +19,15 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'html5') == -1
|
|||||||
" Modified: htdebeer <H.T.de.Beer@gmail.com>
|
" Modified: htdebeer <H.T.de.Beer@gmail.com>
|
||||||
" Changes: add common SVG elements and attributes for inline SVG
|
" Changes: add common SVG elements and attributes for inline SVG
|
||||||
|
|
||||||
|
" Patch 7.4.1142
|
||||||
|
if has("patch-7.4-1142")
|
||||||
|
if has("win32")
|
||||||
|
syn iskeyword @,48-57,_,128-167,224-235,-
|
||||||
|
else
|
||||||
|
syn iskeyword @,48-57,_,192-255,-
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
" HTML 5 tags
|
" HTML 5 tags
|
||||||
syn keyword htmlTagName contained article aside audio canvas command
|
syn keyword htmlTagName contained article aside audio canvas command
|
||||||
syn keyword htmlTagName contained datalist details dialog embed figcaption figure footer
|
syn keyword htmlTagName contained datalist details dialog embed figcaption figure footer
|
||||||
@ -90,7 +100,7 @@ syn keyword htmlArg contained xml:lang xml:space xml:base xmlns
|
|||||||
syn keyword htmlArg contained onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload
|
syn keyword htmlArg contained onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload
|
||||||
syn keyword htmlArg contained onmessage onoffline ononline onpopstate onredo onresize onstorage onundo onunload
|
syn keyword htmlArg contained onmessage onoffline ononline onpopstate onredo onresize onstorage onundo onunload
|
||||||
" <video>, <audio>, <source>, <track>
|
" <video>, <audio>, <source>, <track>
|
||||||
syn keyword htmlArg contained autoplay preload controls loop poster media kind charset srclang track
|
syn keyword htmlArg contained autoplay preload controls loop poster media kind charset srclang track playsinline
|
||||||
" <form>, <input>, <button>
|
" <form>, <input>, <button>
|
||||||
syn keyword htmlArg contained form autocomplete autofocus list min max step
|
syn keyword htmlArg contained form autocomplete autofocus list min max step
|
||||||
syn keyword htmlArg contained formaction autofocus formenctype formmethod formtarget formnovalidate
|
syn keyword htmlArg contained formaction autofocus formenctype formmethod formtarget formnovalidate
|
||||||
@ -102,7 +112,7 @@ syn keyword htmlArg contained async
|
|||||||
" <content>
|
" <content>
|
||||||
syn keyword htmlArg contained select
|
syn keyword htmlArg contained select
|
||||||
" <iframe>
|
" <iframe>
|
||||||
syn keyword htmlArg contained seamless srcdoc sandbox allowfullscreen
|
syn keyword htmlArg contained seamless srcdoc sandbox allowfullscreen allowusermedia allowpaymentrequest
|
||||||
" <picture>
|
" <picture>
|
||||||
syn keyword htmlArg contained srcset sizes
|
syn keyword htmlArg contained srcset sizes
|
||||||
" <a>
|
" <a>
|
||||||
@ -117,11 +127,11 @@ syn keyword htmlArg contained integrity crossorigin
|
|||||||
|
|
||||||
" 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
|
||||||
syn match htmlArg "\<\(data\-\([a-z_][a-z0-9_.\-]*\)\+\)\{1,}\>" contained
|
syn match htmlArg "\<data[-.0-9_a-z]*-[-.0-9_a-z]*\>" contained
|
||||||
|
|
||||||
" Vendor Extension Attributes
|
" Vendor Extension Attributes
|
||||||
" http://w3c.github.io/html/single-page.html#conformance-requirements-extensibility
|
" http://w3c.github.io/html/single-page.html#conformance-requirements-extensibility
|
||||||
syn match htmlArg "\<\(x\-\([a-z_][a-z0-9_.\-]*\)\+\)\{2,}\>" contained
|
syn match htmlArg "\<x[-.0-9_a-z]*-[-.0-9_a-z]*\>" contained
|
||||||
|
|
||||||
" Microdata
|
" Microdata
|
||||||
" http://dev.w3.org/html5/md/
|
" http://dev.w3.org/html5/md/
|
||||||
|
@ -3,14 +3,13 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'html5') == -1
|
|||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" Language: WAI-ARIA
|
" Language: WAI-ARIA
|
||||||
" Maintainer: othree <othree@gmail.com>
|
" Maintainer: othree <othree@gmail.com>
|
||||||
" URL: http://github.com/othree/html5-syntax.vim
|
" URL: https://github.com/othree/html5.vim
|
||||||
" Last Change: 2014-05-02
|
" Last Change: 2017-03-07
|
||||||
" License: MIT
|
" License: MIT
|
||||||
" Changes: Add match rules
|
" Changes: update to Candidate Recommendation 27 October 2016
|
||||||
" update to Draft 16 September 2010
|
|
||||||
|
|
||||||
" WAI-ARIA States and Properties
|
" WAI-ARIA States and Properties
|
||||||
" http://www.w3.org/TR/wai-aria/states_and_properties
|
" https://www.w3.org/TR/wai-aria-1.1/#states_and_properties
|
||||||
syn keyword htmlArg contained role
|
syn keyword htmlArg contained role
|
||||||
|
|
||||||
" Global States and Properties
|
" Global States and Properties
|
||||||
@ -18,6 +17,8 @@ syn keyword htmlArg contained aria-atomic aria-busy aria-controls aria-describe
|
|||||||
syn keyword htmlArg contained aria-disabled aria-dropeffect aria-flowto aria-grabbed
|
syn keyword htmlArg contained aria-disabled aria-dropeffect aria-flowto aria-grabbed
|
||||||
syn keyword htmlArg contained aria-haspopup aria-hidden aria-invalid aria-label
|
syn keyword htmlArg contained aria-haspopup aria-hidden aria-invalid aria-label
|
||||||
syn keyword htmlArg contained aria-labelledby aria-live aria-owns aria-relevant
|
syn keyword htmlArg contained aria-labelledby aria-live aria-owns aria-relevant
|
||||||
|
" 1.1
|
||||||
|
syn keyword htmlArg contained aria-current aria-details aria-keyshortcuts aria-roledescription
|
||||||
|
|
||||||
" Widget Attributes
|
" Widget Attributes
|
||||||
syn keyword htmlArg contained aria-autocomplete aria-checked aria-disabled aria-expanded
|
syn keyword htmlArg contained aria-autocomplete aria-checked aria-disabled aria-expanded
|
||||||
@ -25,6 +26,8 @@ syn keyword htmlArg contained aria-haspopup aria-hidden aria-invalid aria-label
|
|||||||
syn keyword htmlArg contained aria-level aria-multiline aria-multiselectable aria-orientation
|
syn keyword htmlArg contained aria-level aria-multiline aria-multiselectable aria-orientation
|
||||||
syn keyword htmlArg contained aria-pressed aria-readonly aria-required aria-selected
|
syn keyword htmlArg contained aria-pressed aria-readonly aria-required aria-selected
|
||||||
syn keyword htmlArg contained aria-sort aria-valuemax aria-valuemin aria-valuenow aria-valuetext
|
syn keyword htmlArg contained aria-sort aria-valuemax aria-valuemin aria-valuenow aria-valuetext
|
||||||
|
" 1.1
|
||||||
|
syn keyword htmlArg contained aria-errormessage aria-hasgroup aria-modal aria-placeholder
|
||||||
|
|
||||||
" Live Region Attributes
|
" Live Region Attributes
|
||||||
syn keyword htmlArg contained aria-atomic aria-busy aria-live aria-relevant
|
syn keyword htmlArg contained aria-atomic aria-busy aria-live aria-relevant
|
||||||
@ -35,6 +38,9 @@ syn keyword htmlArg contained aria-dropeffect aria-grabbed
|
|||||||
" Relationship Attributes
|
" Relationship Attributes
|
||||||
syn keyword htmlArg contained aria-activedescendant aria-controls aria-describedby aria-flowto
|
syn keyword htmlArg contained aria-activedescendant aria-controls aria-describedby aria-flowto
|
||||||
syn keyword htmlArg contained aria-labelledby aria-owns aria-posinset aria-setsize
|
syn keyword htmlArg contained aria-labelledby aria-owns aria-posinset aria-setsize
|
||||||
|
" 1.1
|
||||||
|
syn keyword htmlArg contained aria-colcount aria-colindex aria-colspan
|
||||||
|
syn keyword htmlArg contained aria-rowcount aria-rowindex aria-rowspan
|
||||||
|
|
||||||
|
|
||||||
" Use match: https://github.com/othree/html5.vim/issues/39
|
" Use match: https://github.com/othree/html5.vim/issues/39
|
||||||
@ -44,6 +50,8 @@ syn match htmlArg contained "\<aria-\%(\|atomic\|busy\|controls\|describedby\
|
|||||||
syn match htmlArg contained "\<aria-\%(\|disabled\|dropeffect\|flowto\|grabbed\)\>"
|
syn match htmlArg contained "\<aria-\%(\|disabled\|dropeffect\|flowto\|grabbed\)\>"
|
||||||
syn match htmlArg contained "\<aria-\%(\|haspopup\|hidden\|invalid\|label\)\>"
|
syn match htmlArg contained "\<aria-\%(\|haspopup\|hidden\|invalid\|label\)\>"
|
||||||
syn match htmlArg contained "\<aria-\%(\|labelledby\|live\|owns\|relevant\)\>"
|
syn match htmlArg contained "\<aria-\%(\|labelledby\|live\|owns\|relevant\)\>"
|
||||||
|
" 1.1
|
||||||
|
syn match htmlArg contained "\<aria-\%(\|current\|details\|keyshortcuts\|roledescription\)\>"
|
||||||
|
|
||||||
" Widget Attributes
|
" Widget Attributes
|
||||||
syn match htmlArg contained "\<aria-\%(\|autocomplete\|checked\|disabled\|expanded\)\>"
|
syn match htmlArg contained "\<aria-\%(\|autocomplete\|checked\|disabled\|expanded\)\>"
|
||||||
@ -51,6 +59,8 @@ syn match htmlArg contained "\<aria-\%(\|haspopup\|hidden\|invalid\|label\)\>
|
|||||||
syn match htmlArg contained "\<aria-\%(\|level\|multiline\|multiselectable\|orientation\)\>"
|
syn match htmlArg contained "\<aria-\%(\|level\|multiline\|multiselectable\|orientation\)\>"
|
||||||
syn match htmlArg contained "\<aria-\%(\|pressed\|readonly\|required\|selected\)\>"
|
syn match htmlArg contained "\<aria-\%(\|pressed\|readonly\|required\|selected\)\>"
|
||||||
syn match htmlArg contained "\<aria-\%(\|sort\|valuemax\|valuemin\|valuenow\|valuetext\)\>"
|
syn match htmlArg contained "\<aria-\%(\|sort\|valuemax\|valuemin\|valuenow\|valuetext\)\>"
|
||||||
|
" 1.1
|
||||||
|
syn match htmlArg contained "\<aria-\%(\|errormessage\|hasgroup\|modal\|placeholder\)\>"
|
||||||
|
|
||||||
" Live Region Attributes
|
" Live Region Attributes
|
||||||
syn match htmlArg contained "\<aria-\%(\|atomic\|busy\|live\|relevant\)\>"
|
syn match htmlArg contained "\<aria-\%(\|atomic\|busy\|live\|relevant\)\>"
|
||||||
@ -61,6 +71,9 @@ syn match htmlArg contained "\<aria-\%(\|dropeffect\|grabbed\)\>"
|
|||||||
" Relationship Attributes
|
" Relationship Attributes
|
||||||
syn match htmlArg contained "\<aria-\%(\|activedescendant\|controls\|describedby\|flowto\)\>"
|
syn match htmlArg contained "\<aria-\%(\|activedescendant\|controls\|describedby\|flowto\)\>"
|
||||||
syn match htmlArg contained "\<aria-\%(\|labelledby\|owns\|posinset\|setsize\)\>"
|
syn match htmlArg contained "\<aria-\%(\|labelledby\|owns\|posinset\|setsize\)\>"
|
||||||
|
" 1.1
|
||||||
|
syn match htmlArg contained "\<aria-\%(\|colcount\|colindex\|colspan\)\>"
|
||||||
|
syn match htmlArg contained "\<aria-\%(\|rowcount\|rowindex\|rowspan\)\>"
|
||||||
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
19
syntax/html/electron.vim
Normal file
19
syntax/html/electron.vim
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'html5') == -1
|
||||||
|
|
||||||
|
" Vim syntax file
|
||||||
|
" Language: Electron
|
||||||
|
" Maintainer: othree <othree@gmail.com>
|
||||||
|
" URL: https://github.com/othree/html5.vim
|
||||||
|
" Last Change: 2017-03-15
|
||||||
|
" License: MIT
|
||||||
|
|
||||||
|
" <webview> https://electron.atom.io/docs/api/webview-tag/
|
||||||
|
syn keyword htmlTagName contained webview
|
||||||
|
|
||||||
|
syn keyword htmlArg contained autosize nodeintegration plugins preload httpreferrer
|
||||||
|
syn keyword htmlArg contained useragent disablewebsecurity partition allowpopups
|
||||||
|
syn keyword htmlArg contained webpreferences blinkfeatures disableblinkfeatures
|
||||||
|
syn keyword htmlArg contained guestinstance disableguestresize
|
||||||
|
|
||||||
|
|
||||||
|
endif
|
@ -27,7 +27,8 @@ 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
|
syntax match jsNoise /[\.]\{1}/ skipwhite skipempty nextgroup=jsObjectProp,jsFuncCall
|
||||||
|
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 /[)}\]]/
|
||||||
|
|
||||||
@ -54,7 +55,7 @@ syntax match jsModuleComma contained /,/ skipwhite skipempty nextgroup=
|
|||||||
" Strings, Templates, Numbers
|
" Strings, Templates, Numbers
|
||||||
syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend
|
syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend
|
||||||
syntax region jsString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend
|
syntax region jsString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend
|
||||||
syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateExpression,jsSpecial extend
|
syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateExpression,jsSpecial,@Spell extend
|
||||||
syntax match jsTaggedTemplate /\k\+\%(`\)\@=/ nextgroup=jsTemplateString
|
syntax match jsTaggedTemplate /\k\+\%(`\)\@=/ nextgroup=jsTemplateString
|
||||||
syntax match jsNumber /\<\d\+\%([eE][+-]\=\d\+\)\=\>\|\<0[bB][01]\+\>\|\<0[oO]\o\+\>\|\<0[xX]\x\+\>/
|
syntax match jsNumber /\<\d\+\%([eE][+-]\=\d\+\)\=\>\|\<0[bB][01]\+\>\|\<0[oO]\o\+\>\|\<0[xX]\x\+\>/
|
||||||
syntax keyword jsNumber Infinity
|
syntax keyword jsNumber Infinity
|
||||||
@ -71,9 +72,9 @@ syntax match jsRegexpOr contained "\v\<@!\|"
|
|||||||
syntax match jsRegexpMod contained "\v\(@<=\?[:=!>]"
|
syntax match jsRegexpMod contained "\v\(@<=\?[:=!>]"
|
||||||
syntax region jsRegexpGroup contained start="\\\@<!(" skip="\\.\|\[\(\\.\|[^]]\)*\]" end="\\\@<!)" contains=jsRegexpCharClass,@jsRegexpSpecial keepend
|
syntax region jsRegexpGroup contained start="\\\@<!(" skip="\\.\|\[\(\\.\|[^]]\)*\]" end="\\\@<!)" contains=jsRegexpCharClass,@jsRegexpSpecial keepend
|
||||||
if v:version > 703 || v:version == 603 && has("patch1088")
|
if v:version > 703 || v:version == 603 && has("patch1088")
|
||||||
syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@50<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@50<!\)/\(\*\|/\)\@!+ skip=+\\.\|\[\%(\\.\|[^]]\)*\]+ end=+/[gimy]\{,4}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend
|
syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@50<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@50<!\)/\(\*\|/\)\@!+ skip=+\\.\|\[\%(\\.\|[^]]\)*\]+ end=+/[gimyu]\{,5}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend
|
||||||
else
|
else
|
||||||
syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@<!\)/\(\*\|/\)\@!+ skip=+\\.\|\[\%(\\.\|[^]]\)*\]+ end=+/[gimy]\{,4}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend
|
syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@<!\)/\(\*\|/\)\@!+ skip=+\\.\|\[\%(\\.\|[^]]\)*\]+ end=+/[gimyu]\{,5}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend
|
||||||
endif
|
endif
|
||||||
syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod
|
syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod
|
||||||
|
|
||||||
@ -105,7 +106,7 @@ syntax match jsBlockLabelKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*\%(;
|
|||||||
syntax keyword jsStatement contained with yield debugger
|
syntax keyword jsStatement contained with yield debugger
|
||||||
syntax keyword jsStatement contained break continue skipwhite skipempty nextgroup=jsBlockLabelKey
|
syntax keyword jsStatement contained break continue skipwhite skipempty nextgroup=jsBlockLabelKey
|
||||||
syntax keyword jsConditional if skipwhite skipempty nextgroup=jsParenIfElse
|
syntax keyword jsConditional if skipwhite skipempty nextgroup=jsParenIfElse
|
||||||
syntax keyword jsConditional else skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock
|
syntax keyword jsConditional else skipwhite skipempty nextgroup=jsCommentIfElse,jsIfElseBlock
|
||||||
syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch
|
syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch
|
||||||
syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat,jsForAwait
|
syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat,jsForAwait
|
||||||
syntax keyword jsDo do skipwhite skipempty nextgroup=jsRepeatBlock
|
syntax keyword jsDo do skipwhite skipempty nextgroup=jsRepeatBlock
|
||||||
@ -143,9 +144,9 @@ syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus
|
|||||||
" Code blocks
|
" Code blocks
|
||||||
syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression,jsSpreadExpression extend fold
|
syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression,jsSpreadExpression extend fold
|
||||||
syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold
|
syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold
|
||||||
syntax region jsParenDecorator contained matchgroup=jsParensDecorator start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc extend fold
|
syntax region jsParenDecorator contained matchgroup=jsParensDecorator start=/(/ end=/)/ contains=@jsAll extend fold
|
||||||
syntax region jsParenIfElse contained matchgroup=jsParensIfElse start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock extend fold
|
syntax region jsParenIfElse contained matchgroup=jsParensIfElse start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentIfElse,jsIfElseBlock extend fold
|
||||||
syntax region jsParenRepeat contained matchgroup=jsParensRepeat start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsRepeatBlock extend fold
|
syntax region jsParenRepeat contained matchgroup=jsParensRepeat start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentRepeat,jsRepeatBlock extend fold
|
||||||
syntax region jsParenSwitch contained matchgroup=jsParensSwitch start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold
|
syntax region jsParenSwitch contained matchgroup=jsParensSwitch start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold
|
||||||
syntax region jsParenCatch contained matchgroup=jsParensCatch start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold
|
syntax region jsParenCatch contained matchgroup=jsParensCatch start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold
|
||||||
syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsDestructuringArray,jsRestExpression,jsFlowArgumentDef skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold
|
syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsDestructuringArray,jsRestExpression,jsFlowArgumentDef skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold
|
||||||
@ -217,13 +218,14 @@ syntax region jsCommentFunction contained start=/\/\// end=/$/ contains=j
|
|||||||
syntax region jsCommentFunction contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn fold extend keepend
|
syntax region jsCommentFunction contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn fold extend keepend
|
||||||
syntax region jsCommentClass contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup extend keepend
|
syntax region jsCommentClass contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup extend keepend
|
||||||
syntax region jsCommentClass contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup fold extend keepend
|
syntax region jsCommentClass contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup fold extend keepend
|
||||||
syntax region jsCommentMisc contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock extend keepend
|
syntax region jsCommentIfElse contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsIfElseBlock extend keepend
|
||||||
syntax region jsCommentMisc contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock fold extend keepend
|
syntax region jsCommentIfElse contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsIfElseBlock fold extend keepend
|
||||||
|
syntax region jsCommentRepeat contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsRepeatBlock extend keepend
|
||||||
|
syntax region jsCommentRepeat contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsRepeatBlock fold extend keepend
|
||||||
|
|
||||||
" Decorators
|
" Decorators
|
||||||
syntax match jsDecorator /^\s*@/ nextgroup=jsDecoratorFunction
|
syntax match jsDecorator /^\s*@/ nextgroup=jsDecoratorFunction
|
||||||
syntax match jsDecoratorFunction contained /[a-zA-Z_][a-zA-Z0-9_.]*/ nextgroup=jsParenDecorator
|
syntax match jsDecoratorFunction contained /[a-zA-Z_][a-zA-Z0-9_.]*/ nextgroup=jsParenDecorator
|
||||||
syntax match jsObjectProp contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/
|
|
||||||
|
|
||||||
if exists("javascript_plugin_jsdoc")
|
if exists("javascript_plugin_jsdoc")
|
||||||
runtime extras/jsdoc.vim
|
runtime extras/jsdoc.vim
|
||||||
@ -364,7 +366,8 @@ if version >= 508 || !exists("did_javascript_syn_inits")
|
|||||||
|
|
||||||
HiLink jsCommentFunction jsComment
|
HiLink jsCommentFunction jsComment
|
||||||
HiLink jsCommentClass jsComment
|
HiLink jsCommentClass jsComment
|
||||||
HiLink jsCommentMisc jsComment
|
HiLink jsCommentIfElse jsComment
|
||||||
|
HiLink jsCommentRepeat jsComment
|
||||||
|
|
||||||
HiLink jsDomErrNo Constant
|
HiLink jsDomErrNo Constant
|
||||||
HiLink jsDomNodeConsts Constant
|
HiLink jsDomNodeConsts Constant
|
||||||
|
@ -44,4 +44,7 @@ syn keyword javascriptDomElemAttrs videoWidth videoHeight poster
|
|||||||
" drag and drop
|
" drag and drop
|
||||||
syn keyword javascriptDomElemAttrs onDragStart onDragEnd onDragEnter onDragLeave onDragOver onDrag onDrop draggable dropzone
|
syn keyword javascriptDomElemAttrs onDragStart onDragEnd onDragEnter onDragLeave onDragOver onDrag onDrop draggable dropzone
|
||||||
|
|
||||||
|
" <checkbox>
|
||||||
|
syn keyword javascriptDomElemAttrs indeterminate
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -7,25 +7,20 @@ if exists("b:current_syntax")
|
|||||||
finish
|
finish
|
||||||
end
|
end
|
||||||
|
|
||||||
|
" 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
|
||||||
else
|
|
||||||
setlocal iskeyword+=.
|
|
||||||
setlocal iskeyword+=/
|
|
||||||
setlocal iskeyword+=:
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
syn match ngxVariable '\$\(\w\+\|{\w\+}\)'
|
syn match ngxVariable '\$\(\w\+\|{\w\+}\)'
|
||||||
syn match ngxVariableString '\$\(\w\+\|{\w\+}\)' contained
|
syn match ngxVariableString '\$\(\w\+\|{\w\+}\)' contained
|
||||||
syn match ngxComment ' *#.*$'
|
syn match ngxComment ' *#.*$'
|
||||||
syn match ngxRewriteURI /\S\+/ contained contains=ngxVariableString nextgroup=ngxURI skipwhite
|
syn match ngxLocationPath /\S\+/ contained
|
||||||
syn match ngxURI /\S\+/ contained contains=ngxVariableString skipwhite
|
syn region ngxString start=+[^:a-zA-Z>!\\@]\z(["']\)+lc=1 end=+\z1+ skip=+\\\\\|\\\z1+ contains=ngxVariableString
|
||||||
syn match ngxLocationPath /[^ {]\+/ contained
|
|
||||||
syn region ngxString start=+\z(["']\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=ngxVariableString
|
|
||||||
|
|
||||||
syn keyword ngxBoolean on
|
syn keyword ngxBoolean on
|
||||||
syn keyword ngxBoolean off
|
syn keyword ngxBoolean off
|
||||||
@ -37,9 +32,9 @@ syn keyword ngxDirectiveBlock events
|
|||||||
syn keyword ngxDirectiveBlock server
|
syn keyword ngxDirectiveBlock server
|
||||||
syn keyword ngxDirectiveBlock stream
|
syn keyword ngxDirectiveBlock stream
|
||||||
syn keyword ngxDirectiveBlock types
|
syn keyword ngxDirectiveBlock types
|
||||||
syn match ngxLocationOperator /\(=\|\~\*\|\^\~\|\~\)/ contained nextgroup=ngxLocationPath,ngxString skipwhite
|
syn match ngxLocationOperator /\(=\|\~\*\|\^\~\|\~\)/ contained nextgroup=ngxLocationPath,ngxString skipwhite skipempty
|
||||||
syn match ngxLocationNamedLoc /@\w\+/
|
syn match ngxLocationNamedLoc /@\w\+/
|
||||||
syn keyword ngxDirectiveBlock location nextgroup=ngxLocationNamedLoc,ngxLocationOperator,ngxLocationPath,ngxString skipwhite
|
syn keyword ngxDirectiveBlock location nextgroup=ngxLocationNamedLoc,ngxLocationOperator,ngxLocationPath,ngxString skipwhite skipempty
|
||||||
syn keyword ngxDirectiveBlock upstream
|
syn keyword ngxDirectiveBlock upstream
|
||||||
syn keyword ngxDirectiveBlock charset_map
|
syn keyword ngxDirectiveBlock charset_map
|
||||||
syn keyword ngxDirectiveBlock limit_except
|
syn keyword ngxDirectiveBlock limit_except
|
||||||
@ -52,7 +47,8 @@ syn keyword ngxDirectiveImportant include
|
|||||||
syn keyword ngxDirectiveImportant root
|
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
|
syn keyword ngxDirectiveImportant listen contained
|
||||||
|
syn region ngxDirectiveImportantListen matchgroup=ngxDirectiveImportant start=+listen+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxListenOptions,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
|
||||||
@ -61,19 +57,48 @@ syn keyword ngxDirectiveImportant scgi_pass
|
|||||||
syn keyword ngxDirectiveImportant uwsgi_pass
|
syn keyword ngxDirectiveImportant uwsgi_pass
|
||||||
syn keyword ngxDirectiveImportant try_files
|
syn keyword ngxDirectiveImportant try_files
|
||||||
|
|
||||||
|
syn keyword ngxListenOptions default_server contained
|
||||||
|
syn keyword ngxListenOptions ssl contained
|
||||||
|
syn keyword ngxListenOptions http2 contained
|
||||||
|
syn keyword ngxListenOptions spdy contained
|
||||||
|
syn keyword ngxListenOptions proxy_protocol contained
|
||||||
|
syn keyword ngxListenOptions setfib contained
|
||||||
|
syn keyword ngxListenOptions fastopen contained
|
||||||
|
syn keyword ngxListenOptions backlog contained
|
||||||
|
syn keyword ngxListenOptions rcvbuf contained
|
||||||
|
syn keyword ngxListenOptions sndbuf contained
|
||||||
|
syn keyword ngxListenOptions accept_filter contained
|
||||||
|
syn keyword ngxListenOptions deferred contained
|
||||||
|
syn keyword ngxListenOptions bind contained
|
||||||
|
syn keyword ngxListenOptions ipv6only contained
|
||||||
|
syn keyword ngxListenOptions reuseport contained
|
||||||
|
syn keyword ngxListenOptions so_keepalive contained
|
||||||
|
syn keyword ngxListenOptions keepidle contained
|
||||||
|
|
||||||
syn keyword ngxDirectiveControl break
|
syn keyword ngxDirectiveControl break
|
||||||
syn keyword ngxDirectiveControl return
|
syn keyword ngxDirectiveControl return nextgroup=ngxStatusCode skipwhite skipempty
|
||||||
syn keyword ngxDirectiveControl rewrite nextgroup=ngxRewriteURI skipwhite
|
syn keyword ngxDirectiveControl rewrite nextgroup=ngxRewriteURI skipwhite skipempty
|
||||||
syn keyword ngxDirectiveControl set
|
syn keyword ngxDirectiveControl set
|
||||||
|
|
||||||
syn keyword ngxRewriteFlag last
|
syn match ngxStatusCode /\d\d\d/ contained
|
||||||
syn keyword ngxRewriteFlag break
|
syn match ngxStatusCodes /\d\d\d/ contained contains=ngxStatusCode nextgroup=ngxStatusCode skipwhite skipempty
|
||||||
syn keyword ngxRewriteFlag redirect
|
|
||||||
syn keyword ngxRewriteFlag permanent
|
|
||||||
|
|
||||||
syn keyword ngxDirectiveError error_page
|
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 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 keyword ngxRewriteFlag last contained
|
||||||
|
syn keyword ngxRewriteFlag break contained
|
||||||
|
syn keyword ngxRewriteFlag redirect contained
|
||||||
|
syn keyword ngxRewriteFlag permanent contained
|
||||||
|
|
||||||
|
syn keyword ngxDirectiveError error_page nextgroup=ngxErrorStatusCode skipwhite skipempty
|
||||||
syn keyword ngxDirectiveError post_action
|
syn keyword ngxDirectiveError post_action
|
||||||
|
|
||||||
|
syn match ngxErrorStatusCode /\d\d\d/ contained contains=ngxStatusCode nextgroup=ngxErrorResponseCode skipwhite skipempty
|
||||||
|
syn match ngxErrorResponseCode /=\d\d\d/ contained contains=ngxStatusCode
|
||||||
|
|
||||||
syn keyword ngxDirectiveDeprecated connections
|
syn keyword ngxDirectiveDeprecated connections
|
||||||
syn keyword ngxDirectiveDeprecated imap
|
syn keyword ngxDirectiveDeprecated imap
|
||||||
syn keyword ngxDirectiveDeprecated limit_zone
|
syn keyword ngxDirectiveDeprecated limit_zone
|
||||||
@ -82,14 +107,6 @@ syn keyword ngxDirectiveDeprecated open_file_cache_retest
|
|||||||
syn keyword ngxDirectiveDeprecated optimize_server_names
|
syn keyword ngxDirectiveDeprecated optimize_server_names
|
||||||
syn keyword ngxDirectiveDeprecated satisfy_any
|
syn keyword ngxDirectiveDeprecated satisfy_any
|
||||||
syn keyword ngxDirectiveDeprecated so_keepalive
|
syn keyword ngxDirectiveDeprecated so_keepalive
|
||||||
syn keyword ngxDirectiveDeprecated spdy_chunk_size
|
|
||||||
syn keyword ngxDirectiveDeprecated spdy_headers_comp
|
|
||||||
syn keyword ngxDirectiveDeprecated spdy_keepalive_timeout
|
|
||||||
syn keyword ngxDirectiveDeprecated spdy_max_concurrent_streams
|
|
||||||
syn keyword ngxDirectiveDeprecated spdy_pool_size
|
|
||||||
syn keyword ngxDirectiveDeprecated spdy_recv_buffer_size
|
|
||||||
syn keyword ngxDirectiveDeprecated spdy_recv_timeout
|
|
||||||
syn keyword ngxDirectiveDeprecated spdy_streams_index_size
|
|
||||||
|
|
||||||
syn keyword ngxDirective absolute_redirect
|
syn keyword ngxDirective absolute_redirect
|
||||||
syn keyword ngxDirective accept_mutex
|
syn keyword ngxDirective accept_mutex
|
||||||
@ -235,7 +252,6 @@ syn keyword ngxDirective hls_forward_args
|
|||||||
syn keyword ngxDirective hls_fragment
|
syn keyword ngxDirective hls_fragment
|
||||||
syn keyword ngxDirective hls_mp4_buffer_size
|
syn keyword ngxDirective hls_mp4_buffer_size
|
||||||
syn keyword ngxDirective hls_mp4_max_buffer_size
|
syn keyword ngxDirective hls_mp4_max_buffer_size
|
||||||
syn keyword ngxDirective http2 " Not a real directive
|
|
||||||
syn keyword ngxDirective http2_chunk_size
|
syn keyword ngxDirective http2_chunk_size
|
||||||
syn keyword ngxDirective http2_body_preread_size
|
syn keyword ngxDirective http2_body_preread_size
|
||||||
syn keyword ngxDirective http2_idle_timeout
|
syn keyword ngxDirective http2_idle_timeout
|
||||||
@ -277,13 +293,13 @@ syn keyword ngxDirective least_conn
|
|||||||
syn keyword ngxDirective least_time
|
syn keyword ngxDirective least_time
|
||||||
syn keyword ngxDirective limit_conn
|
syn keyword ngxDirective limit_conn
|
||||||
syn keyword ngxDirective limit_conn_log_level
|
syn keyword ngxDirective limit_conn_log_level
|
||||||
syn keyword ngxDirective limit_conn_status
|
syn keyword ngxDirective limit_conn_status nextgroup=ngxStatusCode skipwhite skipempty
|
||||||
syn keyword ngxDirective limit_conn_zone
|
syn keyword ngxDirective limit_conn_zone
|
||||||
syn keyword ngxDirective limit_rate
|
syn keyword ngxDirective limit_rate
|
||||||
syn keyword ngxDirective limit_rate_after
|
syn keyword ngxDirective limit_rate_after
|
||||||
syn keyword ngxDirective limit_req
|
syn keyword ngxDirective limit_req
|
||||||
syn keyword ngxDirective limit_req_log_level
|
syn keyword ngxDirective limit_req_log_level
|
||||||
syn keyword ngxDirective limit_req_status
|
syn keyword ngxDirective limit_req_status nextgroup=ngxStatusCode skipwhite skipempty
|
||||||
syn keyword ngxDirective limit_req_zone
|
syn keyword ngxDirective limit_req_zone
|
||||||
syn keyword ngxDirective lingering_close
|
syn keyword ngxDirective lingering_close
|
||||||
syn keyword ngxDirective lingering_time
|
syn keyword ngxDirective lingering_time
|
||||||
@ -343,8 +359,8 @@ syn keyword ngxDirective postpone_gzipping
|
|||||||
syn keyword ngxDirective postpone_output
|
syn keyword ngxDirective postpone_output
|
||||||
syn keyword ngxDirective preread_buffer_size
|
syn keyword ngxDirective preread_buffer_size
|
||||||
syn keyword ngxDirective preread_timeout
|
syn keyword ngxDirective preread_timeout
|
||||||
syn keyword ngxDirective protocol nextgroup=ngxMailProtocol skipwhite
|
syn keyword ngxDirective protocol nextgroup=ngxMailProtocol skipwhite skipempty
|
||||||
syn keyword ngxMailProtocol imap pop3 smtp
|
syn keyword ngxMailProtocol imap pop3 smtp contained
|
||||||
syn keyword ngxDirective proxy
|
syn keyword ngxDirective proxy
|
||||||
syn keyword ngxDirective proxy_bind
|
syn keyword ngxDirective proxy_bind
|
||||||
syn keyword ngxDirective proxy_buffer
|
syn keyword ngxDirective proxy_buffer
|
||||||
@ -366,7 +382,7 @@ syn keyword ngxDirective proxy_cache_path
|
|||||||
syn keyword ngxDirective proxy_cache_purge
|
syn keyword ngxDirective proxy_cache_purge
|
||||||
syn keyword ngxDirective proxy_cache_revalidate
|
syn keyword ngxDirective proxy_cache_revalidate
|
||||||
syn keyword ngxDirective proxy_cache_use_stale
|
syn keyword ngxDirective proxy_cache_use_stale
|
||||||
syn keyword ngxDirective proxy_cache_valid
|
syn keyword ngxDirective proxy_cache_valid nextgroup=ngxStatusCodes skipwhite skipempty
|
||||||
syn keyword ngxDirective proxy_connect_timeout
|
syn keyword ngxDirective proxy_connect_timeout
|
||||||
syn keyword ngxDirective proxy_cookie_domain
|
syn keyword ngxDirective proxy_cookie_domain
|
||||||
syn keyword ngxDirective proxy_cookie_path
|
syn keyword ngxDirective proxy_cookie_path
|
||||||
@ -406,7 +422,7 @@ syn keyword ngxDirective proxy_ssl_ciphers
|
|||||||
syn keyword ngxDirective proxy_ssl_crl
|
syn keyword ngxDirective proxy_ssl_crl
|
||||||
syn keyword ngxDirective proxy_ssl_name
|
syn keyword ngxDirective proxy_ssl_name
|
||||||
syn keyword ngxDirective proxy_ssl_password_file
|
syn keyword ngxDirective proxy_ssl_password_file
|
||||||
syn keyword ngxDirective proxy_ssl_protocols nextgroup=ngxSSLProtocol skipwhite
|
syn keyword ngxDirective proxy_ssl_protocols nextgroup=ngxSSLProtocol skipwhite skipempty
|
||||||
syn keyword ngxDirective proxy_ssl_server_name
|
syn keyword ngxDirective proxy_ssl_server_name
|
||||||
syn keyword ngxDirective proxy_ssl_session_reuse
|
syn keyword ngxDirective proxy_ssl_session_reuse
|
||||||
syn keyword ngxDirective proxy_ssl_trusted_certificate
|
syn keyword ngxDirective proxy_ssl_trusted_certificate
|
||||||
@ -499,6 +515,14 @@ syn keyword ngxDirective smtp_capabilities
|
|||||||
syn keyword ngxDirective smtp_client_buffer
|
syn keyword ngxDirective smtp_client_buffer
|
||||||
syn keyword ngxDirective smtp_greeting_delay
|
syn keyword ngxDirective smtp_greeting_delay
|
||||||
syn keyword ngxDirective source_charset
|
syn keyword ngxDirective source_charset
|
||||||
|
syn keyword ngxDirective spdy_chunk_size
|
||||||
|
syn keyword ngxDirective spdy_headers_comp
|
||||||
|
syn keyword ngxDirective spdy_keepalive_timeout
|
||||||
|
syn keyword ngxDirective spdy_max_concurrent_streams
|
||||||
|
syn keyword ngxDirective spdy_pool_size
|
||||||
|
syn keyword ngxDirective spdy_recv_buffer_size
|
||||||
|
syn keyword ngxDirective spdy_recv_timeout
|
||||||
|
syn keyword ngxDirective spdy_streams_index_size
|
||||||
syn keyword ngxDirective ssi
|
syn keyword ngxDirective ssi
|
||||||
syn keyword ngxDirective ssi_ignore_recycled_buffers
|
syn keyword ngxDirective ssi_ignore_recycled_buffers
|
||||||
syn keyword ngxDirective ssi_last_modified
|
syn keyword ngxDirective ssi_last_modified
|
||||||
@ -520,8 +544,8 @@ syn keyword ngxDirective ssl_handshake_timeout
|
|||||||
syn keyword ngxDirective ssl_password_file
|
syn keyword ngxDirective ssl_password_file
|
||||||
syn keyword ngxDirective ssl_prefer_server_ciphers
|
syn keyword ngxDirective ssl_prefer_server_ciphers
|
||||||
syn keyword ngxDirective ssl_preread
|
syn keyword ngxDirective ssl_preread
|
||||||
syn keyword ngxDirective ssl_protocols nextgroup=ngxSSLProtocol skipwhite
|
syn keyword ngxDirective ssl_protocols nextgroup=ngxSSLProtocol skipwhite skipempty
|
||||||
syn keyword ngxSSLProtocol SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2
|
syn keyword ngxSSLProtocol SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2 contained nextgroup=ngxSSLProtocol skipwhite skipempty
|
||||||
syn keyword ngxDirective ssl_session_cache
|
syn keyword ngxDirective ssl_session_cache
|
||||||
syn keyword ngxDirective ssl_session_ticket_key
|
syn keyword ngxDirective ssl_session_ticket_key
|
||||||
syn keyword ngxDirective ssl_session_tickets
|
syn keyword ngxDirective ssl_session_tickets
|
||||||
@ -612,7 +636,7 @@ syn keyword ngxDirective uwsgi_ssl_ciphers
|
|||||||
syn keyword ngxDirective uwsgi_ssl_crl
|
syn keyword ngxDirective uwsgi_ssl_crl
|
||||||
syn keyword ngxDirective uwsgi_ssl_name
|
syn keyword ngxDirective uwsgi_ssl_name
|
||||||
syn keyword ngxDirective uwsgi_ssl_password_file
|
syn keyword ngxDirective uwsgi_ssl_password_file
|
||||||
syn keyword ngxDirective uwsgi_ssl_protocols nextgroup=ngxSSLProtocol skipwhite
|
syn keyword ngxDirective uwsgi_ssl_protocols nextgroup=ngxSSLProtocol skipwhite skipempty
|
||||||
syn keyword ngxDirective uwsgi_ssl_server_name
|
syn keyword ngxDirective uwsgi_ssl_server_name
|
||||||
syn keyword ngxDirective uwsgi_ssl_session_reuse
|
syn keyword ngxDirective uwsgi_ssl_session_reuse
|
||||||
syn keyword ngxDirective uwsgi_ssl_trusted_certificate
|
syn keyword ngxDirective uwsgi_ssl_trusted_certificate
|
||||||
@ -660,6 +684,7 @@ hi link ngxLocationPath String
|
|||||||
hi link ngxLocationNamedLoc Identifier
|
hi link ngxLocationNamedLoc Identifier
|
||||||
|
|
||||||
hi link ngxBoolean Boolean
|
hi link ngxBoolean Boolean
|
||||||
|
hi link ngxStatusCode Number
|
||||||
hi link ngxRewriteFlag Boolean
|
hi link ngxRewriteFlag Boolean
|
||||||
hi link ngxDirectiveBlock Statement
|
hi link ngxDirectiveBlock Statement
|
||||||
hi link ngxDirectiveImportant Type
|
hi link ngxDirectiveImportant Type
|
||||||
@ -669,6 +694,12 @@ hi link ngxDirectiveDeprecated Error
|
|||||||
hi link ngxDirective Identifier
|
hi link ngxDirective Identifier
|
||||||
hi link ngxDirectiveThirdParty Special
|
hi link ngxDirectiveThirdParty Special
|
||||||
|
|
||||||
|
hi link ngxListenOptions Keyword
|
||||||
|
hi link ngxMailProtocol Keyword
|
||||||
|
hi link ngxSSLProtocol Keyword
|
||||||
|
|
||||||
|
hi link ngxThirdPartyKeyword keyword
|
||||||
|
|
||||||
let b:current_syntax = "nginx"
|
let b:current_syntax = "nginx"
|
||||||
|
|
||||||
|
|
||||||
|
27
syntax/litcoffee.vim
Normal file
27
syntax/litcoffee.vim
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'coffee-script') == -1
|
||||||
|
|
||||||
|
" Language: Literate CoffeeScript
|
||||||
|
" Maintainer: Michael Smith <michael@diglumi.com>
|
||||||
|
" URL: https://github.com/mintplant/vim-literate-coffeescript
|
||||||
|
" License: MIT
|
||||||
|
|
||||||
|
if exists('b:current_syntax') && b:current_syntax == 'litcoffee'
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
syn include @markdown syntax/markdown.vim
|
||||||
|
syn include @coffee syntax/coffee.vim
|
||||||
|
|
||||||
|
" Partition the file into notCoffee and inlineCoffee. Each line will match
|
||||||
|
" exactly one of these regions. notCoffee matches with a zero-width
|
||||||
|
" look-behind.
|
||||||
|
syn region notCoffee start='^\%( \|\t\)\@<!' end='$' contains=@markdown
|
||||||
|
syn region inlineCoffee start='^ \|\t' end='$' contains=@coffee
|
||||||
|
|
||||||
|
" We defined notCoffee as a region so we can highlight every element in it
|
||||||
|
" that doesn't have it's own explicit rule.
|
||||||
|
highlight default link notCoffee Comment
|
||||||
|
|
||||||
|
let b:current_syntax = "litcoffee"
|
||||||
|
|
||||||
|
endif
|
@ -63,7 +63,7 @@ execute 'syn region htmlBoldItalic matchgroup=mkdBoldItalic start="\%(^\|\s\)\zs
|
|||||||
syn region mkdFootnotes matchgroup=mkdDelimiter start="\[^" end="\]"
|
syn region mkdFootnotes matchgroup=mkdDelimiter start="\[^" end="\]"
|
||||||
execute 'syn region mkdID matchgroup=mkdDelimiter start="\[" end="\]" contained oneline' . s:conceal
|
execute 'syn region mkdID matchgroup=mkdDelimiter start="\[" end="\]" contained oneline' . s:conceal
|
||||||
execute 'syn region mkdURL matchgroup=mkdDelimiter start="(" end=")" contained oneline' . s:conceal
|
execute 'syn region mkdURL matchgroup=mkdDelimiter start="(" end=")" contained oneline' . s:conceal
|
||||||
execute 'syn region mkdLink matchgroup=mkdDelimiter start="\\\@<!!\?\[" end="\n\{-,1}[^]]\{-}\zs\]\ze[[(]" contains=@mkdNonListItem,@Spell nextgroup=mkdURL,mkdID skipwhite oneline' . s:concealends
|
execute 'syn region mkdLink matchgroup=mkdDelimiter start="\\\@<!!\?\[\ze[^]\n]*\n\?[^]\n]*\][[(]" end="\]" contains=@mkdNonListItem,@Spell nextgroup=mkdURL,mkdID skipwhite' . s:concealends
|
||||||
|
|
||||||
" Autolink without angle brackets.
|
" Autolink without angle brackets.
|
||||||
" mkd inline links: protocol optional user:pass@ sub/domain .com, .co.uk, etc optional port path/querystring/hash fragment
|
" mkd inline links: protocol optional user:pass@ sub/domain .com, .co.uk, etc optional port path/querystring/hash fragment
|
||||||
@ -77,7 +77,7 @@ syn region mkdInlineURL matchgroup=mkdDelimiter start="(\(https\?:\/\/\(\w\+\(:
|
|||||||
syn region mkdInlineURL matchgroup=mkdDelimiter start="\\\@<!<\ze[a-z][a-z0-9,.-]\{1,22}:\/\/[^> ]*>" end=">"
|
syn region mkdInlineURL matchgroup=mkdDelimiter start="\\\@<!<\ze[a-z][a-z0-9,.-]\{1,22}:\/\/[^> ]*>" end=">"
|
||||||
|
|
||||||
" Link definitions: [id]: URL (Optional Title)
|
" Link definitions: [id]: URL (Optional Title)
|
||||||
syn region mkdLinkDef matchgroup=mkdDelimiter start="^ \{,3}\zs\[" end="]:" oneline nextgroup=mkdLinkDefTarget skipwhite
|
syn region mkdLinkDef matchgroup=mkdDelimiter start="^ \{,3}\zs\[\^\@!" end="]:" oneline nextgroup=mkdLinkDefTarget skipwhite
|
||||||
syn region mkdLinkDefTarget start="<\?\zs\S" excludenl end="\ze[>[:space:]\n]" contained nextgroup=mkdLinkTitle,mkdLinkDef skipwhite skipnl oneline
|
syn region mkdLinkDefTarget start="<\?\zs\S" excludenl end="\ze[>[:space:]\n]" contained nextgroup=mkdLinkTitle,mkdLinkDef skipwhite skipnl oneline
|
||||||
syn region mkdLinkTitle matchgroup=mkdDelimiter start=+"+ end=+"+ contained
|
syn region mkdLinkTitle matchgroup=mkdDelimiter start=+"+ end=+"+ contained
|
||||||
syn region mkdLinkTitle matchgroup=mkdDelimiter start=+'+ end=+'+ contained
|
syn region mkdLinkTitle matchgroup=mkdDelimiter start=+'+ end=+'+ contained
|
||||||
|
@ -35,8 +35,8 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nginx') == -1
|
|||||||
" syn keyword ngxDirectiveThirdParty fastcgi_store_access
|
" syn keyword ngxDirectiveThirdParty fastcgi_store_access
|
||||||
" syn keyword ngxDirectiveThirdParty fastcgi_temp_file_write_size
|
" syn keyword ngxDirectiveThirdParty fastcgi_temp_file_write_size
|
||||||
" syn keyword ngxDirectiveThirdParty fastcgi_temp_path
|
" syn keyword ngxDirectiveThirdParty fastcgi_temp_path
|
||||||
syn keyword ngxDirectiveThirdParty fastcgi_upstream_fail_timeout
|
syn keyword ngxDirectiveDeprecated fastcgi_upstream_fail_timeout
|
||||||
syn keyword ngxDirectiveThirdParty fastcgi_upstream_max_fails
|
syn keyword ngxDirectiveDeprecated fastcgi_upstream_max_fails
|
||||||
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -2,7 +2,48 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nginx') == -1
|
|||||||
|
|
||||||
" GeoIP 2 Module <https://github.com/leev/ngx_http_geoip2_module>
|
" GeoIP 2 Module <https://github.com/leev/ngx_http_geoip2_module>
|
||||||
" Creates variables with values from the maxmind geoip2 databases based on the client IP
|
" Creates variables with values from the maxmind geoip2 databases based on the client IP
|
||||||
syn keyword ngxDirectiveThirdParty geoip2
|
syn keyword ngxDirectiveThirdParty geoip2 nextgroup=ngxThirdPartyGeoIP2Database skipwhite skipempty
|
||||||
|
syn match ngxThirdPartyGeoIP2Database /\S\+/ contained nextgroup=ngxThirdPartyGeoIP2Block skipwhite skipempty
|
||||||
|
syn region ngxThirdPartyGeoIP2Block start=/{/ end=/}/ contained contains=ngxThirdPartyGeoIP2Keyword,ngxVariable
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword de en es fr ja pt-BR ru zh-CN contained
|
||||||
|
syn match ngxThirdPartyGeoIP2Keyword /pt-BR|zh-CN/ contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword default source contained
|
||||||
|
" Common Keys
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword code confidence geoname_id names iso_code contained
|
||||||
|
" /Common Keys
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword city contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword continent contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword country contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword location contained
|
||||||
|
" Location Keys
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword accuracy_radius contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword average_income contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword latitude contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword longitude contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword metro_code contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword population_density contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword time_zone contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword postal contained
|
||||||
|
" /Location Keys
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword registered_country contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword represented_country contained
|
||||||
|
" Represented Country Keys
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword type contained
|
||||||
|
" /Represented Country Keys
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword subdivisions contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword traits contained
|
||||||
|
" Traits Keys
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword autonomous_system_number contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword autonomous_system_organization contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword domain contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword ip_address contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword is_anonymous_proxy contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword is_satellite_provider contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword isp contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword organization contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword user_type contained
|
||||||
|
" /Traits Keys
|
||||||
|
hi link ngxThirdPartyGeoIP2Keyword ngxThirdPartyKeyword
|
||||||
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
150
syntax/nginx.vim
150
syntax/nginx.vim
@ -7,25 +7,20 @@ if exists("b:current_syntax")
|
|||||||
finish
|
finish
|
||||||
end
|
end
|
||||||
|
|
||||||
|
" 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
|
||||||
else
|
|
||||||
setlocal iskeyword+=.
|
|
||||||
setlocal iskeyword+=/
|
|
||||||
setlocal iskeyword+=:
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
syn match ngxVariable '\$\(\w\+\|{\w\+}\)'
|
syn match ngxVariable '\$\(\w\+\|{\w\+}\)'
|
||||||
syn match ngxVariableString '\$\(\w\+\|{\w\+}\)' contained
|
syn match ngxVariableString '\$\(\w\+\|{\w\+}\)' contained
|
||||||
syn match ngxComment ' *#.*$'
|
syn match ngxComment ' *#.*$'
|
||||||
syn match ngxRewriteURI /\S\+/ contained contains=ngxVariableString nextgroup=ngxURI skipwhite
|
syn match ngxLocationPath /\S\+/ contained
|
||||||
syn match ngxURI /\S\+/ contained contains=ngxVariableString skipwhite
|
syn region ngxString start=+[^:a-zA-Z>!\\@]\z(["']\)+lc=1 end=+\z1+ skip=+\\\\\|\\\z1+ contains=ngxVariableString
|
||||||
syn match ngxLocationPath /[^ {]\+/ contained
|
|
||||||
syn region ngxString start=+\z(["']\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=ngxVariableString
|
|
||||||
|
|
||||||
syn keyword ngxBoolean on
|
syn keyword ngxBoolean on
|
||||||
syn keyword ngxBoolean off
|
syn keyword ngxBoolean off
|
||||||
@ -37,9 +32,9 @@ syn keyword ngxDirectiveBlock events
|
|||||||
syn keyword ngxDirectiveBlock server
|
syn keyword ngxDirectiveBlock server
|
||||||
syn keyword ngxDirectiveBlock stream
|
syn keyword ngxDirectiveBlock stream
|
||||||
syn keyword ngxDirectiveBlock types
|
syn keyword ngxDirectiveBlock types
|
||||||
syn match ngxLocationOperator /\(=\|\~\*\|\^\~\|\~\)/ contained nextgroup=ngxLocationPath,ngxString skipwhite
|
syn match ngxLocationOperator /\(=\|\~\*\|\^\~\|\~\)/ contained nextgroup=ngxLocationPath,ngxString skipwhite skipempty
|
||||||
syn match ngxLocationNamedLoc /@\w\+/
|
syn match ngxLocationNamedLoc /@\w\+/
|
||||||
syn keyword ngxDirectiveBlock location nextgroup=ngxLocationNamedLoc,ngxLocationOperator,ngxLocationPath,ngxString skipwhite
|
syn keyword ngxDirectiveBlock location nextgroup=ngxLocationNamedLoc,ngxLocationOperator,ngxLocationPath,ngxString skipwhite skipempty
|
||||||
syn keyword ngxDirectiveBlock upstream
|
syn keyword ngxDirectiveBlock upstream
|
||||||
syn keyword ngxDirectiveBlock charset_map
|
syn keyword ngxDirectiveBlock charset_map
|
||||||
syn keyword ngxDirectiveBlock limit_except
|
syn keyword ngxDirectiveBlock limit_except
|
||||||
@ -52,7 +47,8 @@ syn keyword ngxDirectiveImportant include
|
|||||||
syn keyword ngxDirectiveImportant root
|
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
|
syn keyword ngxDirectiveImportant listen contained
|
||||||
|
syn region ngxDirectiveImportantListen matchgroup=ngxDirectiveImportant start=+listen+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxListenOptions,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
|
||||||
@ -61,19 +57,48 @@ syn keyword ngxDirectiveImportant scgi_pass
|
|||||||
syn keyword ngxDirectiveImportant uwsgi_pass
|
syn keyword ngxDirectiveImportant uwsgi_pass
|
||||||
syn keyword ngxDirectiveImportant try_files
|
syn keyword ngxDirectiveImportant try_files
|
||||||
|
|
||||||
|
syn keyword ngxListenOptions default_server contained
|
||||||
|
syn keyword ngxListenOptions ssl contained
|
||||||
|
syn keyword ngxListenOptions http2 contained
|
||||||
|
syn keyword ngxListenOptions spdy contained
|
||||||
|
syn keyword ngxListenOptions proxy_protocol contained
|
||||||
|
syn keyword ngxListenOptions setfib contained
|
||||||
|
syn keyword ngxListenOptions fastopen contained
|
||||||
|
syn keyword ngxListenOptions backlog contained
|
||||||
|
syn keyword ngxListenOptions rcvbuf contained
|
||||||
|
syn keyword ngxListenOptions sndbuf contained
|
||||||
|
syn keyword ngxListenOptions accept_filter contained
|
||||||
|
syn keyword ngxListenOptions deferred contained
|
||||||
|
syn keyword ngxListenOptions bind contained
|
||||||
|
syn keyword ngxListenOptions ipv6only contained
|
||||||
|
syn keyword ngxListenOptions reuseport contained
|
||||||
|
syn keyword ngxListenOptions so_keepalive contained
|
||||||
|
syn keyword ngxListenOptions keepidle contained
|
||||||
|
|
||||||
syn keyword ngxDirectiveControl break
|
syn keyword ngxDirectiveControl break
|
||||||
syn keyword ngxDirectiveControl return
|
syn keyword ngxDirectiveControl return nextgroup=ngxStatusCode skipwhite skipempty
|
||||||
syn keyword ngxDirectiveControl rewrite nextgroup=ngxRewriteURI skipwhite
|
syn keyword ngxDirectiveControl rewrite nextgroup=ngxRewriteURI skipwhite skipempty
|
||||||
syn keyword ngxDirectiveControl set
|
syn keyword ngxDirectiveControl set
|
||||||
|
|
||||||
syn keyword ngxRewriteFlag last
|
syn match ngxStatusCode /\d\d\d/ contained
|
||||||
syn keyword ngxRewriteFlag break
|
syn match ngxStatusCodes /\d\d\d/ contained contains=ngxStatusCode nextgroup=ngxStatusCode skipwhite skipempty
|
||||||
syn keyword ngxRewriteFlag redirect
|
|
||||||
syn keyword ngxRewriteFlag permanent
|
|
||||||
|
|
||||||
syn keyword ngxDirectiveError error_page
|
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 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 keyword ngxRewriteFlag last contained
|
||||||
|
syn keyword ngxRewriteFlag break contained
|
||||||
|
syn keyword ngxRewriteFlag redirect contained
|
||||||
|
syn keyword ngxRewriteFlag permanent contained
|
||||||
|
|
||||||
|
syn keyword ngxDirectiveError error_page nextgroup=ngxErrorStatusCode skipwhite skipempty
|
||||||
syn keyword ngxDirectiveError post_action
|
syn keyword ngxDirectiveError post_action
|
||||||
|
|
||||||
|
syn match ngxErrorStatusCode /\d\d\d/ contained contains=ngxStatusCode nextgroup=ngxErrorResponseCode skipwhite skipempty
|
||||||
|
syn match ngxErrorResponseCode /=\d\d\d/ contained contains=ngxStatusCode
|
||||||
|
|
||||||
syn keyword ngxDirectiveDeprecated connections
|
syn keyword ngxDirectiveDeprecated connections
|
||||||
syn keyword ngxDirectiveDeprecated imap
|
syn keyword ngxDirectiveDeprecated imap
|
||||||
syn keyword ngxDirectiveDeprecated limit_zone
|
syn keyword ngxDirectiveDeprecated limit_zone
|
||||||
@ -82,14 +107,6 @@ syn keyword ngxDirectiveDeprecated open_file_cache_retest
|
|||||||
syn keyword ngxDirectiveDeprecated optimize_server_names
|
syn keyword ngxDirectiveDeprecated optimize_server_names
|
||||||
syn keyword ngxDirectiveDeprecated satisfy_any
|
syn keyword ngxDirectiveDeprecated satisfy_any
|
||||||
syn keyword ngxDirectiveDeprecated so_keepalive
|
syn keyword ngxDirectiveDeprecated so_keepalive
|
||||||
syn keyword ngxDirectiveDeprecated spdy_chunk_size
|
|
||||||
syn keyword ngxDirectiveDeprecated spdy_headers_comp
|
|
||||||
syn keyword ngxDirectiveDeprecated spdy_keepalive_timeout
|
|
||||||
syn keyword ngxDirectiveDeprecated spdy_max_concurrent_streams
|
|
||||||
syn keyword ngxDirectiveDeprecated spdy_pool_size
|
|
||||||
syn keyword ngxDirectiveDeprecated spdy_recv_buffer_size
|
|
||||||
syn keyword ngxDirectiveDeprecated spdy_recv_timeout
|
|
||||||
syn keyword ngxDirectiveDeprecated spdy_streams_index_size
|
|
||||||
|
|
||||||
syn keyword ngxDirective absolute_redirect
|
syn keyword ngxDirective absolute_redirect
|
||||||
syn keyword ngxDirective accept_mutex
|
syn keyword ngxDirective accept_mutex
|
||||||
@ -235,7 +252,6 @@ syn keyword ngxDirective hls_forward_args
|
|||||||
syn keyword ngxDirective hls_fragment
|
syn keyword ngxDirective hls_fragment
|
||||||
syn keyword ngxDirective hls_mp4_buffer_size
|
syn keyword ngxDirective hls_mp4_buffer_size
|
||||||
syn keyword ngxDirective hls_mp4_max_buffer_size
|
syn keyword ngxDirective hls_mp4_max_buffer_size
|
||||||
syn keyword ngxDirective http2 " Not a real directive
|
|
||||||
syn keyword ngxDirective http2_chunk_size
|
syn keyword ngxDirective http2_chunk_size
|
||||||
syn keyword ngxDirective http2_body_preread_size
|
syn keyword ngxDirective http2_body_preread_size
|
||||||
syn keyword ngxDirective http2_idle_timeout
|
syn keyword ngxDirective http2_idle_timeout
|
||||||
@ -277,13 +293,13 @@ syn keyword ngxDirective least_conn
|
|||||||
syn keyword ngxDirective least_time
|
syn keyword ngxDirective least_time
|
||||||
syn keyword ngxDirective limit_conn
|
syn keyword ngxDirective limit_conn
|
||||||
syn keyword ngxDirective limit_conn_log_level
|
syn keyword ngxDirective limit_conn_log_level
|
||||||
syn keyword ngxDirective limit_conn_status
|
syn keyword ngxDirective limit_conn_status nextgroup=ngxStatusCode skipwhite skipempty
|
||||||
syn keyword ngxDirective limit_conn_zone
|
syn keyword ngxDirective limit_conn_zone
|
||||||
syn keyword ngxDirective limit_rate
|
syn keyword ngxDirective limit_rate
|
||||||
syn keyword ngxDirective limit_rate_after
|
syn keyword ngxDirective limit_rate_after
|
||||||
syn keyword ngxDirective limit_req
|
syn keyword ngxDirective limit_req
|
||||||
syn keyword ngxDirective limit_req_log_level
|
syn keyword ngxDirective limit_req_log_level
|
||||||
syn keyword ngxDirective limit_req_status
|
syn keyword ngxDirective limit_req_status nextgroup=ngxStatusCode skipwhite skipempty
|
||||||
syn keyword ngxDirective limit_req_zone
|
syn keyword ngxDirective limit_req_zone
|
||||||
syn keyword ngxDirective lingering_close
|
syn keyword ngxDirective lingering_close
|
||||||
syn keyword ngxDirective lingering_time
|
syn keyword ngxDirective lingering_time
|
||||||
@ -343,8 +359,8 @@ syn keyword ngxDirective postpone_gzipping
|
|||||||
syn keyword ngxDirective postpone_output
|
syn keyword ngxDirective postpone_output
|
||||||
syn keyword ngxDirective preread_buffer_size
|
syn keyword ngxDirective preread_buffer_size
|
||||||
syn keyword ngxDirective preread_timeout
|
syn keyword ngxDirective preread_timeout
|
||||||
syn keyword ngxDirective protocol nextgroup=ngxMailProtocol skipwhite
|
syn keyword ngxDirective protocol nextgroup=ngxMailProtocol skipwhite skipempty
|
||||||
syn keyword ngxMailProtocol imap pop3 smtp
|
syn keyword ngxMailProtocol imap pop3 smtp contained
|
||||||
syn keyword ngxDirective proxy
|
syn keyword ngxDirective proxy
|
||||||
syn keyword ngxDirective proxy_bind
|
syn keyword ngxDirective proxy_bind
|
||||||
syn keyword ngxDirective proxy_buffer
|
syn keyword ngxDirective proxy_buffer
|
||||||
@ -366,7 +382,7 @@ syn keyword ngxDirective proxy_cache_path
|
|||||||
syn keyword ngxDirective proxy_cache_purge
|
syn keyword ngxDirective proxy_cache_purge
|
||||||
syn keyword ngxDirective proxy_cache_revalidate
|
syn keyword ngxDirective proxy_cache_revalidate
|
||||||
syn keyword ngxDirective proxy_cache_use_stale
|
syn keyword ngxDirective proxy_cache_use_stale
|
||||||
syn keyword ngxDirective proxy_cache_valid
|
syn keyword ngxDirective proxy_cache_valid nextgroup=ngxStatusCodes skipwhite skipempty
|
||||||
syn keyword ngxDirective proxy_connect_timeout
|
syn keyword ngxDirective proxy_connect_timeout
|
||||||
syn keyword ngxDirective proxy_cookie_domain
|
syn keyword ngxDirective proxy_cookie_domain
|
||||||
syn keyword ngxDirective proxy_cookie_path
|
syn keyword ngxDirective proxy_cookie_path
|
||||||
@ -406,7 +422,7 @@ syn keyword ngxDirective proxy_ssl_ciphers
|
|||||||
syn keyword ngxDirective proxy_ssl_crl
|
syn keyword ngxDirective proxy_ssl_crl
|
||||||
syn keyword ngxDirective proxy_ssl_name
|
syn keyword ngxDirective proxy_ssl_name
|
||||||
syn keyword ngxDirective proxy_ssl_password_file
|
syn keyword ngxDirective proxy_ssl_password_file
|
||||||
syn keyword ngxDirective proxy_ssl_protocols nextgroup=ngxSSLProtocol skipwhite
|
syn keyword ngxDirective proxy_ssl_protocols nextgroup=ngxSSLProtocol skipwhite skipempty
|
||||||
syn keyword ngxDirective proxy_ssl_server_name
|
syn keyword ngxDirective proxy_ssl_server_name
|
||||||
syn keyword ngxDirective proxy_ssl_session_reuse
|
syn keyword ngxDirective proxy_ssl_session_reuse
|
||||||
syn keyword ngxDirective proxy_ssl_trusted_certificate
|
syn keyword ngxDirective proxy_ssl_trusted_certificate
|
||||||
@ -499,6 +515,14 @@ syn keyword ngxDirective smtp_capabilities
|
|||||||
syn keyword ngxDirective smtp_client_buffer
|
syn keyword ngxDirective smtp_client_buffer
|
||||||
syn keyword ngxDirective smtp_greeting_delay
|
syn keyword ngxDirective smtp_greeting_delay
|
||||||
syn keyword ngxDirective source_charset
|
syn keyword ngxDirective source_charset
|
||||||
|
syn keyword ngxDirective spdy_chunk_size
|
||||||
|
syn keyword ngxDirective spdy_headers_comp
|
||||||
|
syn keyword ngxDirective spdy_keepalive_timeout
|
||||||
|
syn keyword ngxDirective spdy_max_concurrent_streams
|
||||||
|
syn keyword ngxDirective spdy_pool_size
|
||||||
|
syn keyword ngxDirective spdy_recv_buffer_size
|
||||||
|
syn keyword ngxDirective spdy_recv_timeout
|
||||||
|
syn keyword ngxDirective spdy_streams_index_size
|
||||||
syn keyword ngxDirective ssi
|
syn keyword ngxDirective ssi
|
||||||
syn keyword ngxDirective ssi_ignore_recycled_buffers
|
syn keyword ngxDirective ssi_ignore_recycled_buffers
|
||||||
syn keyword ngxDirective ssi_last_modified
|
syn keyword ngxDirective ssi_last_modified
|
||||||
@ -520,8 +544,8 @@ syn keyword ngxDirective ssl_handshake_timeout
|
|||||||
syn keyword ngxDirective ssl_password_file
|
syn keyword ngxDirective ssl_password_file
|
||||||
syn keyword ngxDirective ssl_prefer_server_ciphers
|
syn keyword ngxDirective ssl_prefer_server_ciphers
|
||||||
syn keyword ngxDirective ssl_preread
|
syn keyword ngxDirective ssl_preread
|
||||||
syn keyword ngxDirective ssl_protocols nextgroup=ngxSSLProtocol skipwhite
|
syn keyword ngxDirective ssl_protocols nextgroup=ngxSSLProtocol skipwhite skipempty
|
||||||
syn keyword ngxSSLProtocol SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2
|
syn keyword ngxSSLProtocol SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2 contained nextgroup=ngxSSLProtocol skipwhite skipempty
|
||||||
syn keyword ngxDirective ssl_session_cache
|
syn keyword ngxDirective ssl_session_cache
|
||||||
syn keyword ngxDirective ssl_session_ticket_key
|
syn keyword ngxDirective ssl_session_ticket_key
|
||||||
syn keyword ngxDirective ssl_session_tickets
|
syn keyword ngxDirective ssl_session_tickets
|
||||||
@ -612,7 +636,7 @@ syn keyword ngxDirective uwsgi_ssl_ciphers
|
|||||||
syn keyword ngxDirective uwsgi_ssl_crl
|
syn keyword ngxDirective uwsgi_ssl_crl
|
||||||
syn keyword ngxDirective uwsgi_ssl_name
|
syn keyword ngxDirective uwsgi_ssl_name
|
||||||
syn keyword ngxDirective uwsgi_ssl_password_file
|
syn keyword ngxDirective uwsgi_ssl_password_file
|
||||||
syn keyword ngxDirective uwsgi_ssl_protocols nextgroup=ngxSSLProtocol skipwhite
|
syn keyword ngxDirective uwsgi_ssl_protocols nextgroup=ngxSSLProtocol skipwhite skipempty
|
||||||
syn keyword ngxDirective uwsgi_ssl_server_name
|
syn keyword ngxDirective uwsgi_ssl_server_name
|
||||||
syn keyword ngxDirective uwsgi_ssl_session_reuse
|
syn keyword ngxDirective uwsgi_ssl_session_reuse
|
||||||
syn keyword ngxDirective uwsgi_ssl_trusted_certificate
|
syn keyword ngxDirective uwsgi_ssl_trusted_certificate
|
||||||
@ -694,8 +718,8 @@ syn keyword ngxDirectiveDeprecated accesskey_signature
|
|||||||
" syn keyword ngxDirectiveThirdParty fastcgi_store_access
|
" syn keyword ngxDirectiveThirdParty fastcgi_store_access
|
||||||
" syn keyword ngxDirectiveThirdParty fastcgi_temp_file_write_size
|
" syn keyword ngxDirectiveThirdParty fastcgi_temp_file_write_size
|
||||||
" syn keyword ngxDirectiveThirdParty fastcgi_temp_path
|
" syn keyword ngxDirectiveThirdParty fastcgi_temp_path
|
||||||
syn keyword ngxDirectiveThirdParty fastcgi_upstream_fail_timeout
|
syn keyword ngxDirectiveDeprecated fastcgi_upstream_fail_timeout
|
||||||
syn keyword ngxDirectiveThirdParty fastcgi_upstream_max_fails
|
syn keyword ngxDirectiveDeprecated fastcgi_upstream_max_fails
|
||||||
|
|
||||||
" Akamai G2O Module <https://github.com/kaltura/nginx_mod_akamai_g2o>
|
" Akamai G2O Module <https://github.com/kaltura/nginx_mod_akamai_g2o>
|
||||||
" Nginx Module for Authenticating Akamai G2O requests
|
" Nginx Module for Authenticating Akamai G2O requests
|
||||||
@ -924,7 +948,48 @@ syn keyword ngxDirectiveDeprecated geoip_country_file
|
|||||||
|
|
||||||
" GeoIP 2 Module <https://github.com/leev/ngx_http_geoip2_module>
|
" GeoIP 2 Module <https://github.com/leev/ngx_http_geoip2_module>
|
||||||
" Creates variables with values from the maxmind geoip2 databases based on the client IP
|
" Creates variables with values from the maxmind geoip2 databases based on the client IP
|
||||||
syn keyword ngxDirectiveThirdParty geoip2
|
syn keyword ngxDirectiveThirdParty geoip2 nextgroup=ngxThirdPartyGeoIP2Database skipwhite skipempty
|
||||||
|
syn match ngxThirdPartyGeoIP2Database /\S\+/ contained nextgroup=ngxThirdPartyGeoIP2Block skipwhite skipempty
|
||||||
|
syn region ngxThirdPartyGeoIP2Block start=/{/ end=/}/ contained contains=ngxThirdPartyGeoIP2Keyword,ngxVariable
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword de en es fr ja pt-BR ru zh-CN contained
|
||||||
|
syn match ngxThirdPartyGeoIP2Keyword /pt-BR|zh-CN/ contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword default source contained
|
||||||
|
" Common Keys
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword code confidence geoname_id names iso_code contained
|
||||||
|
" /Common Keys
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword city contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword continent contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword country contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword location contained
|
||||||
|
" Location Keys
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword accuracy_radius contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword average_income contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword latitude contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword longitude contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword metro_code contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword population_density contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword time_zone contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword postal contained
|
||||||
|
" /Location Keys
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword registered_country contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword represented_country contained
|
||||||
|
" Represented Country Keys
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword type contained
|
||||||
|
" /Represented Country Keys
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword subdivisions contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword traits contained
|
||||||
|
" Traits Keys
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword autonomous_system_number contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword autonomous_system_organization contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword domain contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword ip_address contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword is_anonymous_proxy contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword is_satellite_provider contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword isp contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword organization contained
|
||||||
|
syn keyword ngxThirdPartyGeoIP2Keyword user_type contained
|
||||||
|
" /Traits Keys
|
||||||
|
hi link ngxThirdPartyGeoIP2Keyword ngxThirdPartyKeyword
|
||||||
|
|
||||||
" GridFS Module <https://github.com/mdirolf/nginx-gridfs>
|
" GridFS Module <https://github.com/mdirolf/nginx-gridfs>
|
||||||
" Nginx module for serving files from MongoDB's GridFS
|
" Nginx module for serving files from MongoDB's GridFS
|
||||||
@ -2131,6 +2196,7 @@ hi link ngxLocationPath String
|
|||||||
hi link ngxLocationNamedLoc Identifier
|
hi link ngxLocationNamedLoc Identifier
|
||||||
|
|
||||||
hi link ngxBoolean Boolean
|
hi link ngxBoolean Boolean
|
||||||
|
hi link ngxStatusCode Number
|
||||||
hi link ngxRewriteFlag Boolean
|
hi link ngxRewriteFlag Boolean
|
||||||
hi link ngxDirectiveBlock Statement
|
hi link ngxDirectiveBlock Statement
|
||||||
hi link ngxDirectiveImportant Type
|
hi link ngxDirectiveImportant Type
|
||||||
@ -2140,6 +2206,12 @@ hi link ngxDirectiveDeprecated Error
|
|||||||
hi link ngxDirective Identifier
|
hi link ngxDirective Identifier
|
||||||
hi link ngxDirectiveThirdParty Special
|
hi link ngxDirectiveThirdParty Special
|
||||||
|
|
||||||
|
hi link ngxListenOptions Keyword
|
||||||
|
hi link ngxMailProtocol Keyword
|
||||||
|
hi link ngxSSLProtocol Keyword
|
||||||
|
|
||||||
|
hi link ngxThirdPartyKeyword keyword
|
||||||
|
|
||||||
let b:current_syntax = "nginx"
|
let b:current_syntax = "nginx"
|
||||||
|
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ syntax keyword plantumlSkinparamKeyword ActorFontSize ActorFontStyle ActorStereo
|
|||||||
syntax keyword plantumlSkinparamKeyword ActorStereotypeFontSize ActorStereotypeFontStyle ArrowColor ArrowFontColor
|
syntax keyword plantumlSkinparamKeyword ActorStereotypeFontSize ActorStereotypeFontStyle ArrowColor ArrowFontColor
|
||||||
syntax keyword plantumlSkinparamKeyword ArrowFontName ArrowFontSize ArrowFontStyle AttributeFontColor AttributeFontName
|
syntax keyword plantumlSkinparamKeyword ArrowFontName ArrowFontSize ArrowFontStyle AttributeFontColor AttributeFontName
|
||||||
syntax keyword plantumlSkinparamKeyword AttributeFontSize AttributeFontStyle AttributeIconSize BarColor
|
syntax keyword plantumlSkinparamKeyword AttributeFontSize AttributeFontStyle AttributeIconSize BarColor
|
||||||
syntax keyword plantumlSkinparamKeyword BorderColor CharacterFontColor CharacterFontName CharacterFontSize
|
syntax keyword plantumlSkinparamKeyword BorderColor BoxPadding CharacterFontColor CharacterFontName CharacterFontSize
|
||||||
syntax keyword plantumlSkinparamKeyword CharacterFontStyle CharacterRadius Color DividerBackgroundColor
|
syntax keyword plantumlSkinparamKeyword CharacterFontStyle CharacterRadius Color DividerBackgroundColor
|
||||||
syntax keyword plantumlSkinparamKeyword DividerFontColor DividerFontName DividerFontSize DividerFontStyle EndColor
|
syntax keyword plantumlSkinparamKeyword DividerFontColor DividerFontName DividerFontSize DividerFontStyle EndColor
|
||||||
syntax keyword plantumlSkinparamKeyword FontColor FontName FontSize FontStyle GroupBackgroundColor GroupingFontColor
|
syntax keyword plantumlSkinparamKeyword FontColor FontName FontSize FontStyle GroupBackgroundColor GroupingFontColor
|
||||||
@ -139,7 +139,7 @@ syntax keyword plantumlSkinparamKeyword GroupingHeaderFontName GroupingHeaderFon
|
|||||||
syntax keyword plantumlSkinparamKeyword InterfaceBackgroundColor InterfaceBorderColor LifeLineBackgroundColor
|
syntax keyword plantumlSkinparamKeyword InterfaceBackgroundColor InterfaceBorderColor LifeLineBackgroundColor
|
||||||
syntax keyword plantumlSkinparamKeyword LifeLineBorderColor ParticipantBackgroundColor ParticipantBorderColor
|
syntax keyword plantumlSkinparamKeyword LifeLineBorderColor ParticipantBackgroundColor ParticipantBorderColor
|
||||||
syntax keyword plantumlSkinparamKeyword ParticipantFontColor ParticipantFontName ParticipantFontSize
|
syntax keyword plantumlSkinparamKeyword ParticipantFontColor ParticipantFontName ParticipantFontSize
|
||||||
syntax keyword plantumlSkinparamKeyword ParticipantFontStyle StartColor StereotypeFontColor
|
syntax keyword plantumlSkinparamKeyword ParticipantFontStyle ParticipantPadding StartColor StereotypeFontColor
|
||||||
syntax keyword plantumlSkinparamKeyword StereotypeFontName StereotypeFontSize StereotypeFontStyle
|
syntax keyword plantumlSkinparamKeyword StereotypeFontName StereotypeFontSize StereotypeFontStyle
|
||||||
|
|
||||||
" Highlight
|
" Highlight
|
||||||
|
@ -32,12 +32,12 @@ syn region pugJavascript matchgroup=pugJavascriptOutputChar start="[!&]\==\|\~"
|
|||||||
syn region pugJavascript matchgroup=pugJavascriptChar start="-" skip=",\s*$" end="$" contained contains=@htmlJavascript keepend
|
syn region pugJavascript matchgroup=pugJavascriptChar start="-" skip=",\s*$" end="$" contained contains=@htmlJavascript keepend
|
||||||
syn cluster pugTop contains=pugBegin,pugComment,pugHtmlComment,pugJavascript
|
syn cluster pugTop contains=pugBegin,pugComment,pugHtmlComment,pugJavascript
|
||||||
syn match pugBegin "^\s*\%([<>]\|&[^=~ ]\)\@!" nextgroup=pugTag,pugClassChar,pugIdChar,pugPlainChar,pugJavascript,pugScriptConditional,pugScriptStatement,pugPipedText
|
syn match pugBegin "^\s*\%([<>]\|&[^=~ ]\)\@!" nextgroup=pugTag,pugClassChar,pugIdChar,pugPlainChar,pugJavascript,pugScriptConditional,pugScriptStatement,pugPipedText
|
||||||
syn match pugTag "+\?\w\+\%(:\w\+\)\=" contained contains=htmlTagName,htmlSpecialTagName nextgroup=@pugComponent
|
syn match pugTag "+\?[[:alnum:]_-]\+\%(:\w\+\)\=" contained contains=htmlTagName,htmlSpecialTagName nextgroup=@pugComponent
|
||||||
syn cluster pugComponent contains=pugAttributes,pugIdChar,pugBlockExpansionChar,pugClassChar,pugPlainChar,pugJavascript,pugTagBlockChar,pugTagInlineText
|
syn cluster pugComponent contains=pugAttributes,pugIdChar,pugBlockExpansionChar,pugClassChar,pugPlainChar,pugJavascript,pugTagBlockChar,pugTagInlineText
|
||||||
syntax keyword pugCommentTodo contained TODO FIXME XXX TBD
|
syntax keyword pugCommentTodo contained TODO FIXME XXX TBD
|
||||||
syn match pugComment '\(\s\+\|^\)\/\/.*$' contains=pugCommentTodo
|
syn match pugComment '\(\s\+\|^\)\/\/.*$' contains=pugCommentTodo,@Spell
|
||||||
syn region pugCommentBlock start="\z(\s\+\|^\)\/\/.*$" end="^\%(\z1\s\|\s*$\)\@!" contains=pugCommentTodo keepend
|
syn region pugCommentBlock start="\z(\s\+\|^\)\/\/.*$" end="^\%(\z1\s\|\s*$\)\@!" contains=pugCommentTodo,@Spell keepend
|
||||||
syn region pugHtmlConditionalComment start="<!--\%(.*\)>" end="<!\%(.*\)-->" contains=pugCommentTodo
|
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 pugAttributes matchgroup=pugAttributesDelimiter start="(" end=")" contained contains=@htmlJavascript,pugHtmlArg,pugAngular2,htmlArg,htmlEvent,htmlCssDefinition nextgroup=@pugComponent
|
||||||
syn match pugClassChar "\." containedin=htmlTagName nextgroup=pugClass
|
syn match pugClassChar "\." containedin=htmlTagName nextgroup=pugClass
|
||||||
@ -54,10 +54,10 @@ syn keyword pugHtmlArg contained href title
|
|||||||
syn match pugPlainChar "\\" contained
|
syn match pugPlainChar "\\" contained
|
||||||
syn region pugInterpolation matchgroup=pugInterpolationDelimiter start="[#!]{" end="}" contains=@htmlJavascript
|
syn region pugInterpolation matchgroup=pugInterpolationDelimiter start="[#!]{" end="}" contains=@htmlJavascript
|
||||||
syn match pugInterpolationEscape "\\\@<!\%(\\\\\)*\\\%(\\\ze#{\|#\ze{\)"
|
syn match pugInterpolationEscape "\\\@<!\%(\\\\\)*\\\%(\\\ze#{\|#\ze{\)"
|
||||||
syn match pugTagInlineText "\s.*$" contained contains=pugInterpolation,pugTextInlinePug
|
syn match pugTagInlineText "\s.*$" contained contains=pugInterpolation,pugTextInlinePug,@Spell
|
||||||
syn region pugPipedText matchgroup=pugPipeChar start="|" end="$" contained contains=pugInterpolation,pugTextInlinePug nextgroup=pugPipedText skipnl
|
syn region pugPipedText matchgroup=pugPipeChar start="|" end="$" contained contains=pugInterpolation,pugTextInlinePug nextgroup=pugPipedText skipnl
|
||||||
syn match pugTagBlockChar "\.$" contained nextgroup=pugTagBlockText,pugTagBlockEnd skipnl
|
syn match pugTagBlockChar "\.$" contained nextgroup=pugTagBlockText,pugTagBlockEnd skipnl
|
||||||
syn region pugTagBlockText start="\%(\s*\)\S" end="\ze\n" contained contains=pugInterpolation,pugTextInlinePug nextgroup=pugTagBlockText,pugTagBlockEnd skipnl
|
syn region pugTagBlockText start="\%(\s*\)\S" end="\ze\n" contained contains=pugInterpolation,pugTextInlinePug,@Spell nextgroup=pugTagBlockText,pugTagBlockEnd skipnl
|
||||||
syn region pugTagBlockEnd start="\s*\S" end="$" contained contains=pugInterpolation,pugTextInlinePug nextgroup=pugBegin skipnl
|
syn region pugTagBlockEnd start="\s*\S" end="$" contained contains=pugInterpolation,pugTextInlinePug nextgroup=pugBegin skipnl
|
||||||
syn region pugTextInlinePug matchgroup=pugInlineDelimiter start="#\[" end="]" contains=pugTag keepend
|
syn region pugTextInlinePug matchgroup=pugInlineDelimiter start="#\[" end="]" contains=pugTag keepend
|
||||||
|
|
||||||
|
@ -243,7 +243,7 @@ syntax keyword swiftPreprocessor
|
|||||||
syntax match swiftComment "\v\/\/.*$"
|
syntax match swiftComment "\v\/\/.*$"
|
||||||
\ contains=swiftTodos,swiftDocString,swiftMarker,@Spell oneline
|
\ contains=swiftTodos,swiftDocString,swiftMarker,@Spell oneline
|
||||||
syntax region swiftComment start="/\*" end="\*/"
|
syntax region swiftComment start="/\*" end="\*/"
|
||||||
\ contains=swiftTodos,swiftDocString,swiftMarker,swiftComment,@Spell fold
|
\ contains=swiftTodos,swiftDocString,swiftMarker,@Spell fold
|
||||||
|
|
||||||
|
|
||||||
" Set highlights
|
" Set highlights
|
||||||
|
@ -14,26 +14,39 @@ syn keyword terraValueBool true false on off yes no
|
|||||||
|
|
||||||
""" data
|
""" data
|
||||||
syn keyword terraDataTypeBI
|
syn keyword terraDataTypeBI
|
||||||
|
\ alicloud_images
|
||||||
|
\ alicloud_instance_types
|
||||||
|
\ alicloud_regions
|
||||||
|
\ alicloud_zones
|
||||||
\ archive_file
|
\ archive_file
|
||||||
\ atlas_artifact
|
\ atlas_artifact
|
||||||
\ aws_acm_certificate
|
\ aws_acm_certificate
|
||||||
\ aws_alb
|
\ aws_alb
|
||||||
\ aws_alb_listener
|
\ aws_alb_listener
|
||||||
\ aws_ami
|
\ aws_ami
|
||||||
|
\ aws_autoscaling_groups
|
||||||
\ aws_availability_zone
|
\ aws_availability_zone
|
||||||
\ aws_availability_zones
|
\ aws_availability_zones
|
||||||
\ aws_billing_service_account
|
\ aws_billing_service_account
|
||||||
\ aws_caller_identity
|
\ aws_caller_identity
|
||||||
|
\ aws_canonical_user_id
|
||||||
\ aws_cloudformation_stack
|
\ aws_cloudformation_stack
|
||||||
|
\ aws_db_instance
|
||||||
\ aws_ebs_snapshot
|
\ aws_ebs_snapshot
|
||||||
\ aws_ebs_volume
|
\ aws_ebs_volume
|
||||||
|
\ aws_ecs_cluster
|
||||||
\ aws_ecs_container_definition
|
\ aws_ecs_container_definition
|
||||||
|
\ aws_ecs_task_definition
|
||||||
\ aws_eip
|
\ aws_eip
|
||||||
|
\ aws_elb_hosted_zone_id
|
||||||
\ 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_server_certificate
|
\ aws_iam_server_certificate
|
||||||
|
\ aws_instance
|
||||||
\ aws_ip_ranges
|
\ aws_ip_ranges
|
||||||
|
\ aws_kms_secret
|
||||||
|
\ aws_partition
|
||||||
\ aws_prefix_list
|
\ aws_prefix_list
|
||||||
\ aws_redshift_service_account
|
\ aws_redshift_service_account
|
||||||
\ aws_region
|
\ aws_region
|
||||||
@ -43,17 +56,23 @@ syn keyword terraDataTypeBI
|
|||||||
\ aws_security_group
|
\ aws_security_group
|
||||||
\ aws_subnet
|
\ aws_subnet
|
||||||
\ aws_vpc
|
\ aws_vpc
|
||||||
|
\ aws_vpc_endpoint
|
||||||
\ aws_vpc_endpoint_service
|
\ aws_vpc_endpoint_service
|
||||||
\ aws_vpc_peering_connection
|
\ aws_vpc_peering_connection
|
||||||
|
\ aws_vpn_gateway
|
||||||
\ azurerm_client_config
|
\ azurerm_client_config
|
||||||
\ consul_keys
|
\ consul_keys
|
||||||
\ docker_registry_image
|
\ docker_registry_image
|
||||||
\ external
|
\ external
|
||||||
\ fastly_ip_ranges
|
\ fastly_ip_ranges
|
||||||
|
\ google_compute_zones
|
||||||
\ google_iam_policy
|
\ google_iam_policy
|
||||||
\ newrelic_application
|
\ newrelic_application
|
||||||
|
\ ns1_datasource
|
||||||
\ null_data_source
|
\ null_data_source
|
||||||
\ opsgenie_user
|
\ opsgenie_user
|
||||||
|
\ pagerduty_escalation_policy
|
||||||
|
\ pagerduty_schedule
|
||||||
\ pagerduty_user
|
\ pagerduty_user
|
||||||
\ pagerduty_vendor
|
\ pagerduty_vendor
|
||||||
\ scaleway_bootscript
|
\ scaleway_bootscript
|
||||||
@ -65,6 +84,20 @@ syn keyword terraDataTypeBI
|
|||||||
|
|
||||||
""" resource
|
""" resource
|
||||||
syn keyword terraResourceTypeBI
|
syn keyword terraResourceTypeBI
|
||||||
|
\ alicloud_disk
|
||||||
|
\ alicloud_disk_attachment
|
||||||
|
\ alicloud_eip
|
||||||
|
\ alicloud_eip_association
|
||||||
|
\ alicloud_instance
|
||||||
|
\ alicloud_nat_gateway
|
||||||
|
\ alicloud_route_entry
|
||||||
|
\ alicloud_security_group
|
||||||
|
\ alicloud_security_group_rule
|
||||||
|
\ alicloud_slb
|
||||||
|
\ alicloud_slb_attachment
|
||||||
|
\ alicloud_subnet
|
||||||
|
\ alicloud_vpc
|
||||||
|
\ alicloud_vswitch
|
||||||
\ arukas_container
|
\ arukas_container
|
||||||
\ atlas_artifact
|
\ atlas_artifact
|
||||||
\ aws_alb
|
\ aws_alb
|
||||||
@ -110,11 +143,16 @@ syn keyword terraResourceTypeBI
|
|||||||
\ aws_cloudwatch_log_stream
|
\ aws_cloudwatch_log_stream
|
||||||
\ aws_cloudwatch_log_subscription_filter
|
\ aws_cloudwatch_log_subscription_filter
|
||||||
\ aws_cloudwatch_metric_alarm
|
\ aws_cloudwatch_metric_alarm
|
||||||
|
\ aws_codebuild_project
|
||||||
\ aws_codecommit_repository
|
\ aws_codecommit_repository
|
||||||
\ aws_codecommit_trigger
|
\ aws_codecommit_trigger
|
||||||
\ aws_codedeploy_app
|
\ aws_codedeploy_app
|
||||||
\ aws_codedeploy_deployment_config
|
\ aws_codedeploy_deployment_config
|
||||||
\ aws_codedeploy_deployment_group
|
\ aws_codedeploy_deployment_group
|
||||||
|
\ aws_config_config_rule
|
||||||
|
\ aws_config_configuration_recorder
|
||||||
|
\ aws_config_configuration_recorder_status
|
||||||
|
\ aws_config_delivery_channel
|
||||||
\ aws_customer_gateway
|
\ aws_customer_gateway
|
||||||
\ aws_db_event_subscription
|
\ aws_db_event_subscription
|
||||||
\ aws_db_instance
|
\ aws_db_instance
|
||||||
@ -126,6 +164,11 @@ syn keyword terraResourceTypeBI
|
|||||||
\ aws_default_route_table
|
\ aws_default_route_table
|
||||||
\ aws_default_security_group
|
\ aws_default_security_group
|
||||||
\ aws_directory_service_directory
|
\ aws_directory_service_directory
|
||||||
|
\ aws_dms_certificate
|
||||||
|
\ aws_dms_endpoint
|
||||||
|
\ aws_dms_replication_instance
|
||||||
|
\ aws_dms_replication_subnet_group
|
||||||
|
\ aws_dms_replication_task
|
||||||
\ aws_dynamodb_table
|
\ aws_dynamodb_table
|
||||||
\ aws_ebs_snapshot
|
\ aws_ebs_snapshot
|
||||||
\ aws_ebs_volume
|
\ aws_ebs_volume
|
||||||
@ -147,6 +190,7 @@ syn keyword terraResourceTypeBI
|
|||||||
\ aws_elasticache_security_group
|
\ aws_elasticache_security_group
|
||||||
\ aws_elasticache_subnet_group
|
\ aws_elasticache_subnet_group
|
||||||
\ aws_elasticsearch_domain
|
\ aws_elasticsearch_domain
|
||||||
|
\ aws_elasticsearch_domain_policy
|
||||||
\ aws_elastictranscoder_pipeline
|
\ aws_elastictranscoder_pipeline
|
||||||
\ aws_elastictranscoder_preset
|
\ aws_elastictranscoder_preset
|
||||||
\ aws_elb
|
\ aws_elb
|
||||||
@ -174,6 +218,9 @@ syn keyword terraResourceTypeBI
|
|||||||
\ aws_iam_user_policy
|
\ aws_iam_user_policy
|
||||||
\ aws_iam_user_policy_attachment
|
\ aws_iam_user_policy_attachment
|
||||||
\ aws_iam_user_ssh_key
|
\ aws_iam_user_ssh_key
|
||||||
|
\ aws_inspector_assessment_target
|
||||||
|
\ aws_inspector_assessment_template
|
||||||
|
\ aws_inspector_resource_group
|
||||||
\ aws_instance
|
\ aws_instance
|
||||||
\ aws_internet_gateway
|
\ aws_internet_gateway
|
||||||
\ aws_key_pair
|
\ aws_key_pair
|
||||||
@ -244,6 +291,8 @@ syn keyword terraResourceTypeBI
|
|||||||
\ aws_ses_receipt_filter
|
\ aws_ses_receipt_filter
|
||||||
\ aws_ses_receipt_rule
|
\ aws_ses_receipt_rule
|
||||||
\ aws_ses_receipt_rule_set
|
\ aws_ses_receipt_rule_set
|
||||||
|
\ aws_sfn_activity
|
||||||
|
\ aws_sfn_state_machine
|
||||||
\ aws_simpledb_domain
|
\ aws_simpledb_domain
|
||||||
\ aws_snapshot_create_volume_permission
|
\ aws_snapshot_create_volume_permission
|
||||||
\ aws_sns_topic
|
\ aws_sns_topic
|
||||||
@ -265,6 +314,7 @@ syn keyword terraResourceTypeBI
|
|||||||
\ aws_vpc_endpoint
|
\ aws_vpc_endpoint
|
||||||
\ aws_vpc_endpoint_route_table_association
|
\ aws_vpc_endpoint_route_table_association
|
||||||
\ aws_vpc_peering_connection
|
\ aws_vpc_peering_connection
|
||||||
|
\ aws_vpc_peering_connection_accepter
|
||||||
\ aws_vpn_connection
|
\ aws_vpn_connection
|
||||||
\ aws_vpn_connection_route
|
\ aws_vpn_connection_route
|
||||||
\ aws_vpn_gateway
|
\ aws_vpn_gateway
|
||||||
@ -296,6 +346,7 @@ syn keyword terraResourceTypeBI
|
|||||||
\ azurerm_cdn_endpoint
|
\ azurerm_cdn_endpoint
|
||||||
\ azurerm_cdn_profile
|
\ azurerm_cdn_profile
|
||||||
\ azurerm_container_registry
|
\ azurerm_container_registry
|
||||||
|
\ azurerm_container_service
|
||||||
\ azurerm_dns_a_record
|
\ azurerm_dns_a_record
|
||||||
\ azurerm_dns_aaaa_record
|
\ azurerm_dns_aaaa_record
|
||||||
\ azurerm_dns_cname_record
|
\ azurerm_dns_cname_record
|
||||||
@ -455,6 +506,8 @@ syn keyword terraResourceTypeBI
|
|||||||
\ google_dns_managed_zone
|
\ google_dns_managed_zone
|
||||||
\ google_dns_record_set
|
\ google_dns_record_set
|
||||||
\ google_project
|
\ google_project
|
||||||
|
\ google_project_iam_policy
|
||||||
|
\ google_project_services
|
||||||
\ google_pubsub_subscription
|
\ google_pubsub_subscription
|
||||||
\ google_pubsub_topic
|
\ google_pubsub_topic
|
||||||
\ google_service_account
|
\ google_service_account
|
||||||
@ -539,6 +592,7 @@ syn keyword terraResourceTypeBI
|
|||||||
\ packet_project
|
\ packet_project
|
||||||
\ packet_ssh_key
|
\ packet_ssh_key
|
||||||
\ packet_volume
|
\ packet_volume
|
||||||
|
\ pagerduty_addon
|
||||||
\ pagerduty_escalation_policy
|
\ pagerduty_escalation_policy
|
||||||
\ pagerduty_schedule
|
\ pagerduty_schedule
|
||||||
\ pagerduty_service
|
\ pagerduty_service
|
||||||
@ -550,6 +604,14 @@ syn keyword terraResourceTypeBI
|
|||||||
\ postgresql_role
|
\ postgresql_role
|
||||||
\ postgresql_schema
|
\ postgresql_schema
|
||||||
\ powerdns_record
|
\ powerdns_record
|
||||||
|
\ profitbricks_datacenter
|
||||||
|
\ profitbricks_firewall
|
||||||
|
\ profitbricks_ipblock
|
||||||
|
\ profitbricks_lan
|
||||||
|
\ profitbricks_loadbalancer
|
||||||
|
\ profitbricks_nic
|
||||||
|
\ profitbricks_server
|
||||||
|
\ profitbricks_volume
|
||||||
\ rabbitmq_binding
|
\ rabbitmq_binding
|
||||||
\ rabbitmq_exchange
|
\ rabbitmq_exchange
|
||||||
\ rabbitmq_permissions
|
\ rabbitmq_permissions
|
||||||
@ -642,7 +704,7 @@ syn match terraBraces "[{}\[\]]"
|
|||||||
syn region terraValueString start=/"/ skip=/\\\+"/ end=/"/ contains=terraStringInterp
|
syn region terraValueString start=/"/ skip=/\\\+"/ end=/"/ contains=terraStringInterp
|
||||||
syn region terraStringInterp matchgroup=terraBrackets start=/\${/ end=/}/ contains=terraValueFunction contained
|
syn region terraStringInterp matchgroup=terraBrackets start=/\${/ end=/}/ contains=terraValueFunction contained
|
||||||
"" TODO match keywords here, not a-z+
|
"" TODO match keywords here, not a-z+
|
||||||
syn region terraValueFunction matchgroup=terraBrackets start=/[a-z]\+(/ end=/)/ contains=terraValueString,terraValueFunction contained
|
syn region terraValueFunction matchgroup=terraBrackets start=/[0-9a-z]\+(/ end=/)/ contains=terraValueString,terraValueFunction contained
|
||||||
|
|
||||||
hi def link terraComment Comment
|
hi def link terraComment Comment
|
||||||
hi def link terraTodo Todo
|
hi def link terraTodo Todo
|
||||||
|
@ -124,7 +124,7 @@ syntax keyword typescriptGlobalObjects Array Boolean Date Function Infinity Math
|
|||||||
|
|
||||||
syntax keyword typescriptExceptions try catch throw finally Error EvalError RangeError ReferenceError SyntaxError TypeError URIError
|
syntax keyword typescriptExceptions try catch throw finally Error EvalError RangeError ReferenceError SyntaxError TypeError URIError
|
||||||
|
|
||||||
syntax keyword typescriptReserved constructor declare as interface module abstract enum int short export interface static byte extends long super char final native synchronized class float package throws goto private transient debugger implements protected volatile double import public type namespace from get set
|
syntax keyword typescriptReserved constructor declare as interface module abstract enum int short export interface static byte extends long super char final native synchronized class float package throws goto private transient debugger implements protected volatile double import public type namespace from get set keyof
|
||||||
"}}}
|
"}}}
|
||||||
"" typescript/DOM/HTML/CSS specified things"{{{
|
"" typescript/DOM/HTML/CSS specified things"{{{
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ syntax keyword typescriptReserved constructor declare as interface module abstra
|
|||||||
syn match typescriptParameters "([a-zA-Z0-9_?.$][\w?.$]*)\s*:\s*([a-zA-Z0-9_?.$][\w?.$]*)" contained skipwhite
|
syn match typescriptParameters "([a-zA-Z0-9_?.$][\w?.$]*)\s*:\s*([a-zA-Z0-9_?.$][\w?.$]*)" contained skipwhite
|
||||||
"}}}
|
"}}}
|
||||||
" DOM2 Objects"{{{
|
" DOM2 Objects"{{{
|
||||||
syntax keyword typescriptType DOMImplementation DocumentFragment Node NodeList NamedNodeMap CharacterData Attr Element Text Comment CDATASection DocumentType Notation Entity EntityReference ProcessingInstruction void any string boolean number symbol never
|
syntax keyword typescriptType DOMImplementation DocumentFragment Node NodeList NamedNodeMap CharacterData Attr Element Text Comment CDATASection DocumentType Notation Entity EntityReference ProcessingInstruction void any string boolean number symbol never object
|
||||||
syntax keyword typescriptExceptions DOMException
|
syntax keyword typescriptExceptions DOMException
|
||||||
"}}}
|
"}}}
|
||||||
" DOM2 CONSTANT"{{{
|
" DOM2 CONSTANT"{{{
|
||||||
|
@ -7,7 +7,6 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vala') == -1
|
|||||||
" pancake <pancake@nopcode.org>
|
" pancake <pancake@nopcode.org>
|
||||||
" Sebastian Reichel <sre@ring0.de>
|
" Sebastian Reichel <sre@ring0.de>
|
||||||
" Adrià Arrufat <adria.arrufat@protonmail.ch>
|
" Adrià Arrufat <adria.arrufat@protonmail.ch>
|
||||||
" Last Change: 2016-10-20
|
|
||||||
" Filenames: *.vala *.vapi *.valadoc
|
" Filenames: *.vala *.vapi *.valadoc
|
||||||
"
|
"
|
||||||
" REFERENCES:
|
" REFERENCES:
|
||||||
@ -53,11 +52,13 @@ syn keyword valaUnspecifiedStatement as base construct delete get in is lock new
|
|||||||
" Arrays and Lists
|
" Arrays and Lists
|
||||||
syn match valaArray "\(\w\(\w\)*\(\s\+\)\?<\)\+\(\(\s\+\)\?\w\(\w\)*\(?\|\*\)\?\(\,\)\?\)\+>\+"
|
syn match valaArray "\(\w\(\w\)*\(\s\+\)\?<\)\+\(\(\s\+\)\?\w\(\w\)*\(?\|\*\)\?\(\,\)\?\)\+>\+"
|
||||||
" Methods
|
" Methods
|
||||||
syn match valaMethod "\w\(\w\)*\(\s\+\)\?("he=e-1,me=e-1
|
syn match valaMethod "\(@\)\?\w\(\w\)*\(\s\+\)\?("he=e-1,me=e-1
|
||||||
" Operators
|
" Operators
|
||||||
syn match valaOperator display "\%(+\|-\|/\|*\|=\|\^\|&\||\|!\|>\|<\|%\|?\)=\?"
|
syn match valaOperator display "\%(+\|-\|/\|*\|=\|\^\|&\||\|!\|>\|<\|%\|?\)=\?"
|
||||||
" Delimiters
|
" Delimiters
|
||||||
syn match valaDelimiter display "(\|)\|\[\|\]\|,\|;\|:\|{\|}\|\k\@<!_\k\@!\|[[:punct:]]\@<!@[[:punct:]]\@!"
|
syn match valaDelimiter display "(\|)\|\[\|\]\|,\|;\|:\|{\|}\|\k\@<!_\k\@!\|[[:punct:]]\@<!@[[:punct:]]\@!"
|
||||||
|
" Enum Fields
|
||||||
|
syn match valaEnumField "\.\([A-Z_]\)\+\([A-Z_]\)\+"hs=s+1 " ensure there are at least 2 CAPS
|
||||||
|
|
||||||
" Comments
|
" Comments
|
||||||
syn cluster valaCommentGroup contains=valaTodo
|
syn cluster valaCommentGroup contains=valaTodo
|
||||||
@ -67,9 +68,9 @@ syn keyword valaTodo contained TODO FIXME XXX NOTE
|
|||||||
if !exists("vala_ignore_valadoc")
|
if !exists("vala_ignore_valadoc")
|
||||||
syn cluster valaDocCommentGroup contains=valaDocTags,valaDocSeeTag
|
syn cluster valaDocCommentGroup contains=valaDocTags,valaDocSeeTag
|
||||||
syn region valaDocTags contained start="{@\(link\|inherit[Dd]oc\)" end="}"
|
syn region valaDocTags contained start="{@\(link\|inherit[Dd]oc\)" end="}"
|
||||||
syn match valaDocTags contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=valaDocParam
|
syn match valaDocTags contained "@\(param\|exception\|throws\|since\|[Vv]ersion\)\s\+\S\+" contains=valaDocParam
|
||||||
syn match valaDocParam contained "\s\S\+"
|
syn match valaDocParam contained "\s\S\+"
|
||||||
syn match valaDocTags contained "@\(return\|deprecated\)\>"
|
syn match valaDocTags contained "@\(return\)\>"
|
||||||
syn region valaDocSeeTag contained matchgroup=valaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=valaDocSeeTagParam
|
syn region valaDocSeeTag contained matchgroup=valaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=valaDocSeeTagParam
|
||||||
syn match valaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
|
syn match valaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
|
||||||
endif
|
endif
|
||||||
@ -110,6 +111,9 @@ syntax match valaCommentStartError display "/\*"me=e-1 contained
|
|||||||
" match the special comment /**/
|
" match the special comment /**/
|
||||||
syn match valaComment "/\*\*/"
|
syn match valaComment "/\*\*/"
|
||||||
|
|
||||||
|
" comment script lines
|
||||||
|
syn region valaScript start="^#!" end="$"
|
||||||
|
|
||||||
" Vala Code Attributes
|
" Vala Code Attributes
|
||||||
syn region valaAttribute start="^\s*\[" end="\]" contains=valaComment,valaString keepend
|
syn region valaAttribute start="^\s*\[" end="\]" contains=valaComment,valaString keepend
|
||||||
syn region valaAttribute start="\[CCode" end="\]" contains=valaComment,valaString
|
syn region valaAttribute start="\[CCode" end="\]" contains=valaComment,valaString
|
||||||
@ -175,6 +179,7 @@ hi def link valaArray StorageClass
|
|||||||
hi def link valaMethod Function
|
hi def link valaMethod Function
|
||||||
hi def link valaOperator Operator
|
hi def link valaOperator Operator
|
||||||
hi def link valaDelimiter Delimiter
|
hi def link valaDelimiter Delimiter
|
||||||
|
hi def link valaEnumField Constant
|
||||||
|
|
||||||
hi def link valaCommentError Error
|
hi def link valaCommentError Error
|
||||||
hi def link valaCommentStartError Error
|
hi def link valaCommentStartError Error
|
||||||
@ -187,6 +192,7 @@ hi def link valaCommentL valaComment
|
|||||||
hi def link valaCommentStart valaComment
|
hi def link valaCommentStart valaComment
|
||||||
hi def link valaCommentSkip valaComment
|
hi def link valaCommentSkip valaComment
|
||||||
hi def link valaComment Comment
|
hi def link valaComment Comment
|
||||||
|
hi def link valaScript Comment
|
||||||
hi def link valaDocComment Comment
|
hi def link valaDocComment Comment
|
||||||
hi def link valaDocTags Special
|
hi def link valaDocTags Special
|
||||||
hi def link valaDocParam Function
|
hi def link valaDocParam Function
|
||||||
|
@ -27,84 +27,70 @@ if !exists("s:syntaxes")
|
|||||||
return syntaxes
|
return syntaxes
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let s:syntaxes = s:search_syntaxes('pug', 'slm', 'coffee', 'stylus', 'sass', 'scss', 'less')
|
let s:syntaxes = s:search_syntaxes('pug', 'slm', 'coffee', 'stylus', 'sass', 'scss', 'less', 'typescript')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
syntax include @HTML syntax/html.vim
|
syntax include @HTML syntax/html.vim
|
||||||
if exists("b:current_syntax")
|
unlet! b:current_syntax
|
||||||
unlet b:current_syntax
|
syntax region html keepend start=/^<template\_[^>]*>/ end=/^<\/template>/ contains=@HTML fold
|
||||||
endif
|
|
||||||
syntax region html keepend start=/^<template>/ end=/^<\/template>/ contains=@HTML fold
|
|
||||||
|
|
||||||
if s:syntaxes.pug
|
if s:syntaxes.pug
|
||||||
syntax include @PUG syntax/pug.vim
|
syntax include @PUG syntax/pug.vim
|
||||||
if exists("b:current_syntax")
|
unlet! b:current_syntax
|
||||||
unlet b:current_syntax
|
|
||||||
endif
|
|
||||||
syntax region pug keepend start=/<template lang=\("\|'\)[^\1]*pug[^\1]*\1>/ end="</template>" contains=@PUG fold
|
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
|
syntax region pug keepend start=/<template lang=\("\|'\)[^\1]*jade[^\1]*\1>/ end="</template>" contains=@PUG fold
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if s:syntaxes.slm
|
if s:syntaxes.slm
|
||||||
syntax include @SLM syntax/slm.vim
|
syntax include @SLM syntax/slm.vim
|
||||||
if exists("b:current_syntax")
|
unlet! b:current_syntax
|
||||||
unlet b:current_syntax
|
|
||||||
endif
|
|
||||||
syntax region slm keepend start=/<template lang=\("\|'\)[^\1]*slm[^\1]*\1>/ end="</template>" contains=@SLM fold
|
syntax region slm keepend start=/<template lang=\("\|'\)[^\1]*slm[^\1]*\1>/ end="</template>" contains=@SLM fold
|
||||||
endif
|
endif
|
||||||
|
|
||||||
syntax include @JS syntax/javascript.vim
|
syntax include @JS syntax/javascript.vim
|
||||||
if exists("b:current_syntax")
|
unlet! b:current_syntax
|
||||||
unlet b:current_syntax
|
|
||||||
endif
|
|
||||||
syntax region javascript keepend matchgroup=Delimiter start=/<script\( lang="babel"\)\?\( type="text\/babel"\)\?>/ end="</script>" contains=@JS fold
|
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
|
if s:syntaxes.coffee
|
||||||
syntax include @COFFEE syntax/coffee.vim
|
syntax include @COFFEE syntax/coffee.vim
|
||||||
if exists("b:current_syntax")
|
unlet! b:current_syntax
|
||||||
unlet b:current_syntax
|
|
||||||
endif
|
|
||||||
" Matchgroup seems to be necessary for coffee
|
" Matchgroup seems to be necessary for coffee
|
||||||
syntax region coffee keepend matchgroup=Delimiter start="<script lang=\"coffee\">" end="</script>" contains=@COFFEE fold
|
syntax region coffee keepend matchgroup=Delimiter start="<script lang=\"coffee\">" end="</script>" contains=@COFFEE fold
|
||||||
endif
|
endif
|
||||||
|
|
||||||
syntax include @CSS syntax/css.vim
|
syntax include @CSS syntax/css.vim
|
||||||
if exists("b:current_syntax")
|
unlet! b:current_syntax
|
||||||
unlet b:current_syntax
|
syntax region css keepend start=/<style\_[^>]*>/ end="</style>" contains=@CSS fold
|
||||||
endif
|
|
||||||
syntax region css keepend start=/<style\( \+scoped\)\?>/ end="</style>" contains=@CSS fold
|
|
||||||
|
|
||||||
if s:syntaxes.stylus
|
if s:syntaxes.stylus
|
||||||
syntax include @stylus syntax/stylus.vim
|
syntax include @stylus syntax/stylus.vim
|
||||||
if exists("b:current_syntax")
|
unlet! b:current_syntax
|
||||||
unlet b:current_syntax
|
syntax region stylus keepend start=/<style \_[^>]*lang=\("\|'\)[^\1]*stylus[^\1]*\1\_[^>]*>/ end="</style>" contains=@stylus fold
|
||||||
endif
|
|
||||||
syntax region stylus keepend start=/<style lang=\("\|'\)[^\1]*stylus[^\1]*\1\( \+scoped\)\?>/ end="</style>" contains=@stylus fold
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if s:syntaxes.sass
|
if s:syntaxes.sass
|
||||||
syntax include @sass syntax/sass.vim
|
syntax include @sass syntax/sass.vim
|
||||||
if exists("b:current_syntax")
|
unlet! b:current_syntax
|
||||||
unlet b:current_syntax
|
syntax region sass keepend start=/<style \_[^>]*lang=\("\|'\)[^\1]*sass[^\1]*\1\_[^>]*>/ end="</style>" contains=@sass fold
|
||||||
endif
|
|
||||||
syntax region sass keepend start=/<style\( \+scoped\)\? lang=\("\|'\)[^\1]*sass[^\1]*\1\( \+scoped\)\?>/ end="</style>" contains=@sass fold
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if s:syntaxes.scss
|
if s:syntaxes.scss
|
||||||
syntax include @scss syntax/scss.vim
|
syntax include @scss syntax/scss.vim
|
||||||
if exists("b:current_syntax")
|
unlet! b:current_syntax
|
||||||
unlet b:current_syntax
|
syntax region scss keepend start=/<style \_[^>]*lang=\("\|'\)[^\1]*scss[^\1]*\1\_[^>]*>/ end="</style>" contains=@scss fold
|
||||||
endif
|
|
||||||
syntax region scss keepend start=/<style\( \+scoped\)\? lang=\("\|'\)[^\1]*scss[^\1]*\1\( \+scoped\)\?>/ end="</style>" contains=@scss fold
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if s:syntaxes.less
|
if s:syntaxes.less
|
||||||
syntax include @less syntax/less.vim
|
syntax include @less syntax/less.vim
|
||||||
if exists("b:current_syntax")
|
unlet! b:current_syntax
|
||||||
unlet b:current_syntax
|
syntax region less keepend matchgroup=PreProc start=/<style \_[^>]*lang=\("\|'\)[^\1]*less[^\1]*\1\_[^>]*>/ end="</style>" contains=@less fold
|
||||||
endif
|
|
||||||
syntax region less keepend matchgroup=PreProc start=/<style\%( \+scoped\)\? lang=\("\|'\)[^\1]*less[^\1]*\1\%( \+scoped\)\?>/ end="</style>" contains=@less fold
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let b:current_syntax = "vue"
|
let b:current_syntax = "vue"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user