Module:ColorParse: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
mNo edit summary
(big clean up. will break stuff)
Line 2: Line 2:


local luatable = require'Module:Color'
local luatable = require'Module:Color'
local process_args = require'Module:ProcessArgs'


--[Utility stuff]--
--[Utility stuff]--
Line 18: Line 19:


function p.linebreaks(frame)
function p.linebreaks(frame)
   local b = string.gsub(frame.args[1],"(~)","\n")
   local b = string.gsub(frame,"(~)\n","\n\n")
   return b
   return b
end
end
Line 49: Line 50:
end
end


function p.nonxmlparse(frame)
function p.parsetest(frame, regextype)
   return p.parse(frame, 'notxml')
   args = frame.args or {frame}
end
  regextype = regextype
  if regextype == nil then
    if args[1]:match('&') ~= nil then
      regextype = ''
      args[1] = args[1]:gsub('amp;', '')
    else
      regextype = 'notxml'
    end
  end
  --[Determine regex type]
  local regex = "&(%w)([^&\n]*)"


function p.moduleparse(frame)
  local b = normalize(args[1],regextype)
  return p.parse({["args"] = {frame}})
  local a = string.gsub(b, regex, function(color,text)
      if text ~= nil and text ~= "" then
          local hexcolor = luatable.parse(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
end


function p.modulenonxmlparse(frame)
function p.main(frame)
   return p.nonxmlparse({["args"] = {frame}})
   notxml = nil
  unbolded = false
  tildes = false
  args = process_args.merge(true)
  for i, arg in ipairs(args) do
    if i ~= 1 then
      if arg == 'notxml' then
        notxml = 'notxml'
      elseif arg == 'unbolded' then
        unbolded = true
      elseif arg == 'tildes are new lines' then
        tildes = true
      end
    end
  end
  returntext = p.parsetest(args[1], notxml)
  if tildes then
    returntext = p.linebreaks(returntext)
  end
  if unbolded then
    return returntext
  else
    return '<b>' .. returntext or '' .. '</b>'
  end
end
end
return p
return p

Revision as of 21:35, 12 November 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 = require'Module:Color'
local process_args = require'Module:ProcessArgs'

--[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,"(~)\n","\n\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 and text ~= "" then
          local hexcolor = luatable.parse(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.parsetest(frame, regextype)
  args = frame.args or {frame}
  regextype = regextype
  if regextype == nil then
    if args[1]:match('&amp;') ~= nil then
      regextype = ''
      args[1] = args[1]:gsub('amp;', '')
    else
      regextype = 'notxml'
    end
  end
  --[Determine regex type]
  local regex = "&(%w)([^&\n]*)"

  local b = normalize(args[1],regextype)
  local a = string.gsub(b, regex, function(color,text)
       if text ~= nil and text ~= "" then
          local hexcolor = luatable.parse(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.main(frame)
  notxml = nil
  unbolded = false
  tildes = false
  args = process_args.merge(true)
  for i, arg in ipairs(args) do
    if i ~= 1 then
      if arg == 'notxml' then
        notxml = 'notxml'
      elseif arg == 'unbolded' then
        unbolded = true
      elseif arg == 'tildes are new lines' then
        tildes = true
      end
    end
  end
  returntext = p.parsetest(args[1], notxml)
  if tildes then 
    returntext = p.linebreaks(returntext)
  end
  if unbolded then
    return returntext
  else
    return '<b>' .. returntext or '' .. '</b>'
  end
end
return p