stringtranslate.com

Módulo discusión:Cadena

Cómo reemplazar strings de encabezados de nivel 3 en wikitexto transcluido

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) [ responder ]

Nunca había visto la construcción #section-h antes. ¿Te importaría explicar de dónde viene? — Martin ( MSGJ  ·  discusión ) 21:50 11 jul 2023 (UTC) [ responder ]
Ver Ayuda:Sección etiquetada transclusión . * Pppery * ha comenzado... 22:09, 11 de julio de 2023 (UTC) [ responder ]
Resulta que esto no tiene nada que ver con Lua: cuando se usa un signo igual en un argumento de una plantilla o módulo, es necesario nombrar el parámetro explícitamente o escaparlo con {{=}} : {{#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) [ responder ]
Dios te bendiga, @Pppery . Eso es todo. Gracias también a @Trappist, el monje, por aplicar la solución a mi sandbox. No estoy seguro de quién de ustedes hizo qué primero, pero ambos han sido de gran ayuda y muy rápidos.
Por si tienes curiosidad, esto es para mi desarrollo de la metaplantilla {{ Constituency Teachtaí Dála navbox }} . Cuando la usé para crear {{ Kerry (Dáil circuency)/TDs }} , los encabezados de nivel 3 eran una intrusión molesta, pero ahora puedo hacer que desaparezcan del cuadro de navegación. Gracias de nuevo. Brown HairedGirl (discusión) • ( contribuciones ) 22:35, 11 de julio de 2023 (UTC) [ responder ]
Esto no es exactamente lo que estabas preguntando, pero está lo suficientemente relacionado como para que te interese: {{ Condicional de encabezado }} . Mathglot ( discusión ) 04:50 12 jul 2023 (UTC) [ responder ]
Gracias, @ Mathglot . Quiero eliminar los encabezados en lugar de promoverlos o degradarlos, por lo que no es lo que necesito en este caso. Pero es bueno saberlo para futuras referencias. Brown HairedGirl (discusión) • ( contribuciones ) 23:11 12 jul 2023 (UTC) [ responder ]

Solicitud de edición protegida el 21 de septiembre de 2023

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 translitmacro 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

Lrëm ìpsm dlr sit ämët, cnsëctëtr ädìpìscìng ëlìt. Näm mllìs, mëts äc vltpät äctr, sëm lìglä ìntërdm nllä, äc pëllëntësqë nìbh ërät sëd nìsì. Intëgër nëc äctr rcì. Qìsqë nìbh mëts, vìvërrä ët vìvërrä nëc, lärëët ìn mì. Intëgër älìqët, märìs vìtäë trìstìqë frìngìllä, äntë dì ltrìcës qäm, ët fërmëntm rcì prs nëc lrëm. Intëgër qìs vëhìclä ärc, ët lärëët ënìm. Nllä ëìsmd nëqë vëlìt, ëgët ìäclìs mässä tëmpr t. Nllä cnvällìs mäxìms nëqë ët prttìtr. En nnc ërs, cnvällìs ìd psërë äc, ëgëstäs ët ärc. Aënëän fäcìbs sllìcìtdìn ìpsm, ìn cndìmëntm märìs mäxìms ìn. Etìäm fäcìlìsìs ërs vël trtr tìncìdnt ìäclìs. Vëstìblm lrëm lëcts, psërë sëd ënìm ìn, värìs phärëträ lrëm. Mrbì nìsl läcs, ëlëìfënd t rnä vìtäë, ìntërdm cnsëqät ìpsm. Cräs t ìmpërdìët äntë. Sëd qìs lcts prs, qìs prtä ërät. Ut grävìdä grävìdä ägë ä ëìsmd.

(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 abecedariaa 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) [ responder ]

Esto parece lo suficientemente oscuro como para no pertenecer a este módulo, a menos que se pueda presentar aquí algún caso de uso real que no esté relacionado con lo que hacen otras wikis. * Pppery * ha comenzado... 22:02, 21 de septiembre de 2023 (UTC) [ responder ]
¿Qué es lo que no está claro, qué hace o su código? Lo que hace está bien explicado en la documentación de M4 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) [ responder ]
Sí, ¿y por qué debería importarnos? ¿Por qué el sistema Unicode para fracciones es superior al que se usa actualmente? ¿Por qué deberíamos inventar más formas de hacer lo mismo? *Pppery* ha comenzado... 01:33, 22 de septiembre de 2023 (UTC) [ responder ]
Creo que esta discusión empezó con el pie izquierdo. Esta es una propuesta de función genérica, no es una propuesta sobre la plantilla {{la:Ufrac}}. De hecho, la otra plantilla que utiliza esta propuesta ({{la:Sine notis diacriticis}}) hace algo completamente diferente (es decir, eliminar los acentos de las vocales). No tengo ningún problema en responder preguntas sobre {{la:Ufrac}}, pero le pediría amablemente que se mantenga dentro del tema en esta propuesta de función. Re: ¿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.}}
    ↳ 100 quilates
