local callAssert = require('Module:CallAssert')
local function main(frame, field) local args, pargs = frame.args, (frame:getParent or).args or local makeTitle=args.makeTitle or pargs.makeTitle local namespace=args.namespace or pargs.namespace or "" local fragment=args.fragment or pargs.fragment or "" local interwiki=args.interwiki or pargs.interwiki or "" local page=args.page or args[1] or pargs.page or pargs[1] or "" local id= tonumber(args.id or pargs.id) local pn = local title -- holds the result of the mw.title.xxx call
for i = 1,9 do pn[i] = args['p'..i] or pargs['p'..i] end if not id and not mw.ustring.match(page, '%S') then page = nil end
if id then title = callAssert(mw.title.new, 'mw.title.new', id) elseif not page then title = callAssert(mw.title.getCurrentTitle, 'getCurrentTitle') elseif makeTitle then title = callAssert(mw.title.makeTitle, 'makeTitle', namespace, page, fragment, interwiki) else title = callAssert(mw.title.new, 'mw.title.new', page, namespace) end
local result = title[field] if type(result)
return tostring(result or "")end
-- handle all errors in mainmain = require('Module:Protect')(main)
local p =
-- main function does all the worklocal meta = function meta.__index(self, key) return function(frame) return main(frame, key) endendsetmetatable(p, meta)
function p.getContent(frame) local args, pargs = frame.args, (frame:getParent or).args or local fmt = args.as or pargs.as or "pre" local text = main(frame, "getContent")
fmt = mw.text.split(fmt, ", ?")
for _, how in ipairs(fmt) do if how
"expand" then text = frame:preprocess(text) elseif how
return textend
return p