Module:ColorParse

From Caves of Qud Wiki
Revision as of 02:01, 21 September 2019 by Teamtoto (talk | contribs) (put space back in span style)
Jump to navigation Jump to search
Documentation

This module parses the game's color codes in strings and formats them for the wiki. This shouldn't be directly called anymore. Use Template:Qud text instead. If the text in question has pronouns in syntax =pronouns.(pronountype)= or a similar style, use Template:Grammar.

Usage

{{#invoke: ColorParse | parse |(your text here)}}

Code:

{{#invoke: ColorParse | parse |&RS&rt&Ko&yp&Ys&Rv&ra&Kl&yi&Yn&Rn&y}}

Result:

Stopsvalinn


local p = {}

local luatable = {
            ['r'] = "#a64a2e",
            ['R'] = "#d74200",
            ['g'] = "#009403",
            ['G'] = "#00c420",
            ['b'] = "#0048bd",
            ['B'] = "#0096ff",
            ['c'] = "#40a4b9",
            ['C'] = "#77bfcf",
            ['m'] = "#b154cf",
            ['M'] = "#da5bd6",
            ['w'] = "#98875f",
            ['W'] = "#cfc041",
            ['k'] = "#0f3b3a",
            ['K'] = "#155352",
            ['y'] = "#b1c9c3",
            ['Y'] = "#FFFFFF",
            ['o'] = "#f15f22",
            ['O'] = "#e99f10"
}
--[Utility stuff]--

function normalize(string, type)
  type = type or ''
  local b = string.gsub(string,"(~J211)", "")
  if type == '' then
    b = string.gsub(b,"([{}])", "")
  elseif type == 'notxml' then
    b = string.gsub(b,"(\\n)","\n")
  end
  return b
end


function p.linebreaks(frame)
  local b = string.gsub(frame.args[1],"(~)","\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)
  regextype = regextype or ''
  --[Determine regex type]
  local regex = "(&)(%w)([^&\n]*)"
  if regextype == 'notxml' then
    regex = "(&)(%w)([^&\n]*)"
  end

  local b = normalize(frame.args[1],regextype)
  local a = string.gsub(b, regex, function(_,color,text)
       if text ~= nil or text ~= "" then
          local hexcolor = luatable[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.nonxmlparse(frame)
  return p.parse(frame, 'notxml')
end

function p.moduleparse(frame)
  return p.parse({["args"] = {frame}})
end

function p.modulenonxmlparse(frame)
  return p.nonxmlparse({["args"] = {frame}})
end

return p