stringtranslate.com

Módulo: Valor del parámetro de plantilla

local  p  =  {} local  PrepareText  =  require ( "Módulo:Análisis de wikitexto" ). PrepareText función local getTitle ( title ) local success , titleObj = pcall ( mw.title.new , title ) si success entonces devuelve titleObj de lo contrario devuelve nil end end --string.gmatch comprobará el bloque más grande que pueda sin volver a escanear lo que hay dentro, pero necesitamos lo que hay dentro función local matchAllTemplates ( str ) local matches = { } para template en string.gmatch ( str , " {%b{}}" ) hacer table.insert ( matchs , template ) local innerContent = string.sub ( template , 3 , - 3 ) para _ , subtemplate en next , matchAllTemplates ( innerContent ) hacer table.insert ( matchs , subtemplate ) end end devolver matches end --Versión bifurcada de getParameters de [[Module:Transcluder]] con características adicionales eliminadas función local escapeString ( str ) devolver string.gsub ( str , '[%^%$%(%)%.%[%]%*%+%-%?%%]' , '%%%0' ) fin de la función local getParameters ( plantilla ) parámetros locales , parameterOrder = {}, {} parámetros locales = string.match ( plantilla , '{{[^|}]-|(.*)}}' ) si params entonces recuento local = 0 - Reemplazar temporalmente las tuberías en subplantillas y enlaces wiki para evitar el caos en las subplantillas                                                           en  string.gmatch ( params ,  '{%b{}}' )  hacer params = string.gsub ( params , escapeString ( subtemplate ), string.gsub ( subtemplate , "." , {[ "%" ] = "%%" , [ "|" ] = "@@:@@" , [ "=" ] = "@@_@@" }) ) fin para wikilink en string.gmatch ( params , '%[%b[]%]' ) hacer params = string.gsub ( params , escapeString ( wikilink ), string.gsub ( wikilink , "." , {[ "%" ] = "%%" , [ "|" ] = "@@:@@" , [ " =" ] = " @@_@@" }) ) fin para parámetro en mw.text . gsplit ( params , ' | ' ) hacer local partes = mw.text.split ( parámetro , ' = ' ) local clave = mw.text.trim ( partes [ 1 ] ) local valor si # partes == 1 entonces valor = clave count = count + 1 clave = tostring ( count ) de lo contrario valor = mw.text.trim ( tabla.concat ( partes , ' = ' , 2 ) ) fin valor = string.gsub ( string.gsub ( valor , ' @@ :@@' , '|' ), '@@_@@'                                                         ,  '=' ) key = string.gsub ( string.gsub ( key , '@@:@@' , '|' ), '@@_@@' , '=' ) table.insert ( parameterOrder , key ) parameters [ key ] = value end end return parameters , parameterOrder end -- Devuelve una tabla que contiene parámetros y una tabla con el orden en el que se encontró cada uno de sus valores. -- Dado que esto considera todas las subplantillas, se espera que un solo parámetro tenga múltiples valores. -- Por ejemplo, {{ABC|X={{DEF|X=Valor|Y=Otro valor}}{{ABC|X=Sí}}|Y=P}} -- Devolvería {X={"{{DEF|X=Valor|Y=Otro valor}}", "Valor", "Sí"}, Y={"Otro valor", "P"}} función local getAllParameters ( plantilla , ignore_blank , only_subtemplates ) árbolDeParámetros local = setmetatable ({}, { __index = function ( self , clave ) rawset ( self , clave ,{}) return rawget ( self , clave ) end }) parámetros locales , ordenDeParámetros = getParameters ( plantilla ) para _ , clave en ipairs ( ordenDeParámetros ) hacer valor local = parámetros [ clave ] si no ignore_blank o valor ~= "" entonces si no only_subtemplates entonces tabla.insert ( parameterTree [ key ], value ) - Inserta el valor inicial en el árbol end for subtemplate in string.gmatch ( value , "{%b{}}" ) do - Y ahora comprueba si hay subvalores local subparams = getAllParameters ( subtemplate , ignore_blank                                                       ) para subclave , subconjunto en siguiente , subparámetros hacer para _ , subvalor en ipairs ( subconjunto ) hacer tabla.insert ( parameterTree [ subclave ], subvalor ) --Y agregar cualquiera que encontremos a nuestro árbol fin fin fin fin fin devolver parameterTree fin --Punto de entrada del módulo . Devuelve un booleano de éxito y la plantilla de destino o por qué falló función p.getTemplate ( página , plantillas , opciones ) si no plantillas entonces --Parámetros obligatorios devolver falso , "Falta el parámetro obligatorio 'plantillas'" fin opciones = opciones o { } local template_index = tonumber ( options.template_index ) o 1 local treat_as_regex = opciones . treat_as_regex o false si type ( templates ) == "string" entonces -- TODO: Encontrar una buena forma de permitir especificar múltiples plantillas a través de la invocación de plantilla -- (Los módulos pueden proporcionar una tabla, por lo que no hay preocupaciones allí) -- Dividir con comas es una mala idea (muchas plantillas tienen una coma en su nombre) plantillas = { plantillas } fin local título = getTitle ( página ) si título == nil entonces devuelve false , "El título solicitado no existe" fin local contenido = PrepareText ( título : getContent () o "" ) local foundTemplates = 0 para _ , plantilla en siguiente , matchAllTemplates ( contenido ) hacer para _ , wantedTemplate en                                                                pares ( plantillas )  hacer si no tratar_como_regex entonces wantedTemplate = escapeString ( wantedTemplate ) fin local firstLetter = string.sub ( wantedTemplate , 1 , 1 ) local firstUpper , firstLower = firstLetter : upper (), firstLetter : lower () si firstUpper ~= firstLower entonces wantedTemplate = "[" .. firstUpper .. firstLower .. "]" .. string.sub ( wantedTemplate , 2 ) fin si string.match ( plantilla , "^{{%s*" .. wantedTemplate .. "%s*[|}]" ) entonces foundTemplates = foundTemplates + 1 si foundTemplates == template_index entonces --Se encontró nuestra plantilla deseada devuelve verdadero , plantilla fin fin fin fin devuelve falso , "No se encontró una plantilla válida" fin --Punto de entrada del módulo. Devuelve un valor booleano de éxito y el valor del parámetro de destino o por qué falló function p . getParameter ( page , templates , parameter , options ) if not ( templates and parameter ) then --Required parameters return false , "Faltan los parámetros requeridos 'templates' y 'parameter'" end parameter = tostring ( parameter ) --Forzar consistencia options = options or {} local success , text = p . getTemplate ( page , templates , options ) if not success                                                                          entonces devuelve éxito , texto de lo contrario local parameter_index = tonumber ( options.parameter_index ) o 1 local ignore_subtemplates = options.ignorar_subtemplates o falso local only_subtemplates = options.only_subtemplates o falso local ignore_blank = options.ignorar_blank o falso local valor si ignore_subtemplates entonces valor = getParameters ( texto ) [ parámetro ] o " " de lo contrario local params = getAllParameters ( texto , ignore_blank , only_subtemplates ) valor = params [ parámetro ] [ índice_parámetro ] o " " fin valor = string.gsub ( valor , " < / ?%a*include%a*>" , " " ) valor = mw.text.trim ( valor ) --técnicamente incorrecto en algunos casos , pero no es un gran problema devuelve verdadero , mw.text.decode ( valor ) --decodificar debido a PrepareText fin fin --Punto de entrada de plantilla . Devuelve "sí" o nada dependiendo de si se encuentra la plantilla deseada . Devolverá un texto de error si no se proporciona ninguna plantilla. function p . hasTemplate ( frame ) local args = require ( 'Module:Arguments' ). getArgs ( frame ) local yesno = require ( "Module:Yesno" ) local page = args [ 1 ] o args . page local template = args [ 2                                                               ]  o  args . template local template_index = tonumber ( args [ 3 ] o args . N ) o 1 si no es template o template == "" entonces devuelve '<span class="error">No se proporcionó ninguna plantilla para hasTemplate</span>' fin local follow = yesno ( args . follow ) o false si follow entonces page = require ( "Module:Redirect" ). luaMain ( page ) fin local options = { template_index = template_index , treat_as_regex = yesno ( args . treat_as_regex ) o false , } local success , _ = p . getTemplate ( page , template , options ) devuelve success y "yes" o "" fin --Template punto de entrada para getParameter. Devuelve una cadena vacía en caso de error function p . main ( frame ) local args = require ( 'Module:Arguments' ). getArgs ( frame , { wrappers = ' Plantilla:Valor del parámetro de plantilla' } ) local yesno = require ( " Módulo : Yesno " ) local options = { template_index = args [ 3 ] o args.template_index , parameter_index = args [ 5 ] o args.parameter_index , ignore_subtemplates = yesno ( args.ignore_subtemplates o args .                                                                     ist )  o  falso , only_subtemplates = yesno ( args.only_subtemplates ) o falso , ignore_blank = yesno ( args.ignore_blank ) o falso , treat_as_regex = yesno ( args.treat_as_regex ) o falso , } página local = args [ 1 ] o args.page plantilla local = args [ 2 ] o args.template parámetro local = args [ 4 ] o args.parámetro éxito local , resultado = p.getParameter ( página , plantilla , parámetro , opciones ) si no es éxito entonces devuelve " " de lo contrario si args.dontprocess entonces devuelve resultado de lo contrario devuelve frame : preprocess ( resultado ) fin fin fin --Compatibilidad con versiones anteriores p.getValue = p.getParameter --Puntos de entrada de módulo potencialmente útiles p.matchAllTemplates = matchAllTemplates p .obtenerParámetros = obtenerParámetros p . obtenerTodosLosParámetros = obtenerTodosLosParámetros return p