CharacterEncoderImplementations__JIS0208_to_SJIS.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 20:55:17 +0200
changeset 24417 03b083548da2
parent 22482 763385e4fdeb
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:
18243
ef19ec73cad1 class: CharacterEncoderImplementations::JIS0208_to_SJIS
Claus Gittinger <cg@exept.de>
parents: 18241
diff changeset
     1
"{ Encoding: utf8 }"
ef19ec73cad1 class: CharacterEncoderImplementations::JIS0208_to_SJIS
Claus Gittinger <cg@exept.de>
parents: 18241
diff changeset
     2
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
 COPYRIGHT (c) 2004 by eXept Software AG
21623
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
     5
	      All Rights Reserved
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 This software is furnished under a license and may be used
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
 hereby transferred.
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ Package: 'stx:libbasic' }"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
"{ NameSpace: CharacterEncoderImplementations }"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    18
VariableBytesEncoder subclass:#JIS0208_to_SJIS
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	instanceVariableNames:''
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	classVariableNames:''
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	poolDictionaries:''
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	category:'Collections-Text-Encodings'
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
!JIS0208_to_SJIS class methodsFor:'documentation'!
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
copyright
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
 COPYRIGHT (c) 2004 by eXept Software AG
21623
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
    30
	      All Rights Reserved
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
 This software is furnished under a license and may be used
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
 only in accordance with the terms of that license and with the
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
 be provided or otherwise made available to, or used by, any
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
 other person.  No title to or ownership of the software is
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
 hereby transferred.
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
"
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    39
!
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    40
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    41
documentation
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    42
"
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    43
    documentation to be added.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    44
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    45
    [author:]
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    46
        stefan
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    47
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    48
    [instance variables:]
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    49
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    50
    [class variables:]
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    51
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    52
    [see also:]
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    53
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
    54
