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