Module:TeamTotoSandbox: Difference between revisions

mNo edit summary
mNo edit summary
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local cargo = mw.ext.cargo
local util_cargo = require('Module:Cargo Utility')
local infobox = require('Module:Infobox')


local luatable = require'Module:Color'
local textutil = require'Module:Text Utility'
local process_args = require'Module:ProcessArgs'
local shaders = require'Module:ColorParse/Templates'
local stringbyte, stringchar = string.byte, string.char
local shader_to_class = {
['y'] = 'y-dark',
['Y'] = 'y',
['b'] = 'b-dark',
['B'] = 'b',
['c'] = 'c-dark',
['C'] = 'c',
['r'] = 'r-dark',
['R'] = 'r',
['o'] = 'o-dark',
['O'] = 'o',
['w'] = 'w-dark',
['W'] = 'w',
['g'] = 'g-dark',
['G'] = 'g',
['m'] = 'm-dark',
['M'] = 'M',
['k'] = 'k-dark',
['K'] = 'k',
['Y-y-y-K-K-y-y-Y'] = 'scanning'
}


--[Utility stuff]--
local p = {}
local h = {}


function normalize(input, type)
  type = type or 'xml'
  local b = clean(input)
  local a = '&y'
  if type == 'notxml' then
    a = '&y'
  end
  if not b:match('^%&') then
    b = a .. b
  end
  b = b:gsub("(\\n)","\n")
  return b
end


 
function p.Declare(frame)
function clean(input)
-- [ Declare ItemsTable ]
  local b = input:gsub("(~J211)", "")
local tablename = 'ItemsTable'
  b = b:gsub("([{}])", "")
local args = {
  return b
['BasePV']='Integer',
['MaxPV']='Integer',
['Vibro']='Boolean',
['PoweredPV']='Boolean',
['Damage']='String',
['UnpoweredDamage']='String',
['PrimaryDamageElement']='String',
['HP']='Integer',
['AV']='Integer',
['DV']='Integer',
['MA']='Integer',
['ToHit']='Integer',
['Skill']='String',
['ObjectID']='String',
['AgilityBonus']='Integer',
['StrengthBonus']='Integer',
['WillpowerBonus']='Integer',
['ToughnessBonus']='Integer',
['IntelligenceBonus']='Integer',
['EgoBonus']='Integer',
['Description']='Wikitext',
['WornOn']='String',
['UsesSlots']='List (,) of String',
['Healing']='String',
['HarvestedInto']='String',
['PreservedInto']='Page',
['PreservedQuantity']='Integer',
['ElementalDamage']='String',
['ElementalType']='String',
['JoinKey']='String'
}
local results = cargo.declare(table, args)
end
end
function p.determinexml(input)
  return (input:match('&') ~= nil)
