Initial commit.
This commit is contained in:
85
vim/autoload/railmoon/oscan/extractor/search.vim
Executable file
85
vim/autoload/railmoon/oscan/extractor/search.vim
Executable file
@@ -0,0 +1,85 @@
|
||||
" Author: Mykola Golubyev ( Nickolay Golubev )
|
||||
" Email: golubev.nikolay@gmail.com
|
||||
" Site: www.railmoon.com
|
||||
" Plugin: oscan
|
||||
" Module: extractor#search
|
||||
" Purpose: extract strings with search pattern from current file
|
||||
|
||||
function! railmoon#oscan#extractor#search#create()
|
||||
let new_extractor = copy(s:tag_scan_search_extractor)
|
||||
|
||||
let new_extractor.file_name = expand("%:p")
|
||||
let new_extractor.buffer_number = bufnr('%')
|
||||
let new_extractor.file_extension = expand("%:e")
|
||||
let new_extractor.line_number_width = len(line('$'))
|
||||
let new_extractor.first_line_to_search = 1
|
||||
let new_extractor.last_line_to_search = line('$')
|
||||
let new_extractor.pattern = @/
|
||||
let new_extractor.remove_leader_space = 1
|
||||
let new_extractor.filetype = &filetype
|
||||
let new_extractor.description = 'Search "'.new_extractor.pattern.'" in "'.new_extractor.file_name.'"'
|
||||
|
||||
return new_extractor
|
||||
endfunction
|
||||
|
||||
let s:tag_scan_search_extractor = {}
|
||||
function! s:tag_scan_search_extractor.process(record)
|
||||
exec 'buffer '.self.buffer_number
|
||||
exec a:record.data
|
||||
endfunction
|
||||
|
||||
function! s:tag_scan_search_extractor.tags_by_line(line_number, line) " line
|
||||
return railmoon#oscan#extractor#util#tags_from_searched_line(a:line_number, a:line)
|
||||
endfunction
|
||||
|
||||
function! s:tag_scan_search_extractor.header_by_line(line_number, line)
|
||||
if self.remove_leader_space
|
||||
let line = substitute(a:line, '^\s*', '', 'g')
|
||||
else
|
||||
let line = a:line
|
||||
endif
|
||||
|
||||
return [ line ]
|
||||
endfunction
|
||||
|
||||
function! s:tag_scan_search_extractor.extract()
|
||||
let result = []
|
||||
|
||||
let pos = getpos('.')
|
||||
|
||||
call cursor(self.first_line_to_search, 1)
|
||||
|
||||
let pattern = self.pattern
|
||||
let last_search_result = -1
|
||||
|
||||
let option = 'Wc'
|
||||
|
||||
while 1
|
||||
let search_result = search(pattern, option, self.last_line_to_search)
|
||||
|
||||
if search_result == 0
|
||||
break
|
||||
endif
|
||||
|
||||
if search_result != last_search_result
|
||||
let line = getline(search_result)
|
||||
|
||||
let data = self.header_by_line(search_result, line)
|
||||
let tag_list = self.tags_by_line(search_result, line)
|
||||
|
||||
call add(result, railmoon#oscan#record#create(data, tag_list, search_result, search_result))
|
||||
endif
|
||||
|
||||
let last_search_result = search_result
|
||||
let option = 'W'
|
||||
endwhile
|
||||
|
||||
call setpos('.', pos)
|
||||
|
||||
return result
|
||||
endfunction
|
||||
|
||||
function! s:tag_scan_search_extractor.colorize()
|
||||
let &filetype = self.filetype
|
||||
endfunction
|
||||
|
||||
Reference in New Issue
Block a user