Initial commit.
This commit is contained in:
86
vim/autoload/railmoon/oscan/extractor/marks.vim
Executable file
86
vim/autoload/railmoon/oscan/extractor/marks.vim
Executable file
@@ -0,0 +1,86 @@
|
||||
" Author: Mykola Golubyev ( Nickolay Golubev )
|
||||
" Email: golubev.nikolay@gmail.com
|
||||
" Site: www.railmoon.com
|
||||
" Plugin: oscan
|
||||
" Module: extractor#marks
|
||||
" Purpose: extract marks to select
|
||||
|
||||
function! railmoon#oscan#extractor#marks#create()
|
||||
let new_extractor = copy(s:tag_scan_marks_extractor)
|
||||
let new_extractor.description = 'Select mark to jump'
|
||||
let new_extractor.filetype = &filetype
|
||||
|
||||
return new_extractor
|
||||
endfunction
|
||||
|
||||
let s:tag_scan_marks_extractor = {}
|
||||
function! s:tag_scan_marks_extractor.process(record)
|
||||
exec "normal \'".a:record.data
|
||||
endfunction
|
||||
|
||||
function! s:tag_scan_marks_extractor.extract()
|
||||
let result = []
|
||||
|
||||
redir => marks_string
|
||||
silent marks
|
||||
redir END
|
||||
|
||||
let marks_list = split(marks_string, "\n")
|
||||
let pattern = '\s*\(\S\+\)\s*\(\d\+\)\s*\(\d\+\)\s*\(.*\)$'
|
||||
|
||||
for mark_value in marks_list
|
||||
if mark_value !~ pattern
|
||||
continue
|
||||
endif
|
||||
|
||||
let mark_symbol = substitute(mark_value, pattern, '\1', '')
|
||||
let mark_line = substitute(mark_value, pattern, '\2', '')
|
||||
let mark_col = substitute(mark_value, pattern, '\3', '')
|
||||
let mark_file_or_line = substitute(mark_value, pattern, '\4', '')
|
||||
|
||||
let tags = []
|
||||
|
||||
let file_name = fnamemodify(mark_file_or_line, ':p')
|
||||
|
||||
let is_file = filereadable(file_name)
|
||||
|
||||
if is_file
|
||||
let header_line = '<# '.file_name.' #>'
|
||||
let tags = railmoon#oscan#extractor#util#tags_from_file_name(file_name)
|
||||
else
|
||||
let header_line = mark_file_or_line
|
||||
let tags = split(mark_file_or_line, '\W')
|
||||
call filter(tags, 'v:val != ""')
|
||||
call add(tags, 'buffer')
|
||||
endif
|
||||
|
||||
if mark_symbol =~ '[QWERTYUIOPASDFGHJKLZXCVBNM1234567890]'
|
||||
call add(tags, 'global')
|
||||
endif
|
||||
|
||||
if mark_symbol =~ '[QWERTYUIOPASDFGHJKLZXCVBNM]'
|
||||
call add(tags, 'user')
|
||||
endif
|
||||
|
||||
let header_line = printf("%5s %5s ", mark_line, mark_col).header_line
|
||||
|
||||
let header = [ header_line ]
|
||||
call add(result, railmoon#oscan#record#create( header,
|
||||
\ tags,
|
||||
\ mark_symbol,
|
||||
\ mark_symbol))
|
||||
endfor
|
||||
|
||||
|
||||
return result
|
||||
endfunction
|
||||
|
||||
function! s:tag_scan_marks_extractor.colorize()
|
||||
syn match Comment /.*/ contained contains=Identifier
|
||||
syn region Identifier matchgroup=Ignore start='<#' end='#>' contained
|
||||
|
||||
syn match TODO /\|/ nextgroup=Keyword
|
||||
syn match Keyword /\d\+\s/ nextgroup=Statement contained skipwhite
|
||||
syn match Statement /\d\+/ nextgroup=Comment contained skipwhite
|
||||
endfunction
|
||||
|
||||
Reference in New Issue
Block a user