if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'pug') != -1 finish endif " Vim syntax file " Language: Pug " Maintainer: Joshua Borton " Credits: Tim Pope " Filenames: *.pug if exists("b:current_syntax") finish endif if !exists("main_syntax") let main_syntax = 'pug' endif silent! syntax include @htmlCoffeescript syntax/coffee.vim unlet! b:current_syntax silent! syntax include @htmlStylus syntax/stylus.vim unlet! b:current_syntax silent! syntax include @htmlCss syntax/css.vim unlet! b:current_syntax silent! syntax include @htmlMarkdown syntax/markdown.vim unlet! b:current_syntax syn case match syn region javascriptParenthesisBlock start="(" end=")" contains=@htmlJavascript contained keepend syn cluster htmlJavascript add=javascriptParenthesisBlock syn region pugJavascript matchgroup=pugJavascriptOutputChar 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 match pugBegin "^\s*\%([<>]\|&[^=~ ]\)\@!" nextgroup=pugTag,pugClassChar,pugIdChar,pugPlainChar,pugJavascript,pugScriptConditional,pugScriptStatement,pugPipedText syn match pugTag "+\?[[:alnum:]_-]\+\%(:\w\+\)\=" contained contains=htmlTagName,htmlSpecialTagName,pugJavascript nextgroup=@pugComponent syn cluster pugComponent contains=pugAttributes,pugIdChar,pugBlockExpansionChar,pugClassChar,pugPlainChar,pugJavascript,pugTagBlockChar,pugTagInlineText syn keyword pugCommentTodo contained TODO FIXME XXX TBD syn match pugComment '\(\s\+\|^\)\/\/.*$' contains=pugCommentTodo,@Spell syn region pugCommentBlock start="\z(\s\+\|^\)\/\/.*$" end="^\%(\z1\s\|\s*$\)\@!" contains=pugCommentTodo,@Spell keepend syn region pugHtmlConditionalComment start="" contains=pugCommentTodo,@Spell syn region pugAngular2 start="(" end=")" contains=htmlEvent syn region pugJavascriptString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contained syn region pugJavascriptString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contained syn region pugJavascriptString start=+`+ skip=+\\\(`\|$\)+ end=+`\|$+ contains=javascriptInterpolation contained syn region pugAttributes matchgroup=pugAttributesDelimiter start="(" end="\(.\zs)\)\|)" contained contains=pugJavascriptString,pugHtmlArg,pugAngular2,htmlArg,htmlEvent,htmlCssDefinition nextgroup=@pugComponent syn match pugClassChar "\." containedin=htmlTagName nextgroup=pugClass syn match pugBlockExpansionChar ":\s\+" contained nextgroup=pugTag,pugClassChar,pugIdChar syn match pugIdChar "#[[{]\@!" contained nextgroup=pugId syn match pugClass "\%(\w\|-\)\+" contained nextgroup=@pugComponent syn match pugId "\%(\w\|-\)\+" contained nextgroup=@pugComponent syn region pugDocType start="^\s*\(!!!\|doctype\)" end="$" " Unless I'm mistaken, syntax/html.vim requires " that the = sign be present for these matches. " This adds the matches back for pug. syn keyword pugHtmlArg contained href title syn match pugPlainChar "\\" contained syn region pugInterpolation matchgroup=pugInterpolationDelimiter start="[#!]{" end="}" contains=@htmlJavascript syn match pugInterpolationEscape "\\\@[?!]\@!" syn match pugScriptStatement "^\s*\<\%(each\|for\|block\|prepend\|append\|mixin\|extends\|include\)\>[?!]\@!" syn region pugScriptLoopRegion start="^\s*\(for\|each\)" end="$" contains=pugScriptLoopKeywords syn keyword pugScriptLoopKeywords contained for each in syn region pugJavascript start="^\z(\s*\)script\%(:\w\+\)\=" end="^\%(\z1\s\|\s*$\)\@!" contains=@htmlJavascript,pugJavascriptTag,pugCoffeescriptFilter keepend syn region javascriptInterpolation start=/${/ end=/}/ contained syn region pugCoffeescriptFilter matchgroup=pugFilter start="^\z(\s*\):coffee-\?script\s*$" end="^\%(\z1\s\|\s*$\)\@!" contains=@htmlCoffeescript contained syn region pugJavascriptTag contained start="^\z(\s*\)script\%(:\w\+\)\=" end="$" contains=pugBegin,pugTag syn region pugCssBlock start="^\z(\s*\)style" nextgroup=@pugComponent,pugError end="^\%(\z1\s\|\s*$\)\@!" contains=@htmlCss keepend syn match pugError "\$" contained hi def link pugPlainChar Special hi def link pugScriptConditional PreProc hi def link pugScriptLoopKeywords PreProc hi def link pugScriptStatement PreProc hi def link pugHtmlArg htmlArg hi def link pugAttributeString String hi def link pugAttributesDelimiter Identifier hi def link pugIdChar Special hi def link pugClassChar Special hi def link pugBlockExpansionChar Special hi def link pugPipeChar Special hi def link pugTagBlockChar Special hi def link pugId Identifier hi def link pugClass Type hi def link pugInterpolationDelimiter Delimiter hi def link pugInlineDelimiter Delimiter hi def link pugFilter PreProc hi def link pugDocType PreProc hi def link pugCommentTodo Todo hi def link pugComment Comment hi def link pugCommentBlock Comment hi def link pugHtmlConditionalComment pugComment hi def link pugJavascriptString String hi def link javascriptInterpolation Delimiter let b:current_syntax = "pug" if main_syntax == "pug" unlet main_syntax endif