On Feb 26, 2012, at 9:41 PM, Nicolas Cellier wrote:

> Compare this which is like old squeak selectionAsStream
> 
> SmalltalkEditor>>selectionForDoitAsStream
>       ^ ReadWriteStream
>               on: self string
>               from: self startIndex
>               to: self stopIndex - 1
> 
> and this which has been changed conforming to Cuis
> 
> TextEditor>>selectionAsStream
>       "Answer a ReadStream on the text in the paragraph that is currently
>       selected."
> 
>       ^ReadStream
>               on: (self string copyFrom: self startIndex to: self stopIndex - 
> 1)
> 
> (or self selection asString readStream)
> The two differ.
> The former stream position starts at editor startIndex - 1, while the
> later stream position starts at 0.
> The stream position is used by the Compiler/Parser for notifying the
> SmalltalkEditor (or TextMorph) requestor.
> 
> Now look at SmalltalkEditor>>notify: aString at: anInteger in: aStream
>       "The compilation of text failed. The syntax error is noted as the 
> argument,
>       aString. Insert it in the text at starting character position 
> anInteger."
> 
>       | pos |
>       pos := self selectionInterval notEmpty
>               ifTrue: [self startIndex + anInteger - 1 ]
>               ifFalse: [anInteger].
>       self insertAndSelect: aString at: (pos max: 1)
> 
> You see that it adds (startIndex - 1) to the error message insertion
> position which is a Cuis change.
> (The old ParagraphEditor did not).
> 
> When #notify:at:in: is used for evaluating #selectionAsStream, all is
> OK, the (startIndex - 1) is added only once.
> But when it is used with #selectionForDoitAsStream, the offset is
> counted twice (because already in the stream location passed in
> anInteger parameter).
> 
> I guess the hack #selectionForDoitAsStream that undo the Cuis clean-up
> has been added because some other part of Parser/Encoder/Compiler is
> messing with the requestor selection (like highlighting some part of
> the source for user interaction in case of ambiguity).
> Tthis is not a valid workaround.
> 
> In Squeak, I did revert the Cuis clean-up just to keep some simple
> compatibility with ParagraphEditor, but Pharo does not care about
> that, so it should apply full simplification.
> I suggest removing #selectionForDoitAsStream, and replace senders with
> #selectionAsStream.
> Then if there are some other feature broken we'll fix'em.
> OK?

Sure!!!

> 
> Nicolas
> 


Reply via email to