diff options
author | Adam Stankiewicz <sheerun@sher.pl> | 2017-05-17 11:07:28 +0200 |
---|---|---|
committer | Adam Stankiewicz <sheerun@sher.pl> | 2017-05-17 11:07:28 +0200 |
commit | af870100716f20ee4daef9cc527a9ecf41b54114 (patch) | |
tree | 0859464c3145682cbfc29ad08de4527dd661abf7 /syntax/vue.vim | |
parent | ef369d45a505403587ea0bae30ce6768ba51398c (diff) | |
download | vim-polyglot-af870100716f20ee4daef9cc527a9ecf41b54114.tar.gz vim-polyglot-af870100716f20ee4daef9cc527a9ecf41b54114.zip |
Update
Diffstat (limited to 'syntax/vue.vim')
-rw-r--r-- | syntax/vue.vim | 129 |
1 files changed, 47 insertions, 82 deletions
diff --git a/syntax/vue.vim b/syntax/vue.vim index a3ab794c..bb9590e3 100644 --- a/syntax/vue.vim +++ b/syntax/vue.vim @@ -8,90 +8,55 @@ if exists("b:current_syntax") finish endif -if !exists("s:syntaxes") - " Search available syntax files. - function s:search_syntaxes(...) - let syntaxes = {} - let names = a:000 - for name in names - let syntaxes[name] = 0 - endfor - - for path in split(&runtimepath, ',') - if isdirectory(path . '/syntax') - for name in names - let syntaxes[name] = syntaxes[name] || filereadable(path . '/syntax/' . name . '.vim') - endfor - endif - endfor - return syntaxes - endfunction - - let s:syntaxes = s:search_syntaxes('pug', 'slm', 'coffee', 'stylus', 'sass', 'scss', 'less', 'typescript') -endif - - -syntax include @HTML syntax/html.vim -unlet! b:current_syntax -syntax region html keepend start=/^<template\_[^>]*>/ end=/^<\/template>/ contains=@HTML fold - -if s:syntaxes.pug - syntax include @PUG syntax/pug.vim - unlet! b:current_syntax - syntax region pug keepend start=/<template lang=\("\|'\)[^\1]*pug[^\1]*\1>/ end="</template>" contains=@PUG fold - syntax region pug keepend start=/<template lang=\("\|'\)[^\1]*jade[^\1]*\1>/ end="</template>" contains=@PUG fold -endif - -if s:syntaxes.slm - syntax include @SLM syntax/slm.vim - unlet! b:current_syntax - syntax region slm keepend start=/<template lang=\("\|'\)[^\1]*slm[^\1]*\1>/ end="</template>" contains=@SLM fold -endif - -syntax include @JS syntax/javascript.vim -unlet! b:current_syntax -syntax region javascript keepend matchgroup=Delimiter start=/<script\( lang="babel"\)\?\( type="text\/babel"\)\?>/ end="</script>" contains=@JS fold - -if s:syntaxes.typescript - syntax include @TS syntax/typescript.vim - unlet! b:current_syntax - syntax region typescript keepend matchgroup=Delimiter start=/<script \_[^>]*\(lang=\("\|'\)[^\2]*\(ts\|typescript\)[^\2]*\2\|ts\)\_[^>]*>/ end="</script>" contains=@TS fold -endif - -if s:syntaxes.coffee - syntax include @COFFEE syntax/coffee.vim - unlet! b:current_syntax - " Matchgroup seems to be necessary for coffee - syntax region coffee keepend matchgroup=Delimiter start="<script lang=\"coffee\">" end="</script>" contains=@COFFEE fold -endif - -syntax include @CSS syntax/css.vim +runtime! syntax/html.vim unlet! b:current_syntax -syntax region css keepend start=/<style\_[^>]*>/ end="</style>" contains=@CSS fold - -if s:syntaxes.stylus - syntax include @stylus syntax/stylus.vim - unlet! b:current_syntax - syntax region stylus keepend start=/<style \_[^>]*lang=\("\|'\)[^\1]*stylus[^\1]*\1\_[^>]*>/ end="</style>" contains=@stylus fold -endif - -if s:syntaxes.sass - syntax include @sass syntax/sass.vim - unlet! b:current_syntax - syntax region sass keepend start=/<style \_[^>]*lang=\("\|'\)[^\1]*sass[^\1]*\1\_[^>]*>/ end="</style>" contains=@sass fold -endif -if s:syntaxes.scss - syntax include @scss syntax/scss.vim - unlet! b:current_syntax - syntax region scss keepend start=/<style \_[^>]*lang=\("\|'\)[^\1]*scss[^\1]*\1\_[^>]*>/ end="</style>" contains=@scss fold -endif - -if s:syntaxes.less - syntax include @less syntax/less.vim - unlet! b:current_syntax - syntax region less keepend matchgroup=PreProc start=/<style \_[^>]*lang=\("\|'\)[^\1]*less[^\1]*\1\_[^>]*>/ end="</style>" contains=@less fold -endif +"" +" Get the pattern for a HTML {name} attribute with {value}. +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')) +endfunction + +"" +" Register {language} for a given {tag}. If [attr_override] is given and not +" empty, it will be used for the attribute pattern. +function! s:register_language(language, tag, ...) + let attr_override = a:0 ? a:1 : '' + let attr = !empty(attr_override) ? attr_override : s:attr('lang', a:language) + + if s:syntax_available(a:language) + execute 'syntax include @' . a:language . ' syntax/' . a:language . '.vim' + unlet! b:current_syntax + execute 'syntax region vue_' . a:language + \ 'keepend' + \ 'start=/<' . a:tag . ' \_[^>]*' . attr . '\_[^>]*>/' + \ 'end="</' . a:tag . '>"me=s-1' + \ 'contains=@' . a:language . ',vueSurroundingTag' + \ 'fold' + endif +endfunction + +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') +call s:register_language('less', 'style') + +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 let b:current_syntax = "vue" |