local M = {} M.iter_table_dump = function ( arr ) for k, v in pairs(arr) do print("Table:", k, v) end end local escape_chars = function ( text ) return string.gsub(text, "[%(|%)|\\|%[|%]|%-|%{%}|%?|%+|%*|%^|%$|%.]", { ["\\"] = "\\\\", ["-"] = "\\-", ["("] = "\\(", [")"] = "\\)", ["["] = "\\[", ["]"] = "\\]", ["{"] = "\\{", ["}"] = "\\}", ["?"] = "\\?", ["+"] = "\\+", ["*"] = "\\*", ["^"] = "\\^", ["$"] = "\\$", ["."] = "\\.", }) end -- :@dev: clean the text once it has been fetched from buffer M.clean_buf = function ( text ) if not type(text) == "string" or text == nil then return "" end return text:match( "^%s*(.-)%s*$" ) end M.get_selection = function() local _, csrow, cscol, _ = unpack(vim.fn.getpos("'<")) local _, cerow, cecol, _ = unpack(vim.fn.getpos("'>")) if csrow < cerow or (csrow == cerow and cscol <= cecol) then return csrow - 1, cscol - 1, cerow - 1, cecol else return cerow - 1, cecol - 1, csrow - 1, cscol end end M.subslice = function(line, col) local i = 0 local j = 0 while true do j = string.find(line, " ", j+1) -- find 'next' newline if j == nil then break end if j > col then break end i = j end return { i, j } end return M