Module:Role Advancement Table

From Drifter's Wiki TEST
Revision as of 13:27, 30 October 2022 by Archer (talk | contribs) (Add linking of skills)
Jump to navigation Jump to search

Documentation for this module may be created at Module:Role Advancement Table/doc

local p = {} -- p stands for package

local headers = '!Level\
![[Health]]\
![[Armor Weight|A.W.]]\
![[Skills]]\
'

local tableBegin = '{| class="wikitable"\
|+ {{{name|{{PAGENAME}} Level Advancement}}}\
'

local tableEnd = '|}\
'

function p.makeHeaders( frame )
    return "Not Implemented Yet!!"
end

function p.makeRows( text, start )
	local count, row, rows, buffer

	rows = p.splitTextWithNulls( text )

   if start == nil then
      if #rows > 6 then
         row = 6
      else
         row = 1
      end
   else
	   row = start
   end

   buffer = ""
   for _, v in ipairs(rows) do
         buffer = buffer .. '|-' .. "\n"
         buffer = buffer .. '|' .. tostring(row) .. "\n"
         buffer = buffer .. '|' .. "\n"
         buffer = buffer .. '|' .. "\n"
         buffer = buffer .. '|' .. p.makeSkills(v) .. "\n"
 
         row = row + 1
	end

	return buffer
end

function p.makeSkills( text )
   local buffer = ""
   local skills = p.splitTextWithNulls( text, "," )

   for _, v in ipairs(skills) do
      buffer = buffer .. "[[" .. v .. "]]</br>\n"
   end

   return string.sub(buffer, 1, -7)
end

function p.makeTable( frame )
   local buffer = tableBegin
   local start

   if frame.args['start'] == nil then
      start = nil
      if frame.args['type'] ~= nil then
         if string.lower(frame.args['type']) == 'base' then
            start = 1
         elseif string.lower(frame.args['type']) == 'spec' then
            start = 6
         end
      end
   else
      start = tonumber( frame.args['start'] )
   end

   if frame['args']['headers'] == nil then
         buffer = buffer .. headers
      else
         buffer = buffer .. makeHeaders( frame['args']['headers'] )
   end

   buffer = buffer .. p.makeRows( frame['args']['rows'], start ) .. tableEnd

   return buffer
end

function p.splitTextWithNulls( text, seperator )
   local buffer = ''
   local length = string.len(text)
   local pos = 1
   local results = {}

   if length > 0 then
      if seperator == nil then
         seperator = "|"
      end

      while pos <= length do
         local char = string.sub(text, pos, pos)

         if (char ~= seperator) then
            buffer = buffer .. char
         else
            table.insert(results, buffer)
            buffer = ""
         end

         if (pos == length) then
            table.insert(results, buffer)
         end

         pos = pos + 1
      end
   end

   return results
end

return p