86 lines
2.4 KiB
VimL
Executable File
86 lines
2.4 KiB
VimL
Executable File
" 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
|
|
|