Module:ColorParse: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
(fixed bug with colored spaces not showing up properly)
(put space back in span style)
Line 46: Line 46:
   regextype = regextype or ''
   regextype = regextype or ''
   --[Determine regex type]
   --[Determine regex type]
   local regex = "(&)(%w)(%s*)([^&\n]*)"
   local regex = "(&)(%w)([^&\n]*)"
   if regextype == 'notxml' then
   if regextype == 'notxml' then
     regex = "(&)(%w)(%s*)([^&\n]*)"
     regex = "(&)(%w)([^&\n]*)"
   end
   end


   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,text)
        space1 = space1 or ""
      if text ~= nil or text ~= "" then
        if text ~= nil and text ~= '' then
           local hexcolor = luatable[color]
           local hexcolor = luatable[color]
           if hexcolor == nil then
           if hexcolor == nil then
Line 60: Line 59:
           end
           end
           text = text or ""
           text = text or ""
           return space1 .. "<span style=\"color: " .. hexcolor .. ";\">"  .. text .. "</span>"
           return "<span style=\"color: " .. hexcolor .. ";\">"  .. text .. "</span>"
        else  
      else
           return space1
           return ""
        end
      end
   end)
   end)
return a
return a

Revision as of 02:01, 21 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)([^&\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