Module:Endnote

local getArgs = require('Module:Arguments').getArgs local warn = require('Module:Warning') local complain = require('Module:Error').error

local p = {}

function p._checkArguments(index, pages, section) local missing = {} if index == nil or index == "" then table.insert(missing, "page name (argument #1)") end if pages == nil or pages == "" then table.insert(missing, "page number or range (argument #2)") end if section == nil or section == "" then table.insert(missing, "section name (argument #3)") end if #missing ~= 0 then local messages = "" for k, v in ipairs(missing) do messages = messages .. v			if k < #missing then messages = messages .. ", "			end end warn("One or more calls to Endnote is missing required arguments: " .. messages, 0) return complain({message = "Endnote is missing required arguments: " .. messages}) end end

function p.main(frame) local args = getArgs(frame) local index = args[1] or "" local pages = args[2] or "" local section = args[3] or ""

local complaint = p._checkArguments(index, pages, section) if complaint ~= nil and complaint ~= "" then return complaint end

-- Get the pages from the arguments. Lua's anemic pseudo-regex patterns are -- too limited to do this in one step, so we need to check each case -- seperately in the conditional below. local startPage local endPage if mw.ustring.match(pages, "^(%d+)$") then -- single page local page = mw.ustring.match(pages, "^(%d+)$") startPage = tonumber(page) endPage = tonumber(page) elseif mw.ustring.match(pages, "^%d+%-%d+$") then -- page range startPage, endPage = mw.ustring.match(pages, "^(%d+)%-(%d+)$") startPage = tonumber(startPage) endPage = tonumber(endPage) else -- otherwise bail warn("One or more calls to Endnote on this page has an invalid page range argument", 0) return complain({message = "No valid page or page range given"}) end

-- Now iterate over the given page(s) and get their contents. -- startPage may be equal to endPage, in which case we execute only once local s = "" for i = startPage, endPage do local wikipage = "Page:" .. index .. "/" .. i s = s .. frame:callParserFunction{ name = '#lst', args = {wikipage, section} }	end return s end

return p