diff options
author | Adam Stankiewicz <sheerun@sher.pl> | 2019-09-04 15:44:43 +0200 |
---|---|---|
committer | Adam Stankiewicz <sheerun@sher.pl> | 2019-09-04 15:44:43 +0200 |
commit | 664aa988f6d9cdb7b75218666fbe348c85ef8b29 (patch) | |
tree | 306173199576430e6133a1ed137bd80bbc2fb01b /syntax/vue.vim | |
parent | 3ddca5da461ebfaa82104f82e3cbf19d1c326ade (diff) | |
download | vim-polyglot-664aa988f6d9cdb7b75218666fbe348c85ef8b29.tar.gz vim-polyglot-664aa988f6d9cdb7b75218666fbe348c85ef8b29.zip |
Update
Diffstat (limited to 'syntax/vue.vim')
-rw-r--r-- | syntax/vue.vim | 75 |
1 files changed, 45 insertions, 30 deletions
diff --git a/syntax/vue.vim b/syntax/vue.vim index a7fd0733..5a054132 100644 --- a/syntax/vue.vim +++ b/syntax/vue.vim @@ -10,6 +10,11 @@ if exists("b:current_syntax") finish endif +" Convert deprecated variable to new one +if exists('g:vue_disable_pre_processors') && g:vue_disable_pre_processors + let g:vue_pre_processors = [] +endif + runtime! syntax/html.vim syntax clear htmlTagName syntax match htmlTagName contained "\<[a-zA-Z0-9:-]*\>" @@ -21,47 +26,57 @@ function! s:attr(name, value) return a:name . '=\("\|''\)[^\1]*' . a:value . '[^\1]*\1' endfunction -"" -" Check whether a syntax file for a given {language} exists. -function! s:syntax_available(language) - return !empty(globpath(&runtimepath, 'syntax/' . a:language . '.vim')) +function! s:should_register(language, start_pattern) + " Check whether a syntax file for {language} exists + if empty(globpath(&runtimepath, 'syntax/' . a:language . '.vim')) + return 0 + endif + + if exists('g:vue_pre_processors') + if type(g:vue_pre_processors) == v:t_list + return index(g:vue_pre_processors, s:language.name) != -1 + elseif g:vue_pre_processors is# 'detect_on_enter' + return search(a:start_pattern, 'n') != 0 + endif + endif + + return 1 endfunction -"" -" Register {language} for a given {tag}. If [attr_override] is given and not -" empty, it will be used for the attribute pattern. -function! s:register_language(language, tag, ...) - let attr_override = a:0 ? a:1 : '' - let attr = !empty(attr_override) ? attr_override : s:attr('lang', a:language) +let s:languages = [ + \ {'name': 'less', 'tag': 'style'}, + \ {'name': 'pug', 'tag': 'template', 'attr_pattern': s:attr('lang', '\%(pug\|jade\)')}, + \ {'name': 'slm', 'tag': 'template'}, + \ {'name': 'handlebars', 'tag': 'template'}, + \ {'name': 'haml', 'tag': 'template'}, + \ {'name': 'typescript', 'tag': 'script', 'attr_pattern': '\%(lang=\("\|''\)[^\1]*\(ts\|typescript\)[^\1]*\1\|ts\)'}, + \ {'name': 'coffee', 'tag': 'script'}, + \ {'name': 'stylus', 'tag': 'style'}, + \ {'name': 'sass', 'tag': 'style'}, + \ {'name': 'scss', 'tag': 'style'}, + \ ] + +for s:language in s:languages + let s:attr_pattern = has_key(s:language, 'attr_pattern') ? s:language.attr_pattern : s:attr('lang', s:language.name) + let s:start_pattern = '<' . s:language.tag . '\>\_[^>]*' . s:attr_pattern . '\_[^>]*>' - if s:syntax_available(a:language) - execute 'syntax include @' . a:language . ' syntax/' . a:language . '.vim' + if s:should_register(s:language.name, s:start_pattern) + execute 'syntax include @' . s:language.name . ' syntax/' . s:language.name . '.vim' unlet! b:current_syntax - execute 'syntax region vue_' . a:language + execute 'syntax region vue_' . s:language.name \ 'keepend' - \ 'start=/<' . a:tag . '\>\_[^>]*' . attr . '\_[^>]*>/' - \ 'end="</' . a:tag . '>"me=s-1' - \ 'contains=@' . a:language . ',vueSurroundingTag' + \ 'start=/' . s:start_pattern . '/' + \ 'end="</' . s:language.tag . '>"me=s-1' + \ 'contains=@' . s:language.name . ',vueSurroundingTag' \ 'fold' endif -endfunction - -if !exists("g:vue_disable_pre_processors") || !g:vue_disable_pre_processors - call s:register_language('less', 'style') - call s:register_language('pug', 'template', s:attr('lang', '\%(pug\|jade\)')) - call s:register_language('slm', 'template') - call s:register_language('handlebars', 'template') - call s:register_language('haml', 'template') - call s:register_language('typescript', 'script', '\%(lang=\("\|''\)[^\1]*\(ts\|typescript\)[^\1]*\1\|ts\)') - call s:register_language('coffee', 'script') - call s:register_language('stylus', 'style') - call s:register_language('sass', 'style') - call s:register_language('scss', 'style') -endif +endfor syn region vueSurroundingTag contained start=+<\(script\|style\|template\)+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent syn keyword htmlSpecialTagName contained template syn keyword htmlArg contained scoped ts syn match htmlArg "[@v:][-:.0-9_a-z]*\>" contained +syntax sync fromstart + let b:current_syntax = "vue" |