CharacterEncoderImplementations__FixedBytesEncoder.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 20:55:17 +0200
changeset 24417 03b083548da2
parent 22461 0d61027663a5
permissions -rw-r--r--
#REFACTORING by exept class: Smalltalk class changed: #recursiveInstallAutoloadedClassesFrom:rememberIn:maxLevels:noAutoload:packageTop:showSplashInLevels: Transcript showCR:(... bindWith:...) -> Transcript showCR:... with:...
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22461
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     1
"{ Encoding: utf8 }"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     2
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     3
"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     4
 COPYRIGHT (c) 2004 by eXept Software AG
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     5
              All Rights Reserved
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     6
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     7
 This software is furnished under a license and may be used
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    12
 hereby transferred.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    13
"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    14
"{ Package: 'stx:libbasic' }"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
"{ NameSpace: CharacterEncoderImplementations }"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
CharacterEncoder subclass:#FixedBytesEncoder
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
	instanceVariableNames:''
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
	classVariableNames:''
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
	poolDictionaries:''
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
	category:'Collections-Text-Encodings'
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    23
!
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    24
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    25
!FixedBytesEncoder class methodsFor:'documentation'!
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    26
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    27
copyright
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    28
"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    29
 COPYRIGHT (c) 2004 by eXept Software AG
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    30
              All Rights Reserved
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    31
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    32
 This software is furnished under a license and may be used
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    33
 only in accordance with the terms of that license and with the
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    35
 be provided or otherwise made available to, or used by, any
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    36
 other person.  No title to or ownership of the software is
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    37
 hereby transferred.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    38
"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    39
!
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
documentation
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
    Common abstract superclass for all encodings which encode to a fixed number of bytes.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
    [author:]
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    46
        Stefan Vogel
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
! !
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
!FixedBytesEncoder class methodsFor:'queries'!
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    51
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
isAbstract
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
    "Return if this class is an abstract class.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
     True is returned here; false for subclasses.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
     Abstract subclasses must redefine this again."
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
    ^ self == CharacterEncoderImplementations::FixedBytesEncoder
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
    "Modified: / 17-01-2018 / 17:06:13 / stefan"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
!
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    61
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    62
maxCode
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    63
    ^ self subclassResponsibility
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    64
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    65
    "Modified: / 17-01-2018 / 16:54:48 / stefan"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    66
!
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    67
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    68
minCode
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    69
    ^ 0 
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    70
! !
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    71
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    72
!FixedBytesEncoder methodsFor:'encoding & decoding'!
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    73
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    74
decode:anEncoding
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    75
    "given an integer in my encoding, return a unicode codePoint for it"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    76
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    77
    self subclassResponsibility
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    78
!
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    79
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    80
decodeString:anEncodedStringOrByteCollection
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    81
    "given a string in my encoding, return a unicode-string for it"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    82
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    83
    |newString myCode code bits size "{ Class:SmallInteger }"|
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    84
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    85
    size := anEncodedStringOrByteCollection size.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    86
    newString := String new:size.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    87
    bits := newString bitsPerCharacter.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    88
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    89
    1 to:size do:[:idx |
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    90
        code := (anEncodedStringOrByteCollection at:idx) codePoint.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    91
        myCode := self decode:code.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    92
        myCode > 16rFF ifTrue:[
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    93
            myCode > 16rFFFF ifTrue:[
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    94
                bits < 32 ifTrue:[
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    95
                    newString := Unicode32String fromString:newString.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    96
                    bits := 32.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    97
                ]
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    98
            ] ifFalse:[
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    99
                bits < 16 ifTrue:[
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   100
                    newString := Unicode16String fromString:newString.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   101
                    bits := 16.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   102
                ]
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
            ]
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
        ].
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
        newString at:idx put:(Character codePoint:myCode).
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   106
    ].
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   107
    ^ newString
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   108
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   109
    "
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   110
     CharacterEncoderImplementations::ISO8859_1 decodeString:'hello'
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   111
    "
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   112
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   113
    "Created: / 16-01-2018 / 19:54:02 / stefan"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   114
    "Modified (format): / 17-01-2018 / 16:30:59 / stefan"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   115
!
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   116
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   117
encode:aCodePoint
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   118
    "given a codePoint in unicode, return a single byte in my encoding for it"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   119
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   120
    self subclassResponsibility
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   121
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   122
    "Modified (comment): / 17-01-2018 / 14:52:28 / stefan"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   123
!
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   124
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   125
encodeCharacter:aUnicodeCharacterOrCodePoint
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   126
    "encode aUnicodeCharacterOrCodePoint to a (8-bit) String or ByteArray"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   128
    ^ (Character codePoint:(self encode:aUnicodeCharacterOrCodePoint codePoint)) asString.
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   129
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   130
    "
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   131
      CharacterEncoderImplementations::ISO8859_10 new encodeCharacter:260
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   132
      CharacterEncoderImplementations::ISO8859_10 new encodeCharacter:$Ą
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   133
    "
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   134
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   135
    "Created: / 17-01-2018 / 14:13:03 / stefan"
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   136
! !
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   137
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   138
!FixedBytesEncoder class methodsFor:'documentation'!
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   139
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   140
version
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   141
    ^ '$Header$'
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   142
!
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   143
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   144
version_CVS
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   145
    ^ '$Header$'
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   146
! !
0d61027663a5 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   147