Module:Page

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) == "function" then

result = result(title, unpack(pn))

elseif type(result) == "table" then

result = mw.text.listToText(result)

end

return tostring(result or "")

end

-- handle all errors in main

main = require('Module:Protect')(main)

local p = {}

-- main function does all the work

local meta = {}

function meta.__index(self, key)

return function(frame)

return main(frame, key)

end

end

setmetatable(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 == "pre" then

text = table.concat{ "

", text, "
" }

elseif how == "expand" then

text = frame:preprocess(text)

elseif how == "nowiki" then

text = mw.text.nowiki(text)

end

end

return text

end

return p