class: CharacterEncoder
added:
#encoderClassesByName
#initializeEncoderClassesByName
changed:
#encoderFor:ifAbsent:
#encoderToEncodeFrom:into:
#initialize
lazy initialize EncoderClassesByName
(move as much as possible out of class initialization,
to speed up startup)
--- a/CharacterEncoder.st Tue Apr 28 23:22:13 2015 +0200
+++ b/CharacterEncoder.st Wed Apr 29 13:21:18 2015 +0200
@@ -289,7 +289,7 @@
].
AccessLock critical:[
- unicodeEncoderClasses := EncoderClassesByName at:#unicode.
+ unicodeEncoderClasses := self encoderClassesByName at:#unicode.
].
unicodeEncoderClasses notNil ifTrue:[
unicodeEncoderClasses keysAndValuesDo:[:eachEncodingAlias :eachEncoderClassOrName |
@@ -317,9 +317,9 @@
].
enc isNil ifTrue:[
AccessLock critical:[
- unicodeEncoderClasses := EncoderClassesByName at:#unicode ifAbsent:nil.
+ unicodeEncoderClasses := self encoderClassesByName at:#unicode ifAbsent:nil.
unicodeEncoderClasses isNil ifTrue:[
- EncoderClassesByName at:#unicode put:(unicodeEncoderClasses := Dictionary new).
+ self encoderClassesByName at:#unicode put:(unicodeEncoderClasses := Dictionary new).
].
clsName := unicodeEncoderClasses at:name ifAbsent:nil.
].
@@ -345,13 +345,13 @@
"/ no direct encoder from unicode->name
"/ search for unicode->any and: any->name
AccessLock critical:[
- unicodeEncoderClasses := EncoderClassesByName at:#unicode ifAbsent:nil.
+ unicodeEncoderClasses := self encoderClassesByName at:#unicode ifAbsent:nil.
].
unicodeEncoderClasses keysAndValuesDo:[:eachEncodingAlias :eachEncoderClass |
|dict2 enc1 enc2|
AccessLock critical:[
- dict2 := EncoderClassesByName at:eachEncodingAlias ifAbsent:nil.
+ dict2 := self encoderClassesByName at:eachEncodingAlias ifAbsent:nil.
].
dict2 notNil ifTrue:[
clsName := dict2 at:name ifAbsent:nil.
@@ -376,13 +376,13 @@
].
].
- EncoderClassesByName keysAndValuesDo:[:encoding1 :dict1 |
+ self encoderClassesByName keysAndValuesDo:[:encoding1 :dict1 |
dict1 keysAndValuesDo:[:encoding2 :clsName1|
|clsName2 cls1 cls2 dict2 enc1 enc2|
encoding2 = encodingNameSymbol ifTrue:[
AccessLock critical:[
- dict2 := EncoderClassesByName at:#unicode.
+ dict2 := self encoderClassesByName at:#unicode.
].
clsName2 := dict2 at:encoding1 ifAbsent:nil.
clsName2 notNil ifTrue:[
@@ -471,9 +471,9 @@
].
encoder := encoders at:newEncodingArg ifAbsent:nil.
encoder isNil ifTrue:[
- encoderClasses := EncoderClassesByName at:oldEncoding ifAbsent:nil.
+ encoderClasses := self encoderClassesByName at:oldEncoding ifAbsent:nil.
encoderClasses isNil ifTrue:[
- EncoderClassesByName at:oldEncoding put:(encoderClasses := Dictionary new).
+ self encoderClassesByName at:oldEncoding put:(encoderClasses := Dictionary new).
].
clsName := encoderClasses at:newEncoding ifAbsent:nil.
clsName notNil ifTrue:[
@@ -549,17 +549,46 @@
!CharacterEncoder class methodsFor:'class initialization'!
+encoderClassesByName
+ EncoderClassesByName isNil ifTrue:[
+ self initializeEncoderClassesByName
+ ].
+ ^ EncoderClassesByName
+!
+
initialize
- |ud|
-
AccessLock notNil ifTrue:[^ self]. "/ already initialized
AccessLock := RecursionLock new name:'CharacterEncoder'.
NullEncoderInstance := NullEncoder new.
EncodersByName := Dictionary new.
+ CachedEncoders := Dictionary new.
+
+ self initializeEncoderClassesByName.
+
+ OperatingSystem isUNIXlike ifTrue:[
+ "/Initialize OS system encoder
+ OperatingSystem getCodesetEncoder.
+ ].
+
+ "
+ self initialize
+ "
+
+ "Modified: / 01-04-2011 / 14:30:06 / cg"
+ "Modified (format): / 23-01-2013 / 09:56:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+initializeEncoderClassesByName
+ "initialize the dictionary which maps commonly used names
+ to encoder classes.
+ This is done, because some encodings come along
+ with different names"
+
+ |ud|
+
EncoderClassesByName := Dictionary new.
- CachedEncoders := Dictionary new.
EncoderClassesByName at:#'unicode' put:(ud := Dictionary new).
ud at:#'fontspecific' put:NullEncoder.
@@ -717,11 +746,6 @@
].
].
- OperatingSystem isUNIXlike ifTrue:[
- "/Initialize OS system encoder
- OperatingSystem getCodesetEncoder.
- ].
-
"
self initialize
"
@@ -1715,11 +1739,11 @@
!CharacterEncoder class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.138 2015-03-26 16:21:01 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.139 2015-04-29 11:21:18 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.138 2015-03-26 16:21:01 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.139 2015-04-29 11:21:18 cg Exp $'
! !