wsdjeg-vim-galore-zh_cn/tools/chinese_linter.vim

71 lines
2.1 KiB
VimL
Raw Normal View History

2017-03-25 12:45:56 +08:00
scriptencoding utf-8
let s:ERRORS = {
2017-03-25 14:55:42 +08:00
\ 'E001' : ['中文字符后不可使用英文标点', '[\u4e00-\u9fa5],'],
\ 'E002' : ['中英文之间需要增加空格', '([\u4e00-\u9fa5][a-zA-Z])\|([a-zA-Z][\u4e00-\u9fa5]))'],
\ 'E003' : ['中文与数字之间需要增加空格', '[\u4e00-\u9fa5][0-9]'],
\ 'E005' : ['全角标点之后不加空格', '[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b]\s\+'],
2017-03-25 12:45:56 +08:00
\ }
2017-03-25 14:55:42 +08:00
" TODO
"\ 'E004' : ['数字与单位之间需要增加空格', ''],
"\ 'E006' : ['不重复使用标点符号', ''],
"\ 'E007' : ['使用全角中文标点', ''],
"\ 'E008' : ['数字使用半角字符', ''],
"\ 'E009' : ['遇到完整的英文整句、特殊名词,其內容使用半角标点', ''],
2017-03-25 12:45:56 +08:00
command! -nargs=? CheckChinese call s:check(<q-args>)
function! s:check(...) abort
let s:file = getline(1,'$')
2017-03-25 13:49:56 +08:00
let s:bufnr = bufnr('$')
2017-03-25 13:56:49 +08:00
let s:linenr = 0
let s:colnr = 0
let s:qf = []
2017-03-25 12:45:56 +08:00
for l:line in s:file
let s:linenr += 1
call s:parser(l:line)
endfor
let s:linenr = 0
let s:colnr = 0
if !empty(s:qf)
2017-03-25 13:49:56 +08:00
let g:wsd = s:qf
2017-03-25 12:45:56 +08:00
call s:update_qf(s:qf)
copen
2017-03-25 13:59:21 +08:00
else
call setqflist([])
2017-03-25 14:55:42 +08:00
cclose
2017-03-25 12:45:56 +08:00
endif
endfunction
function! s:parser(line) abort
for l:error_nr in keys(s:ERRORS)
call s:find_error(l:error_nr, a:line)
endfor
endfunction
function! s:find_error(nr, line) abort
let l:error = s:ERRORS[a:nr]
2017-03-25 14:00:26 +08:00
let s:colnr = matchend(a:line, l:error[1])
2017-03-25 12:45:56 +08:00
if s:colnr != -1
call s:add_to_qf(a:nr)
endif
endfunction
function! s:add_to_qf(nr) abort
let l:error_item = {
\ 'bufnr' : s:bufnr,
\ 'lnum' : s:linenr,
\ 'col' : s:colnr,
2017-03-25 13:49:56 +08:00
\ 'vcol' : 0,
2017-03-25 12:45:56 +08:00
\ 'text' : s:ERRORS[a:nr][0],
\ 'nr' : a:nr,
\ 'type' : 'E'
\ }
call add(s:qf, l:error_item)
endfunction
" TODO 加入语法分析
function! s:update_qf(dict) abort
call setqflist(a:dict)
endfunction