Estoy intentando usar replace para eliminar los encabezados de nivel 3 de una transclusión de #TD de Dublín Noroeste (distrito electoral de Dáil) .
Sin embargo, {{#invoke:String|replace|{{trim|{{#section-h:Dublin North-West (Dáil constituency)|TDs}}}}|%=%=%=[^%=]*%=%=%=||plain=false}}
deja los encabezados de nivel 3 en su lugar; consulte mi página de prueba /sandbox en special:permalink/1164910747
¿Alguna sugerencia? Si te sirve de ayuda, no dudes en editar esa zona de pruebas. Brown HairedGirl (discusión) • ( contribuciones ) 21:13 11 jul 2023 (UTC)
{{#invoke:String|replace|{{trim|{{#section-h:Dublin North-West (Dáil constituency)|TDs}}}}|pattern=%=%=%=[^%=]*%=%=%=|replace=|plain=false}}
debería funcionar. * Pppery * ha comenzado... 22:09, 11 de julio de 2023 (UTC) En la Wikipedia en latín he creado un pequeño módulo llamado Módulo:Translitteratio, que contiene una única función llamada abecedaria
. La función acepta tres parámetros y funciona exactamente como la translit
macro M4 (pero con el orden de los argumentos cambiado a caracteres, reemplazo, cadena). Por ejemplo,
{{#invoke:translitteratio|abecedaria|aeiou|äëì|Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mollis, metus ac volutpat auctor, sem ligula interdum nulla, ac pellentesque nibh erat sed nisi. Integer nec auctor orci. Quisque nibh metus, viverra et viverra nec, laoreet in mi. Integer aliquet, mauris vitae tristique fringilla, ante odio ultrices quam, et fermentum orci purus nec lorem. Integer quis vehicula arcu, et laoreet enim. Nulla euismod neque velit, eget iaculis massa tempor ut. Nulla convallis maximus neque et porttitor. In nunc eros, convallis id posuere ac, egestas et arcu. Aenean faucibus sollicitudin ipsum, in condimentum mauris maximus in. Etiam facilisis eros vel tortor tincidunt iaculis. Vestibulum lorem lectus, posuere sed enim in, varius pharetra lorem. Morbi nisl lacus, eleifend ut urna vitae, interdum consequat ipsum. Cras ut imperdiet ante. Sed quis luctus purus, quis porta erat. Ut gravida gravida augue a euismod.}}
genera
(Puedes experimentar con ello en la página sandbox de Wikipedia en latín)
Esto permitió escribir la plantilla {{la:Sine notis diacriticis}}, que transforma las vocales con varios acentos en vocales simples, y la plantilla {{la:Ufrac}}, que escribe fracciones utilizando solo caracteres Unicode (no HTML).
Creo que Module:String se beneficiaría de esta función, con su nombre cambiado de abecedaria
a translit
.
Traducido al español el código a agregar a este módulo sería:
str . translit = función ( marco ) argumentos locales = marco.argssi args [ 1 ] == nulo o args [ 1 ] == '' o args [ 3 ] == nulo o args [ 3 ] == '' entonces devuelve '' fin npairs locales texto local = mw . text . split ( args [ 3 ], '' , true ) eliminaciones locales = mw . text . split ( args [ 1 ], '' , true ) sustituciones locales si args [ 2 ] ~= nulo entonces sustituenda = mw.text.split ( args [ 2 ] , '' , true ) de lo contrario sustituenda = { } fin si # eliminanda > # sustituyenda entonces npares = # sustituyenda de lo contrario npares = # eliminanda finpara idx1 = 1 , npairs hacen para idx2 = 1 , # texto hacen si texto [ idx2 ] == removenda [ idx1 ] entonces texto [ idx2 ] = substituenda [ idx1 ] fin fin finpara idx1 = npairs + 1 , # removenda hacer para idx2 = 1 , # texto hacer si texto [ idx2 ] == removenda [ idx1 ] entonces tabla.remove ( texto , idx2 ) fin fin findevuelve tabla.concat ( texto )findevolver cadena
Grufo ( discusión ) 17:40 21 sep 2023 (UTC)
translit
(es solo un clon). En cuanto a lo que se puede hacer con él , creo que la plantilla {{la:Ufrac}} no tiene idiomas. --Grufo ( discusión ) 01:28 22 sep 2023 (UTC) ¿Por qué deberíamos inventar más formas de hacer lo mismo?Porque hay muchos casos en los que no tienes alternativas. Por ejemplo, puedes escribir,
100 {{Abbr|carats|A carat is ¹⁄₁₇₂₈ of a pound.}}
{{ #invocar : transliteración | abecedario | 0123456789 | ⁰¹²³⁴⁵⁶⁷⁸⁹ |{{{ 1 }}}}}
ĀĒĪŌŪȲĂĔĬŎŬÀÈÌÒÙỲÁÉÍÓÚÝÂÊÎÔÛŶāēīōūȳăĕĭŏŭàèìòùỳáéíóúýâêîôûŷ̄̆
Por favor, añada r a la palabra fist (dando como resultado fi r st ), línea número 61. Nishimoto, Gilberto Kiyoshi ( discusión ) 18:11 25 oct 2023 (UTC)
Todos los caracteres especiales pseudo-regex de Lua están en el rango ASCII. Consulte en:UTF-8#Encoding . Por lo tanto, no necesitamos usar las (costosas) mw.ustring.*
funciones en algunas partes que he revisado.
Mi solicitud es reemplazar:
función str . _escapePattern ( patrón_str ) devolver mw . ustring . gsub ( patrón_str , "([%(%)%.%%%+%-%*%?%[%^%$%]])" , "%%%1" ) fin
con:
función str . _escapePattern ( patrón_str ) return ( string.gsub ( patrón_str , "[%(%)%.%%%+%-%*%?%[%^%$%]]" , "%%%0" ) ) fin
(También estoy eliminando el grupo de captura, que no es necesario ya que podemos usar toda la captura "%0")
( edición: también estoy aprovechando la oportunidad, para mayor robustez, de agregar paréntesis para descartar el segundo valor (número de reemplazos) devuelto por estas funciones gsub(), y luego por _escapePattern(). Cuanto más encuentro esta característica de Lua de "múltiples valores devueltos", más pienso que fue una idea de diseño terrible)
Segundo cambio: línea 409, podemos reemplazar de manera similar:
replace = mw . ustring . gsub ( replace , "%%" , "%%%%" ) --Solo es necesario escapar las secuencias de reemplazo.
con:
replace = string.gsub ( replace , "%%" , "%%%%" ) --Solo es necesario escapar las secuencias de reemplazo.
Estos cambios reducirían significativamente la sobrecarga de tener el "modo simple" habilitado en las funciones de este módulo.
Od1n ( discusión ) 03:26 3 sep 2024 (UTC)
El valor devuelto por una función de módulo siempre debe ser una cadena, sin embargo, algunas funciones aquí devuelven números (estos son len
, str_find
, find
y count
). ¿Podrías aplicar esta diferencia ? Puedes simplemente copiar y pegar el código en este enlace permanente .
Aunque esto no se nota cuando se usa en un wikitexto normal, puede crear problemas cuando se invoca Module:String usando otros módulos.
Por ejemplo, centrándose en la len
función, para cada argumento pasado, una plantilla llamada mytemplate
que contiene el siguiente código
{{ #invoke : params | asignación_por_invocación | cadena | longitud | asignación_por_reemplazo | ^.*$ | %0 mod 3 | 1 | para_cada | [$#:$@] }}
Debería imprimir[PARAMETER-NAME:LENGTH-OF-PARAMETER mod 3]
El código anterior invoca para cada parámetro pasado. Luego intenta reemplazar las longitudes guardadas con , es decir, agregando al final de cada parámetro. Y así, por ejemplo, debería imprimir{{#invoke:string|len|...}}
%0 mod 3
mod 3
{{mytemplate|hello|world|foo|bar}}
Sin embargo, dado que devuelve un número, cualquier intento de realizar una manipulación de cadena con el número devuelto generará un error. --Grufo ( discusión ) 05:17, 18 de octubre de 2024 (UTC) {{#invoke:string|len|...}}
El valor devuelto por una función de módulo debe ser siempre una cadenano es verdadero. mw:Extension:Manual de referencia de Scribunto/Lua#Devolver estados de texto
La función de módulo normalmente debería devolver una sola cadena; cualquier valor que se devuelva se pasará a través de tostring() y luego se concatenará sin separador.Además, cuando se llama a una función de módulo desde otro código Lua, ni siquiera eso se aplica; en ese caso es como cualquier otra función Lua. También observo que este cambio puede romper otro código que llama a estas funciones (si por alguna razón llama a funciones desde este módulo en lugar de llamar directamente a las funciones de manipulación de cadenas de Scribunto) que esperan un número deo similar. Anomie ⚔ 11:12, 18 de octubre de 2024 (UTC)
len