diff -r 17a170eb1112 -r c8fae50c2cc5 PositionableStream.st --- a/PositionableStream.st Thu Nov 09 15:15:06 1995 +0100 +++ b/PositionableStream.st Fri Nov 10 16:11:38 1995 +0100 @@ -21,7 +21,7 @@ COPYRIGHT (c) 1989 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libbasic/PositionableStream.st,v 1.31 1995-09-13 18:52:44 claus Exp $ +$Header: /cvs/stx/stx/libbasic/PositionableStream.st,v 1.32 1995-11-10 15:11:38 cg Exp $ '! !PositionableStream class methodsFor:'documentation'! @@ -42,7 +42,7 @@ version " -$Header: /cvs/stx/stx/libbasic/PositionableStream.st,v 1.31 1995-09-13 18:52:44 claus Exp $ +$Header: /cvs/stx/stx/libbasic/PositionableStream.st,v 1.32 1995-11-10 15:11:38 cg Exp $ " ! @@ -335,15 +335,16 @@ Its no incompatibility, since inline primitives are an ST/X special anyway." - |sep gotPercent inPrimitive character + |sep stopChars inPrimitive character index "{ Class:SmallInteger }" endIndex "{ Class:SmallInteger }" stop "{ Class:SmallInteger }" next "{ Class:SmallInteger }"| sep := ChunkSeparator. + stopChars := '{}' copyWith:sep. + inPrimitive := false. - gotPercent := false. index := 1. endIndex := aString size. stop := endIndex + 1. @@ -353,13 +354,7 @@ find position of next interresting character; output stuff up to that one in one piece " - next := aString indexOf:$% startingAt:index ifAbsent:stop. - next := next min: - (aString indexOf:${ startingAt:index ifAbsent:stop). - next := next min: - (aString indexOf:$} startingAt:index ifAbsent:stop). - next := next min: - (aString indexOf:sep startingAt:index ifAbsent:stop). + next := aString indexOfAny:stopChars startingAt:index ifAbsent:stop. ((index == 1) and:[next == stop]) ifTrue:[ self nextPutAll:aString @@ -371,27 +366,27 @@ (index <= endIndex) ifTrue:[ character := aString at:index. - (character == $% ) ifTrue:[ - gotPercent := true + (character == ${ ) ifTrue:[ + "/ starts a primitive + ((index > 1) and:[(aString at:index-1) == $%]) ifTrue:[ + inPrimitive := true + ] ] ifFalse:[ - (character == ${ ) ifTrue:[ - gotPercent ifTrue:[ - inPrimitive := true + "/ ends a primitive + (character == $} ) ifTrue:[ + ((index > 1) and:[(aString at:index-1) == $%]) ifTrue:[ + inPrimitive := false ] ] ifFalse:[ - (character == $} ) ifTrue:[ - gotPercent ifTrue:[ - inPrimitive := false - ] - ] ifFalse:[ - inPrimitive ifFalse:[ - (character == sep) ifTrue:[ - self nextPut:sep - ] + "/ + "/ exclas have to be doubled - except if within a primitive + "/ + inPrimitive ifFalse:[ + (character == sep) ifTrue:[ + self nextPut:sep ] ] - ]. - gotPercent := false + ] ]. self nextPut:character. @@ -399,6 +394,8 @@ ] ]. self nextPut:sep + + "Modified: 10.11.1995 / 16:04:49 / cg" ! ! !PositionableStream methodsFor:'fileIn'!