Módulo:Check for unknown parameters
Este módulo pode ser anexado a uma predefinição para verificar o uso de parâmetros desconhecidos. Diferentemente de muitos outros módulos, este módulo não é implementado por uma predefinição.
Uso
Uso básico
{{#invoke:Check for unknown parameters|check|unknown=[[Categoria:Alguma categoria de manutenção]]|arg1|arg2|arg3|argN}}
ou para classificar as entradas na categoria de manutenção por parâmetro com uma mensagem de erro de visualização
{{#invoke:Check for unknown parameters|check|unknown=[[Categoria:Alguma categoria de manutenção|_VALUE_]]|preview=parâmetro desconhecido "_VALUE_"|arg1|arg2|...|argN}}
ou para uma mensagem de erro vermelha explícita
{{#invoke:Check for unknown parameters|check|unknown=<span class="error">Desculpe, eu não reconheço _VALUE_</span>|arg1|arg2|...|argN}}
Aqui, arg1
, arg2
, ..., argN
, são os parâmetros conhecidos. Parâmetros sem nome (posicionais) também podem ser adicionados: |1|2|nomedoarg1|nomedoarg2|...
. Qualquer parâmetro que for usado, mas não estiver nesta lista, fará com que o módulo retorne o que for passado com o parâmetro unknown
. A palavra-chave _VALUE_
, se for utilizada, será alterada para o nome do parâmetro. Isso é útil tanto para classificar as entradas em uma categoria de rastreamento quanto para fornecer informações mais explícitas.
Por padrão, o módulo não faz distinção entre um parâmetro definido, mas em branco, e um parâmetro que não está em branco. Isto é, tanto |foo=x
quanto |foo=
, se não forem listados, são reportados. Para rastrear somente parâmetros que não estiverem em branco, use |ignoreblank=1
.
Por padrão, o módulo ignora os parâmetros posicionais em branco. Ou seja, um |2=
que não estiver listado é ignorado. Para incluir parâmetros posicionais em branco no rastreamento use |showblankpositional=1
.
Padrões Lua
Este módulo suporta padrões Lua (semelhante a expressões regulares), que são úteis quando existem muitos parâmetros conhecidos que usam um padrão sistemático. Por exemplo, Infobox3cols
usa
regexp1 = "header[%d]+",regexp2 = "label[%d]+",regexp3 = "data[%d]+[abc]?",regexp4 = "class[%d]+[abc]?",regexp5 = "rowclass[%d]+",regexp6 = "rowstyle[%d]+",regexp7 = "rowcellstyle[%d]+",
para corresponder a todos os parâmetros do formulário headerNUM
, labelNUM
, dataNUM
, dataNUMa
, dataNUMb
, dataNUMc
, ..., rowcellstyleNUM
, onde NUM é uma sequência (string) de dígitos.
Exemplo
{{Infobox| above = {{{name|{{{nome|}}}}}}| label1 = Altura| data1 = {{{height|{{{altura|}}}}}}| label2 = Peso| data2 = {{{weight|{{{peso|}}}}}}| label3 = Website| data3 = {{{website|}}}}}<!-- Término da caixa de informações, início do rastreamento-->{{#invoke:Check for unknown parameters|check| unknown = {{Testes outro|[[Categoria:Alguma categoria de manutenção|_VALUE_]]}}| preview = parâmetro "_VALUE_" desconhecido| name | nome | height | altura | weight | peso | website}}
Chamada de dentro de código Lua
Veja o final de Rugby box para um exemplo simples ou Infobox3cols ou Flag para exemplos mais complicados.
-- Este módulo pode ser usado para comparar os argumentos passados para o parental (superior)-- com uma lista de argumentos, retornando um resultado especificado se um argumento -- não estiver na listarequire ('strict');local p = {}local function trim(s)return s:match('^%s*(.-)%s*$')endlocal function isnotempty(s)return s and s:match('%S')endlocal function clean(text)-- Retorna o texto limpo para exibição e truncado se for muito longo.-- Os marcadores de faixa são substituídos por um texto fictício que-- representa o texto wiki original.local pos, truncatedlocal function truncate(text)if truncated thenreturn ''endif mw.ustring.len(text) > 25 thentruncated = truetext = mw.ustring.sub(text, 1, 25) .. '...'endreturn mw.text.nowiki(text)endlocal parts = {}for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') dopos = remaindertable.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')endtable.insert(parts, truncate(text:sub(pos or 1)))return table.concat(parts)endfunction p._check(args, pargs)if type(args) ~= "table" or type(pargs) ~= "table" then-- TODO: Manipulação de errosreturnend -- cria a lista de argumentos conhecidos, expressões regulares e a sequência-- ('string') de retornolocal knownargs = {}local regexps = {}for k, v in pairs(args) doif type(k) == 'number' thenv = trim(v)knownargs[v] = 1elseif k:find('^regexp[1-9][0-9]*$') thentable.insert(regexps, '^' .. v .. '$')endend-- faz um "loop" sobre os argumentos parentais (superiores) e verifica -- se eles estão na listalocal ignoreblank = isnotempty(args['ignoreblank'])local showblankpos = isnotempty(args['showblankpositional'])local values = {}for k, v in pairs(pargs) doif type(k) == 'string' and knownargs[k] == nil thenlocal knownflag = falsefor _, regexp in ipairs(regexps) doif mw.ustring.match(k, regexp) thenknownflag = truebreakendendif not knownflag and ( not ignoreblank or isnotempty(v) ) thentable.insert(values, clean(k))endelseif type(k) == 'number' and knownargs[tostring(k)] == nil thenlocal knownflag = falsefor _, regexp in ipairs(regexps) doif mw.ustring.match(tostring(k), regexp) thenknownflag = truebreakendendif not knownflag and ( showblankpos or isnotempty(v) ) thentable.insert(values, k .. ' = ' .. clean(v))endendend-- adiciona os resultados às tabelas de saídalocal res = {}if #values > 0 thenlocal unknown_text = args['unknown'] or 'Found _VALUE_, 'if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" thenlocal preview_text = args['preview']if isnotempty(preview_text) thenpreview_text = require('Módulo:If preview')._warning({preview_text})elseif preview_text == nil thenpreview_text = unknown_textendunknown_text = preview_textendfor _, v in pairs(values) do-- Corrige (contorna) a falha ('bug') estranha para | = que é removido para-- a sequência ('string') vazia e quebra as ligações ('links') para categoriasif v == '' then v = ' ' end-- evita erro com v = 'example%2' ("índice de captura inválido")local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v})table.insert(res, r)endendreturn table.concat(res)endfunction p.check(frame)local args = frame.argslocal pargs = frame:getParent().argsreturn p._check(args, pargs)endreturn p