| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | local M = {}local function max_len_line(lines)  local max_len = 0  for _, line in ipairs(lines) do    local line_len = line:len()    if line_len > max_len then      max_len = line_len    end  end  return max_lenend--- Left align lines relatively to the parent container-- @param container The container where lines will be displayed-- @param lines The text to align-- @param alignment The alignment value, range: [0-1]function M.align_left(container, lines, alignment)  local max_len = max_len_line(lines)  local indent_amount = math.ceil(math.max(container.width - max_len, 0) * alignment)  return M.shift_right(lines, indent_amount)end--- Center align lines relatively to the parent container-- @param container The container where lines will be displayed-- @param lines The text to align-- @param alignment The alignment value, range: [0-1]function M.align_center(container, lines, alignment)  local output = {}  local max_len = max_len_line(lines)  for _, line in ipairs(lines) do    local padding = string.rep(" ", (math.max(container.width, max_len) - line:len()) * alignment)    table.insert(output, padding .. line)  end  return outputend--- Shift lines by a given amount-- @params lines The lines the shift-- @param amount The amount of spaces to addfunction M.shift_right(lines, amount)  local output = {}  local padding = string.rep(" ", amount)  for _, line in ipairs(lines) do    table.insert(output, padding .. line)  end  return outputend--- Pretty format tables-- @param entries The table to format-- @param col_count The number of column to span the table on-- @param col_sep The separator between each column, default: " "function M.format_table(entries, col_count, col_sep)  col_sep = col_sep or " "  local col_rows = math.ceil(vim.tbl_count(entries) / col_count)  local cols = {}  local count = 0  for i, entry in ipairs(entries) do    if ((i - 1) % col_rows) == 0 then      table.insert(cols, {})      count = count + 1    end    table.insert(cols[count], entry)  end  local col_max_len = {}  for _, col in ipairs(cols) do    table.insert(col_max_len, max_len_line(col))  end  local output = {}  for i, col in ipairs(cols) do    for j, entry in ipairs(col) do      if not output[j] then        output[j] = entry      else        local padding = string.rep(" ", col_max_len[i - 1] - cols[i - 1][j]:len())        output[j] = output[j] .. padding .. col_sep .. entry      end    end  end  return outputendreturn M
 |