http://code.google.com/p/pharo/issues/detail?id=5406

SmalltalkEditor>>notify:at:in: is wrong and has been reverted in Cuis too.

I have a plan explained in above issue if we want to get rid of
ReadStream on:from:to:

Nicolas

Le 26 février 2012 21:57, Nicolas Cellier
<[email protected]> a écrit :
> One of the area of high interaction is
> Parser>>correctSelector:wordIntervals:exprInterval:ifAbort: which has
> to then to deal with (self startIndex - 1) offset.
> It will have to be fixed too.
>
> Nicolas
>
> Le 26 février 2012 21:54, Stéphane Ducasse <[email protected]> a 
> écrit :
>>
>> 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