Module:ColorParse: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
(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)
m (standardized what linebreak to use)
Line 29: Line 29:
     b = string.gsub(b,"([{}])", "")
     b = string.gsub(b,"([{}])", "")
   elseif type == 'notxml' then
   elseif type == 'notxml' then
     b = string.gsub(b,"(\\n)","</br>")
     b = string.gsub(b,"(\\n)","\n")
   end
   end
   return b
   return b
Line 35: Line 35:




function linebreaks(frame)
function p.linebreaks(frame)
   local b = string.gsub(frame.args[1],"(~)","</br>")
   local b = string.gsub(frame.args[1],"(~)","\n")
   return b
   return b
end
end

Revision as of 17:40, 17 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)
        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