-- Common functions used by different modules of the static analyzer explcheck. -- Convert a byte number in a file to a line and column number in a file. local function convert_byte_to_line_and_column(line_starting_byte_numbers, byte_number) local line_number = 0 for _, line_starting_byte_number in ipairs(line_starting_byte_numbers) do if line_starting_byte_number > byte_number then break end line_number = line_number + 1 end assert(line_number > 0) local line_starting_byte_number = line_starting_byte_numbers[line_number] assert(line_starting_byte_number <= byte_number) local column_number = byte_number - line_starting_byte_number + 1 return line_number, column_number end -- Convert a pathname of a file to the suffix of the file. local function get_suffix(pathname) return pathname:gsub(".*%.", "."):lower() end -- Convert a pathname of a file to the base name of the file. local function get_basename(pathname) return pathname:gsub(".*[\\/]", "") end -- Convert a pathname of a file to the pathname of its parent directory. local function get_parent(pathname) if pathname:find("[\\/]") then return pathname:gsub("(.*)[\\/].*", "%1") else return "." end end return { convert_byte_to_line_and_column = convert_byte_to_line_and_column, get_basename = get_basename, get_parent = get_parent, get_suffix = get_suffix, }