[RESUELTO] Seleccionar texto entre delimitadores con macro

Discute sobre el procesador de textos
Responder
robinlambada
Mensajes: 9
Registrado: Mar Feb 02, 2016 12:25 am

[RESUELTO] Seleccionar texto entre delimitadores con macro

Mensaje 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.
Última edición por mauricio el Vie Abr 07, 2017 5:09 am, editado 2 veces en total.
Razón: Marcar icono de resuelto
libreoffice 4.4.5.2 en windows 10
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: seleccionar un texto entre delimitadores con macro

Mensaje por mauricio »

Con Python es trivial...

Código: Seleccionar todo

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

seleccioname
seleccioname
seleccioname
seleccioname
seleccioname
La segunda parte no la entendí...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
robinlambada
Mensajes: 9
Registrado: Mar Feb 02, 2016 12:25 am

Re: seleccionar un texto entre delimitadores con macro

Mensaje 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.
Adjuntos
OPENOFFICE.png
libreoffice 4.4.5.2 en windows 10
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: seleccionar un texto entre delimitadores con macro

Mensaje 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...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: seleccionar un texto entre delimitadores con macro

Mensaje por mauricio »

Con la siguiente expresión regular, obtenemos correctamente las formulas...

Código: Seleccionar todo

'(?<=\[tex]).*?(?=\[\/tex])'
foro.png
Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
robinlambada
Mensajes: 9
Registrado: Mar Feb 02, 2016 12:25 am

Re: seleccionar un texto entre delimitadores con macro

Mensaje 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.
libreoffice 4.4.5.2 en windows 10
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: seleccionar un texto entre delimitadores con macro

Mensaje 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
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: seleccionar un texto entre delimitadores con macro

Mensaje 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

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
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
robinlambada
Mensajes: 9
Registrado: Mar Feb 02, 2016 12:25 am

Re: seleccionar un texto entre delimitadores con macro

Mensaje por robinlambada »

Hola al ejecutarlo, me da el siguiente error.

Gracias.
Adjuntos
ERROR MACRO.png
libreoffice 4.4.5.2 en windows 10
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: seleccionar un texto entre delimitadores con macro

Mensaje por mauricio »

¿Instalaste EasyDev?... te puse el enlace...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
robinlambada
Mensajes: 9
Registrado: Mar Feb 02, 2016 12:25 am

Re: seleccionar un texto entre delimitadores con macro

Mensaje 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.
libreoffice 4.4.5.2 en windows 10
robinlambada
Mensajes: 9
Registrado: Mar Feb 02, 2016 12:25 am

Re: seleccionar un texto entre delimitadores con macro

Mensaje 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.
libreoffice 4.4.5.2 en windows 10
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: seleccionar un texto entre delimitadores con macro

Mensaje 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
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
robinlambada
Mensajes: 9
Registrado: Mar Feb 02, 2016 12:25 am

Re: seleccionar un texto entre delimitadores con macro

Mensaje por robinlambada »

Ok.
parto de varias formulas, lo hago solo para una. ya seleccionada con tu macro.
esto es lo que hace tu macro
esto es lo que hace tu macro
selecciona1.png (2.16 KiB) Visto 8328 veces
cuando pulso ctrl+a ( en minusculas)
cuando pulso ctrl+a ( en minusculas)
contrlA.png (2.44 KiB) Visto 8328 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"
me ahorro pulsar el editor y escribir la fórmula en el y luego darle a cerrar
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 8328 veces

Espero haber sido claro.

Un abrazo.
libreoffice 4.4.5.2 en windows 10
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: seleccionar un texto entre delimitadores con macro

Mensaje por mauricio »

______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
robinlambada
Mensajes: 9
Registrado: Mar Feb 02, 2016 12:25 am

Re: seleccionar un texto entre delimitadores con macro

Mensaje por robinlambada »

Si esta. exacto
libreoffice 4.4.5.2 en windows 10
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: seleccionar un texto entre delimitadores con macro

Mensaje 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

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
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
robinlambada
Mensajes: 9
Registrado: Mar Feb 02, 2016 12:25 am

Re: seleccionar un texto entre delimitadores con macro

Mensaje 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!!
libreoffice 4.4.5.2 en windows 10
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: seleccionar un texto entre delimitadores con macro

Mensaje por mauricio »

Si consideras que la pregunta ha sido respondida, por favor, marca como resuelto el tema, gracias.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder