|
| 1 | +"============================================================================== |
| 2 | +" Description: Rainbow colors for parentheses, based on rainbow_parenthsis.vim |
| 3 | +" by Martin Krischik and others. |
| 4 | +" 2011-10-12: Use less code. Leave room for deeper levels. |
| 5 | +"============================================================================== |
| 6 | + |
| 7 | +let s:max = 16 |
| 8 | + |
| 9 | +func! rainbow_parentheses#activate() |
| 10 | + hi default level1c ctermfg=brown guifg=OrangeRed1 |
| 11 | + hi default level2c ctermfg=Darkblue guifg=LightGoldenRod1 |
| 12 | + hi default level3c ctermfg=darkgray guifg=DeepSkyBlue1 |
| 13 | + hi default level4c ctermfg=darkgreen guifg=HotPink1 |
| 14 | + hi default level5c ctermfg=darkcyan guifg=chartreuse1 |
| 15 | + hi default level6c ctermfg=darkred guifg=OrangeRed1 |
| 16 | + hi default level7c ctermfg=darkmagenta guifg=LightGoldenRod1 |
| 17 | + hi default level8c ctermfg=brown guifg=DeepSkyBlue1 |
| 18 | + hi default level9c ctermfg=gray guifg=HotPink1 |
| 19 | + hi default level10c ctermfg=black guifg=chartreuse1 |
| 20 | + hi default level11c ctermfg=darkmagenta guifg=OrangeRed1 |
| 21 | + hi default level12c ctermfg=Darkblue guifg=LightGoldenRod1 |
| 22 | + hi default level13c ctermfg=darkgreen guifg=DeepSkyBlue1 |
| 23 | + hi default level14c ctermfg=darkcyan guifg=HotPink1 |
| 24 | + hi default level15c ctermfg=darkred guifg=chartreuse1 |
| 25 | + hi default level16c ctermfg=red guifg=Yellow |
| 26 | + let s:active = 1 |
| 27 | +endfunc |
| 28 | + |
| 29 | +func! rainbow_parentheses#clear() |
| 30 | + for each in range(s:max) |
| 31 | + exe 'hi clear level'.each.'c' |
| 32 | + endfor |
| 33 | + let s:active = 0 |
| 34 | +endfunc |
| 35 | + |
| 36 | +func! rainbow_parentheses#toggle() |
| 37 | + if !exists('s:active') |
| 38 | + cal rainbow_parentheses#load('(',')') |
| 39 | + endif |
| 40 | + if s:active != 0 |
| 41 | + cal rainbow_parentheses#clear() |
| 42 | + else |
| 43 | + cal rainbow_parentheses#activate() |
| 44 | + endif |
| 45 | +endfunc |
| 46 | + |
| 47 | +func! s:cluster() |
| 48 | + let levels = '' |
| 49 | + for each in range(1, s:max) |
| 50 | + let levels .= ',level'.each |
| 51 | + endfor |
| 52 | + exe 'syn cluster rainbow_parentheses contains=@TOP'.levels.',NoInParens' |
| 53 | +endfunc |
| 54 | +cal s:cluster() |
| 55 | + |
| 56 | +func! rainbow_parentheses#load(br1, br2) |
| 57 | + let [level, grp, alllvls] = ['', '', []] |
| 58 | + let [br1, br2] = [escape(a:br1, '['), escape(a:br2, ']')] |
| 59 | + for each in range(1, s:max) |
| 60 | + cal add(alllvls, 'level'.each) |
| 61 | + endfor |
| 62 | + for each in range(1, s:max) |
| 63 | + let cmd = 'syn region %s matchgroup=%s start=/%s/ end=/%s/ contains=TOP,%s,NoInParens' |
| 64 | + exe printf(cmd, 'level'.each, 'level'.each.'c', br1, br2, join(alllvls, ',')) |
| 65 | + cal remove(alllvls, 0) |
| 66 | + endfor |
| 67 | + let s:active = 0 |
| 68 | +endfunc |
| 69 | + |
| 70 | +" vim:ts=2:sw=2:sts=2 |
0 commit comments