Module:ColorParse: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
Line 67: Line 67:
function p.main(frame)
function p.main(frame)


local parsetype = 'xml'
local parsetype = nil
   local unbolded = false
   local unbolded = false
   local tildes = false
   local tildes = false

Revision as of 01:51, 16 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(input, type)
  type = type or 'xml'
  local a = '&y' 
  if type == 'notxml' then
    a = '&y'
  end
  local b = input:gsub("(~J211)", "")
  if not b:match('^%&') then
    b = a .. b 
  end
  b = b:gsub("(%*)", "*")
  if type == 'xml' then
    b = b:gsub("([{}])", "")
  end
  b = b:gsub("(\\n)","\n")
  return b
end


function p.linebreaks(frame)
  local b = string.gsub(frame,"(~)","\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)
  args = frame.args or {[1] = frame}
  regextype = regextype
  if regextype == nil then
    if args[1]:match('&') ~= nil then
      regextype = 'xml'
    else
      regextype = 'notxml'
    end
  end
  --[Determine regex type]
  local regex = "&(%w)([^&\n]*)"
  if regextype == 'notxml' then
  	regex = "&(%w)([^&\n]*)"
  end

  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)

	local parsetype = nil
  	local unbolded = false
  	local tildes = false
  	local text = ''
 	local args = process_args.merge(true)
 	for _, arg in ipairs(args) do
    	if arg == 'notxml' then
        	parsetype = 'notxml'
      	elseif arg == 'unbolded' then
        	unbolded = true
      	elseif arg == 'tildes are new lines' then
        	tildes = true
        elseif text == '' then
        	text = arg
      	end
  	end
    
  	local returntext = p.parse(text, parsetype)
  	if tildes  == true then 
    	returntext = p.linebreaks(returntext)
  	end
  	if unbolded == true then
    	return returntext
  	else
  		return '<b>' .. (returntext or '') .. '</b>'
  	end
end

return p