Módulo:String2 (editar | discusión | historial | enlaces | seguimiento | registros)
El módulo String2 contiene una serie de funciones de manipulación de cadenas que se utilizan con mucha menos frecuencia que las de Module:String . Debido a que Module:String está protegido en cascada (algunas de sus funciones se utilizan en la página principal), no puede ser editado ni mantenido por editores de plantillas, solo por administradores. Si bien es cierto que las funciones de manipulación de cadenas rara vez necesitan mantenimiento, es útil permitir que los editores de plantillas lo hagan cuando sea posible, por lo que este módulo puede ser utilizado por editores de plantillas para desarrollar nuevas funciones.
El módulo contiene tres llamadas relacionadas con mayúsculas y minúsculas que convierten las cadenas a mayúscula inicial, mayúscula inicial de oración o mayúscula inicial de título y dos llamadas que son útiles para trabajar con subcadenas. Hay otras llamadas de utilidad que eliminan los ceros iniciales de los números rellenados y transforman el texto para que no se interprete como wikitexto, y varias otras llamadas que resuelven problemas específicos para los desarrolladores de plantillas, como encontrar la posición de un fragmento de texto en una página determinada.
Las funciones están diseñadas teniendo en mente la posibilidad de trabajar con texto devuelto desde Wikidata. Sin embargo, una llamada a Wikidata puede devolver un valor vacío, por lo que las funciones generalmente deberían fallar sin problemas si se les proporciona un parámetro de entrada faltante o en blanco, en lugar de generar un error.
La función de recorte simplemente recorta los caracteres de espacio en blanco del inicio y del final de la cadena.
La función de título escribe con mayúscula la primera letra de cada palabra del texto, con excepción de una serie de palabras cortas enumeradas en el Manual de estilo de la Oficina de Imprenta del Gobierno de los EE. UU. §3.49 "Cabezas centrales y laterales": a, an, the, at, by, for, in, of, on, to, up, and, as, but, or, and nor .
Este es un algoritmo muy simplista; consulte Plantilla:Título case/doc para conocer algunas de sus limitaciones.
La función de oración encuentra la primera letra y la convierte en mayúscula, luego convierte el resto del texto en minúscula. Funciona correctamente con texto que contiene marcado wiki. Compare {{#invoke:String2|sentence|[[action game]]}}
→ Juego de acción con {{ucfirst:{{lc:[[action game]]}}}}
→ juego de acción . Los enlaces wiki entubados también se manejan de la siguiente manera:
{{#invoke:String2|sentence|[[trimix (breathing gas)|trimix]]}}
→ TrimixAsí son las listas:
{{#invoke:String2 |sentence |{{hlist ||[[apples]] |[[pears]] |[[oranges]]}}}}
→La función ucfirst es similar a sentence; convierte el primer carácter alfabético en mayúscula, pero deja inalterada la capitalización del resto del texto. Esto es útil si el texto contiene nombres propios, pero no regulariza oraciones que están en mayúsculas, por ejemplo. También funciona con texto que contiene enlaces wiki canalizados y con listas HTML.
Un problema potencial es que el uso de caracteres de patrón especial de Lua ( ^$()%.[]*+-?
) como separador probablemente causará problemas.
La función split divide el texto en los límites especificados por el separador y devuelve el fragmento correspondiente al índice idx (comenzando en 1). Puede utilizar parámetros posicionales o parámetros con nombre (pero no deben mezclarse):
{{#invoke:String2 |split |text |separator |index |true/false}}
{{#invoke:String2 |split |txt=text |sep=separator |idx=index |plain=true/false}}
Se eliminan las comillas dobles (") en el parámetro separador, lo que permite ["[
pasar espacios y texto wiki como este. Utilícelo para el carácter de barra vertical .{{!}}
|
Si el parámetro opcional plain está configurado como false / no / 0
, el separador se trata como un patrón de Lua. El valor predeterminado es plain=true, es decir, coincidencia de texto normal.
El parámetro de índice es opcional; su valor predeterminado es el primer fragmento de texto.
{ { string split }} es un contenedor de conveniencia para la función split.
La función stripZeros busca el primer número de una cadena de texto y elimina los ceros iniciales, pero conserva un cero seguido de un punto decimal. Por ejemplo: "0940" → "940"; "Año: 0023" → "Año: 23"; "00.12" → "0.12"
La función nowiki garantiza que el software MediaWiki trate una cadena de texto como una simple cadena, no como código. Recorta los espacios iniciales y finales.
La función val2percent escanea una cadena, pasada como el primer parámetro sin nombre o |txt=, y convierte cada número que encuentra en un porcentaje, luego devuelve la cadena resultante.
La función one2a escanea una cadena, pasada como el primer parámetro sin nombre o |txt=, y convierte cada aparición de 'one' en 'a' o 'an', luego devuelve la cadena resultante.
La plantilla:One2a es un contenedor conveniente para la función one2a.
La función findpagetext devuelve la posición de un fragmento de texto en el código fuente wikitext de una página. Acepta hasta cuatro parámetros:
{{#invoke:String2 |findpagetext |text=Youghiogheny}}
→{{#invoke:String2 |findpagetext |text=Youghiogheny |nomatch=not found}}
→ no encontrado{{#invoke:String2 |findpagetext |text=Youghiogheny |title=Boston Bridge |nomatch=not found}}
→ 296{{#invoke:String2 |findpagetext |text=river |title=Boston Bridge |nomatch=not found}}
→ no encontrado{{#invoke:String2 |findpagetext |text=[Rr]iver |title=Boston Bridge |plain=false |nomatch=not found}}
→ 309{{#invoke:String2 |findpagetext |text=%[%[ |title=Boston Bridge |plain=f |nomatch=not found}}
→ 294{{#invoke:String2 |findpagetext |text=%{%{[Cc]oord |title=Boston Bridge |plain=f |nomatch=not found}}
→ 2470La búsqueda distingue entre mayúsculas y minúsculas, por lo que se necesita la coincidencia de patrones de Lua para encontrar river
o River
. El último ejemplo encuentra {{coord
y {{Coord
. El penúltimo ejemplo encuentra un enlace wiki.
La plantilla:Findpagetext es un contenedor conveniente para esta función.
La función de tira elimina del primer parámetro posicional los caracteres o patrones suministrados en el segundo parámetro posicional.
{{#invoke:String2|strip|source_string|characters_to_strip|plain_flag}}
{{#invoke:String2|strip|source=|chars=|plain=}}
{{#invoke:String2|strip|abc123def|123}}
→ abcdef{{#invoke:String2|strip|abc123def|%d+|false}}
→ abcdef{{#invoke:String2|strip|source=abc123def|chars=123}}
→ abcdef{{#invoke:String2|strip|source=abc123def|chars=%d+|plain=false}}
→ abcdefLa función matchAny devuelve el índice del primer parámetro posicional que coincide con el parámetro de origen . Si el parámetro simple se establece en falso (el valor predeterminado es verdadero), las cadenas de búsqueda son patrones de Lua. Esto se puede incluir de manera útil en una declaración switch para elegir un caso switch en función del patrón con el que coincida una cadena. Devuelve la cadena vacía si no hay coincidencias, para usar en {{#if}}.
{{#invoke:String2|matchAny|123|abc|source=abc 124}}
devuelve 2.
Función hyphen_to_dash() extraída de Módulo:Cita/CS1 .
Convierte un guion en una raya en determinadas condiciones. El guion debe separar elementos iguales; los elementos diferentes se devuelven sin modificar. Se modifican estos formatos:
Cualquier otro formulario se devuelve sin modificaciones.
La cadena de entrada puede ser una lista separada por comas o puntos y comas. Los puntos y comas se convierten en comas.
{{#invoke:String2|hyphen2dash|1=1-2}}
devuelve 1–2.
{{#invoke:String2|hyphen2dash|1=1-2; 4–10}}
devuelve 1–2, 4–10.
Se admite el marcado "Aceptar tal como está escrito", p. ej., {{#invoke:String2|hyphen2dash|1=((1-2)); 4–10}}
devuelve 1-2, 4-10.
De forma predeterminada, se inserta un espacio normal después de la coma que separa las listas. Un segundo parámetro opcional permite cambiarlo por un carácter diferente (es decir, un espacio fino o un espacio pequeño).
Una función startswith similar a {{ #invoke:string |endswith}}. Ambos parámetros son obligatorios, aunque pueden estar en blanco. Se cuentan los espacios en blanco iniciales y finales; utilice parámetros con nombre para evitar esto si es necesario. La salida es "yes" para verdadero y blank para falso, por lo que se puede pasar directamente a #if.
{{#invoke:String2 | sentence |…}}
- Pone en mayúscula el primer carácter y cambia el resto a minúsculas{{ucfirst:}}
, esta llamada funciona incluso con enlaces wiki canalizados porque busca más allá de los corchetes iniciales y otros caracteres no alfanuméricos.<li>
) y cualquier enlace canalizado que pueda haber allí.{{#invoke:String2 | ucfirst |…}}
- Pone en mayúscula el primer carácter alfabético y deja el resto sin modificar{{#invoke:String2 | title |…}}
- Pone en mayúsculas todas las palabras, excepto a
, an
, the
, at
, by
, for
, in
, of
, on
, to
, up
, and
, as
, but
, or
, y nor
.{{#invoke:String2 | stripZeros |…}}
- Elimina los ceros iniciales de relleno del primer número que encuentra en la cadena.{{#invoke:String2 | title |…}}
- Representa la cadena como texto simple sin código wikiEstas funciones toman un parámetro sin nombre que comprende (o invoca como una cadena) el texto que se va a manipular:
Plantilla:String split es un contenedor conveniente para la función split.
{{String split |This is a piece of text to be split |" "}}
→ Esto{{String split |This is a piece of text to be split |" "| 4}}
→ pieza{{String split |This is a piece of text to be split |x| 2}}
→ t para ser divididoLos módulos pueden devolver cadenas con | como separadores de esta manera: {{#invoke:carousel | main | name = WPDogs | switchsecs = 5 }}
→ Hígado dálmata apilado.jpg | Perro dálmata apilado para exhibición
{{String split |{{#invoke:carousel | main | name = WPDogs | switchsecs = 5 }}|{{!}}| 2}}
→ Perro dálmata apilado para exhibiciónLos patrones de Lua pueden permitir la división en clases de caracteres como la puntuación:
{{String split |Apples, pears, oranges; Cats, dogs|"%p"| 2 |false}}
→ peras{{String split |Apples, pears, oranges; Cats, dogs|"%p"| 4 |false}}
→ GatosO dividir en cualquier cosa que no sea una letra (no se trata como falso):
{{String split |Apples pears oranges; Cats dogs|"%A+"| 4 |no}}
→ GatosLos parámetros nombrados fuerzan el recorte de los espacios iniciales y finales en los parámetros y generalmente son más claros cuando se utilizan:
{{String split | txt=Apples pears oranges; Cats dogs | sep="%A+" | idx=3 | plain=false }}
→ naranjasPlantilla:One2a es un contenedor conveniente para la función one2a.
Se conserva la capitalización. Pensado para usarse con {{ Convert }} .
{{one2a |One foot. One mile. One kilometer. One inch.One amp. one foot. one mile. one inch. Alone at last. Onely the lonely. ONE ounce. One monkey.}}
→{{convert|1|ft|spell=on}}
→ un pie (cero punto tres cero metros){{one2a|{{convert|1|ft|spell=on}}}}
→ un pie (cero punto tres cero metros){{convert|2.54|cm|0|disp=out|spell=on}}
→ una pulgada{{one2a|{{convert|2.54|cm|0|disp=out|spell=on}}}}
→ una pulgadaMódulo:Cadena para las siguientes funciones:
Plantillas y módulos relacionados con la capitalización
Palabras mágicas que reescriben la salida (copiar y pegar obtendrá el texto como se muestra, no como se ingresó):
{{lc:}}
– salida en minúsculas del texto completo{{uc:}}
– salida en mayúsculas del texto completo{{lcfirst:}}
– salida en minúsculas del primer carácter únicamente{{ucfirst:}}
– salida en mayúsculas del primer carácter únicamente
Plantillas que implementan<nowiki>
require ( 'strict' ); local p = {} p . trim = function ( frame ) return mw . text . trim ( frame . args [ 1 ] o "" ) end p . sentence = function ( frame ) -- {{lc:}} es seguro para marcadores de tira, string.lower no lo es. frame . args [ 1 ] = frame : callParserFunction ( 'lc' , frame . args [ 1 ]) return p . ucfirst ( frame ) end p . ucfirst = function ( frame ) local s = frame . args [ 1 ]; si no es s o '' == s o s : match ( '^%s+$' ) entonces -- cuando <s> es nulo, está vacío o solo hay espacios en blanco return s ; -- abandona porque no hay nada que hacer end s = mw . text . trim ( frame . args [ 1 ] o "" ) local s1 = "" local prefix_patterns_t = { -- secuencia de patrones de prefijo '^ \127 [^ \127 ]*UNIQ%-%-%a+%-%x+%-QINU[^ \127 ]* \127 ' , -- stripmarker '^([%*;:#]+)' , -- varios marcados de lista '^( \'\'\' *)' , -- marcado en negrita / cursiva '^(%b<>)' , -- etiquetas similares a html porque algunas plantillas representan estas '^(&%a+;)' , -- entidades de caracteres html porque algunas plantillas representan estas '^(&#%d+;)' ,-- entidades numéricas (decimales) html porque algunas plantillas representan estos '^(&#x%x+;)' , -- entidades numéricas html (hexadecimales) porque algunas plantillas las representan '^(%s+)' , -- cualquier carácter de espacio en blanco '^([%(%)%-%+%?%.%%!~!@%$%^&_={}/`,''„“”ʻ| \"\'\\ ]+)' , -- puntuación miscelánea } local prefixes_t = {}; -- lista, negrita/cursiva y marcado similar a html, y espacios en blanco guardados aquí local function prefix_strip ( s ) -- función local para quitar prefijos de <s> for _ , pattern in ipairs ( prefix_patterns_t ) do -- recorrer <prefix_patterns_t> if s : match ( pattern ) then -- cuando hay una coincidencia local prefix = s : match ( pattern ); -- obtener una copia del prefijo coincidente table.insert ( prefixes_t , prefix ); -- guárdalo s = s : sub ( prefix : len () + 1 ); -- elimina el prefijo de <s> return s , true ; -- devuelve <s> sin prefijo ni bandera; fuerza el reinicio al principio de la secuencia porque la eliminación de puntos misceláneos puede romper el marcador de tira end end return s ; -- no se encontró ningún prefijo; devuelve <s> con bandera nula end local prefix_removed ; -- bandera; booleano verdadero siempre que prefix_strip() encuentre y elimine un prefijo repeat -- uno por uno elimina listas, negrita/cursiva, marcado tipo html, espacios en blanco, etc. del inicio de <s> s , prefix_removed = prefix_strip ( s ); hasta ( no prefix_removed ); -- hasta que <prefix_removed> sea nulo s1 = table.concat ( prefixes_t ); -- recrea la cadena de prefijo para volver a adjuntarlo más tarde local first_text = mw . ustring . match ( s , '^%[%[[^%]]+%]%]' ); -- extrae el wikilink al comienzo de la cadena si está presente; TODO: ¿puede ser string.match()? local upcased ; si first_text entonces si first_text : match ( '^%[%[[^|]+|[^%]]+%]%]' ) entonces -- si <first_text> es un enlace canalizado upcased = mw . ustring . match ( s , '^%[%[[^|]+|%W*(%w)' ); -- obtener el primer carácter de letra upcased = mw . ustring . upper ( upcased ); -- convertir en mayúsculas el primer carácter de letra s = mw . ustring . gsub ( s , '^(%[%[[^|]+|%W*)%w' , '%1' .. upcased ); -- reemplazar de lo contrario -- aquí cuando <first_text> es un wikilink pero no un enlace canalizado upcased = mw . ustring . match ( s , '^%[%[%W*%w' ); -- obtener '[[' y la primera letra en mayúsculas y minúsculas = mw . ustring . upper ( en mayúsculas y minúsculas ); -- convertir en mayúsculas y minúsculas el primer carácter de la letra s = mw . ustring . gsub ( s , '^%[%[%W*%w' , en mayúsculas y minúsculas ); -- reemplazar; aquí no se necesita captura end elseif s : match ( '^%[%S+%s+[^%]]+%]' ) then -- si <s> es un enlace externo de algún tipo; debe tener texto de etiqueta en mayúsculas y minúsculas = mw . ustring . match ( s , '^%[%S+%s+%W*(%w)' ); -- obtener el primer carácter de la letra en mayúsculas y minúsculas = mw . ustring . upper ( en mayúsculas y minúsculas ); -- convertir en mayúsculas y minúsculas el primer carácter de la letra s = mw . ustring . gsub ( s , '^(%[%S+%s+%W*)%w' , '%1' .. en mayúsculas y minúsculas ); -- reemplazar elseif s : coincide ( '^%[%S+%s*%]' ) entonces -- si <s> es un enlace externo sin texto de etiqueta; no hay nada que hacer return s1 .. s ; -- vuelve a adjuntar la cadena de prefijo (si está presente) y listo de lo contrario -- <s> no es un wikilink o un enlace externo; asume texto simple upcased = mw . ustring . match ( s , '^%W*%w' ); -- obtiene el primer carácter de letra upcased = mw . ustring . upper ( upcased ); -- convierte en mayúsculas el primer carácter de letra s = mw . ustring . gsub ( s , '^%W*%w' , upcased ); -- reemplaza; no se necesita captura aquí end return s1 .. s ; -- vuelve a adjuntar la cadena de prefijo (si está presente) y listo end p . título = función ( marco ) -- http://grammar.yourdictionary.com/capitalization/rules-for-capitalization-in-titles.html -- recomendado por el Manual de estilo de la Imprenta del Gobierno de los Estados Unidos: -- "Ponga en mayúscula todas las palabras en los títulos de publicaciones y documentos, -- excepto a, an, the, at, by, for, in, of, on, to, up, and, as, but, or, and nor." local siempreinferior = {[ 'un' ] = 1 , [ 'un' ] = 1 , [ 'el' ] = 1 , [ 'y' ] = 1 , [ 'pero' ] = 1 , [ 'o' ] = 1 , [ 'para' ] = 1 , [ ' ni' ] = 1 , [ 'en' ] = 1 , [ 'en' ] = 1 , [ ' a ' ] = 1 , [ 'desde ' ] = 1 , [ ' por ' ] = 1 ,[ 'de' ] = 1 , [ ' arriba' ] = 1 } res local = '' s local = mw.text.trim ( frame.args [ 1 ] o "" ) palabras locales = mw.text.split ( s , " " ) para i , s en ipairs ( palabras ) hacer -- { {lc: } } es seguro para marcadores de tira, string.lower no lo es. s = frame : callParserFunction ( ' lc ' , s ) si i == 1 o alwayslower [ s ] ~ = 1 entonces s = mw . getContentLanguage (): ucfirst ( s ) end words [ i ] = s end return table.concat ( words , "" ) end -- findlast encuentra el último elemento de una lista -- el primer parámetro sin nombre es la lista -- el segundo parámetro opcional sin nombre es el separador de la lista (predeterminado = coma y espacio) -- devuelve la lista completa si no se encuentra el separador p.findlast = function ( frame ) local s = mw.text.trim ( frame.args [ 1 ] o " " ) local sep = frame.args [ 2 ] o " " if sep == "" then sep = " , " end local pattern = " . * " .. sep .. " (.*) " local a , b , last = s :encontrar ( patrón ) si a entonces devuelve último de lo contrario devuelve s fin fin -- stripZeros encuentra el primer número y quita los ceros iniciales (excepto las unidades) -- p . ej. "0940" -> "940"; " Año: 0023" -> "Año: 23"; "00.12" -> "0.12" p.stripZeros = function(frame) local s = mw.text.trim (frame.args [ 1 ] o " " ) local n = tonumber ( string.match ( s , " % d + " ) ) o " " s = string.gsub ( s , " % d + " , n , 1 ) devuelve s fin -- nowiki garantiza que el software MediaWiki trate una cadena de texto como si fuera solo una cadena -- toma un parámetro sin nombre y recorta los espacios en blanco, luego elimina cualquier código wiki p.nowiki = function ( frame ) local str = mw.text . trim ( frame . args [ 1 ] o "" ) return mw . text . nowiki ( str ) end -- split divide el texto en los límites especificados por separator -- y devuelve el fragmento para el índice idx (empezando en 1) -- #invoke:String2 |split |text |separator |index |true/false -- #invoke:String2 |split |txt=text |sep=separator |idx=index |plain=true/false -- si plain es false/no/0 entonces separator se trata como un patrón de Lua - por defecto plain=true p . split = function ( frame ) local args = frame . args si no ( args [ 1 ] o args . txt ) entonces args = frame : getParent (). args end local txt = args [ 1 ] o argumentos . txt o "" si txt == "" entonces devuelve nil fin local sep = ( args [ 2 ] o args . sep o "" ): gsub ( '"' , '' ) local idx = tonumber ( args [ 3 ] o args . idx ) o 1 local plain = ( args [ 4 ] o args . plain o "true" ): sub ( 1 , 1 ) plain = ( plain ~= "f" y plain ~= "n" y plain ~= "0" ) local splittbl = mw . text . split ( txt , sep , plain ) si idx < 0 entonces idx = # splittbl + idx + 1 fin devuelve splittbl [ idx ] fin -- val2percent escanea una cadena, pasada como el primer parámetro sin nombre o |txt= -- convierte cada número que encuentra en un porcentaje y devuelve el cadena resultante. p . val2percent = function ( frame ) local args = frame . args si no ( args [ 1 ] o args . txt ) entonces args = frame : getParent () . args fin local txt = mw . text . trim ( args [ 1 ] o args . txt o "" ) si txt == "" entonces devuelve nil fin de la función local v2p ( x ) x = ( tonumber ( x ) o 0 ) * 100 si x == math.floor ( x ) entonces x = math.floor ( x ) fin devuelve x .. "%" fin txt = txt : gsub ( "%d[%d%.]*" , v2p ) -- almacena solo la cadena de retorno txt fin -- one2a escanea una cadena, pasada como el primer parámetro sin nombre o |txt= -- convierte cada ocurrencia de 'one ' en 'a ' o 'an ' y devuelve la cadena resultante. p . one2a = function ( frame ) local args = frame . args si no ( args [ 1 ] o args . txt ) entonces args = frame : getParent (). args fin local txt = mw . text . trim ( args [ 1 ] o args.txt o "" ) si txt == " " entonces devuelve nil fin txt = txt : gsub ( " uno" , "un" ): gsub ( "^uno" , "un" ): gsub ( "Uno" , "Un" ): gsub ( "un ([aeiou])" , "un %1" ): gsub ( "Un ([aeiou])" ,"Un %1" ) devuelve txt end -- findpagetext devuelve la posición de un fragmento de texto en una página -- El primer parámetro posicional o |text es el texto de búsqueda -- El parámetro opcional |title es el título de la página, por defecto la página actual -- El parámetro opcional |plain es verdadero para una búsqueda simple (predeterminado) o falso para una búsqueda de patrones de Lua -- El parámetro opcional |nomatch es el valor de retorno cuando no se encuentra ninguna coincidencia; el valor predeterminado es nil p . _findpagetext = function ( args ) -- parámetros del proceso local nomatch = args . nomatch o "" si nomatch == "" entonces nomatch = nil fin -- local text = mw . text . trim ( args [ 1 ] o args . text o "" ) si text == "" entonces devuelve nil fin -- local title = args . title o "" local titleobj si title == "" entonces titleobj = mw . title . getCurrentTitle () de lo contrario titleobj = mw . title . new ( title ) fin -- local plain = args . simple o "" si es simple : sub ( 1 , 1 ) == " f " entonces simple = falso de lo contrario simple = verdadero fin -- obtener el contenido de la página y buscar 'texto' - devolver la posición o nomatch local content = titleobj y titleobj : getContent ( ) devolver contenido y mw.ustring.find ( contenido , texto , 1 , simple ) o nomatch fin p.findpagetext = function ( frame ) local args = frame.args local pargs = frame : getParent (). args para k , v en pares ( pargs ) hacer args [ k ] = v fin si no ( args [ 1 ] o args . text ) entonces devuelve nil fin -- solo el primer valor return ( p . _findpagetext ( args )) fin -- devuelve la url decodificada. Inversa de la función del analizador {{urlencode:val|TYPE}} -- El tipo es: -- QUERY decodifica + a espacio (predeterminado) -- PATH no realiza decodificación adicional -- WIKI decodifica _ a espacio p . _urldecode = function ( url , type ) url = url o "" type = ( type == "PATH" o type == "WIKI" ) y type devuelve mw . uri . decode ( url , type ) fin -- {{#invoke:String2|urldecode|url=url|type=type}} p . urldecode = function ( frame ) return mw . uri . decode ( frame . args . url , frame . args . type ) fin -- lo que sigue se fusionó desde Module:StringFunc -- funciones auxiliares p . _GetParameters = require ( 'Module:GetParameters' ) -- Función auxiliar de lista de argumentos, según Module:String p . _getParameters = p . _GetParameters . getParameters -- Función auxiliar de patrón de escape para que todos los caracteres se traten como texto sin formato, según Module:String function p . _escapePattern ( pattern_str ) return mw . ustring . gsub ( pattern_str , "([%(%)%.%%%+%-%*%?%[%^%$%]])" , "%%%1" ) end -- Función auxiliar para interpretar cadenas booleanas, según Module:String p . _getBoolean = p . _GetParameters . getBoolean --[[ Strip Esta función quita caracteres de la cadena Uso: {{#invoke:String2|strip|source_string|characters_to_strip|plain_flag}} Parámetros source: La cadena a quitar chars: El patrón o lista de caracteres a quitar de la cadena, reemplazado por '' plain: Una bandera que indica que los caracteres deben entenderse como texto sin formato. El valor predeterminado es verdadero. Los espacios en blanco iniciales y finales también se quitan automáticamente de la cadena. ]] function p . strip ( frame ) local new_args = p . _getParameters ( frame.args , { ' fuente' , ' caracteres' , ' normal ' } ) local source_str = new_args [ ' fuente ' ] o '' local chars = new_args [ 'caracteres' ] o ' ' o ' caracteres ' source_str = mw.text.trim ( source_str ) si source_str == '' o chars == '' entonces devuelve source_str fin local l_plain = p._getBoolean ( new_args [ ' normal ' ] o verdadero ) si l_plain entonces chars = p._escapePattern ( chars ) fin local result result = mw.ustring.gsub ( source_str , " [ " .. chars .. " ] " ,'' ) devuelve resultado final --[[ Coincide con cualquier Devuelve el índice del primer patrón dado que coincide con la entrada. Los patrones deben estar numerados consecutivamente. Devuelve la cadena vacía si no coincide nada para usar en {{#if:}} Uso: {{#invoke:String2|matchAll|source=123 abc|456|abc}} devuelve '2'. Parámetros: source: la cadena a buscar plain: una bandera que indica que los patrones deben entenderse como texto sin formato. predeterminado a verdadero. 1, 2, 3, ...: los patrones a buscar ]] function p . matchAny ( frame ) local source_str = frame . args [ 'source' ] o error ( 'El parámetro source es obligatorio.' ) local l_plain = p . _getBoolean ( frame . args [ 'plain' ] o verdadero ) para i = 1 , math.huge do local pattern = frame . args [ i ] si no es patrón entonces devuelve '' fin si mw . ustring . find ( source_str , pattern , 1 , l_plain ) then return tostring ( i ) end end end --[[--------------------------< HYPHEN _ TO _ DASH >-------------------------------------------------- Convierte un guión en un guión bajo ciertas condiciones. El guión debe separar elementos iguales; los elementos diferentes se devuelven sin modificar. Estas formas se modifican: letra - letra (A - B) dígito - dígito (4-5) separador de dígitos dígito - separador de dígitos dígito (4.1-4.5 o 4-1-4-5) letradígito - letradígito (A1-A5) (se admite un separador opcional entre letra y dígito: a.1-a.5 o a-1-a-5) letradígito - letradígito (5a - 5d) ( se admite un separador opcional entre letra y dígito: 5.a-5.d o 5-a-5-d) cualquier otra forma se devuelve sin modificar. str puede ser una lista separada por comas o punto y coma ]] función p . hyphen_to_dash ( str , espaciado ) si ( str == nil o str == '' ) entonces retorna str fin local accept str = mw . text . decode ( str , true ) -- reemplaza las entidades html con sus caracteres; el punto y coma estropea el texto. split local out = {} local list = mw . text . split ( str , '%s*[,;]%s*' ) -- divide str en separadores de coma o punto y coma si hay alguno for _ , item in ipairs ( list ) do -- para cada elemento en la lista item = mw . text . trim ( item ) -- recorta espacios en blanco item , accept = item : gsub ( '^%(%((.+)%)%)$' , '%1' ) si accept == 0 y mw . ustring . match ( item , '^%w*[%.%-]?%w+%s*[%-–—]%s*%w*[%.%-]?%w+$' ) entonces -- si es un rango con guion o tiene separadores de guion largo o guion largo if item : match ( '^%a+[%.%-]?%d+%s*%-%s*%a+[%.%-]?%d+$' ) o -- letterdigit hyphen letterdigit (separador opcional entre letra y dígito) item : match ( '^%d+[%.%-]?%a+%s*%-%s*%d+[%.%-]?%a+$' ) o -- digitletter hyphen digitletter (separador opcional entre dígito y letra) item : match ( '^%d+[%.%-]%d+%s*%-%s*%d+[%.%-]%d+$' ) o -- separador de dígitos dígito guión separador de dígitos dígito elemento : coincidencia ( '^%d+%s*%-%s*%d+$' ) o -- dígito guión dígito elemento : coincidencia ( '^%a+%s*%-%s*%a+$' ) entonces -- letra guión letra elemento = elemento : gsub ( '(%w*[%.%-]?%w+)%s*%-%s*(%w*[%.%-]?%w+)' , '%1–%2' ) -- reemplazar guion, eliminar caracteres de espacio extraños , de lo contrario item = mw . ustring . gsub ( item , '%s*[–—]%s*' , '–' ) -- para rangos separados por endash o emdash, reemplace em con en, elimine espacios extraños end end table.insert ( out , item ) -- agregue el elemento (posiblemente modificado) a la tabla de salida end local temp_str = table.concat ( out , ',' .. spacing ) -- concatene la tabla de salida en una cadena separada por comas temp_str , accept = temp_str : gsub ( '^%(%((.+)%)%)$' , '%1' ) -- elimine el marcado accept-this-as-written cuando envuelva todos los out concatenados if accept ~= 0 then temp_str = str : gsub ( '^%(%((.+)%)%)$' , '%1' ) -- cuando se elimine el marcado global, devuelva la cadena original; hazlo de esta manera para suprimir el segundo valor de retorno booleano end return temp_str end function p . hyphen2dash ( frame ) local str = frame . args [ 1 ] o '' local spacing = frame . args [ 2 ] o ' ' - el espacio es parte del separador estándar para el espaciado normal (pero en conjunción con las plantillas r/rp/ran podemos necesitar un espaciado más angosto return p . hyphen_to_dash ( str , spacing ) end - Similar a [[Module:String#endswith]] function p . startswith ( frame ) return ( frame . args [ 1 ]: sub ( 1 , frame . args [ 2 ]: len ()) == frame . args [ 2 ]) y 'sí' o '' fin - Implementa la función [[Plantilla:Isnumeric]] p . isnumeric ( frame ) local s = frame . args [ 1 ] o frame : getParent (). args [ 1 ] local boolean = ( frame . args . boolean o frame : getParent (). args . boolean ) == 'true' si type ( s ) == 'string' y mw . getContentLanguage (): parseFormattedNumber ( s ) entonces devuelve booleano y 1 o s fin devuelve booleano y 0 o '' fin devuelve p