mirror of
https://github.com/amix/vimrc
synced 2025-07-27 23:45:00 +08:00
Change Rainbow-parenthese plugin into Rainbow plugin.
This commit is contained in:
136
sources_non_forked/rainbow/autoload/rainbow_main.vim
Normal file
136
sources_non_forked/rainbow/autoload/rainbow_main.vim
Normal file
@ -0,0 +1,136 @@
|
||||
" Copyright 2013 LuoChen (luochen1990@gmail.com). Licensed under the Apache License 2.0.
|
||||
|
||||
let s:rainbow_conf = {
|
||||
\ 'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick'],
|
||||
\ 'ctermfgs': ['lightblue', 'lightyellow', 'lightcyan', 'lightmagenta'],
|
||||
\ 'guis': [''],
|
||||
\ 'cterms': [''],
|
||||
\ 'operators': '_,_',
|
||||
\ 'contains_prefix': 'TOP',
|
||||
\ 'parentheses_options': '',
|
||||
\ 'parentheses': ['start=/(/ end=/)/ fold', 'start=/\[/ end=/\]/ fold', 'start=/{/ end=/}/ fold'],
|
||||
\ 'separately': {
|
||||
\ '*': {},
|
||||
\ 'markdown': {
|
||||
\ 'parentheses_options': 'containedin=markdownCode contained',
|
||||
\ },
|
||||
\ 'lisp': {
|
||||
\ 'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick', 'darkorchid3'],
|
||||
\ },
|
||||
\ 'haskell': {
|
||||
\ 'parentheses': ['start=/(/ end=/)/ fold', 'start=/\[/ end=/\]/ fold', 'start=/\v\{\ze[^-]/ end=/}/ fold'],
|
||||
\ },
|
||||
\ 'ocaml': {
|
||||
\ 'parentheses': ['start=/(\ze[^*]/ end=/)/ fold', 'start=/\[/ end=/\]/ fold', 'start=/\[|/ end=/|\]/ fold', 'start=/{/ end=/}/ fold'],
|
||||
\ },
|
||||
\ 'tex': {
|
||||
\ 'parentheses_options': 'containedin=texDocZone',
|
||||
\ 'parentheses': ['start=/(/ end=/)/', 'start=/\[/ end=/\]/'],
|
||||
\ },
|
||||
\ 'vim': {
|
||||
\ 'parentheses_options': 'containedin=vimFuncBody,vimExecute',
|
||||
\ 'parentheses': ['start=/(/ end=/)/', 'start=/\[/ end=/\]/', 'start=/{/ end=/}/ fold'],
|
||||
\ },
|
||||
\ 'xml': {
|
||||
\ 'syn_name_prefix': 'xmlRainbow',
|
||||
\ 'parentheses': ['start=/\v\<\z([-_:a-zA-Z0-9]+)(\s+[-_:a-zA-Z0-9]+(\=("[^"]*"|'."'".'[^'."'".']*'."'".'))?)*\>/ end=#</\z1># fold'],
|
||||
\ },
|
||||
\ 'xhtml': {
|
||||
\ 'parentheses': ['start=/\v\<\z([-_:a-zA-Z0-9]+)(\s+[-_:a-zA-Z0-9]+(\=("[^"]*"|'."'".'[^'."'".']*'."'".'))?)*\>/ end=#</\z1># fold'],
|
||||
\ },
|
||||
\ 'html': {
|
||||
\ 'parentheses': ['start=/\v\<((script|style|area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)[ >])@!\z([-_:a-zA-Z0-9]+)(\s+[-_:a-zA-Z0-9]+(\=("[^"]*"|'."'".'[^'."'".']*'."'".'|[^ '."'".'"><=`]*))?)*\>/ end=#</\z1># fold'],
|
||||
\ },
|
||||
\ 'lua': {
|
||||
\ 'parentheses': ["start=/(/ end=/)/", "start=/{/ end=/}/", "start=/\\v\\[\\ze($|[^[])/ end=/\\]/"],
|
||||
\ },
|
||||
\ 'perl': {
|
||||
\ 'syn_name_prefix': 'perlBlockFoldRainbow',
|
||||
\ },
|
||||
\ 'php': {
|
||||
\ 'syn_name_prefix': 'phpBlockRainbow',
|
||||
\ 'contains_prefix': '',
|
||||
\ 'parentheses': ['start=/(/ end=/)/ containedin=@htmlPreproc contains=@phpClTop', 'start=/\[/ end=/\]/ containedin=@htmlPreproc contains=@phpClTop', 'start=/{/ end=/}/ containedin=@htmlPreproc contains=@phpClTop', 'start=/\v\<((area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)[ >])@!\z([-_:a-zA-Z0-9]+)(\s+[-_:a-zA-Z0-9]+(\=("[^"]*"|'."'".'[^'."'".']*'."'".'|[^ '."'".'"><=`]*))?)*\>/ end=#</\z1># fold contains_prefix=TOP'],
|
||||
\ },
|
||||
\ 'stylus': {
|
||||
\ 'parentheses': ['start=/{/ end=/}/ fold contains=@colorableGroup'],
|
||||
\ },
|
||||
\ 'css': 0,
|
||||
\ 'sh': 0,
|
||||
\ 'vimwiki': 0,
|
||||
\ }
|
||||
\}
|
||||
|
||||
fun s:eq(x, y)
|
||||
return type(a:x) == type(a:y) && a:x == a:y
|
||||
endfun
|
||||
|
||||
fun s:gcd(a, b)
|
||||
let [a, b, t] = [a:a, a:b, 0]
|
||||
while b != 0
|
||||
let t = b
|
||||
let b = a % b
|
||||
let a = t
|
||||
endwhile
|
||||
return a
|
||||
endfun
|
||||
|
||||
fun s:lcm(a, b)
|
||||
return (a:a / s:gcd(a:a, a:b)) * a:b
|
||||
endfun
|
||||
|
||||
fun rainbow_main#gen_config(ft)
|
||||
let g = exists('g:rainbow_conf')? g:rainbow_conf : {}
|
||||
"echom 'g:rainbow_conf:' string(g)
|
||||
let s = get(g, 'separately', {})
|
||||
"echom 'g:rainbow_conf.separately:' string(s)
|
||||
let dft_conf = extend(copy(s:rainbow_conf), g) | unlet dft_conf.separately
|
||||
"echom 'default config options:' string(dft_conf)
|
||||
let dx_conf = s:rainbow_conf.separately['*']
|
||||
"echom 'default star config:' string(dx_conf)
|
||||
let ds_conf = get(s:rainbow_conf.separately, a:ft, dx_conf)
|
||||
"echom 'default separately config:' string(ds_conf)
|
||||
let ux_conf = get(s, '*', ds_conf)
|
||||
"echom 'user star config:' string(ux_conf)
|
||||
let us_conf = get(s, a:ft, ux_conf)
|
||||
"echom 'user separately config:' string(us_conf)
|
||||
let af_conf = (s:eq(us_conf, 'default') ? ds_conf : us_conf)
|
||||
"echom 'almost finally config:' string(af_conf)
|
||||
if s:eq(af_conf, 0)
|
||||
return 0
|
||||
else
|
||||
let conf = extend(extend({'syn_name_prefix': substitute(a:ft, '\v\A+(\a)', '\u\1', 'g').'Rainbow'}, dft_conf), af_conf)
|
||||
let conf.cycle = (has('gui_running') || (has('termguicolors') && &termguicolors)) ? s:lcm(len(conf.guifgs), len(conf.guis)) : s:lcm(len(conf.ctermfgs), len(conf.cterms))
|
||||
return conf
|
||||
endif
|
||||
endfun
|
||||
|
||||
fun rainbow_main#gen_configs(ft)
|
||||
return filter(map(split(a:ft, '\v\.'), 'rainbow_main#gen_config(v:val)'), 'type(v:val) == type({})')
|
||||
endfun
|
||||
|
||||
fun rainbow_main#load()
|
||||
let b:rainbow_confs = rainbow_main#gen_configs(&filetype)
|
||||
for conf in b:rainbow_confs
|
||||
call rainbow#syn(conf)
|
||||
call rainbow#hi(conf)
|
||||
endfor
|
||||
endfun
|
||||
|
||||
fun rainbow_main#clear()
|
||||
if !exists('b:rainbow_confs') | return | endif
|
||||
for conf in b:rainbow_confs
|
||||
call rainbow#hi_clear(conf)
|
||||
call rainbow#syn_clear(conf)
|
||||
endfor
|
||||
unlet b:rainbow_confs
|
||||
endfun
|
||||
|
||||
fun rainbow_main#toggle()
|
||||
if exists('b:rainbow_confs')
|
||||
call rainbow_main#clear()
|
||||
else
|
||||
call rainbow_main#load()
|
||||
endif
|
||||
endfun
|
||||
|
Reference in New Issue
Block a user