NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.
All the Perl that's Practical to Extract and Report
Stories, comments, journals, and other submissions on use Perl; are Copyright 1998-2006, their respective owners.
How much faster? (Score:1)
Through simple profiling, I got 30% in some simple hacking.
Re: (Score:2)
Re:How much faster? (Score:1)
I recently wrote a custom XML syntax highlighter for Wx::STC. I found that if I tried to highlight more than a couple of hundred lines at a time it would be unacceptably slow. And even fewer lines if I waned to edit (and not just view) the document.
I got around this by only styling lines that were visible. I used GetEndStyled() to tell me where I should begin styling, instead of starting at pos=0 every time. I stored state in SetLineState() which coupled with GetStyleAt() gave me enough information to know whether I might need to backtrack a little when restyling. I would only style 200 chars for each EVT_STC_STYLENEEDED(). And I shortcut the highlighing if either (a) I went off the screen, or (b) my styling matched the existing style.
With all these optimisations I ended up with some nippy syntax highlighting. I haven't checked how Padre is using PPI for custom syntax highlighting. And for all I know, you are already using similar optimisations. But if you're not, I think you will need to because he STYLE_NEEDED event is raised on every key press, so you're going to want the event handler to return prety quickly. Even with a C++ tokeniser I don't think you'll be able to highlight entire documents quickly enough without impacting user experience.
Best of luck,
Simon
Reply to This
Parent