Skip to content
Browse files

add jade syntax highlightning

  • Loading branch information...
1 parent c4e091e commit b3ffa6e2cb5b95bb56b1098810b3fce9f977ede4 @nik-kor committed Aug 15, 2011
Showing with 190 additions and 0 deletions.
  1. +2 −0 ftdetect/jade.vim
  2. +53 −0 ftplugin/jade.vim
  3. +70 −0 indent/jade.vim
  4. +65 −0 syntax/jade.vim
View
2 ftdetect/jade.vim
@@ -0,0 +1,2 @@
+" Jade
+autocmd BufNewFile,BufReadPost *.jade set filetype=jade
View
53 ftplugin/jade.vim
@@ -0,0 +1,53 @@
+" Vim filetype plugin
+" Language: Jade
+" Maintainer: Joshua Borton
+" Credits: Tim Pope
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "All Files (*.*)\t*.*\n"
+let s:match_words = ""
+
+runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+unlet! b:did_ftplugin
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+ unlet b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+ unlet b:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words
+ unlet b:match_words
+endif
+
+" Change the browse dialog on Win32 to show mainly Haml-related files
+if has("gui_win32")
+ let b:browsefilter="Jade Files (*.jade)\t*.jade\n" . s:browsefilter
+endif
+
+" Load the combined list of match_words for matchit.vim
+if exists("loaded_matchit")
+ let b:match_words = s:match_words
+endif
+
+setlocal comments= commentstring=-#\ %s
+
+let b:undo_ftplugin = "setl cms< com< "
+ \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
+
+let &cpo = s:save_cpo
+
+" vim:set sw=2:
View
70 indent/jade.vim
@@ -0,0 +1,70 @@
+" Vim indent file
+" Language: Jade
+" Maintainer: Joshua Borton
+" Credits: Tim Pope (vim-jade)
+" Last Change: 2010 Sep 22
+
+if exists("b:did_indent")
+ finish
+endif
+
+unlet! b:did_indent
+let b:did_indent = 1
+
+setlocal autoindent sw=2 et
+setlocal indentexpr=GetJadeIndent()
+setlocal indentkeys=o,O,*<Return>,},],0),!^F
+
+" Only define the function once.
+if exists("*GetJadeIndent")
+ finish
+endif
+
+let s:attributes = '\%((.\{-\})\)'
+let s:tag = '\([%.#][[:alnum:]_-]\+\|'.s:attributes.'\)*[<>]*'
+
+if !exists('g:jade_self_closing_tags')
+ let g:jade_self_closing_tags = 'meta|link|img|hr|br'
+endif
+
+setlocal formatoptions+=r
+setlocal comments+=n:\|
+
+function! GetJadeIndent()
+ let lnum = prevnonblank(v:lnum-1)
+ if lnum == 0
+ return 0
+ endif
+ let line = substitute(getline(lnum),'\s\+$','','')
+ let cline = substitute(substitute(getline(v:lnum),'\s\+$','',''),'^\s\+','','')
+ let lastcol = strlen(line)
+ let line = substitute(line,'^\s\+','','')
+ let indent = indent(lnum)
+ let cindent = indent(v:lnum)
+ let increase = indent + &sw
+ if indent == indent(lnum)
+ let indent = cindent <= indent ? -1 : increase
+ endif
+
+ let group = synIDattr(synID(lnum,lastcol,1),'name')
+
+ if line =~ '^!!!'
+ return indent
+ elseif line =~ '^/\%(\[[^]]*\]\)\=$'
+ return increase
+ elseif group == 'jadeFilter'
+ return increase
+ elseif line =~ '^'.s:tag.'[&!]\=[=~-].*,\s*$'
+ return increase
+ elseif line == '-#'
+ return increase
+ elseif line =~? '^\v%('.g:jade_self_closing_tags.')>'
+ return indent
+ elseif group =~? '\v^%(jadeTag|jadeAttributesDelimiter|jadeClass|jadeId|htmlTagName|htmlSpecialTagName)$'
+ return increase
+ else
+ return indent
+ endif
+endfunction
+
+" vim:set sw=2:
View
65 syntax/jade.vim
@@ -0,0 +1,65 @@
+" Vim syntax file
+" Language: Jade
+" Maintainer: Joshua Borton
+" Credits: Tim Pope
+" Filenames: *.jade
+
+if exists("b:current_syntax")
+ finish
+endif
+
+if !exists("main_syntax")
+ let main_syntax = 'jade'
+endif
+
+runtime! syntax/html.vim
+unlet! b:current_syntax
+
+syn case match
+
+syn cluster jadeTop contains=jadeBegin,jadeComment
+syn match jadeBegin "^\s*\%([<>]\|&[^=~ ]\)\@!" nextgroup=jadeTag,jadeClassChar,jadeIdChar,jadePlainChar
+syn match jadeTag "\w\+\%(:\w\+\)\=" contained contains=htmlTagName,htmlSpecialTagName nextgroup=@jadeComponent
+syn cluster jadeComponent contains=jadeAttributes,jadeIdChar,jadeClassChar,jadePlainChar
+syn match jadeComment ' *\/\/.*$'
+syn region jadeAttributes matchgroup=jadeAttributesDelimiter start="(" skip=+\%(\\\\\)*\\'+ end=")" contained contains=htmlArg,jadeAttributeString,htmlEvent,htmlCssDefinition nextgroup=@jadeComponent
+syn match jadeClassChar "\." contained nextgroup=jadeClass
+syn match jadeIdChar "#{\@!" contained nextgroup=jadeId
+syn match jadeClass "\%(\w\|-\)\+" contained nextgroup=@jadeComponent
+syn match jadeId "\%(\w\|-\)\+" contained nextgroup=@jadeComponent
+syn region jadeDocType start="^\s*!!!" end="$"
+
+syn match jadePlainChar "\\" contained
+syn region jadeInterpolation matchgroup=jadeInterpolationDelimiter start="#{" end="}" contains=@htmlJavaScript
+syn match jadeInterpolationEscape "\\\@<!\%(\\\\\)*\\\%(\\\ze#{\|#\ze{\)"
+
+syn region jadeAttributeString start=+\%(=\s*\)\@<='+ skip=+\%(\\\\\)*\\'+ end=+'+ contains=jadeInterpolation
+syn region jadeAttributeString start=+\%(:\s*\)\@<='+ skip=+\%(\\\\\)*\\'+ end=+'+ contains=jadeInterpolation
+syn region jadeAttributeString start=+\%(=\s*\)\@<="+ skip=+\%(\\\\\)*\\'+ end=+"+ contains=jadeInterpolation
+syn region jadeAttributeString start=+\%(:\s*\)\@<="+ skip=+\%(\\\\\)*\\'+ end=+"+ contains=jadeInterpolation
+
+syn region jadeJavascriptFilter matchgroup=jadeFilter start="^\z(\s*\):javascript\s*$" end="^\%(\z1 \| *$\)\@!" contains=@htmlJavaScript
+syn region jadeMarkdownFilter matchgroup=jadeFilter start="^\z(\s*\):markdown\s*$" end="^\%(\z1 \| *$\)\@!"
+
+syn region jadeJavascriptBlock start="^\z(\s*\)script" nextgroup=@jadeComponent,jadeError end="^\%(\z1 \| *$\)\@!" contains=@jadeTop,@htmlJavascript keepend
+syn region jadeCssBlock start="^\z(\s*\)style" nextgroup=@jadeComponent,jadeError end="^\%(\z1 \| *$\)\@!" contains=@jadeTop,@htmlCss keepend
+
+syn match jadeError "\$" contained
+
+hi def link jadeTag Special
+hi def link jadeAttributeString String
+hi def link jadeAttributesDelimiter Identifier
+hi def link jadeIdChar Special
+hi def link jadeClassChar Special
+hi def link jadeId Identifier
+hi def link jadeClass Type
+hi def link jadeInterpolationDelimiter Delimiter
+hi def link jadeFilter PreProc
+hi def link jadeDocType PreProc
+hi def link jadeComment Comment
+
+let b:current_syntax = "jade"
+
+if main_syntax == "jade"
+ unlet main_syntax
+endif

0 comments on commit b3ffa6e

Please sign in to comment.
Something went wrong with that request. Please try again.