Module:ColorParse: Difference between revisions
Jump to navigation
Jump to search
imported>Teamtotobot ((by SublimeText.Mediawiker)) |
(newline charas are turned into actual newlines regardless of parse type) |
||
Line 7: | Line 7: | ||
function normalize(string, type) | function normalize(string, type) | ||
type = type or '' | type = type or 'xml' | ||
local b = string.gsub(string,"(~J211)", "") | local b = string.gsub(string,"(~J211)", "") | ||
b = b:gsub("(%*)", "*") | b = b:gsub("(%*)", "*") | ||
if type == '' then | if type == 'xml' then | ||
b = string.gsub(b,"([{}])", "") | b = string.gsub(b,"([{}])", "") | ||
end | end | ||
b = string.gsub(b,"(\\n)","\n") | |||
return b | return b | ||
end | end | ||
Line 28: | Line 27: | ||
function p.parse(frame, regextype) | function p.parse(frame, regextype) | ||
args = frame.args or | args = frame.args or mw.getCurrentFrame().args | ||
regextype = regextype | regextype = regextype | ||
if regextype == nil then | if regextype == nil then | ||
if args[1]:match('&') ~= nil then | if args[1]:match('&') ~= nil then | ||
regextype = '' | regextype = 'xml' | ||
else | else | ||
regextype = 'notxml' | regextype = 'notxml' | ||
Line 60: | Line 59: | ||
function p.main(frame) | function p.main(frame) | ||
local | |||
local parsetype = 'xml' | |||
local unbolded = false | local unbolded = false | ||
local tildes = false | local tildes = false | ||
Line 67: | Line 67: | ||
for _, arg in ipairs(args) do | for _, arg in ipairs(args) do | ||
if arg == 'notxml' then | if arg == 'notxml' then | ||
parsetype = 'notxml' | |||
elseif arg == 'unbolded' then | elseif arg == 'unbolded' then | ||
unbolded = true | unbolded = true | ||
Line 77: | Line 77: | ||
end | end | ||
local returntext = p.parse(text, | local returntext = p.parse(text, parsetype) | ||
if tildes == true then | if tildes == true then | ||
returntext = p.linebreaks(returntext) | returntext = p.linebreaks(returntext) |
Revision as of 15:00, 14 November 2019
Documentation
[purge]
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 'xml'
local b = string.gsub(string,"(~J211)", "")
b = b:gsub("(%*)", "*")
if type == 'xml' then
b = string.gsub(b,"([{}])", "")
end
b = string.gsub(b,"(\\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 mw.getCurrentFrame().args
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 = 'xml'
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