CharacterEncoder.st
branchjv
changeset 18308 0e48540e3b9f
parent 18192 32a7c53ef4d0
parent 18305 6f48f7030f47
child 18630 a74d669db937
equal deleted inserted replaced
18304:424139e100b2 18308:0e48540e3b9f
   287                 ].
   287                 ].
   288             ].
   288             ].
   289         ].
   289         ].
   290 
   290 
   291         AccessLock critical:[
   291         AccessLock critical:[
   292             unicodeEncoderClasses := EncoderClassesByName at:#unicode.
   292             unicodeEncoderClasses := self encoderClassesByName at:#unicode.
   293         ].
   293         ].
   294         unicodeEncoderClasses notNil ifTrue:[
   294         unicodeEncoderClasses notNil ifTrue:[
   295             unicodeEncoderClasses keysAndValuesDo:[:eachEncodingAlias :eachEncoderClassOrName |
   295             unicodeEncoderClasses keysAndValuesDo:[:eachEncodingAlias :eachEncoderClassOrName |
   296                 (name matches:eachEncodingAlias) ifTrue:[
   296                 (name matches:eachEncodingAlias) ifTrue:[
   297                     eachEncoderClassOrName isBehavior ifTrue:[
   297                     eachEncoderClassOrName isBehavior ifTrue:[
   315         ].
   315         ].
   316         enc := unicodeEncoders at:name ifAbsent:nil.
   316         enc := unicodeEncoders at:name ifAbsent:nil.
   317     ].
   317     ].
   318     enc isNil ifTrue:[
   318     enc isNil ifTrue:[
   319         AccessLock critical:[
   319         AccessLock critical:[
   320             unicodeEncoderClasses := EncoderClassesByName at:#unicode ifAbsent:nil.
   320             unicodeEncoderClasses := self encoderClassesByName at:#unicode ifAbsent:nil.
   321             unicodeEncoderClasses isNil ifTrue:[
   321             unicodeEncoderClasses isNil ifTrue:[
   322                 EncoderClassesByName at:#unicode put:(unicodeEncoderClasses := Dictionary new).
   322                 self encoderClassesByName at:#unicode put:(unicodeEncoderClasses := Dictionary new).
   323             ].
   323             ].
   324             clsName := unicodeEncoderClasses at:name ifAbsent:nil.
   324             clsName := unicodeEncoderClasses at:name ifAbsent:nil.
   325         ].
   325         ].
   326         clsName notNil ifTrue:[
   326         clsName notNil ifTrue:[
   327             clsName isBehavior ifTrue:[
   327             clsName isBehavior ifTrue:[
   343     ].
   343     ].
   344 
   344 
   345     "/ no direct encoder from unicode->name
   345     "/ no direct encoder from unicode->name
   346     "/ search for unicode->any and: any->name
   346     "/ search for unicode->any and: any->name
   347     AccessLock critical:[
   347     AccessLock critical:[
   348         unicodeEncoderClasses := EncoderClassesByName at:#unicode ifAbsent:nil.
   348         unicodeEncoderClasses := self encoderClassesByName at:#unicode ifAbsent:nil.
   349     ].
   349     ].
   350     unicodeEncoderClasses keysAndValuesDo:[:eachEncodingAlias :eachEncoderClass |
   350     unicodeEncoderClasses keysAndValuesDo:[:eachEncodingAlias :eachEncoderClass |
   351         |dict2 enc1 enc2|
   351         |dict2 enc1 enc2|
   352 
   352 
   353         AccessLock critical:[
   353         AccessLock critical:[
   354             dict2 := EncoderClassesByName at:eachEncodingAlias ifAbsent:nil.
   354             dict2 := self encoderClassesByName at:eachEncodingAlias ifAbsent:nil.
   355         ].
   355         ].
   356         dict2 notNil ifTrue:[
   356         dict2 notNil ifTrue:[
   357             clsName := dict2 at:name ifAbsent:nil.
   357             clsName := dict2 at:name ifAbsent:nil.
   358             clsName notNil ifTrue:[
   358             clsName notNil ifTrue:[
   359                 clsName isBehavior ifTrue:[
   359                 clsName isBehavior ifTrue:[
   374                 ]
   374                 ]
   375             ]
   375             ]
   376         ].
   376         ].
   377     ].
   377     ].
   378 
   378 
   379     EncoderClassesByName keysAndValuesDo:[:encoding1 :dict1 |
   379     self encoderClassesByName keysAndValuesDo:[:encoding1 :dict1 |
   380         dict1 keysAndValuesDo:[:encoding2 :clsName1|
   380         dict1 keysAndValuesDo:[:encoding2 :clsName1|
   381             |clsName2 cls1 cls2 dict2 enc1 enc2|
   381             |clsName2 cls1 cls2 dict2 enc1 enc2|
   382 
   382 
   383             encoding2 = encodingNameSymbol ifTrue:[
   383             encoding2 = encodingNameSymbol ifTrue:[
   384                 AccessLock critical:[
   384                 AccessLock critical:[
   385                     dict2 := EncoderClassesByName at:#unicode.
   385                     dict2 := self encoderClassesByName at:#unicode.
   386                 ].
   386                 ].
   387                 clsName2 := dict2 at:encoding1 ifAbsent:nil.
   387                 clsName2 := dict2 at:encoding1 ifAbsent:nil.
   388                 clsName2 notNil ifTrue:[
   388                 clsName2 notNil ifTrue:[
   389                     clsName1 isBehavior ifTrue:[
   389                     clsName1 isBehavior ifTrue:[
   390                         cls1 := clsName1
   390                         cls1 := clsName1
   469         encoders isNil ifTrue:[
   469         encoders isNil ifTrue:[
   470             EncodersByName at:oldEncoding put:(encoders := Dictionary new).
   470             EncodersByName at:oldEncoding put:(encoders := Dictionary new).
   471         ].
   471         ].
   472         encoder := encoders at:newEncodingArg ifAbsent:nil.
   472         encoder := encoders at:newEncodingArg ifAbsent:nil.
   473         encoder isNil ifTrue:[
   473         encoder isNil ifTrue:[
   474             encoderClasses := EncoderClassesByName at:oldEncoding ifAbsent:nil.
   474             encoderClasses := self encoderClassesByName at:oldEncoding ifAbsent:nil.
   475             encoderClasses isNil ifTrue:[
   475             encoderClasses isNil ifTrue:[
   476                 EncoderClassesByName at:oldEncoding put:(encoderClasses := Dictionary new).
   476                 self encoderClassesByName at:oldEncoding put:(encoderClasses := Dictionary new).
   477             ].
   477             ].
   478             clsName := encoderClasses at:newEncoding ifAbsent:nil.
   478             clsName := encoderClasses at:newEncoding ifAbsent:nil.
   479             clsName notNil ifTrue:[
   479             clsName notNil ifTrue:[
   480                 clsName isBehavior ifTrue:[
   480                 clsName isBehavior ifTrue:[
   481                     cls := clsName
   481                     cls := clsName
   547     ^ NullEncoderInstance
   547     ^ NullEncoderInstance
   548 ! !
   548 ! !
   549 
   549 
   550 !CharacterEncoder class methodsFor:'class initialization'!
   550 !CharacterEncoder class methodsFor:'class initialization'!
   551 
   551 
       
   552 encoderClassesByName
       
   553     EncoderClassesByName isNil ifTrue:[
       
   554         self initializeEncoderClassesByName
       
   555     ].
       
   556     ^ EncoderClassesByName    
       
   557 !
       
   558 
   552 initialize
   559 initialize
   553     |ud|
       
   554 
       
   555     AccessLock notNil ifTrue:[^ self].  "/ already initialized
   560     AccessLock notNil ifTrue:[^ self].  "/ already initialized
   556 
   561 
   557     AccessLock := RecursionLock new name:'CharacterEncoder'.
   562     AccessLock := RecursionLock new name:'CharacterEncoder'.
   558     NullEncoderInstance := NullEncoder new.
   563     NullEncoderInstance := NullEncoder new.
   559 
   564 
   560     EncodersByName := Dictionary new.
   565     EncodersByName := Dictionary new.
       
   566     CachedEncoders := Dictionary new.
       
   567 
       
   568     self initializeEncoderClassesByName.
       
   569 
       
   570     OperatingSystem isUNIXlike ifTrue:[
       
   571         "/Initialize OS system encoder
       
   572         OperatingSystem getCodesetEncoder.
       
   573     ].
       
   574 
       
   575     "
       
   576      self initialize
       
   577     "
       
   578 
       
   579     "Modified: / 01-04-2011 / 14:30:06 / cg"
       
   580     "Modified (format): / 23-01-2013 / 09:56:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   581 !
       
   582 
       
   583 initializeEncoderClassesByName
       
   584     "initialize the dictionary which maps commonly used names
       
   585      to encoder classes. 
       
   586      This is done, because some encodings come along
       
   587      with different names"
       
   588 
       
   589     |ud|
       
   590 
   561     EncoderClassesByName := Dictionary new.
   591     EncoderClassesByName := Dictionary new.
   562     CachedEncoders := Dictionary new.
       
   563 
   592 
   564     EncoderClassesByName at:#'unicode' put:(ud := Dictionary new).
   593     EncoderClassesByName at:#'unicode' put:(ud := Dictionary new).
   565     ud at:#'fontspecific' put:NullEncoder.    
   594     ud at:#'fontspecific' put:NullEncoder.    
   566     ud at:#'adobe-fontspecific' put:NullEncoder.    
   595     ud at:#'adobe-fontspecific' put:NullEncoder.    
   567     ud at:#'ms-oem' put:NullEncoder.    
   596     ud at:#'ms-oem' put:NullEncoder.    
   713             (dict includesKey:eachEncodingAlias) ifTrue:[
   742             (dict includesKey:eachEncodingAlias) ifTrue:[
   714                 self halt:'conflicting alias'
   743                 self halt:'conflicting alias'
   715             ].
   744             ].
   716             dict at:eachEncodingAlias put:className.    
   745             dict at:eachEncodingAlias put:className.    
   717         ].
   746         ].
   718     ].
       
   719 
       
   720     OperatingSystem isUNIXlike ifTrue:[
       
   721         "/Initialize OS system encoder
       
   722         OperatingSystem getCodesetEncoder.
       
   723     ].
   747     ].
   724 
   748 
   725     "
   749     "
   726      self initialize
   750      self initialize
   727     "
   751     "
  1713 ! !
  1737 ! !
  1714 
  1738 
  1715 !CharacterEncoder class methodsFor:'documentation'!
  1739 !CharacterEncoder class methodsFor:'documentation'!
  1716 
  1740 
  1717 version
  1741 version
  1718     ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.138 2015-03-26 16:21:01 cg Exp $'
  1742     ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.139 2015-04-29 11:21:18 cg Exp $'
  1719 !
  1743 !
  1720 
  1744 
  1721 version_CVS
  1745 version_CVS
  1722     ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.138 2015-03-26 16:21:01 cg Exp $'
  1746     ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.139 2015-04-29 11:21:18 cg Exp $'
  1723 ! !
  1747 ! !
  1724 
  1748 
  1725 
  1749 
  1726 CharacterEncoder initialize!
  1750 CharacterEncoder initialize!