Для документации этого модуля может быть создана страница Модуль:Loc/Marking/doc

local p = {}

local function transform(s)
    if not s or s == "" then return "" end

    local pattern = "%[([%w_]+)(=([^%]]+))?%](.-)%[/%1%]"

    local changed = true
    while changed do
        changed = false
        s = s:gsub(pattern, function(tag, _, param, inner)
            changed = true
            local t = mw.ustring.lower(tag)
            if t == "bold" then
                return "<b>" .. inner .. "</b>"
            elseif t == "italic" then
                return "<i>" .. inner .. "</i>"
            elseif t == "bolditalic" then
                return "<i><b>" .. inner .. "</b></i>"
            elseif t == "head" then
                return '<h' .. param .. '>' .. inner .. '</h' .. param .. '>'
            elseif t == "color" then
                return '<span style="color:' .. param .. ';">' .. inner .. '</span>'
            elseif t == "bullet" then
                return "· " .. inner
            else
                return inner
            end
        end)
    end

    s = s:gsub("%[/?[%w_]+[^%]]*%]", "")

    return s
end

function p.main(frame)
    local args = frame.args or {}
    local text = args[1] or args.text or ""
    if type(text) ~= "string" then text = tostring(text) end
    local out = transform(text)
    return out
end

return p