Stories
Slash Boxes
Comments
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

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • Through simple profiling, I got 30% in some simple hacking.

    • I don't know how much faster the C++ implementation can be but currently it is reasonable to use PPI in Padre only for files that are less than 300 lines long.
      --
      • 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