[Tkinter-discuss] Here's a tough one -- dynamic,
multi-line XML syntax highlighting
Jared Cohen
Jared.Cohen at noaa.gov
Mon Mar 28 19:10:10 CEST 2005
Hiya. My current project is an XML editor using the Tkinter.Text widget.
Using the parsing tools from xml.parsers.expat, I've managed to
implement a nice system of syntax highlighting when the document is
first loaded. However, I want the user to be able to edit the text, and
have the highlightling automatically update to conform to whatever is
added or deleted. I can easily do this for single-line tags (those that
start and end on the same line), because then I can just read in that
one line and use the parser to re-highlight it. But for multiple-line
tags, like comments or CDATA sections, it's not so easy.
The problem is that the exact location where the user inserts/removes
text, will determine how the highlighting changes. For example, a
comment block is delimeted by <!-- and --> Now, if the user types new
text BETWEEN those two tags, nothing changes; the new text gets the
existing "comment" highlighting that's already there. If they type new
text on the same line as one of the delimeters, but outside their range,
it gets no tags at all. But if the new text is INSIDE one of the
delimeters themselves (making them no longer syntactically valid), then
the whole comment block needs to get re-highlighted. And I don't know
how to do that without re-highlighting the WHOLE document all over
again. When that happens with every single keystroke, it adds up to a
whole lot of highlighting. There's got to be a better way, but I can't
think of one. Can anyone help?
And by the way, I already know about the xmltools package from logilab,
and it might be exactly what I need. However, I'm working on this
project at my office, not at home; so I have to rely on the sysadmins to
install new packages. And the xmltools package will require a LOT of
dependancies, so it doesn't look like it'll be done any time in the near
future. :-(
P.S. On a totally unrelated note, how do I reply to messages on this
board and get them to appear in "nested thread" format? Every time I
reply, it always appears as a new top-level thread!
More information about the Tkinter-discuss
mailing list