pero no puedes usar la solución CSS/HTML usada por {{ Fraction }} dentro de {{ Abbr }} . Pero nuevamente, dado que es una propuesta de función genérica, francamente creo que encontrará la mayoría de sus aplicaciones en la transliteración de alfabetos más que en fracciones (de hecho, ese fue solo un ejemplo). Es una funcionalidad tan básica que ha sido parte de Unix desde los viejos tiempos. Por ejemplo, si miras el código de {{la:Ufrac/par}} encontrarás
{{ #invocar : transliteración | abecedario | 0123456789 | ⁰¹²³⁴⁵⁶⁷⁸⁹ |{{{ 1 }}}}}
Todo lo que hace es asignar cada dígito a su carácter Unicode superíndice. Si quisiéramos hacer lo mismo usando {{ #invoke:string |replace}} necesitaríamos diez invocaciones de módulo. --Grufo ( discusión ) 01:55, 22 de septiembre de 2023 (UTC) [ responder ]
Ya tenemos el módulo:MultiReplace para eso. Sí, la sintaxis que usaste es un poco más concisa que la de ese módulo, pero no hay necesidad de cambiar el mundo. *Pppery* ha comenzado... 02:09, 22 de septiembre de 2023 (UTC) [ responder ]
No he hecho una prueba de velocidad, pero sospecho que la sintaxis no será lo único en lo que esta función superará ampliamente a Module:MultiReplace . De hecho, sospecho que el rendimiento será tremendamente menos costoso aquí. Esta función es menos potente (el mapeo se realiza textualmente carácter por carácter), por lo tanto, exactamente por esta razón, es posible mapear sin problemas cadenas que tienen una longitud de página, mientras que sospecho que Module:MultiReplace romperá los servidores en ese caso. Si todo esto parece poco realista, piense en la cantidad de caracteres Unicode: solo para mapear cuatro tipos de acentos en {{la:Sine notis diacriticis}} tuve que escribir la siguiente cadena:
ĀĒĪŌŪȲĂĔĬŎŬÀÈÌÒÙỲÁÉÍÓÚÝÂÊÎÔÛŶāēīōūȳăĕĭŏŭàèìòùỳáéíóúýâêîôûŷ̄̆
Te aseguro que puede haber transliteraciones mucho más complejas que esta. Y por último, pero no por ello menos importante: en términos de complejidad computacional y facilidad de uso, lo que llamas “sacudir el mundo” es más bien un regreso a los viejos tiempos. --Grufo ( discusión ) 02:26 22 septiembre 2023 (UTC) [ responder ]
Sí, ¿y realmente nos importa? No hagas afirmaciones especulativas sobre la rotura de los servidores; consulta WP:PERF . Todavía no estoy convencido de que necesitemos este nivel de complejidad en lugar de simplemente dejar que la gente escriba lo que quiera en lugar de confiar en plantillas para que lo arreglen por ellos y está claro que no nos convenceremos entre nosotros en este momento. *Pppery* ha comenzado... 02:33, 22 de septiembre de 2023 (UTC) [ responder ]
Bien. Siguiendo con este espíritu, la Wikipedia en latín pronto superará a la Wikipedia en inglés en términos de interfaz. --Grufo ( discusión ) 02:41 22 sep 2023 (UTC) [ responder ]

Solicitud de edición protegida el 25 de octubre de 2023

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) [ responder ]

Solicitud de edición protegida el 3 de septiembre de 2024

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) [ responder ]

1243840019, gracias. Od1n ( discusión ) 22:38 3 sep 2024 (UTC) [ responder ]

Solicitud de edición protegida el 18 de octubre de 2024

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, findy 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 lenfunción, para cada argumento pasado, una plantilla llamada mytemplateque 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}}

[1:5 mod 3][2:5 mod 3][3:3 mod 3][4:3 mod 3]

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) [ responder ]{{#invoke:string|len|...}}

 No hecho : El valor devuelto por una función de módulo debe ser siempre una cadena no 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) [ responder ]len
Bien, entonces parece que tendré que arreglar eso en {{ #invoke:params | mapping_by_invoking }} y convertir en cadena cualquier módulo que pueda retornar. --Grufo ( discusión ) 13:35, 18 de octubre de 2024 (UTC) [ responder ]