[squeak-dev] [5.2a] styled text in a class comment spawns endless subscript out-of-bounds

David T. Lewis lewis at mail.msen.com
Thu Jul 5 12:38:58 UTC 2018


Thank you for this explanation, it is very helpful.

Dave

On Thu, Jul 05, 2018 at 08:21:14AM -0400, Bob Arning wrote:
> It's good to remember what startIndex/startBlock/selectionStart and 
> stopIndex/stopBlock/selectionStop are used for. If you have a paragraph 
> with two characters 'ab'
> 
> ...and the 'a' is selected, then this is what the paragraph is thinking
> 
> selectionStart: ?????? a CharacterBlock with index 1 and character $a and 
> rectangle 3 at 0 corner: 11 at 18.0
> ??in a TextLine 1 to: 2
> selectionStop: ?????? a CharacterBlock with index 2 and character $b and 
> rectangle 11 at 0 corner: 20 at 18.0
> ??in a TextLine 1 to: 2
> 
> ...if the cursor is between 'a' and 'b' then this happens
> 
> selectionStart: ?????? a CharacterBlock with index 2 and character $b and 
> rectangle 11 at 0 corner: 20 at 18.0
> ??in a TextLine 1 to: 2
> selectionStop: ?????? a CharacterBlock with index 2 and character $b and 
> rectangle 11 at 0 corner: 20 at 18.0
> ??in a TextLine 1 to: 2
> 
> So, in the first case, it can highlight from the topLeft of 
> selectionStart to the bottomLeft of selectionStop. In the second case, 
> since the two are equal, it just displays the cursor along the left edge 
> of either.
> 
> In either case, the stopIndex is one more than last selected character and
> 
> selection
> ?????? "Answer the text in the paragraph that is currently selected."
> 
> ?????? ^paragraph text copyFrom: self startIndex to: self stopIndex - 1
> 
> returns the selected characters.
> 
> On 7/5/18 7:17 AM, David T. Lewis wrote:
> >On Thu, Jul 05, 2018 at 02:51:58PM +0530, K K Subbu wrote:
> >>On Wednesday 04 July 2018 09:23 PM, David T. Lewis wrote:
> >>>A clue that this might be accumulation of kludges: Looking at senders of
> >>>selectInvisiblyFrom:to: (such as TextEditor>>addText:event:) shows a 
> >>>number
> >>>of methods that subtract 1 from the stop index when before calling the
> >>>method
> >>>that adds 1 back to the stop index. This certainly does not have a good
> >>>smell.
> >>Looks like different intervals for dealing with selections and
> >>substrings. I see that the names used are start/stop instead of
> >>startIndex/stopIndex. I found this consistent pattern in all methods
> >>that deal with selections.
> >>
> >>   stop = (stopIndex - 1)
> >>   stopIndex = (stop + 1)
> >>
> >>Regular methods that deal with substrings like
> >>AbstractFont>>#widthOString... and BitBlt>>#primDisplayString... and the
> >>scanner methods iterate over aString with:
> >>
> >>    startIndex to: stopIndex
> >>
> >>while Editor>>selectionInterval extracts selections with startIndex to:
> >>(stopIndex-1).
> >>
> >>Regards .. Subbu
> >>
> >Ah yes, that makes sense now. Thank you for the explanation.
> >
> >Dave
> >  
> >
> 

> 



More information about the Squeak-dev mailing list