This commit is contained in:
Adam Stankiewicz 2017-03-23 11:28:19 +01:00
parent 9f735b1fe7
commit 0801eac01a
No known key found for this signature in database
GPG Key ID: A62480DCEAC884DF
45 changed files with 2015 additions and 1258 deletions

View File

@ -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

View File

@ -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
" ----------------------------------------------------------------------------- " -----------------------------------------------------------------------------

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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', ''],

View File

@ -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': [
\ [], \ [],

View File

@ -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

View File

@ -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\)\>' .
\ ':' . \ ':' .

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -11,4 +11,6 @@ endif
runtime! ftplugin/html.vim runtime! ftplugin/html.vim
setlocal suffixesadd+=.vue
endif endif

View File

@ -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

View File

@ -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

View File

@ -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*$'

View File

@ -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

View File

@ -4,7 +4,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') ==
" Language: Javascript " Language: Javascript
" Maintainer: Chris Paul ( https://github.com/bounceme ) " Maintainer: Chris Paul ( https://github.com/bounceme )
" URL: https://github.com/pangloss/vim-javascript " URL: https://github.com/pangloss/vim-javascript
" Last Change: 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
View 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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/

View File

@ -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
View 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

View File

@ -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

View File

@ -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

View File

@ -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
View 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"{{{

View File

@ -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

View File

@ -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"