Moduuli:json-apu
Ulkoasu
Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:json-apu/ohje
local p = {}
local function escape(str)
--str = string.gsub(str, '(.)', function (c) return string.byte(c) .. " " end)
--str = string.gsub(str, '"', '\\"')
--str = string.gsub(str, '\n', 'NL')
--str = string.gsub(str, '(%W)', function (c) return "[" .. string.byte(c) .. "]" end)
str = string.gsub(str, '<', '<')
str = string.gsub(str, '>', '>')
str = string.gsub(str, '%[%[(.*)%]%]', '&91;&91;%1&93;&93;')
str = string.gsub(str, '%[(.*)%]', '&91;%1&93;')
return mw.text.jsonEncode(str)
end
local function getUnnamedParams(frm)
local regular = {}
for i, v in ipairs(frm.args) do
table.insert(regular, '' .. escape(frm:preprocess(v)) .. '');
end
return regular
end
local function getNamedParams(frm)
local named = {}
for k, v in pairs(frm.args) do
if ( not tonumber(k) and k ~= "ohje" ) then
table.insert(named, '' .. escape(k) ..':' .. escape(frm:preprocess(v)) .. '')
end
end
return named
end
function p.FormatObject(frame)
local named = getNamedParams(frame)
local regular = getUnnamedParams(frame)
if #regular > 0 then
return error("Ylimääräisiä nimettömiä parametreja: " .. regular[1] .. "...")
end
return '{' .. table.concat(named, ',') .. '}'
end
function p.PFormatObject(frame)
local pframe = frame:getParent()
local named = getNamedParams(pframe)
local listname = frame.args.list
local regular = getUnnamedParams(pframe)
if #regular > 0 and not listname then
return error("List-parametri puuttuu")
end
if listname then
table.insert(named, '' .. escape(listname) .. ':[' .. table.concat(regular, ',') .. ']')
end
return '{' .. table.concat(named, ',') .. '}'
end
function p.FormatList(frame)
local regular = getUnnamedParams(frame)
local named = getNamedParams(frame)
if #named > 0 then
error("Ylimääräisiä parametreja: " .. named[1] .. "...")
end
return '[' .. table.concat(regular, ',') .. ']'
end
function p.PFormatList(frame)
local pframe = frame:getParent()
if not pframe then
return error("Ei kutstuttu mallineesta")
end
-- Varmistetaan, ettei turhia parametreja ole annettu.
if frame.args.list then
return error("Ylimääräinen list-parametri")
end
return p.FormatList(pframe)
end
return p