[PyKDE] QScintilla Lexers
yawber
yawber.w at ukonline.co.uk
Mon Jan 10 00:54:52 GMT 2005
Hello. I am in the middle of writing a text editor in Python using
PyQt/QScintilla. I would like my editor to include syntax highlighting for
HTML, XML, XSLT, etc. but I have found that QScintilla does not support these
very well (or at all).
There is a lexer for HTML, but the syntax highlighting seems very inaccurate.
For example, it correctly colourises good syntax like <a href="index.html">,
but then does the same for html-nonsense like <href a="index.html">. There is
also no support for CSS.
I thought I might be able to fix some of this myself by sub-classing
QextScintillaLexerHTML. However, I soon found that several of the functions
which have to be re-implemented return const char * rather than a QString.
This means none of the lexers can be usefully sub-classed in Python because
the QextScintilla class expects const char * return types when it sets/calls
the lexers internally.
My next step was to try creating my own lexer classes in Python using the
low-level API. I had some success at this, but at the expense of features
like auto-indentation which are only provided by QextScintilla when it's
using one of its own lexers. If only I could sub-class QextScintillaLexer in
Python!
The next thing was to try learning a bit of C++ and write my own lexers. But
then I had a look at the source code for the HTML lexer and thought again -
all that stuff to handle the scripting languages made my head spin... My last
hope was to try looking at something simpler, like the source code for the
XML lexer - except that there is no real XML lexer because it is just an
alias for the HTML lexer!
The real point of all this is to introduce a couple proposals for improving
the lexers in QScintilla. The first one is obvious: make QextScintillaLexer
Python-friendly so it can be fully sub-classed. This will open up all the
"hidden" languages (like CSS) to Python developers who want to go ahead and
create their own lexer classes (or sub-classes). And the second proposal is:
include a purely markup-orientated XML lexer (i.e. one not based on the HTML
lexer). This would then make it easy to add lexer classes for XHTML, XSLT,
XSD, etc. by sub-classing from the XML lexer.
Does anybody have any thoughts on this, please?
--
yawber
More information about the PyQt
mailing list