class: CharacterArray
changed:
#asLowercase
#asUppercase
tuned for regular strings
--- a/CharacterArray.st Mon Aug 03 12:02:53 2015 +0200
+++ b/CharacterArray.st Mon Aug 03 12:34:53 2015 +0200
@@ -360,7 +360,6 @@
"
! !
-
!CharacterArray class methodsFor:'pattern matching'!
matchEscapeCharacter
@@ -766,7 +765,6 @@
^ Unicode32String
! !
-
!CharacterArray methodsFor:'Compatibility-ANSI'!
addLineDelimiters
@@ -3139,22 +3137,42 @@
mySize := self size.
mySize == 0 ifTrue:[^ self].
+
newStr := self species new:mySize.
bitsPerCharacter := newStr bitsPerCharacter.
+ "/ handle the very seldom case of an uppercase char which needs
+ "/ more bits in its lowercase variant
+ "/ (there are only a few of them)
+
+ "/ for 8-bit strings, use faster code.
+ bitsPerCharacter == 8 ifTrue:[
+ 1 to:mySize do:[:i |
+ c := (self at:i) asLowercase.
+ (c codePoint > 16rFF) ifTrue:[
+ (c stringSpecies ~= newStr stringSpecies) ifTrue:[
+ newStr := c stringSpecies fromString:newStr.
+ ]
+ ].
+ newStr at:i put:c
+ ].
+ ^ newStr
+ ].
+
1 to:mySize do:[:i |
- c := (self at:i) asLowercase.
- (c bitsPerCharacter > bitsPerCharacter
- and:[c stringSpecies ~= newStr stringSpecies]) ifTrue:[
- newStr := c stringSpecies fromString:newStr.
- ].
- newStr at:i put:c
+ c := (self at:i) asLowercase.
+ (c bitsPerCharacter > bitsPerCharacter
+ and:[c stringSpecies ~= newStr stringSpecies]) ifTrue:[
+ newStr := c stringSpecies fromString:newStr.
+ ].
+ newStr at:i put:c
].
^ newStr
"
'HelloWorld' asLowercase
'HelloWorld' asLowercaseFirst
+ 'HelloWorld' asUppercase
"
!
@@ -3546,12 +3564,30 @@
newStr := self species new:mySize.
bitsPerCharacter := newStr bitsPerCharacter.
+ "/ handle the very seldom case of a lowercase char which needs
+ "/ more bits in its uppercase variant
+ "/ (there are only a few of them)
+
+ "/ for 8-bit strings, use faster code.
+ bitsPerCharacter == 8 ifTrue:[
+ 1 to:mySize do:[:i |
+ c := (self at:i) asUppercase.
+ (c codePoint > 16rFF) ifTrue:[
+ (c stringSpecies ~= newStr stringSpecies) ifTrue:[
+ newStr := c stringSpecies fromString:newStr.
+ ]
+ ].
+ newStr at:i put:c
+ ].
+ ^ newStr
+ ].
+
1 to:mySize do:[:i |
- c := (self at:i) asUppercase.
- c bitsPerCharacter > bitsPerCharacter ifTrue:[
- newStr := c stringSpecies fromString:newStr.
- ].
- newStr at:i put:c
+ c := (self at:i) asUppercase.
+ c bitsPerCharacter > bitsPerCharacter ifTrue:[
+ newStr := c stringSpecies fromString:newStr.
+ ].
+ newStr at:i put:c
].
^ newStr
@@ -3559,6 +3595,7 @@
'helloWorld' asUppercase
'helloWorld' asUppercaseFirst
(Character value:16rB5) asString asUppercase -- needs 16 bits !!
+ (Character value:16rFF) asString asUppercase -- needs 16 bits !!
"
!
@@ -5739,7 +5776,6 @@
"Modified: 17.4.1997 / 12:50:23 / cg"
! !
-
!CharacterArray methodsFor:'special string converting'!
asUnixFilenameString
@@ -6777,7 +6813,6 @@
"
! !
-
!CharacterArray methodsFor:'substring searching'!
findRangeOfString:subString