end
function strtotbl(str)
    tbl = {stringbyte(str, 1, #str)}
    for i = 1, #tbl do
        tbl[i] = stringchar(tbl[i])
    end
    return tbl
end
function p.linebreaks(frame)
  local b = string.gsub(frame,"(~)","\n")
  return b
end
--[ The main function. Takes the first argument and snips out stuff we don't need
--[ depending on regextype.
function p.parse(frame, regextype)
  args = frame.args or {[1] = frame}
  regextype = regextype
  if regextype == nil then
    if p.determinexml(args[1]) then
      regextype = 'xml'
    else
      regextype = 'notxml'
    end
  end
  --[Determine regex type]
  local regex = "&(%w)([^&\n]*)"
  if regextype == 'notxml' then
  regex = "&(%w)([^&\n]*)"
  end
  local b = normalize(args[1],regextype)
  local a = string.gsub(b, regex, function(color,text)
      if text ~= nil and text ~= "" then
          local hexcolor = luatable.parse(color)
          if hexcolor == nil then
            error ("There was no specified color for color code: " .. color)
          end
          text = text or ""
          return "<span style=\"color: " .. hexcolor .. ";\">"  .. text .. "</span>"
      else
          return ""
      end
  end)
return a
end


function p.main(frame)
function p.main(frame)
 
-- [Process arguments. Header and image work ok, but
local parsetype = nil
-- additional logic is needed to separate the other args into rows]
  local unbolded = false
local args = require( 'Module:ProcessArgs' ).merge( true )
  local tildes = false
local infoboxargs = {
  local text = ''
['class'] = 'qud-item-infobox',
local args = process_args.merge(true)
['rows'] = args['rows']
for _, arg in ipairs(args) do
}
    if arg == 'notxml' then
        parsetype = 'notxml'
return infobox.infobox(args)
      elseif arg == 'unbolded' then
        unbolded = true
      elseif arg == 'tildes are new lines' then
        tildes = true
        elseif text == '' then
        text = arg
      end
  end
   
  local returntext = p.parse(text, parsetype)
  if tildes  == true then
    returntext = p.linebreaks(returntext)
  end
  if unbolded == true then
    return returntext
  else
  return '<b>' .. (returntext or '') .. '</b>'
  end
end
 
 
-- Shader Parse --
function p.shader(text, colors, type, rasterize)
    -- split the colors into a list
    local colorlist = textutil.split(colors, '-')
    -- check shader type:
    -- default    | if pattern is shorter than text, text will remain uncolored (y)
    -- sequence    | pattern will repeat until text is over
    -- alternation | pattern will stretch to fit word length (?)
    local type = type or 'default'
    local brasterize = false
    if rasterize == 'true' then
      brasterize = true
    end
    local strtbl = strtotbl(text)
    local finaltbl = {}
    local interval = 1
    local bordered = false
    local overflowbehavior = function(f) return 'y' end
    if type == 'alternation' then
        interval = math.floor(#strtbl/#colorlist)  --sets interval that color code switches.
        if interval <= 0 then interval = 1 end
        overflowbehavior = function(f) return colorlist[#colorlist] end
    elseif type == 'sequence' or type == 'solid' then
        overflowbehavior = function(f)
        local e = f%#colorlist
        if e == 0 then e = #colorlist end
        return colorlist[e]
        end
    elseif type == 'bordered' then
      bordered = true
      overflowbehavior = function(f)
      -- If it's the first or last character, use the second color, otherwise use the first.
        if #strtbl - f <= 0  or f == 1 then return colorlist[2] else return colorlist[1] end
        end
    elseif type == 'chaotic' then
      overflowbehavior = function(f) return 'y' end -- placeholder
    end
    local ci = 1
    for i=1, #strtbl do
      if ci > #colorlist or ci <= 0 or bordered == true then
          hexcolor = overflowbehavior(ci)
      else
          hexcolor = colorlist[ci]
      end
          if brasterize then
            finaltbl[i] = "<span style=\"color: " .. luatable.parse(hexcolor) .. ";\">"  .. strtbl[i].. "</span>"
          else
            finaltbl[i] = "&amp;" .. hexcolor .. strtbl[i]
          end
      if i%interval == 0 then
          ci = ci + 1
      end     
    end
    return table.concat(finaltbl)
end
 
function p.shadermain(frame)
    local args = process_args.merge(true)
    if args[1] and args[2] then -- shader template
      output = applytemplate(args[1], clean(args[2]), (args['rasterize'] or 'true'))
    else
      output = p.shader(clean(args['text']), args['colors'], args['type'], (args['rasterize'] or 'true'))
    end
 
    if (args['unbolded'] == 'true') then
      return output
    else
      return '<b>' .. (output or '') .. '</b>'
    end
end
 
 
function applytemplate(shader, text, raster)
  class = shader_to_class[shader]
  if class ~= nil then
  shader = class
  end
  return '<span class=\"qud-text ' .. shader .. '\">' .. text .. '</span>'
end
 
 
function p.shaderlist()
  local tblheader = '<tr><th>Shader</th><th>Colors</th><th>Type</th></tr>'
  local tr = {}
  i = 0
  for a, v in pairs(shaders) do
      tr[i] = ' <tr><td><b>' .. applytemplate(a, a, 'true') .. '</b></td><td>' .. v[1] .. '</td><td>' .. v[2] .. '</td></tr>'
      i = i + 1
  end
  return '<table class="wikitable sortable">' .. tblheader  .. table.concat(tr) .. '</table>'
end
end


 
function h.addrow(row)
function p.test()
-- [ Add html row with given table. I basically just rewrote
    return p.shader('Spiked', 'R-Y', 'bordered')
--  Template:Infobox row in lua. likely needs to be refactored]
    --return applytemplate('soul', 'soulcurding')  
local output = {}
local label = row[1]
local class = row['class']
local field = row[2]
if label then
output.append('! <div style="text-align:left" class="Searchaux"> '.. label .. '</div>\n')
end
output.append('|')
if class then
output.append('class="'.. class .. '"')
end
if not label then
output.append('colspan="2"')
end
output.append('\n|' .. field .. '\n|-')
end
end
return p
return p