[RESUELTO] Seleccionar texto entre delimitadores con macro

Discute sobre el procesador de textos

[RESUELTO] Seleccionar texto entre delimitadores con macro

Notapor robinlambada » Mar Feb 02, 2016 12:39 am

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
robinlambada
 
Mensajes: 9
Registrado: Mar Feb 02, 2016 12:25 am

Re: seleccionar un texto entre delimitadores con macro

Notapor mauricio » Mar Feb 02, 2016 9:23 pm

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
______________________________________________
"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: 5991
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: seleccionar un texto entre delimitadores con macro

Notapor robinlambada » Mar Feb 02, 2016 10:40 pm

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
robinlambada
 
Mensajes: 9
Registrado: Mar Feb 02, 2016 12:25 am

Re: seleccionar un texto entre delimitadores con macro

Notapor mauricio » Mar Feb 02, 2016 10:49 pm

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: 5991
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: seleccionar un texto entre delimitadores con macro

Notapor mauricio » Mar Feb 02, 2016 11:04 pm

Con la siguiente expresión regular, obtenemos correctamente las formulas...
Código: Seleccionar todo   Expandir vistaContraer vista
'(?<=\[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
Avatar de Usuario
mauricio
 
Mensajes: 5991
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: seleccionar un texto entre delimitadores con macro

Notapor robinlambada » Mar Feb 02, 2016 11:43 pm

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
robinlambada
 
Mensajes: 9
Registrado: Mar Feb 02, 2016 12:25 am

Re: seleccionar un texto entre delimitadores con macro

Notapor mauricio » Mié Feb 03, 2016 12:13 am

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: 5991
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: seleccionar un texto entre delimitadores con macro

Notapor mauricio » Mié Feb 03, 2016 5:19 am

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
______________________________________________
"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: 5991
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: seleccionar un texto entre delimitadores con macro

Notapor robinlambada » Jue Feb 04, 2016 1:38 am

Hola al ejecutarlo, me da el siguiente error.

Gracias.
Adjuntos
ERROR MACRO.png
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

Notapor mauricio » Jue Feb 04, 2016 2:59 am

¿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
Avatar de Usuario
mauricio
 
Mensajes: 5991
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: seleccionar un texto entre delimitadores con macro

Notapor robinlambada » Mié Feb 10, 2016 9:38 pm

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

Notapor robinlambada » Mié Feb 10, 2016 9:56 pm

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
robinlambada
 
Mensajes: 9
Registrado: Mar Feb 02, 2016 12:25 am

Re: seleccionar un texto entre delimitadores con macro

Notapor mauricio » Mié Feb 10, 2016 10:12 pm

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
Avatar de Usuario
mauricio
 
Mensajes: 5991
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: seleccionar un texto entre delimitadores con macro

Notapor robinlambada » Mié Feb 10, 2016 11:36 pm

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 4665 veces


contrlA.png
cuando pulso ctrl+a ( en minusculas)
contrlA.png (2.44 KiB) Visto 4665 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 4665 veces



Espero haber sido claro.

Un abrazo.
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

Notapor mauricio » Mié Feb 10, 2016 11:41 pm

______________________________________________
"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: 5991
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: seleccionar un texto entre delimitadores con macro

Notapor robinlambada » Mié Feb 10, 2016 11:47 pm

Si esta. exacto
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

Notapor mauricio » Jue Feb 11, 2016 4:16 am

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
______________________________________________
"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: 5991
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: seleccionar un texto entre delimitadores con macro

Notapor robinlambada » Lun Feb 15, 2016 12:48 am

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
robinlambada
 
Mensajes: 9
Registrado: Mar Feb 02, 2016 12:25 am

Re: seleccionar un texto entre delimitadores con macro

Notapor mauricio » Lun Feb 15, 2016 3:56 am

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
Avatar de Usuario
mauricio
 
Mensajes: 5991
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX


Volver a Writer

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados