Maybe QTextCursor could help

http://qt-project.org/doc/qt-4.8/qtextcursor.html


On Thu, Aug 28, 2014 at 12:54 PM, Edward K. Ream <[email protected]>
wrote:

> A head-slapping moment: the so-called high-level interfaced throughout
> Leo's core to interact with Leo's text panes lacks a way of getting the
> length of text *without* making a copy of the text.
>
> This is more than a slight oversight: I imagine there are several place
> were the code does s = w.getAllText() merely so it can use len(s)! This is
> a huge strain on the GC for large p.b.
>
> Worse, the absence of w.getTextLength() has lead to the most unfortunate
> LeoQTextEditWidget.lengthHelper, which calculated the length of the text
> using QTextCursor methods!  This is catastrophically slow for large text.
> This method was doubling node load times for large nodes.
>
> In other words, w.getTextLength() is an essential part of fixing git bug
> 28:
> https://github.com/leo-editor/leo-editor/issues/28
>
> But nooooooo... w.getTextLength() is far from easy to do.  There is no
> QTextEdit or QTextDocument method that delivers the length of the text!
> This is a *huge* hole in the QTextEdit and QTextDocument api's, but there
> is nothing we can do about that.
>
> The simplest thing that could possibly work would be::
>
>     def getTextLength(self):
>         w = self.widget
>         return len(w.getAllText())
>
> But this would be a step backwards because it hides the fact that it is
> expensive.
>
> It might be possible to cache the value of w.getAllText in an "text
> changed" event handler in LeoQTextBrowser:(QTextBrowser).  But I would like
> to avoid this approach--any bug would lead to data loss or corruption. I
> may play around with this, but for now it's not likely to happen.  See
> below for a workaround.
>
> By analogy with w.getTextLength(), we can imagine a p.b_length method that
> would simply return len(p.v._bodyString).  This, at least, is worth doing.
>
> ===== Summary
>
> w.getTextLength() isn't trivial.  (Sounds of gnashing teeth.)
>
> Caching the value returned by w.getAllText() seems too dangerous.
>
> As a work-around, the crucial node-selection logic will attempt to
> minimize calls to w.getAllText.  There, and *only* there, it should be
> possible to create a *single* copy of the text and pass that copy around to
> all code that needs it.  It would be a complication, but a completely safe
> one.
>
> Otoh, p/v.b_length are trivial and useful.  They will be added asap.
>
> Edward
>
> --
> You received this message because you are subscribed to the Google Groups
> "leo-editor" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/leo-editor.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/leo-editor.
For more options, visit https://groups.google.com/d/optout.

Reply via email to