Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Afeitando Yaks: septiembre 22, 2009

Es­te yak es­tá que­dan­do bo­ni­to.

Pa­ra mi se­gun­da pi­la de pe­lo de yak: con­ver­tir QPlain­TextE­dit en un wi­dget de edi­ción acep­ta­ble pa­ra pro­gra­ma­do­res. A me­di­da que el tra­ba­jo avan­za­ba en mi edi­tor de rs­t2­pdf (de pa­so: ne­ce­si­to un nom­bre!), se vol­vió evi­den­te que la par­te de la in­ter­fa­ce en la que el usua­rio pa­sa más tiem­po es un sim­ple par de edi­to­res de tex­to.

Qt vie­ne con un wi­dget pa­ra eso, por su­pues­to, lla­ma­do QPlain­TextE­dit. Sin em­bar­go, es mu­y, muy ma­lo pa­ra pr­pgra­ma­do­res.

És­tos son mis re­que­ri­mien­tos mí­ni­mo­s:

  1. Re­s­al­­ta­­do de si­n­­ta­­xis pa­­ra dos len­­gua­­je­s: res­­tru­c­­tu­­red text y ja­­va­s­­cri­p­­t. Es­­te yak ya es­­tá afei­­­ta­­do.

  2. Nú­­me­­ros de lí­­nea.

  3. Re­s­al­­tar la lí­­nea ac­­tua­­l.

  4. Re­s­al­­tar erro­­­res cuan­­do tie­­ne sen­­ti­­do (por eje­m­­plo, en el sty­­le­s­hee­­t)

Una for­ma de lo­grar es­to se­ría des­car­tar QPlain­TextE­dit y usar QS­ciS­cin­ti­lla que es la ba­se pa­ra el edi­tor de có­di­go en eric y (en otra ver­sió­n) pa­ra sci­te.

Sin em­bar­go, su­fro un bug en QS­ciS­cin­ti­lla, don­de no pue­do es­cri­bir ¡ca­rac­te­res con acen­to­!. Sin eso el cas­te­llano es im­po­si­ble, y el bug pa­re­ce te­ner co­mo dos año­s, así que ... no va.

¿En­ton­ce­s, lo­gré esos fea­tu­res? ¡Sí!

Acá es­tá el vi­deo (sí, me vol­ví adic­to a ha­cer es­to­s, ya que qt-­reord­m­y­desk­top lo ha­ce de­ma­sia­do fá­cil ;-):

La ba­se pa­ra es­to es el ejem­plo Co­de Edi­tor que vie­ne con Qt mis­mo, más un po­qui­to de tra­ba­jo.

Pri­me­ro, por­té Co­de Edi­tor de C++ a Py­tho­n, que fué fá­cil y lle­vó so­lo unos mi­nu­to­s. Eso se en­car­gó de los pun­tos 2 y 3.

En­ton­ces en­chu­fé el re­sal­ta­do de sin­ta­xis, que era el pun­to 1.

¿Y que pa­só con la va­li­da­ción de ja­vas­cript en tiem­po rea­l? Fá­cil usan­do sim­ple­j­so­n. Hay que co­rrer es­to ca­da vez que se quie­re va­li­dar (yo lo co­rro en ca­da te­cla que se pre­sio­na).

Hay que reem­pla­zar se­l­f.ui.s­ty­le.­to­Plain­Text por el nom­bre de tu wi­dge­t, por su­pues­to:

def validateStyle(self):
    style=unicode(self.ui.style.toPlainText())
    #no point in validating an empty string
    if not style.strip():
        return
    pos=None
    try:
        json.loads(style)
    except ValueError, e:
        s=str(e)
        print s
        if s == 'No JSON object could be decoded':
            pos=0
        elif s.startswith('Expecting '):
            pos=int(s.split(' ')[-1][:-1])
        else:
            print 'UNKNOWN ERROR'

    # This makes a red bar appear in the line
    # containing position pos
    self.ui.style.highlightError(pos)

highlightError(pos) almacena pos en el Code Editor, qie dibuja una barra roja en esa linea, de la misma forma que resalta la linea actual.

Y eso es to­do. És­te es el có­di­go pa­ra co­dee­di­to­r.­py

Manuel Muradas / 2009-09-22 17:11:

Se me ocurrió un nombre muymuymuy feo:
FaltaYRst2 (se leería: falta y restu)

Roberto Alsina / 2009-09-22 18:03:

Tenes razón es muy feo! :-D

Manuel Muradas / 2009-09-22 23:04:

Yo te avise =)

kib2 / 2009-09-23 12:57:

Hi,

I had made a Text Editor with Qt a long time ago. It has line numbers, snippets, custom syntax highlighting rules, and some more things.

I don't use Python anymore, but you may check the sources here :

http://kib2.free.fr/PyK/

Unfortunatly I had to stop it and there was a compatibilty issue with a new Qt versions. So the code won't run, but the editor sources are good.

Also, I noticed speed problems with big files.

Hope it helps.

Roberto Alsina / 2009-09-23 14:25:

@kib2 that's **very** impressive!

kib2 / 2009-09-23 21:07:

Hi Roberto,

thanks! Just do whatever you want with it.

See you:

Kib².


Contents © 2000-2020 Roberto Alsina