"
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
! !
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
!JIS0208_to_SJIS class methodsFor:'mapping'!
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
mapFileURL1_relativePathName
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    ^ 'OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT'
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
! !
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
!JIS0208_to_SJIS class methodsFor:'queries'!
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
nameOfDecodedCode
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    "I encode sjis into jis"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    ^ #'jis0208'
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
! !
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
!JIS0208_to_SJIS methodsFor:'encoding & decoding'!
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
decodeString:aString
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
    "return a new JIS-Encoded-String containing the characters from aString,
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
     which are interpreted as Shift-JIS encoded singleByte chars.
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
     Shift-JIS is a leadyByte code, with a variable-length encoding."
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    |newString char1 char2
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
     sz         "{ Class: SmallInteger }"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
     dstIdx     "{ Class: SmallInteger }"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
     srcIdx     "{ Class: SmallInteger }"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
     b1         "{ Class: SmallInteger }"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
     b2         "{ Class: SmallInteger }"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
     val        "{ Class: SmallInteger }"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
     any16bit romans|
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    sz := aString size.
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    sz == 0 ifTrue:[^ aString].
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    newString := TwoByteString new:sz.
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
    any16bit := false.
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
    dstIdx := 1.
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
    srcIdx := 1.
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
    romans := CharacterEncoderImplementations::JIS0208 romanTable.
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
%{
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
    if (__isStringLike(aString)
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
     && (__Class(newString) == @global(TwoByteString))) {
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   100
        INT _dstIdx = 0, _srcIdx = 0;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   101
        int _sz = __intVal(sz);
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   102
        unsigned char *_cp = __stringVal(aString);
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   103
        unsigned char _c1, _c2;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   104
        unsigned short *_jcp = (unsigned short *)__stringVal(newString);
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   106
        while (_srcIdx < _sz) {
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   107
            int _val;
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   109
            _c1 = _cp[_srcIdx];
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   110
            _srcIdx++;
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   112
            if ((_srcIdx < _sz)
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   113
             && (((_c1 >= 129) && (_c1 <= 159))
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   114
                 || ((_c1 >= 224) && (_c1 <= 239)))) {
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   115
                _c2 = _cp[_srcIdx];
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   116
                _srcIdx++;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   117
                if ((_c2 >= 64) && (_c2 <= 252)) {
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   118
                    int _adjust, _rowOffs, _cellOffs;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   119
                    int _b1, _b2;
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   121
                    _adjust = (_c2 < 159) ? 1 : 0;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   122
                    _rowOffs = (_c1 < 160) ? 112 : 176;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   123
                    if (_adjust) {
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   124
                        _cellOffs = 31 + ((_c2 > 127) ? 1 : 0);
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   125
                    } else {
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   126
                        _cellOffs = 126;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   127
                    }
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   128
                    _b1 = ((_c1 - _rowOffs) << 1) - _adjust;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   129
                    _b2 = (_c2 - _cellOffs);
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   130
                    _val = (_b1<<8) + _b2;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   131
                    if (_val <= 0) {
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   132
                        /* decoder error - let smalltalk handle that */
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   133
                        _srcIdx -= 2;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   134
                        goto getOutOfHere;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   135
                    }
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   136
                    if (_val > 0xFF) any16bit = true;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   137
                    _jcp[_dstIdx] = _val;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   138
                } else {
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   139
                    /* mhmh - append untranslated */
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   141
                    _jcp[_dstIdx] = _c1;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   142
                    _dstIdx++;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   143
                    _jcp[_dstIdx] = _c2;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   144
                }
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   145
            } else {
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   146
                if ((_c1 >= 0xA1 /* 161 */) && (_c1 <= 0xDF /* 223 */)) {
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   147
                    /* HALFWIDTH KATAKANA
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   148
                     * map half-width katakana to 8E:xx
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   149
                     */
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   150
                    _val = _c1 - 128;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   151
                    _val = _val + 0x8E00;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   152
                    any16bit = true;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   153
                    _jcp[_dstIdx] = _val;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   154
                } else {
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   155
                    /* roman characters are translated as per romanTable */
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   156
                    _jcp[_dstIdx] = _c1;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   157
                    if ((romans != nil)
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   158
                     && (__isArrayLike(romans))
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   159
                     && ((_c1 - 0x20) < __arraySize(romans))) {
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   160
                        any16bit = true;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   161
                        _jcp[_dstIdx] = __intVal(__ArrayInstPtr(romans)->a_element[(_c1 - 0x20)]);
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   162
                    }
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   163
                }
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   164
            }
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   165
            _dstIdx++;
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   166
        }
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
    getOutOfHere: ;
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   168
        dstIdx = __mkSmallInteger(_dstIdx+1);
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   169
        srcIdx = __mkSmallInteger(_srcIdx+1);
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
    }
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
%}.
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
    [srcIdx <= sz] whileTrue:[
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   174
        "/
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   175
        "/ scan for next character in 129..159 or 224..239
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   176
        "/
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   177
        char1 := aString at:srcIdx.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   178
        srcIdx := srcIdx + 1.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   179
        b1 := char1 codePoint.
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   181
        ((srcIdx <= sz)
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   182
        and:[(b1 >= 16r81"129" and:[b1 <= 16r9F"159"])                 "/ SJIS1 81 .. 9F
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   183
             or:[b1 >= 16rE0"224" and:[b1 <= 16rEF"239"]]]) ifTrue:[   "/       E0 .. EF
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   184
            char2 := aString at:srcIdx.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   185
            srcIdx := srcIdx + 1.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   186
            b2 := char2 codePoint.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   187
            (b2 >= 16r40"64" and:[b2 <= 16rFC"252"]) ifTrue:[          "/ SJIS2 40 .. FC
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   188
                |adjust rowOffs cellOffs|
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   190
                adjust := (b2 < 16r9F"159") ifTrue:[1] ifFalse:[0].
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   191
                rowOffs := b1 < 16rA0"160" ifTrue:[112] ifFalse:[176].
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   192
                adjust == 1 ifTrue:[
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   193
                    cellOffs := 31 + (b2 > 127 ifTrue:[1] ifFalse:[0]).
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   194
                ] ifFalse:[
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   195
                    cellOffs := 126.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   196
                ].
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   197
                b1 := ((b1 - rowOffs) bitShift:1) - adjust.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   198
                b2 := (b2 - cellOffs).
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   199
                val := (b1 bitShift:8) + b2.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   200
                val <= 0 ifTrue:[
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   201
                    DecodingError
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   202
                            raiseWith:aString
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   203
                            errorString:'SJIS decoding failed (not SJIS encoded ?)'.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   204
                    newString at:dstIdx put:char1.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   205
                    dstIdx := dstIdx + 1.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   206
                    newString at:dstIdx put:char2.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   207
                ] ifFalse:[
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   208
                    val > 16rFF ifTrue:[any16bit := true].
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   209
                    newString at:dstIdx put:(Character value:val).
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   210
                ]
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   211
            ] ifFalse:[
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   212
                "/ mhmh - append untranslated
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   214
                newString at:dstIdx put:char1.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   215
                dstIdx := dstIdx + 1.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   216
                newString at:dstIdx put:char2.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   217
            ]
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   218
        ] ifFalse:[
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   219
            (b1 >= 16rA1 "161" and:[b1 <= 16rDF "223"]) ifTrue:[     "/ HALFWIDTH KATAKANA
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   220
                "/ map half-width katakan to 8E:xx
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   221
                val := b1 - 128.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   222
                val := val + (16r8E"142" bitShift:8).
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   223
                any16bit := true.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   224
                newString at:dstIdx put:(Character value:val).
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   225
            ] ifFalse:[
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   226
                "/ roman characters translated as per romanTable
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   227
                newString at:dstIdx put:char1.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   228
                romans isArray ifTrue:[
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   229
                    char1 codePoint < romans size ifTrue:[
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   230
                        any16bit := true.
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   231
                        newString at:dstIdx put:(Character value:(romans at:char1 codePoint-32+1)).
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   232
                    ]
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   233
                ]
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   234
            ]
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   235
        ].
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   236
        dstIdx := dstIdx + 1.
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
    ].
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
    any16bit ifFalse:[
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   239
        newString := String fromString:newString
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
    ].
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
    (dstIdx-1) ~~ sz ifTrue:[
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   243
        newString := newString copyTo:dstIdx - 1.
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
    ].
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
    ^ newString
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
    "simple:
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
21623
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   250
     CharacterEncoderImplementations::JIS0208_to_SJIS decodeString:'hello'
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   251
     (CharacterEncoder encoderFor:#sjis) decodeString:'hello'
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   253
     CharacterEncoderImplementations::JIS0208_to_SJIS decodeString:('../../doc/online/japanese/TOP.html' asFilename contentsAsString)
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   255
     '../../doc/online/japanese/TOP.html' asFilename contentsAsString
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   256
                decodeFrom:#jis208
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
    "
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   258
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   259
    "Modified (comment): / 17-01-2018 / 17:48:08 / stefan"
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
!
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
encodeString:aJISString
18243
ef19ec73cad1 class: CharacterEncoderImplementations::JIS0208_to_SJIS
Claus Gittinger <cg@exept.de>
parents: 18241
diff changeset
   263
    "return a new string with aJISString's characters as SJIS encoded 8bit string.
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
     The resulting string is only useful to be stored on some external file,
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
     not for being displayed in an ST/X view."
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
    |sz "{ Class: SmallInteger }"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
     rval "{ Class: SmallInteger }"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
     val  "{ Class: SmallInteger }"
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
     romans c out isSJIS|
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
    romans := JIS0208 romanTable.
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
    sz := aJISString size.
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
    sz == 0 ifTrue:[^ ''].
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
    out := WriteStream on:(String new:(sz * 2)).
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
    1 to:sz do:[:srcIndex |
21623
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   280
	val := (c := aJISString at:srcIndex) codePoint.
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   281
	(val <= 128) ifTrue:[
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   282
	    "/ a control or ascii character
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   283
	    out nextPut:c.
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   284
	] ifFalse:[
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   285
	    (val == 16rFFFF "invalid-char") ifTrue:[
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   286
		out nextPut:Character space.
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   287
	    ] ifFalse:[
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   288
		(val > 150 and:[val < 224]) ifTrue:[
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   289
		    "/ ascii subset
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   290
		    out nextPut:c.
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   291
		] ifFalse:[
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   292
		    "/ should not happen ...
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   293
		    val <= 255 ifTrue:[
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   294
			out nextPut:c.
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   295
		    ] ifFalse:[
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   296
			isSJIS := true.
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
21623
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   298
			"/ check for HALFWIDTH KATAKANA
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   299
			"/ 8E:xx
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   300
			"/ NO: halfwidth katakana no longer generated
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   301
			"/     remains there as full-width katakana
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
"/                        (val bitAnd:16rFF00) == 16r8E00 ifTrue:[
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
"/                            |b|
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
"/
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
"/                            b := (val bitAnd:16rFF) + 128.
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
"/                            (b >= 16rA1 "161" and:[b <= 16rDF "223"]) ifTrue:[
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
"/                                out nextPut:(Character value:b).
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
"/                                isSJIS := false.
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
"/                            ].
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
"/                        ].
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
21623
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   313
			isSJIS ifTrue:[
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   314
			    "/ check for a roman character
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   315
			    (val between:"romanTable min" 16r2121 and:"romanTable max" 16r2573) ifTrue:[
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   316
				rval := romans indexOf:val.
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   317
				rval ~~ 0 ifTrue:[
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   318
				    rval := rval - 1 + 32.
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   319
				    rval <= 16r7F ifTrue:[ "/ do not translate halfwidth katakana
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   320
					out nextPut:(Character value:rval).
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   321
					isSJIS := false.
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   322
				    ]
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   323
				].
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   324
			    ].
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   325
			].
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
21623
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   327
			isSJIS ifTrue:[
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   328
			    |b1 b2 rowOffset cellOffset|
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
21623
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   330
			    b1 := (val bitShift:-8).
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   331
			    b2 := (val bitAnd:16rFF).
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   332
			    rowOffset := (b1 < 95) ifTrue:[112] ifFalse:[176].
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   333
			    cellOffset := b1 odd ifTrue:[(b2 > 95) ifTrue:[32] ifFalse:[31]]
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   334
						 ifFalse:[126].
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
21623
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   336
			    out nextPut:(Character value:(((b1 + 1) bitShift:-1) + rowOffset)).
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   337
			    out nextPut:(Character value:b2 + cellOffset).
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   338
			]
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   339
		    ]
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   340
		]
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   341
	    ]
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   342
	].
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
    ].
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
    ^ out contents
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
! !
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
!JIS0208_to_SJIS methodsFor:'private'!
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
newString:size
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
    ^ JISEncodedString new:size
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
! !
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
!JIS0208_to_SJIS methodsFor:'queries'!
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
nameOfEncoding
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
    ^ #'sjis'
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
! !
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
!JIS0208_to_SJIS class methodsFor:'documentation'!
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
version
21623
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   362
    ^ '$Header$'
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
!
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
version_CVS
21623
0fd2de531f9a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18243
diff changeset
   366
    ^ '$Header$'
18241
c594840ddf15 renamed to make filename compliant to class name
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
! !
22482
763385e4fdeb #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21623
diff changeset
   368