Module:ColorParse: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
(nonxml support for modules)
(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)
Line 1: Line 1:
local p = {}
local p = {}


function p.parse(frame)
local luatable = {
local b = string.gsub(frame.args[1],"([{}])", "")
local b = string.gsub(b,"(~J211)", "")
local a = string.gsub(b,"(&)(%w)([^&\n]*)", function(_,color,text)
        local luatable = {
             ['r'] = "#a64a2e",
             ['r'] = "#a64a2e",
             ['R'] = "#d74200",
             ['R'] = "#d74200",
Line 24: Line 20:
             ['o'] = "#f15f22",
             ['o'] = "#f15f22",
             ['O'] = "#e99f10"
             ['O'] = "#e99f10"
        }
}
--[Utility stuff]--


        return "<span style=\"color: " .. luatable[color] .. ";\">"  .. text .. "</span>"
function normalize(string, type)
    end)
  type = type or ''
local c
  local b = string.gsub(string,"(~J211)", "")
if frame.args[2] ~= nil and frame.args[2] == 'no linebreak parse' then
  if type == '' then
c = string.gsub(a,"(\n)", "</br>")
    b = string.gsub(b,"([{}])", "")
else
  elseif type == 'notxml' then
c = a
    b = string.gsub(b,"(\\n)","</br>")
  end
  return b
end
end
return c
 
 
function linebreaks(frame)
  local b = string.gsub(frame.args[1],"(~)","</br>")
  return b
end
end


function p.linebreaks(frame)
--[ The main function. Takes the first argument and snips out stuff we don't need
local b = string.gsub(frame.args[1],"(~)","</br>")
--[ depending on regextype.
return b
 
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
end


function p.nonxmlparse(frame)
function p.nonxmlparse(frame)
local a = string.gsub(frame.args[1],"(\\n)","</br>")
  return p.parse(frame, 'notxml')
local b = string.gsub(a,"(&)(%w)([^&\n]*)", function(_,color,text)
        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"
        }
 
        return "<span style=\"color: " .. luatable[color] .. ";\">"  .. text .. "</span>"
    end)
return b
end
end


function p.moduleparse(frame)
function p.moduleparse(frame)
local b = string.gsub(frame,"([{}])", "")
  return p.parse({["args"] = {frame}})
local b = string.gsub(b,"(~J211)", "")
local a = string.gsub(b,"(&amp;)(%w)([^&\n]*)", function(_,color,text)
        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"
        }
 
        return "<span style=\"color: " .. luatable[color] .. ";\">"  .. text .. "</span>"
    end)
local c
c = string.gsub(a,"(\n)", "</br>")
return c
end
end


function p.modulenonxmlparse(frame)
function p.modulenonxmlparse(frame)
local a = string.gsub(frame,"(\\n)","</br>")
  return p.nonxmlparse({["args"] = {frame}})
local b = string.gsub(a,"(&)(%w)([^&\n]*)", function(_,color,text)
        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"
        }
 
        return "<span style=\"color: " .. luatable[color] .. ";\">"  .. text .. "</span>"
    end)
return b
end
end


return p
return p

Revision as of 17:33, 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)","</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