Módulo:Selected recent additions – Wikipédia, a enciclopédia livre

local randomModule = require('Module:Random')  function cleanupArgs(argsTable)     local cleanArgs = {}     for key, val in pairs(argsTable) do         if type(val) == 'string' then             val = val:match('^%s*(.-)%s*$')             if val ~= '' then                 cleanArgs[key] = val             end         else             cleanArgs[key] = val         end     end     return cleanArgs end  function isAffirmed(val)     if not(val) then return false end     local affirmedWords = ' add added affirm affirmed include included on true yes y adicionar adicionado afirmar afirmado incluír incluído ligado sim s'     return string.find(affirmedWords, ' '..string.lower(val)..' ', 1, true ) and true or false end  function makeOutput(allItems, maxItems, more, notRandom)     local output     if notRandom then         output = ''         local itemIndex = 1         local maxCount = math.min(#allItems, maxItems)         while itemIndex <= maxCount do             output = output .. allItems[itemIndex] .. '\n'             itemIndex = itemIndex + 1         end     else         local randomiseArgs = {             ['t'] = allItems,             ['limit'] = maxItems         }         local randomisedItems = randomModule.main('array', randomiseArgs )         output = table.concat(randomisedItems, '\n')     end     if more then         output = output .. more     end     return mw.text.trim(output) end  function cleanForPatternMatching(wikitext)     -- remove wikilink brackets     local cleaned = mw.ustring.gsub(wikitext, "%[%[(.-)%]%]","%1")     -- remove pipes that would have been in piped links     cleaned = mw.ustring.gsub(cleaned, "%|"," ")     -- remove external links     cleaned = mw.ustring.gsub(cleaned, "%[.-%]"," ")     return cleaned end  function makeCollapsed(outerText, innerText)     return "{{Hidden begin | titlestyle = font-weight:normal | title = " .. outerText .. "}}" .. innerText .. "{{Hidden end}}" end   -- Get current events for a "Até YYYY de Month de D. Returns a table of list items. function getRecentAdditions(subpage, keepPatterns, skipPatterns, showWikitext)     local title = mw.title.new('Wikipédia:Sabia que/Arquivo/' .. subpage)     local raw = title:getContent()     local itemPattern = '%*%s?%.?%.?%.?%.?%.?%.[%S ]*'     local items = {}     for item in mw.ustring.gmatch(raw, itemPattern) do         local keep = false         local skip = false         local isListItem = ( string.sub(item, 0, 1) == '*' )         if isListItem then             local text = cleanForPatternMatching(item)             for ii, keepPatt in pairs(keepPatterns) do                 if not keep and mw.ustring.find(text, keepPatt) then                     keep = true                 end             end             if #skipPatterns > 0 then                 for iii, skipPatt in pairs(skipPatterns) do                     if not skip and mw.ustring.find(text, skipPatt) then                         skip = true                             end                 end             end         end         if keep and not skip then             -- remove (pictured) inline note             local cleanItem = mw.ustring.gsub(item, "%s*''%(.-pictured.-%)''", "")             -- remove (illustrated) inline note             cleanItem = mw.ustring.gsub(cleanItem, "%s*''%(.-illustrated.-%)''", "")             if showWikitext then                 -- remove html comments                 cleanItem = mw.ustring.gsub(cleanItem, "%<%!%-%-(.-)%-%-%>", "")                 local itemWikitext = "<pre>" .. mw.text.nowiki( cleanItem ) .. "</pre>"                 cleanItem = makeCollapsed(cleanItem, itemWikitext)             end             table.insert(items, cleanItem)         end     end     return items end  function getItems(patterns, skipPatterns, showWikitext)     local allItems = {}     local lang = mw.language.new('pt')     local currentYear  = tonumber(lang:formatDate('Y', 'now'))     local yearsAgo = 2006     while yearsAgo < currentYear do         subpage = yearsAgo         local yearlyItems = getRecentAdditions(subpage, patterns, skipPatterns, showWikitext)         for i, item in ipairs(yearlyItems) do             table.insert(allItems, item)         end         yearsAgo = yearsAgo + 1     end        return allItems end  function getPatterns(args, prefix)     local patterns = {}     local ii = 1     while args[prefix and prefix..ii or ii] do         patterns[ii] = args[prefix and prefix..ii or ii]         ii = ii + 1     end     return patterns end  local p = {}  p.main = function(frame)     local parent = frame.getParent(frame)     local parentArgs = parent.args     local args = cleanupArgs(parentArgs)      if args['not'] and not args['not1'] then         args['not1'] = args['not']     end       local patterns = getPatterns(args)     if #patterns < 1 then         return error("Texto de procura não informado")     end      local skipPatterns = getPatterns(args, 'not')        local showWikitext = isAffirmed(args.wikitext)      local allItems = getItems(patterns, skipPatterns, showWikitext)     if #allItems < 1 then         return args.header and '' or args.none or 'Sem adições recentes'     end      local maxItems = tonumber(args.max) or 6      local more = args.more     if isAffirmed(args.more) then         more = "'''[[Wikipédia:Sabia que/Arquivo|Mais arquivos...]]'''"     end      local nonRandom = isAffirmed(args.latest)      local output = makeOutput(allItems, maxItems, more, nonRandom)     if args.header then         output = args.header .. '\n' .. output .. '\n' .. (args.footer or '{{Box-footer}}')     end     local needsExpansion = mw.ustring.find(output, '{{', 0, true)     if needsExpansion then         return frame:preprocess(output)     else         return output     end end  return p