CharacterEncoderImplementations__JIS0208_to_EUC.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 20:55:17 +0200
changeset 24417 03b083548da2
parent 22483 8220fce5e49e
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:
22483
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
     1
"{ Encoding: utf8 }"
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
     2
8148
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
     3
"
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
     4
 COPYRIGHT (c) 2004 by eXept Software AG
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
     5
              All Rights Reserved
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
     6
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
     7
 This software is furnished under a license and may be used
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
     8
 only in accordance with the terms of that license and with the
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    10
 be provided or otherwise made available to, or used by, any
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    11
 other person.  No title to or ownership of the software is
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    12
 hereby transferred.
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    13
"
8123
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ Package: 'stx:libbasic' }"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
"{ NameSpace: CharacterEncoderImplementations }"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
22483
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    18
VariableBytesEncoder subclass:#JIS0208_to_EUC
8123
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	instanceVariableNames:''
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	classVariableNames:'Jis7KanjiEscapeSequence Jis7RomanEscapeSequence
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
		JisISO2022EscapeSequence Jis7KanjiOldEscapeSequence'
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	poolDictionaries:''
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
	category:'Collections-Text-Encodings'
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
!
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
!JIS0208_to_EUC class methodsFor:'documentation'!
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
8148
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    28
copyright
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    29
"
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    30
 COPYRIGHT (c) 2004 by eXept Software AG
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    31
              All Rights Reserved
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    32
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    33
 This software is furnished under a license and may be used
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    34
 only in accordance with the terms of that license and with the
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    35
 inclusion of the above copyright notice.   This software may not
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    36
 be provided or otherwise made available to, or used by, any
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    37
 other person.  No title to or ownership of the software is
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    38
 hereby transferred.
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    39
"
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    40
!
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8123
diff changeset
    41
22483
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    42
documentation
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    43
"
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    44
    documentation to be added.
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    45
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    46
    [author:]
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    47
        stefan
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    48
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    49
    [instance variables:]
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    50
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    51
    [class variables:]
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    52
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    53
    [see also:]
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    54
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    55
"
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    56
!
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
    57
