summaryrefslogtreecommitdiffstats
path: root/after/indent/html.vim
blob: a71135145a01515551af2af9ddb99613e4b72d46 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'coffee-script') == -1
  
" Language:    CoffeeScript
" Maintainer:  Mick Koch <mick@kochm.co>
" URL:         http://github.com/kchmck/vim-coffee-script
" License:     WTFPL

" Load the coffee and html indent functions.
silent! unlet b:did_indent
runtime indent/coffee.vim
let s:coffeeIndentExpr = &l:indentexpr

" Load html last so it can overwrite coffee settings.
silent! unlet b:did_indent
runtime indent/html.vim
let s:htmlIndentExpr = &l:indentexpr

" Inject our wrapper indent function.
setlocal indentexpr=GetCoffeeHtmlIndent(v:lnum)

function! GetCoffeeHtmlIndent(curlinenum)
  " See if we're inside a coffeescript block.
  let scriptlnum = searchpair('<script [^>]*type="text/coffeescript"[^>]*>', '',
  \                           '</script>', 'bWn')
  let prevlnum = prevnonblank(a:curlinenum)

  " If we're in the script block and the previous line isn't the script tag
  " itself, use coffee indenting.
  if scriptlnum && scriptlnum != prevlnum
    exec 'return ' s:coffeeIndentExpr
  endif

  " Otherwise use html indenting.
  exec 'return ' s:htmlIndentExpr
endfunction

endif