Module:ColorParse

From Caves of Qud Wiki
Revision as of 17:33, 17 September 2019 by Teamtoto (talk | contribs) (cleaned up my very first lua module into something actually legible. also, now properly preserves whitespace if there is is a space between the color code and the actual text)
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)","</br>")
  end
  return b
end


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

  local b = normalize(frame.args[1],regextype)
  local a = string.gsub(b, regex, function(_,color,space1,text)
        local hexcolor = luatable[color]
        if hexcolor == nil then
          error ("There was no specified color for color code: " .. color)
        end
        space1 = space1 or ""
        text = text or ""
        return space1 .. "<span style=\"color: " .. hexcolor .. ";\">"  .. text .. "</span>"
  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