[squeak-dev] Reusable browsers was Re: About HyperCard
Juan Vuletich (mail lists)
juanlists at jvuletich.org
Sun Mar 3 00:30:06 UTC 2013
Great! Thanks Bob! This will be in the Cuis update stream soon.
Quoting Bob Arning <arning315 at comcast.net>:
>
> On 3/2/13 7:48 AM, Bert Freudenberg wrote:
>> The proper way to deal with the remaining cases (short of actual
>> parsing) would be to strip all Strings/Symbols/Comments before the
>> tokenization, I think. Takers?:)
> Maybe this will do:
>
> 'From Squeak4.4 of 1 March 2013 [latest update: #12489] on 2 March
> 2013 at 12:08:27 pm'!
> "Change Set: FindSelector2
> Date: 2 March 2013
> Author: Bob Arning
>
> String>>findSelector2 uses Scanner to better ignore extraneous stuff"!
>
>
> !Scanner methodsFor: 'expression types' stamp: 'raa 3/2/2013 11:55'!
> scanForFindSelectorUpTo: terminator
> "
> Scanner findSelectorTests
> "
> | s |
>
> s := WriteStream on: (String new: 100).
> [tokenType == terminator or: [tokenType == #doIt]] whileFalse: [
> tokenType caseOf: {
> [#leftParenthesis] -> [self scanToken;
> scanForFindSelectorUpTo: #rightParenthesis].
> [#leftBracket] -> [self scanToken;
> scanForFindSelectorUpTo: #rightBracket].
> [#leftBrace] -> [self scanToken;
> scanForFindSelectorUpTo: #rightBrace].
> [#keyword] -> [s nextPutAll: token].
> } otherwise: [].
> self scanToken
> ].
> ^s contents! !
>
>
> !Scanner class methodsFor: 'testing' stamp: 'raa 3/2/2013 12:05'!
> findSelectorIn: aString
>
> | result |
> result _ Scanner new
> scan: (ReadStream on: aString);
> scanForFindSelectorUpTo: #notATerminator.
> ^result! !
>
> !Scanner class methodsFor: 'testing' stamp: 'raa 3/2/2013 12:02'!
> findSelectorTests
> "
> Scanner findSelectorTests explore
> "
> ^#(
> '3 perform: #between:and: with: 1 with: 5'
> 'self do: [:i | ] separatedBy: [] '
> 'self perform: #add: with: anObject'
> 'self do: [:i | i do: [ :each | ] ] separatedBy: [] '
> 'self x: {self y:} y: ''self new: 100'''
> 'a max:b'
> 'a'
> ) collect: [ :e |
> {e. self findSelectorIn: e}
> ].! !
>
>
> !String methodsFor: 'converting' stamp: 'raa 3/2/2013 12:02'!
> findSelector2
> "Revised to use scanner for better removal of extraneous stuff"
>
> | sel |
>
> sel := self withBlanksTrimmed.
> (sel includes: $:) ifTrue: [sel _ Scanner findSelectorIn: sel].
> sel isEmpty ifTrue: [^ nil].
> sel isOctetString ifTrue: [sel := sel asOctetString].
> Symbol hasInterned: sel ifTrue:
> [:aSymbol | ^ aSymbol].
> ^ nil! !
>
>
>
>
Cheers,
Juan Vuletich
More information about the Squeak-dev
mailing list
|