FANDOM


-- <nowiki>
--------------------------------------------------------------------------------
-- DO NOT USE!
--
-- This is mostly hypothetical, since [[Module:Color]] doesn't exist yet(?).
--------------------------------------------------------------------------------
local p = {}
local color = require("Dev:Color")
local getArgs = require("Dev:Arguments").getArgs
local userError = require("Dev:User error")
 
--% Describe the following function here.
--@ args (table)
--@ args.expression (string)
--@ [args.bgColor] (string) defaults to "white"
--@ [args.textColor] (string) defaults to "black"
--: (str)
function p.render(args)
    local expression = args.expression
 
    if not expression then
        error("missing expression", 0)
    end
 
    local _, bgColor = xpcall(function ()
        local tmp = color(args.bgColor or "white")
 
        return tmp.red .. "," .. tmp.green .. "," .. tmp.blue
    end, function ()
        error("invalid background color", 0)
    end)
 
    local _, textColor = xpcall(function ()
        local tmp = color(args.textColor or "black")
 
        return tmp.red .. "," .. tmp.green .. "," .. tmp.blue
    end, function ()
        error("invalid text color", 0)
    end)
 
    local function parseMath(expression)
        local frame = mw.getCurrentFrame()
 
        return frame:preprocess("<math>" .. expression .. "</math>")
    end
 
    local colored = mw.html.create("span")
        :addClass("hidden")
        :css("display", "inline")
        :wikitext(parseMath(
            "\\pagecolor[RGB]{" .. bgColor .. "}" ..
            "{\\color[RGB]{" .. textColor .. "}" .. expression .. "}"
        ))
 
    local plain = mw.html.create("span")
        :css("display", "none")
        :wikitext(parseMath(expression))
 
    return tostring(colored) .. tostring(plain)
end
 
--% Describe the following function here.
--@ frame (table) The
--- [[Lua reference manual/Scribunto libraries#Frame object|frame object]]
--: (str)
function p.main(frame)
    local args = getArgs(frame)
    local success, response = pcall(p.render, args)
 
    return success and response or userError(response)
end
 
return p
-- </nowiki>

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.