mirror of
https://github.com/amix/vimrc
synced 2025-02-28 14:12:51 +08:00
52 lines
1.3 KiB
VimL
52 lines
1.3 KiB
VimL
" syntax.vim
|
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
" @Created: 2007-11-19.
|
|
" @Last Change: 2009-02-15.
|
|
" @Revision: 0.0.11
|
|
|
|
if &cp || exists("loaded_tlib_syntax_autoload")
|
|
finish
|
|
endif
|
|
let loaded_tlib_syntax_autoload = 1
|
|
let s:save_cpo = &cpo
|
|
set cpo&vim
|
|
|
|
|
|
function! tlib#syntax#Collect() "{{{3
|
|
let acc = {}
|
|
let syn = ''
|
|
for line in tlib#cmd#OutputAsList('syntax')
|
|
if line =~ '^---'
|
|
continue
|
|
elseif line =~ '^\w'
|
|
let ml = matchlist(line, '^\(\w\+\)\s\+\(xxx\s\+\(.*\)\|\(cluster.*\)\)$')
|
|
if empty(ml)
|
|
echoerr 'Internal error: '. string(line)
|
|
else
|
|
let [m_0, syn, m_1, m_def1, m_def2; m_rest] = ml
|
|
let acc[syn] = [empty(m_def1) ? m_def2 : m_def1]
|
|
endif
|
|
else
|
|
call add(acc[syn], matchstr(line, '^\s\+\zs.*$'))
|
|
endif
|
|
endfor
|
|
return acc
|
|
endf
|
|
|
|
|
|
" :def: function! tlib#syntax#Names(?rx='')
|
|
function! tlib#syntax#Names(...) "{{{3
|
|
TVarArg 'rx'
|
|
let names = keys(tlib#syntax#Collect())
|
|
if !empty(rx)
|
|
call filter(names, 'v:val =~ rx')
|
|
endif
|
|
return names
|
|
endf
|
|
|
|
|
|
let &cpo = s:save_cpo
|
|
unlet s:save_cpo
|