Página 1 de 1

[RESUELTO] Seleccionar texto entre delimitadores con macro

NotaPublicado: Mar Feb 02, 2016 12:39 am
por robinlambada
Hola, muchas gracias por ayudar al personal.

Necesito que se automatice la selección de el texto escrito entre los delimitadores "[tex]" y "[/tex]" , es decir que "me marque en azul " (seleccione ) si ve escrito [tex]seleccioname [/tex] (solo marcaria en azul "seleccioname", el objetivo es que seleccione fórmulas que están escritas en látex , para que una vez seleccionado el texto se ejecute la combinación de teclas "Ctrl+A" que es el comando abreviado que me abre el editor de ecuaciones y me introduce la fórmula, es decir lo escrito entre los delimitadores "[tex]" y "[/tex]".

Resumiendo quiero una macro que me busque los caracteres "[tex]" y me seleccione el texto a partir del delimitador hasta el proximo delimitador final "[/tex]". Una vez seleccionado el texto ejecute la secuencia de techas "Ctrl+A" .

¿Se podría hacer?
Muchas gracias.

Saludos. Juan Antonio.

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Mar Feb 02, 2016 9:23 pm
por mauricio
Con Python es trivial...
Código: Seleccionar todo   Expandir vistaContraer vista
def buscar_texto():
    doc = XSCRIPTCONTEXT.getDocument()
    descriptor = doc.createSearchDescriptor()
    descriptor.setSearchString('(?<=\])(.*)(?=\[)')
    descriptor.SearchCaseSensitive = False
    descriptor.SearchRegularExpression = True
    found = doc.findAll(descriptor)
    doc.getCurrentController().select(found)
    for i in range(found.getCount()):
        f = found.getByIndex(i)
        print (f.getString())
    return

y obtengo:
Código: Seleccionar todo   Expandir vistaContraer vista
seleccioname
seleccioname
seleccioname
seleccioname
seleccioname

La segunda parte no la entendí...

Saludos

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Mar Feb 02, 2016 10:40 pm
por robinlambada
Muchimas gracias por responder, pero no me he explicado bien.

Yo tengo un texto como el siguente:
..................................................................................................................................

Entonces despejando x obtengo [tex]x=2+3^2\sqr(x)[/tex] la ecuación [tex]3/5X(x-4)=9[/tex]

.... [tex]x+y< 5x+z[/tex].....
..........................................................................................................................................
Y Quiero que la macro me "marque" o "seleccione", (igual que si yo dejo pulsada la tecla mayus y pulso el cursor derecha a la vez (como para poner texto en negrita)) lo que está entre [tex] y [/tex]
Aquí os dejo una captura de pantalla, donde se ve más claro lo que quiero.

Muchas gracias.

P.D.:¿Conoces Basic? Perdona que no conozca Python aunque sea trivial. ¿podrías ayudarme dándome una idea en basic?.
Si no aprendere Python, que remedio.

Agradecido por tu tiempo, quedo a tu disposición para cualquier aclaración.

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Mar Feb 02, 2016 10:49 pm
por mauricio
Me gusto para agregarlo a EasyDev, con lo cual podrás usarlo desde Basic...

Si, entiendo lo que quieres hacer, la selección con mi código la hace tal cual la muestras, pero al probar con tus formulas, no selecciona todas, la razón es que varios de los símbolos usados, se usan como modificadores de la expresión regular de búsqueda, esto ultimo solo lo estoy suponiendo...

Mientras algún compañero, mejor entrenado con las expresiones regulares nos ayuda, yo lo integro a EasyDev para poder usarse de Basic...

Por otra parte, si vas a reemplazar estas cadenas por sus formulas... ¿por qué no automatizar todo y que te las cambie todas por sus respectivas formulas si tener que ir presionando CTRL+A en cada una?

Saludos

Supongo que tienes personalizado CTRL+A, en mi sistema, esta combinación selecciona todo el texto...

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Mar Feb 02, 2016 11:04 pm
por mauricio
Con la siguiente expresión regular, obtenemos correctamente las formulas...
Código: Seleccionar todo   Expandir vistaContraer vista
'(?<=\[tex]).*?(?=\[\/tex])'

foro.png

Saludos

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Mar Feb 02, 2016 11:43 pm
por robinlambada
Ok, muchas gracias, si lo que pretendo es que se automatice todo, la selección y la secuencia ctrl+A para cada selección, que efectivamente está personalizada (ctrl+A), a me abra el editor de ecuaciones, en definitiva que lo seleccionado me lo genera en una fórmula comprensible de forma fácil .

Gracias, investigare como implementarla.

Saludos.

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Mié Feb 03, 2016 12:13 am
por mauricio
Esto me gusta para agregarlo a EasyDev, que es una extensión para facilitar el desarrollo de macros desde Basic y otros lenguajes de macros: http://easydev.readthedocs.org/en/latest/

CTRL+A... ¿solo te abre el editor de ecuaciones o hace algo más?, si me muestras el código sería mucho mejor...

Saludos

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Mié Feb 03, 2016 5:19 am
por mauricio
He agregado soporte para las búsquedas en esta rama: https://github.com/UniversoLibreMexicoA ... elop/files

Ahora puedes usarlo desde Basic:
Código: Seleccionar todo   Expandir vistaContraer vista
Sub SearchWriter()
   util = createUnoService("org.universolibre.EasyDev")
   opt = createUnoStruct("org.universolibre.EasyDev.SearchReplace")
   
   doc = ThisComponent
   opt.Doc = doc
   opt.Search = "(?<=\[tex]).*?(?=\[\/tex])"
   opt.RegularExpression = True
   
   found = util.search(opt)
   util.selectText(doc, found)
End Sub

Por favor, validado para poder pasarlo a producción...

Saludos

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Jue Feb 04, 2016 1:38 am
por robinlambada
Hola al ejecutarlo, me da el siguiente error.

Gracias.

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Jue Feb 04, 2016 2:59 am
por mauricio
¿Instalaste EasyDev?... te puse el enlace...

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Mié Feb 10, 2016 9:38 pm
por robinlambada
Primero disculpa que no te respondiera antes, pero estas dos semanas pasadas y las próximas voy a estar muy ocupado.
Gracias, ya me funciona, con el enlace que descargue.
Eres un genio.

Ahora, cuando ejecuto la macro me selecciona todos los textos entre los delimitadores, pero disculpa mi ignorancia y mi falta de tiempo, casi olvide el basic.

Quisiera introducir que cada vez que encuentre untexto entre [tex] y [\tex] además de que me lo seleccione (que ya lo hace gracias a tí) me ejecute en cada uno la secuencia de teclas Ctrl+A ( es decir para cada pareja de [tex] y [\tex]) y busque la siguiente y haga lo mismo, no que me deje seleccionadas todos los grupos a la vez como me hace ahora.

Supongo que en teste codigo
-----------------------------------------------
REM ***** BASIC *****



Sub SearchWriter()
util = createUnoService("org.universolibre.EasyDev")
opt = createUnoStruct("org.universolibre.EasyDev.SearchReplace")

doc = ThisComponent
opt.Doc = doc
opt.Search = "(?<=\[tex]).*?(?=\[\/tex])"
opt.RegularExpression = True

found = util.search(opt)
util.selectText(doc, found)
End Sub

----------------------------

supongo que para cada bucle, después de la selección que creo ó intuyo que es

util.selectText(doc, found)

¿Abría que poner until.(pulsar teclas crtl +A)(doc,found)
O algo parecido?, la verdad es que no tengo ni idea de la programación de macros (perdoname), es mi primera macro.

Pero siento que lo más difícil ya esta hecho, sólo falta añadir que cada vez que me seleccione el texto ejecute pulsar las teclas ctrl mas la tecla A.

Muchisímas gracias.

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Mié Feb 10, 2016 9:56 pm
por robinlambada
Por si te sirve de ayuda y en el documento solo hay un texto para seleccionar , es decir solo una pareja [tex] y [\tex], me funciona semi-automático, porque después de ejecutar la macro (me deja el cursor al final del texto antes de [\tex]) y presiono ctrl+A me ¡¡FUNCIONA!! lo que quiero.

Ahora solo basta que incorpore ctrl+A, y lo repita para cada "fórmula en latex", es decir para cada par de delimitadores.

Realmente, esto es muy importante para mi, pues debo de transcribir muchas fórmulas del latex a la visión "dibujada" del editor de ecuaciones.

Y realmente esto que te pido, no es nada muy particular o extravagante, pues el latex es el lenguaje universal para poner fórmulas científicas en documentos. Esta función es realmente útil a muchísima gente de ciencias. ( lo único que cambia de unos compiladores a otros son los delimitadores, que usa, a veces $$ [tex]).

Realmente si funciona lo publicare, en los foros de matemáticas y de ciencias. Esto dota de gran compatibilidad de writer con latex ( yo diria que total compatibilidad, más bien facilidad, pues compatible ya lo es.)
P.D.: Perdona lo extenso de mi discurso, pero estoy emocionado.
Gracias, Gracias.

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Mié Feb 10, 2016 10:12 pm
por mauricio
Pues vamos a terminarlo compañero... dime que hace exactamente CTRL+A, para que veamos si podemos automatizarlo... anexa un ejemplo de como queda al final...

Saludos

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Mié Feb 10, 2016 11:36 pm
por robinlambada
Ok.
parto de varias formulas, lo hago solo para una. ya seleccionada con tu macro.

selecciona1.png
esto es lo que hace tu macro
selecciona1.png (2.16 KiB) Visto 5163 veces


contrlA.png
cuando pulso ctrl+a ( en minusculas)
contrlA.png (2.44 KiB) Visto 5163 veces


Lo que tengo automatizado con control +a es que me habra el editor de ecuaciones, no el que está por defecto en office, sino el complemento para latex el del icono de la letra griega "pi"
complemento para latex.png
me ahorro pulsar el editor y escribir la fórmula en el y luego darle a cerrar
complemento para latex.png (2.42 KiB) Visto 5163 veces



Espero haber sido claro.

Un abrazo.

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Mié Feb 10, 2016 11:41 pm
por mauricio

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Mié Feb 10, 2016 11:47 pm
por robinlambada
Si esta. exacto

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Jue Feb 11, 2016 4:16 am
por mauricio
Ahora si me deberás una comida... EasyDev tiene soporte para llamar a otras macros, así que solo fue cuestión de saber que macro llamar y listo.

El siguiente código te convierte todas las ecuaciones que encuentre en el formato indicado con las opciones predeterminados de la extensión TextMath:
Código: Seleccionar todo   Expandir vistaContraer vista
Sub LatexToMath()
    util = createUnoService("org.universolibre.EasyDev")
    opt = createUnoStruct("org.universolibre.EasyDev.SearchReplace")

   macro = createUnoStruct("org.universolibre.EasyDev.Macro")
   macro.Library = "TexMaths"
   macro.Module = "TexMathsEquations"
   macro.Name = "Main"
   macro.Language = "Basic"
   
    doc = ThisComponent
    opt.Doc = doc
    opt.Search = "(?<=\[tex]).*?(?=\[\/tex])"
    opt.RegularExpression = True
   
    found = util.search(opt)
    For i = 0 To found.getCount() - 1
       sel = found.getByIndex(i)
       util.selectText(doc, sel)
       util.callMacro(macro, Array())
    Next i   
End Sub

pero... (dicen que siempre hay un pero...) en lo personal veo mal que quede la formula entre las etiquetas...

Saludos

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Lun Feb 15, 2016 12:48 am
por robinlambada
Muchas gracias , funciona a las mil maravillas.

No te preocupes por las etiquetas [tex] que ejecuto una macro que cree con el grabador de macros y me las borra al final.

Eso ya intento unificarlas en una sola macro, o si no tampoco es tan complicado ejecutar 2 macros.

¡¡Felicidades!!

Re: seleccionar un texto entre delimitadores con macro

NotaPublicado: Lun Feb 15, 2016 3:56 am
por mauricio
Si consideras que la pregunta ha sido respondida, por favor, marca como resuelto el tema, gracias.