SuperMcBrent

tableLib

Nov 7th, 2025
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.41 KB | Gaming | 0 0
  1. -- Table Builder Library
  2. local dependencies = {}
  3.  
  4. local function prepare(mainData, extraLists, headers)
  5.     local prepared = {}
  6.     local maxKeyLen = 0
  7.     local MAX_KEY_LEN = 20
  8.     local maxValLen = 0
  9.     local extraCols = {}
  10.     local totalExtraCols = #extraLists
  11.  
  12.     -- Collect extras from all tables
  13.     for colIndex, extraTable in ipairs(extraLists or {}) do
  14.         for k, v in pairs(extraTable) do
  15.             extraCols[k] = extraCols[k] or {}
  16.             extraCols[k][colIndex] = v
  17.         end
  18.     end
  19.  
  20.     -- Determine key and main value widths
  21.     for k, v in pairs(mainData) do
  22.         local keyStr = k:gsub("Essence", "")
  23.         if #keyStr > maxKeyLen then maxKeyLen = #keyStr end
  24.         local valStr = tostring(v or "-")
  25.         if #valStr > maxValLen then maxValLen = #valStr end
  26.     end
  27.  
  28.     -- Determine extra column widths
  29.     local colWidths = {}
  30.     for i = 1, totalExtraCols do colWidths[i] = 1 end
  31.     for _, extras in pairs(extraCols) do
  32.         for i = 1, totalExtraCols do
  33.             local val = extras[i] or "-"
  34.             colWidths[i] = math.max(colWidths[i], #tostring(val))
  35.         end
  36.     end
  37.  
  38.     -- Adjust widths based on headers
  39.     if headers then
  40.         local keyHeader = headers[1] or ""
  41.         maxKeyLen = math.max(maxKeyLen, #keyHeader)
  42.         local mainHeader = headers[2] or ""
  43.         maxValLen = math.max(maxValLen, #mainHeader)
  44.         for i = 1, totalExtraCols do
  45.             local h = headers[i + 2] or ""
  46.             colWidths[i] = math.max(colWidths[i], #h)
  47.         end
  48.     end
  49.  
  50.     maxKeyLen = math.min(maxKeyLen, MAX_KEY_LEN)
  51.  
  52.     -- HEADER row
  53.     if headers then
  54.         local headerLine = "| "
  55.         local keyHeader = headers[1] or ""
  56.         if #keyHeader > MAX_KEY_LEN then keyHeader = keyHeader:sub(1, MAX_KEY_LEN - 3) .. "..." end
  57.         keyHeader = keyHeader .. string.rep(" ", maxKeyLen - #keyHeader)
  58.         headerLine = headerLine .. keyHeader
  59.  
  60.         local mainHeader = headers[2] or ""
  61.         mainHeader = string.rep(" ", maxValLen - #mainHeader) .. mainHeader
  62.         headerLine = headerLine .. " | " .. mainHeader
  63.  
  64.         for i = 1, totalExtraCols do
  65.             local h = headers[i + 2] or ""
  66.             h = string.rep(" ", colWidths[i] - #h) .. h
  67.             headerLine = headerLine .. " | " .. h
  68.         end
  69.         headerLine = headerLine .. " |"
  70.         prepared["HEADER"] = headerLine
  71.     end
  72.  
  73.     -- SPACER row
  74.     local spacerLine = "| " .. string.rep(" ", maxKeyLen) .. " | " .. string.rep(" ", maxValLen)
  75.     for i = 1, totalExtraCols do
  76.         spacerLine = spacerLine .. " | " .. string.rep(" ", colWidths[i])
  77.     end
  78.     spacerLine = spacerLine .. " |"
  79.     prepared["SPACER"] = spacerLine
  80.  
  81.     -- Content rows
  82.     for k, v in pairs(mainData) do
  83.         local keyStr = k:gsub("Essence", "")
  84.         if #keyStr > MAX_KEY_LEN then keyStr = keyStr:sub(1, MAX_KEY_LEN - 3) .. "..." end
  85.         keyStr = keyStr .. string.rep(" ", maxKeyLen - #keyStr)
  86.  
  87.         local valStr = tostring(v or "-")
  88.         valStr = string.rep(" ", maxValLen - #valStr) .. valStr
  89.  
  90.         local extras = extraCols[k] or {}
  91.         local extraParts = {}
  92.         for i = 1, totalExtraCols do
  93.             local val = extras[i] or "-"
  94.             val = string.rep(" ", colWidths[i] - #tostring(val)) .. tostring(val)
  95.             table.insert(extraParts, val)
  96.         end
  97.  
  98.         local line = "| " .. keyStr .. " | " .. valStr
  99.         if totalExtraCols > 0 then
  100.             line = line .. " | " .. table.concat(extraParts, " | ")
  101.         end
  102.         line = line .. " |"
  103.  
  104.         prepared[k] = line
  105.     end
  106.  
  107.     prepared.__maxKeyLen = maxKeyLen
  108.     prepared.__maxValLen = maxValLen
  109.     prepared.__extraColWidths = colWidths
  110.  
  111.     return prepared
  112. end
  113.  
  114. local function getRow(prepared, key)
  115.     return prepared[key] or nil
  116. end
  117.  
  118. -- Optional: extract all rows as list (for iteration)
  119. local function getRows(prepared)
  120.     local rows = {}
  121.     for k, v in pairs(prepared) do
  122.         if type(k) == "string" and not k:match("^__") and k ~= "HEADER" and k ~= "SPACER" then
  123.             table.insert(rows, v)
  124.         end
  125.     end
  126.     table.sort(rows)
  127.     return rows
  128. end
  129.  
  130. return {
  131.     id = "tablebuilder",
  132.     name = "Table Builder Library",
  133.     alias = "tablebuilder",
  134.     dependencies = {},
  135.  
  136.     init = function(deps)
  137.         dependencies = deps or {}
  138.     end,
  139.  
  140.     prepare = prepare,
  141.     getRow = getRow,
  142.     getRows = getRows
  143. }
  144.  
Advertisement
Add Comment
Please, Sign In to add comment