8,756
edits
mNo edit summary |
mNo edit summary |
||
(20 intermediate revisions by the same user not shown) | |||
Line 11: | Line 11: | ||
function normalize(input, type) | function normalize(input, type) | ||
type = type or 'xml' | type = type or 'xml' | ||
local b = clean(input) | |||
local a = '&y' | local a = '&y' | ||
if type == 'notxml' then | if type == 'notxml' then | ||
a = '&y' | a = '&y' | ||
end | end | ||
if not b:match('^%&') then | if not b:match('^%&') then | ||
b = a .. b | b = a .. b | ||
end | end | ||
b = b:gsub("(\\n)","\n") | b = b:gsub("(\\n)","\n") | ||
return b | return b | ||
end | end | ||
function clean(input) | |||
local b = input:gsub("(~J211)", "") | |||
b = b:gsub("([{}])", "") | |||
return b | |||
end | |||
function p.determinexml(input) | |||
return (input:match('&') ~= nil) | |||
end | |||
function strtotbl(str) | function strtotbl(str) | ||
Line 34: | Line 43: | ||
return tbl | return tbl | ||
end | end | ||
function p.linebreaks(frame) | function p.linebreaks(frame) | ||
local b = string.gsub(frame,"(~)"," | local b = string.gsub(frame,"(~)","\n") | ||
return b | return b | ||
end | end | ||
--[ The main function. Takes the first argument and snips out stuff we don't need | --[ The main function. Takes the first argument and snips out stuff we don't need | ||
--[ depending on regextype. | --[ depending on regextype. | ||
function p.parse(frame, regextype) | function p.parse(frame, regextype) | ||
args = frame.args or {[1] = frame} | args = frame.args or {[1] = frame} | ||
regextype = regextype | regextype = regextype | ||
if regextype == nil then | if regextype == nil then | ||
if args[1] | if p.determinexml(args[1]) then | ||
regextype = 'xml' | |||
else | else | ||
regextype = 'notxml' | |||
end | end | ||
end | end | ||
Line 74: | Line 84: | ||
return a | return a | ||
end | end | ||
function p.main(frame) | function p.main(frame) | ||
Line 106: | Line 117: | ||
-- | -- Shader Parse -- | ||
function p.shader(text, colors, type) | function p.shader(text, colors, type, rasterize) | ||
-- split the colors into a list | -- split the colors into a list | ||
local colorlist = textutil.split(colors, '-') | local colorlist = textutil.split(colors, '-') | ||
Line 115: | Line 126: | ||
-- alternation | pattern will stretch to fit word length (?) | -- alternation | pattern will stretch to fit word length (?) | ||
local type = type or 'default' | local type = type or 'default' | ||
local brasterize = false | |||
if rasterize == 'true' then | |||
brasterize = true | |||
end | |||
local strtbl = strtotbl(text) | local strtbl = strtotbl(text) | ||
local finaltbl = {} | local finaltbl = {} | ||
local interval = 1 | local interval = 1 | ||
local bordered = false | |||
local overflowbehavior = function(f) return 'y' end | |||
if type == 'alternation' then | if type == 'alternation' then | ||
interval = math.floor(#strtbl/#colorlist) --sets interval that color code switches. | interval = math.floor(#strtbl/#colorlist) --sets interval that color code switches. | ||
if interval <= 0 then interval = 1 end | |||
overflowbehavior = function(f) return colorlist[#colorlist] end | overflowbehavior = function(f) return colorlist[#colorlist] end | ||
elseif type == 'sequence' then | elseif type == 'sequence' or type == 'solid' then | ||
overflowbehavior = function(f) | overflowbehavior = function(f) | ||
local e = f%#colorlist | local e = f%#colorlist | ||
if e == 0 then e = #colorlist end | if e == 0 then e = #colorlist end | ||
return colorlist[e] | return colorlist[e] | ||
end | end | ||
else | elseif type == 'bordered' then | ||
overflowbehavior = function(f) return 'y' end | bordered = true | ||
overflowbehavior = function(f) | |||
if f + #strtbl == 3 then return colorlist[2] else return colorlist[1] end | |||
end | |||
elseif type == 'chaotic' then | |||
overflowbehavior = function(f) return 'y' end -- placeholder | |||
end | end | ||
local ci = 1 | local ci = 1 | ||
if bordered == true then | |||
ci = #colorlist | |||
end | |||
for i=1, #strtbl do | for i=1, #strtbl do | ||
if ci > #colorlist then | if ci > #colorlist or ci <= 0 then | ||
hexcolor = overflowbehavior(ci) | hexcolor = overflowbehavior(ci) | ||
else | else | ||
hexcolor = colorlist[ci] | hexcolor = colorlist[ci] | ||
end | end | ||
if brasterize then | |||
finaltbl[i] = "<span style=\"color: " .. luatable.parse(hexcolor) .. ";\">" .. strtbl[i].. "</span>" | |||
else | |||
finaltbl[i] = "&" .. hexcolor .. strtbl[i] | |||
end | |||
if i%interval == 0 then | if i%interval == 0 then | ||
ci = ci + 1 | if bordered == true then | ||
ci = ci - 1 | |||
else | |||
ci = ci + 1 | |||
end | |||
end | end | ||
end | end | ||
return table.concat(finaltbl) | return table.concat(finaltbl) | ||
end | end | ||
function p.shadermain(frame) | function p.shadermain(frame) | ||
local args = process_args.merge(true) | local args = process_args.merge(true) | ||
if args[1] and args[2] then -- shader template | if args[1] and args[2] then -- shader template | ||
output = | output = applytemplate(args[1], clean(args[2]), (args['rasterize'] or 'true')) | ||
else | else | ||
output = p.shader(args['text'], args['colors'], args['type']) | output = p.shader(clean(args['text']), args['colors'], args['type'], (args['rasterize'] or 'true')) | ||
end | end | ||
Line 160: | Line 195: | ||
end | end | ||
function | |||
return p.shader(text, shaders[shader][1], shaders[shader][2]) | function applytemplate(shader, text, raster) | ||
if shaders[shader] == nil then | |||
error('There was no shader called ' .. (shader or '') .. '!') | |||
else | |||
return p.shader(text, shaders[shader][1], shaders[shader][2], raster) | |||
end | |||
end | |||
function p.shaderlist() | |||
local tblheader = '<tr><th>Shader</th><th>Colors</th><th>Type</th></tr>' | |||
local tr = {} | |||
i = 0 | |||
for a, v in pairs(shaders) do | |||
tr[i] = ' <tr><td><b>' .. applytemplate(a, a, 'true') .. '</b></td><td>' .. v[1] .. '</td><td>' .. v[2] .. '</td></tr>' | |||
i = i + 1 | |||
end | |||
return '<table class="wikitable sortable">' .. tblheader .. table.concat(tr) .. '</table>' | |||
end | end | ||
function p.test() | function p.test() | ||
--return p.shader('Stopsvalinn', 'R-r-K-y-Y', 'sequence') | --return p.shader('Stopsvalinn', 'R-r-K-y-Y', 'sequence') | ||
return applytemplate('soul', 'soulcurding') | |||
end | end | ||
return p | return p |