1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- local search = {}
- local default_opt = {}
- local function pattern_lower(str)
- if str:sub(1, 1) == "%" then
- return str
- end
- return str:lower()
- end
- local function init_args(doc, line, col, text, opt)
- opt = opt or default_opt
- line, col = doc:sanitize_position(line, col)
- if opt.no_case then
- if opt.pattern then
- text = text:gsub("%%?.", pattern_lower)
- else
- text = text:lower()
- end
- end
- return doc, line, col, text, opt
- end
- function search.find(doc, line, col, text, opt)
- doc, line, col, text, opt = init_args(doc, line, col, text, opt)
- for line = line, #doc.lines do
- local line_text = doc.lines[line]
- if opt.no_case then
- line_text = line_text:lower()
- end
- local s, e = line_text:find(text, col, not opt.pattern)
- if s then
- return line, s, line, e + 1
- end
- col = 1
- end
- if opt.wrap then
- opt = { no_case = opt.no_case, pattern = opt.pattern }
- return search.find(doc, 1, 1, text, opt)
- end
- end
- return search
|