8123
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
examples
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
  Encoding (jis0208 to jis-7)
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
     |t|
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
     t := JIS0208_to_JIS7 decodeString:'hello'.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
     JIS0208_to_JIS7 encodeString:t. 
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
 Decoding (jis-7 to jis0208):
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
     JIS0208_to_JIS7 decodeString:'hello'  
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
 ending with a crippled escape:
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
     |s|
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
     s := 'hello' copyWith:Character esc.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
     JIS0208_to_JIS7 decodeString:s
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
     |s|
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
     s := 'hello' copyWith:Character esc.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
     s := s copyWith:$A.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
     JIS0208_to_JIS7 decodeString:s
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
     |s|
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
     s := 'hello' copyWith:Character esc.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
     s := s copyWith:$$.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
     JIS0208_to_JIS7 decodeString:s
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
     |s|
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
     s := 'hello' copyWith:Character esc.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
     s := s copyWith:$$.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
     s := s copyWith:$A.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
     JIS0208_to_JIS7 decodeString:s
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
 ending with a KANJI-in,  but no more chars:
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
     |s|
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
     s := 'hello' copyWith:Character esc.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
     s := s copyWith:$$.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
     s := s copyWith:$B.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
     JIS0208_to_JIS7 decodeString:s
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
 ending with a KANJI-in, followed by $3 (KO):
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
     |s|
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
     s := 'hello' copyWith:Character esc.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
     s := s copyWith:$$.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
     s := s copyWith:$B.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
     s := s , '$3'.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
     JIS0208_to_JIS7 decodeString:s
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
 ending with a KANJI-in, followed by $3$l$OF| (KO RE HA NI):
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
     |s|
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
     s := 'hello' copyWith:Character esc.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
     s := s copyWith:$$.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
     s := s copyWith:$B.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
     s := s , '$3$l$OF|'.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
     JIS0208_to_JIS7 decodeString:s
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
 a KO in between:
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
     |s|
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
     s := 'hello' copyWith:Character esc.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
     s := s copyWith:$$.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
     s := s copyWith:$B.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
     s := s , '$3'.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
     s := s copyWith:Character esc.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
     s := s copyWith:$(.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
     s := s copyWith:$B.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
     s := s , 'hello'.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
     JIS0208_to_JIS7 decodeString:s
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
 I dont know what that means ;-):
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
     |s t l|
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
     s := 'kterm ' copyWith:Character esc.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
     s := s copyWith:$$.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
     s := s copyWith:$B.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
     s := s , '$N4A;zC<Kv%(%_%e%l!!<%?'.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
     s := s copyWith:Character esc.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
     s := s copyWith:$(.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
     s := s copyWith:$B.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
     s := s , ' kterm'.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
     t := JIS0208_to_JIS7 decodeString:s.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
     l := Label new.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
     l label:t.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
     l font:(Font family:'k14' face:nil style:nil size:nil).
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
     l font:(Font family:'gothic' size:17).
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
     l font:(Font family:'mincho' size:23).
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
     l realize
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
! !
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
!JIS0208_to_EUC class methodsFor:'queries'!
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
nameOfDecodedCode
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
    "I encode jis0208 into jis7 and vice versa"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
    ^ #'jis0208'
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
! !
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
!JIS0208_to_EUC methodsFor:'encoding & decoding'!
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
decodeString:aString
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
    "return a new string containing the characters from aString,
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
     which is interpreted as an EUC encoded singleByte string.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
     There are various JIS encodings around (New-JIS, Old-JIS and NEC-JIS);
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
     this one only understands New-JIS.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
     The result is a JISEncodedString (you need a JIS font to display that ...).
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
     This is a first-class candidate for a primitive"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    |newString 
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
     sz     "{ Class: SmallInteger }"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
     dstIdx "{ Class: SmallInteger }"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
     srcIdx "{ Class: SmallInteger }"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
     b1     "{ Class: SmallInteger }"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
     b2     "{ Class: SmallInteger }"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
     val    "{ Class: SmallInteger }"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
     c c2|
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
    sz := aString size.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
    newString := TwoByteString new:sz.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
    sz ~~ 0 ifTrue:[
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
        dstIdx := 1.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
        srcIdx := 1.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
%{
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
        if (__isString(aString)
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
         && (__Class(newString) == @global(JISEncodedString))) {
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
            int _dstIdx = 1, _srcIdx = 1;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
            int _sz = __intVal(sz);
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
            unsigned char *_cp = __stringVal(aString);
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
            unsigned char _c1;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
            unsigned short *_jcp = (unsigned short *)__stringVal(newString);
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
            while (_srcIdx <= _sz) {
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
                _c1 = _cp[_srcIdx-1];
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
                if (_c1 < 161) {
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
                    _jcp[_dstIdx-1] = _c1;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
                } else {
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
                    _srcIdx++;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
                    if (_srcIdx <= _sz) {
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
                        unsigned char _c2;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
                        int _val;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
                        int _b1, _b2;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
                        _b1 = _c1 - 128;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
                        _c2 = _cp[_srcIdx-1];
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
                        _b2 = _c2 - 128;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
                        _val = (_b1<<8) + _b2;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
                        if (_val < 0) {
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
                            /* decoder errors are handled in smalltalk */
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
                            _srcIdx--;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
                            goto getOutOfHere;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
                        }
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
                        _jcp[_dstIdx-1] = _val;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
                    } else {
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
                        _jcp[_dstIdx-1] = _c1;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
                    }
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
                }
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
                _dstIdx++;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
                _srcIdx++;
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
            }
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
    getOutOfHere:
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8163
diff changeset
   228
            srcIdx = __mkSmallInteger(_srcIdx);
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8163
diff changeset
   229
            dstIdx = __mkSmallInteger(_dstIdx);
8123
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
        }
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
%}.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
        [srcIdx <= sz] whileTrue:[
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
            c := aString at:srcIdx.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
            b1 := c codePoint.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
            b1 < 161 ifTrue:[
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
                "/ characters below 16rA1 are left untranslated
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
                "/ (control character or roman).
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
                newString at:dstIdx put:c.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
            ] ifFalse:[
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
                srcIdx := srcIdx + 1.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
                srcIdx <= sz ifTrue:[    
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
                    b1 := b1 - 128.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
                    b2 := (c2 := aString at:srcIdx) codePoint.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
                    b2 := b2 - 128.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
                    val := (b1 bitShift:8) bitOr:b2.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
                    val <= 0 ifTrue:[
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
                        DecodingError
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
                            raiseWith:aString
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
                            errorString:'EUC decoding failed (not EUC encoded ?)'.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
                        newString at:dstIdx put:c.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
                        dstIdx := dstIdx + 1.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
                        newString at:dstIdx put:c2.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
                    ] ifFalse:[
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
                        newString at:dstIdx put:(Character value:val).
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
                    ].
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
                ] ifFalse:[
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
                    newString at:dstIdx put:c.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
                ].
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
            ].
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
            dstIdx := dstIdx + 1.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
            srcIdx := srcIdx + 1.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
        ].
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
        (dstIdx-1) ~~ sz ifTrue:[
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
            newString := newString copyFrom:1 to:dstIdx-1.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
        ].
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
    ].
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
    ^ newString
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
    "simple:
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
         'hello' decodeFrom:#euc 
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
    "
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
22483
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
   276
    "Created: / 17-04-1996 / 16:10:22 / cg"
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
   277
    "Modified: / 04-07-1997 / 11:06:05 / cg"
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
   278
    "Modified: / 19-01-2018 / 14:47:19 / stefan"
8123
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
!
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
encodeString:aJISString
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
    "return a new string with aJISStrings characters as EUC encoded 8bit string.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
     The argument must be a JIS 16 bit character string.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
     The resulting string is only useful to be stored on some external file,
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
     not for being displayed in an ST/X view.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
     This is a first-class candidate for a primitive"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
    |sz "{ Class: SmallInteger }"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
     b1 "{ Class: SmallInteger }"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
     val "{ Class: SmallInteger }"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
     c romans out|
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
    romans := CharacterEncoderImplementations::JIS0208 romanTable.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
    sz := aJISString size.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
    sz == 0 ifTrue:[^ ''].
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
    out := WriteStream on:(String new:(sz * 2)).
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
    1 to:sz do:[:srcIndex |
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
        b1 := (c := aJISString at:srcIndex) codePoint.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
        b1 < 161 ifTrue:[
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
            "/ a control or roman character    
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
            out nextPut:c.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
        ] ifFalse:[
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
            "/
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
            "/ check for a roman character
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
            "/ the two numbers below are romanTable min and romanTable max
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
            "/
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
            (b1 between:16r2121 and:16r2573) ifTrue:[
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
                val := romans indexOf:b1.
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
                (val ~~ 0 and:[val <= 127]) ifTrue:[
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
                    out nextPut:(Character value:(val - 1 + 32))
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
                ] ifFalse:[
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
                    out nextPut:(Character value:(b1 bitShift:-8) + 128).
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
                    out nextPut:(Character value:(b1 bitAnd:16rFF) + 128).
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
                ].
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
            ] ifFalse:[
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
                out nextPut:(Character value:(b1 bitShift:-8) + 128).
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
                out nextPut:(Character value:(b1 bitAnd:16rFF) + 128).
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
            ]
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
        ].
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
    ].
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
    ^ out contents
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
    "simple:
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
         ('hello' decodeFrom:#euc) encodeInto:#euc    
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
    "
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
    "Created: 17.4.1996 / 16:13:33 / cg"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
    "Modified: 4.7.1997 / 11:03:43 / cg"
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
! !
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
8163
a867b07aa226 name query
ca
parents: 8148
diff changeset
   336
!JIS0208_to_EUC methodsFor:'queries'!
a867b07aa226 name query
ca
parents: 8148
diff changeset
   337
a867b07aa226 name query
ca
parents: 8148
diff changeset
   338
nameOfEncoding
a867b07aa226 name query
ca
parents: 8148
diff changeset
   339
    ^ #'euc'
a867b07aa226 name query
ca
parents: 8148
diff changeset
   340
! !
a867b07aa226 name query
ca
parents: 8148
diff changeset
   341
8123
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   342
!JIS0208_to_EUC class methodsFor:'documentation'!
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
version
22483
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
   345
    ^ '$Header$'
8123
efb801f6656f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
! !
22483
8220fce5e49e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
   347