Portál AbcLinuxu, 14. července 2025 13:35


Dotaz: pyGTK a syntax parser

12.1.2008 21:56 martin
pyGTK a syntax parser
Přečteno: 198×
Odpovědět | Admin

Zdravim,
pokousim se napsat jednoduchou syntaxi pro muj osobni editurek.
Vstup bude jako slovnik. Jen keyword a jeho syntaxe. Nic vic.
Zatim to skoro funguje az na par malickosti ktere poznate ze zdrojaku.
Pr: slovo Program mi obarvi dobre s Programy uz ma problemy :)
Neporadi nekdo ?
BTW : gtksourcebuffer a pygtkcodbuffer nechci pouzit.

#-------------------------------------------------------------------
# Tag Buffer
# Pokus o napsani vlastniho jednoducheho syntax parseru
# vstup: data v podobe slovniku
#        key je Keyword a value je typ tagu pouzity
#        pro syntaxi
# com dot tbs-software at spooky.ln [ reverse it !!! ]
#-------------------------------------------------------------------
import gtk

class TagBuffer(gtk.TextBuffer):
    def __init__(self, keywords):
        gtk.TextBuffer.__init__(self)
        self.keywords = keywords
        
        self.redTag = gtk.TextTag(name="Red")
        self.redTag.set_property("foreground", "dark red")
        self.redTag.props.family="Courier"
        
        self.greenTag = gtk.TextTag(name="Green")
        self.greenTag.set_property("foreground", "dark green")
        self.greenTag.props.family="Courier"
        
        self.blueTag = gtk.TextTag(name="Blue")
        self.blueTag.set_property("foreground", "dark blue")
        self.blueTag.props.family="Courier"
        
        self.get_tag_table().add(self.redTag)
        self.get_tag_table().add(self.greenTag)
        self.get_tag_table().add(self.blueTag)
        
        self.connect_after("insert-text", self.__text_insert)
        
    def __text_insert(self,buffer, cursor, text, length):
        def __getWordStart(cursor):
            character = cursor.get_char()
            if character.isalnum() is False:
                if character in ("-", "_", "^"):
                    pass
                else:
                    return False
            if cursor.starts_line():
                return True
            cursor.backward_char()
            character = cursor.get_char()
            cursor.forward_char()
            if character.isalnum() or character in ("_", "-", "^"):
                return False
            return True
        start = cursor.copy()
        while __getWordStart(start) is False:
            start.backward_char()
        if start.get_text(cursor) in self.keywords:
            self.apply_tag_by_name(self.keywords[start.get_text(cursor)], start, cursor)
        else:
            pass
    
buffer = TagBuffer({"Program": "Red", "Load_AVI": "Green", "^header": "Blue"})
view = gtk.TextView(buffer)
window = gtk.Window()
window.set_default_size(500, 400)
window.connect("destroy", gtk.main_quit)
window.add(view)
window.show_all()

gtk.main()

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Fuky avatar 12.1.2008 23:43 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: pyGTK a syntax parser
Odpovědět | | Sbalit | Link | Blokovat | Admin

Zkus konferenci o Pythonu, chodí tam víc Pythonistů než na Ábíčko.

-- RÁMO: psí tábor , ETriatlon: Výuka plavání

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.