Module:ColorParse: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
(if text is empty return just blank)
(fixed bug with colored spaces not showing up properly)
Line 53: Line 53:
   local b = normalize(frame.args[1],regextype)
   local b = normalize(frame.args[1],regextype)
   local a = string.gsub(b, regex, function(_,color,space1,text)
   local a = string.gsub(b, regex, function(_,color,space1,text)
        if text ~=nil and text ~= '' then
        local hexcolor = luatable[color]
        if hexcolor == nil then
          error ("There was no specified color for color code: " .. color)
        end
         space1 = space1 or ""
         space1 = space1 or ""
         text = text or ""
         if text ~= nil and text ~= '' then
        return space1 .. "<span style=\"color: " .. hexcolor .. ";\">"  .. text .. "</span>"
          local hexcolor = luatable[color]
          if hexcolor == nil then
            error ("There was no specified color for color code: " .. color)
          end
          text = text or ""
          return space1 .. "<span style=\"color: " .. hexcolor .. ";\">"  .. text .. "</span>"
         else  
         else  
          return ''
          return space1
         end
         end
   end)
   end)

Revision as of 23:20, 20 September 2019

Template-info.png 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 = "(&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)
        space1 = space1 or ""
        if text ~= nil and 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 space1 .. "<span style=\"color: " .. hexcolor .. ";\">"  .. text .. "</span>"
        else 
          return space1
        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