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