stringtranslate.com

Módulo: String2

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