CharacterEncoder.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Mar 2004 01:08:33 +0100
changeset 8127 7531ed2cdf35
parent 8126 33f9c4850e84
child 8128 4f4195d0a720
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8048
293c8178c6eb utf8 errors
Claus Gittinger <cg@exept.de>
parents: 8033
diff changeset
     1
"
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
     2
 COPYRIGHT (c) 2004 by eXept Software AG
7932
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
     3
	      All Rights Reserved
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
     4
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
     5
 This software is furnished under a license and may be used
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
     6
 only in accordance with the terms of that license and with the
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
     8
 be provided or otherwise made available to, or used by, any
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
     9
 other person.  No title to or ownership of the software is
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    10
 hereby transferred.
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    11
"
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    12
8114
05274a80fcc4 separated implementation into dynamically (lazy) loaded classes
Claus Gittinger <cg@exept.de>
parents: 8105
diff changeset
    13
"{ Package: 'stx:libbasic' }"
05274a80fcc4 separated implementation into dynamically (lazy) loaded classes
Claus Gittinger <cg@exept.de>
parents: 8105
diff changeset
    14
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
    15
Object subclass:#CharacterEncoder
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
    16
	instanceVariableNames:''
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
    17
	classVariableNames:'EncoderClassesByName EncodersByName CachedEncoders LastEncoder
8122
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
    18
		AccessLock NullEncoderInstance Jis7KanjiEscapeSequence
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
    19
		Jis7RomanEscapeSequence JisISO2022EscapeSequence
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
    20
		Jis7KanjiOldEscapeSequence'
7915
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
    21
	poolDictionaries:''
8114
05274a80fcc4 separated implementation into dynamically (lazy) loaded classes
Claus Gittinger <cg@exept.de>
parents: 8105
diff changeset
    22
	category:'Collections-Text-Encodings'
7969
1c252e9cf79c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7967
diff changeset
    23
!
1c252e9cf79c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7967
diff changeset
    24
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
    25
CharacterEncoder subclass:#CompoundEncoder
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
    26
	instanceVariableNames:'decoder encoder'
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
    27
	classVariableNames:''
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
    28
	poolDictionaries:''
7915
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
    29
	privateIn:CharacterEncoder
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
    30
!
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
    31
7932
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
    32
CharacterEncoder subclass:#DefaultEncoder
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
    33
	instanceVariableNames:''
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
    34
	classVariableNames:''
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
    35
	poolDictionaries:''
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
    36
	privateIn:CharacterEncoder
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
    37
!
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
    38
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
    39
CharacterEncoder subclass:#InverseEncoder
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
    40
	instanceVariableNames:'decoder'
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
    41
	classVariableNames:''
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
    42
	poolDictionaries:''
7915
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
    43
	privateIn:CharacterEncoder
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
    44
!
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
    45
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    46
CharacterEncoder subclass:#NullEncoder
7893
80df105ac17c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7892
diff changeset
    47
	instanceVariableNames:''
80df105ac17c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7892
diff changeset
    48
	classVariableNames:''
80df105ac17c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7892
diff changeset
    49
	poolDictionaries:''
7915
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
    50
	privateIn:CharacterEncoder
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
    51
!
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
    52
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
CharacterEncoder subclass:#OtherEncoding
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
	instanceVariableNames:''
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
	classVariableNames:''
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
	poolDictionaries:''
7915
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
    57
	privateIn:CharacterEncoder
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
    58
!
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
    59
7919
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
    60
CharacterEncoder subclass:#TwoStepEncoder
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
    61
	instanceVariableNames:'encoder1 encoder2'
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
    62
	classVariableNames:''
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
    63
	poolDictionaries:''
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
    64
	privateIn:CharacterEncoder
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
    65
!
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
    66
7893
80df105ac17c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7892
diff changeset
    67
!CharacterEncoder class methodsFor:'documentation'!
80df105ac17c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7892
diff changeset
    68
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    69
copyright
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    70
"
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    71
 COPYRIGHT (c) 2004 by eXept Software AG
7932
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
    72
	      All Rights Reserved
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    73
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    74
 This software is furnished under a license and may be used
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    75
 only in accordance with the terms of that license and with the
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    76
 inclusion of the above copyright notice.   This software may not
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    77
 be provided or otherwise made available to, or used by, any
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    78
 other person.  No title to or ownership of the software is
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    79
 hereby transferred.
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    80
"
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    81
!
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    82
7893
80df105ac17c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7892
diff changeset
    83
documentation
80df105ac17c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7892
diff changeset
    84
"
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    85
    unfinished code - please read howToAddMoreCoders.
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    86
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    87
    Character mappings are based on information in character maps found at either:
7932
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
    88
	http://std.dkuug.dk/i18n/charmaps
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    89
    or:
7932
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
    90
	http://www.unicode.org/Public/MAPPINGS
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    91
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    92
    No Warranty.
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    93
"
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    94
!
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    95
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    96
examples
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    97
"
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    98
    |s1 s2|
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
    99
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   100
    s1 := 'hello'.
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   101
    s2 := CharacterEncoder encode:s1 from:#'iso8859-1' into:#'unicode'.
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   102
    s2
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   103
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   104
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   105
    |s1 s2|
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   106
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   107
    s1 := 'hello'.
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   108
    s2 := CharacterEncoder encode:s1 from:#'iso8859-1' into:#'iso8859-7'.
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   109
    s2
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   110
"
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   111
!
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   112
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   113
howToAddMoreCoders
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   114
"
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   115
    Coders can be hand-written or automagically generated via  a mapping table.
7932
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   116
    Examples for hand-written coders are UTF8_to_ISO10464 or JIS0208_to_JIS7.
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   117
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   118
    The table driven encode/decode methods can be generated from a character mapping document
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   119
    as found on the unicode consortium host
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   120
        (for example: 'http://www.unicode.org/Public/MAPPINGS/ISO8859/8859-1.TXT')
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   121
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   122
    or from the i18n character maps:
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   123
        (for example: 'http://std.dkuug.dk/i18n/charmaps/ISO-8859-1
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   124
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   125
    In order to add another coder (for example: for finish EBCDIC or ms-codePage 278),
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   126
    perform the following steps:
8114
05274a80fcc4 separated implementation into dynamically (lazy) loaded classes
Claus Gittinger <cg@exept.de>
parents: 8105
diff changeset
   127
        - create a private subclass of CharacterEncoder named (for example) CP267.
05274a80fcc4 separated implementation into dynamically (lazy) loaded classes
Claus Gittinger <cg@exept.de>
parents: 8105
diff changeset
   128
05274a80fcc4 separated implementation into dynamically (lazy) loaded classes
Claus Gittinger <cg@exept.de>
parents: 8105
diff changeset
   129
        - create a public subclass of CharacterEncoderImplementations::CharacterEncoderImplementation named (for example) CharacterEncoderImplementations::CP267.
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   130
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   131
        - define the mappingURL1_relativeName (if the table is found on 'www.unicode.org')
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   132
          or the mappingURL2_relativeName (if it is found on 'std.dkuug.dk') method, which
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   133
          should return the name of the tables file, relative to the top directory there
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   134
          (which is '.../Public/MAPPINGS' on www.unicode.org and '.../i18n/charmaops' on 'std.dkuug.dk'.
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   135
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   136
          In this example, the table from 'std.dkuug.dk' is used, and named 'EBCDIC-CP-FI' there.
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   137
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   138
        - generate code by evaluating:
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   139
            CharacterEncoder::CP267 generateCode
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   140
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   141
    Thats all !!
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   142
7909
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   143
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   144
    The existing code was generated by:
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   145
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   146
        CharacterEncoder::SingleByteEncoder subclassesDo:[:cls | Transcript showCR:cls name. cls flushCode; generateCode ]
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   147
        CharacterEncoder::SingleByteEncoder subclassesDo:[:cls | cls allSubclassesDo:[:sub | Transcript showCR:sub name. sub flushCode; generateSubclassCode]]
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   148
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   149
    or individually:
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   150
        CharacterEncoder::ASCII flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   151
        CharacterEncoder::ISO8859_1 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   152
        CharacterEncoder::ISO8859_2 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   153
        CharacterEncoder::ISO8859_3 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   154
        CharacterEncoder::ISO8859_4 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   155
        CharacterEncoder::ISO8859_5 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   156
        CharacterEncoder::ISO8859_6 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   157
        CharacterEncoder::ISO8859_7 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   158
        CharacterEncoder::ISO8859_8 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   159
        CharacterEncoder::ISO8859_9 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   160
        CharacterEncoder::ISO8859_10 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   161
        CharacterEncoder::ISO8859_11 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   162
        CharacterEncoder::ISO8859_13 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   163
        CharacterEncoder::ISO8859_14 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   164
        CharacterEncoder::ISO8859_15 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   165
        CharacterEncoder::ISO8859_16 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   166
        CharacterEncoder::KOI8_R flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   167
        CharacterEncoder::GSM0338 flushCode; generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   168
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   169
        CharacterEncoder::KOI8_U flushCode; generateSubclassCode.
7912
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   170
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   171
        CharacterEncoder::JIS0208 flushCode; generateCode.
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   172
"
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   173
! !
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   174
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   175
!CharacterEncoder class methodsFor:'instance creation'!
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   176
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   177
encoderFor:encodingNameSymbol
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   178
    "given the name of an encoding, return an encoder-instance which can map these from/into unicode."
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   179
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   180
    ^ self
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   181
        encoderFor:encodingNameSymbol 
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   182
        ifAbsent:[
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   183
            self error:'no encoder for ' , encodingNameSymbol mayProceed:true.
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   184
            NullEncoderInstance
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   185
        ]
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   186
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   187
    "
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   188
     CharacterEncoder encoderFor:#'latin1'       
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   189
     self encoderFor:#'arabic'       
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   190
     self encoderFor:#'ms-arabic'       
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   191
     self encoderFor:#'iso8859-5'    
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   192
     self encoderFor:#'koi8-r'      
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   193
     self encoderFor:#'koi8-u'      
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   194
     self encoderFor:#'jis0208'      
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   195
     self encoderFor:#'jis7'      
8087
0a2ee76bcf55 last version before separating into extra classes
Claus Gittinger <cg@exept.de>
parents: 8062
diff changeset
   196
     self encoderFor:#'utf8'      
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   197
    "
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   198
!
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   199
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   200
encoderFor:encodingNameSymbol ifAbsent:exceptionValue
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   201
    "given the name of an encoding, return an encoder-instance which can map these from/into unicode."
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   202
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   203
    |enc cls lcName name unicodeEncoders unicodeEncoderClasses|
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   204
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   205
    encodingNameSymbol isNil ifTrue:[ ^ NullEncoderInstance].
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   206
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   207
    lcName := encodingNameSymbol asLowercase.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   208
    name := lcName asSymbolIfInterned.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   209
    name isNil ifTrue:[name := lcName].
8052
4ca96b117b21 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 8048
diff changeset
   210
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   211
    name includesMatchCharacters ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   212
        unicodeEncoders := EncodersByName at:#unicode ifAbsent:nil.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   213
        unicodeEncoders notNil ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   214
            unicodeEncoders keysAndValuesDo:[:eachEncodingAlias :eachEncoderInstance |
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   215
                (name matches:eachEncodingAlias) ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   216
                    ^ eachEncoderInstance.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   217
                ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   218
            ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   219
        ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   220
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   221
        unicodeEncoderClasses := EncoderClassesByName at:#unicode.
8127
7531ed2cdf35 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8126
diff changeset
   222
        unicodeEncoderClasses notNil ifTrue:[
7531ed2cdf35 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8126
diff changeset
   223
            unicodeEncoderClasses keysandvaluesdo:[:eachencodingalias :eachencoderclass |
7531ed2cdf35 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8126
diff changeset
   224
                (name matches:eachencodingalias) iftrue:[
7531ed2cdf35 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8126
diff changeset
   225
                    ^ eachencoderclass new.
7531ed2cdf35 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8126
diff changeset
   226
                ].
7974
9905043988ee *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7973
diff changeset
   227
            ].
9905043988ee *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7973
diff changeset
   228
        ].
9905043988ee *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7973
diff changeset
   229
        ^ exceptionValue value
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   230
    ].
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   231
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   232
    AccessLock critical:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   233
        unicodeEncoders := EncodersByName at:#unicode ifAbsent:nil.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   234
        unicodeEncoders isNil ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   235
            EncodersByName at:#unicode put:(unicodeEncoders := Dictionary new).
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   236
        ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   237
        enc := unicodeEncoders at:name ifAbsent:nil.
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   238
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   239
        enc isNil ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   240
            unicodeEncoderClasses := EncoderClassesByName at:#unicode ifAbsent:nil.
8120
bafc72f60618 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8119
diff changeset
   241
            unicodeEncoderClasses isNil ifTrue:[
bafc72f60618 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8119
diff changeset
   242
                EncoderClassesByName at:#unicode put:(unicodeEncoderClasses := Dictionary new).
bafc72f60618 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8119
diff changeset
   243
            ].
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   244
            cls := unicodeEncoderClasses at:name ifAbsent:nil.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   245
            cls notNil ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   246
                enc := cls new.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   247
                unicodeEncoders at:name put:enc.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   248
            ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   249
        ].
7973
6dea491d56f7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7972
diff changeset
   250
    ].
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   251
    enc notNil ifTrue:[
7973
6dea491d56f7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7972
diff changeset
   252
        ^ enc 
6dea491d56f7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7972
diff changeset
   253
    ].
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   254
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   255
    "/ no direct encoder from unicode->name
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   256
    "/ search for unicode->any and: any->name
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   257
    unicodeEncoderClasses := EncoderClassesByName at:#unicode ifAbsent:nil.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   258
    unicodeEncoderClasses keysAndValuesDo:[:eachEncodingAlias :eachEncoderClass |
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   259
        |dict2|
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   260
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   261
        dict2 := EncoderClassesByName at:eachEncodingAlias ifAbsent:nil.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   262
        dict2 notNil ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   263
            cls := dict2 at:name ifAbsent:nil.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   264
            cls notNil ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   265
                enc := TwoStepEncoder new
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   266
                    encoder1:(self encoderFor:eachEncodingAlias)
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   267
                    encoder2:(cls new).
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   268
7973
6dea491d56f7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7972
diff changeset
   269
                AccessLock critical:[
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   270
                    unicodeEncoders at:name put:enc.    
7973
6dea491d56f7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7972
diff changeset
   271
                ].
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   272
                ^ enc.
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   273
            ]
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   274
        ].
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   275
    ].
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   276
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   277
    ^ exceptionValue value
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   278
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   279
    "
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   280
     CharacterEncoder encoderFor:#'latin1'       
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   281
     self encoderFor:#'arabic'              
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   282
     self encoderFor:#'ms-arabic'           
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   283
     self encoderFor:#'iso8859-5'           
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   284
     self encoderFor:#'koi8-r'      
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   285
     self encoderFor:#'koi8-u'      
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   286
     self encoderFor:#'jis0208'      
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   287
     self encoderFor:#'jis7'      
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   288
     self encoderFor:#'unicode'      
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   289
    "
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   290
!
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   291
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   292
encoderToEncodeFrom:oldEncodingArg into:newEncodingArg
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   293
    |oldEncoding newEncoding encoders encoderClasses encoder decoder cls|
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   294
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   295
    oldEncoding := oldEncodingArg ? #'unicode'.
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   296
    oldEncoding == #'iso10646-1' ifTrue:[ oldEncoding :=  #'unicode'].
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   297
    newEncoding := newEncodingArg ? #'unicode'.
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   298
    newEncoding == #'iso10646-1' ifTrue:[ newEncoding :=  #'unicode'].
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   299
8120
bafc72f60618 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8119
diff changeset
   300
    oldEncoding isSymbol ifFalse:[self halt:'symbol argument expected'. oldEncoding := oldEncoding asSymbol].
bafc72f60618 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8119
diff changeset
   301
    newEncoding isSymbol ifFalse:[self halt:'symbol argument expected'. newEncoding := newEncoding asSymbol].
bafc72f60618 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8119
diff changeset
   302
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   303
    oldEncoding == newEncoding ifTrue:[^ NullEncoderInstance].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   304
    (oldEncoding match:newEncoding) ifTrue:[^ NullEncoderInstance].
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   305
8122
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   306
    (oldEncoding == #unicode) ifTrue:[
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   307
        "/ something -> unicode 
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   308
        ^ self encoderFor:newEncoding.
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   309
    ].
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   310
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   311
    AccessLock critical:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   312
        encoders := EncodersByName at:oldEncoding ifAbsent:nil.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   313
        encoders isNil ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   314
            EncodersByName at:oldEncoding put:(encoders := Dictionary new).
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   315
        ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   316
        encoder := encoders at:newEncodingArg ifAbsent:nil.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   317
        encoder isNil ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   318
            encoderClasses := EncoderClassesByName at:oldEncoding ifAbsent:nil.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   319
            encoderClasses isNil ifTrue:[
8122
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   320
                EncoderClassesByName at:oldEncoding put:(encoderClasses := Dictionary new).
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   321
            ].
8119
56fd0cf42779 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8118
diff changeset
   322
            cls := encoderClasses at:newEncoding ifAbsent:nil.
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   323
            cls notNil ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   324
                encoder := cls new.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   325
            ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   326
        ].
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   327
    ].
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   328
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   329
    encoder isNil ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   330
        (newEncoding == #unicode) ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   331
            "/ something -> unicode 
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   332
            decoder := self encoderFor:oldEncoding.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   333
            encoder := InverseEncoder new decoder:decoder.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   334
        ] ifFalse:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   335
            "/ do it as: oldEncoding -> unicode -> newEncoding
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   336
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   337
            "/ something -> unicode 
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   338
            decoder := self encoderFor:oldEncoding.
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   339
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   340
            "/ unicode -> something
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   341
            encoder := self encoderFor:newEncoding.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   342
            encoder := CompoundEncoder new encoder:encoder decoder:decoder.
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   343
        ].
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   344
    ].
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   345
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   346
    AccessLock critical:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   347
        (EncodersByName at:oldEncoding) at:newEncoding put:encoder
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   348
    ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   349
    ^ encoder
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   350
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   351
    "   CharacterEncoder initialize
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   352
     CharacterEncoder encoderToEncodeFrom:#'latin1' into:#'jis7'      
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   353
     CharacterEncoder encoderToEncodeFrom:#'koi8-r' into:#'mac-cyrillic'              
8087
0a2ee76bcf55 last version before separating into extra classes
Claus Gittinger <cg@exept.de>
parents: 8062
diff changeset
   354
     CharacterEncoder encoderToEncodeFrom:#'ms-arabic' into:#'mac-arabic'           
0a2ee76bcf55 last version before separating into extra classes
Claus Gittinger <cg@exept.de>
parents: 8062
diff changeset
   355
     CharacterEncoder encoderToEncodeFrom:#'iso8859-5' into:#'koi8-r'           
0a2ee76bcf55 last version before separating into extra classes
Claus Gittinger <cg@exept.de>
parents: 8062
diff changeset
   356
     CharacterEncoder encoderToEncodeFrom:#'koi8-r' into:#'koi8-u'       
7971
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   357
    "
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   358
! !
357e53496acc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7969
diff changeset
   359
7932
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   360
!CharacterEncoder class methodsFor:'Compatibility-ST80'!
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   361
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   362
encoderNamed: encoderName
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   363
    "/ q & d hack
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   364
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   365
    encoderName == #default ifTrue:[
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   366
        ^ DefaultEncoder new
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   367
    ].
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   368
self halt.
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   369
    ^ self new
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   370
!
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   371
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   372
platformName
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   373
    ^ OperatingSystem platformName
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   374
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   375
    "Created: 20.6.1997 / 17:34:03 / cg"
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   376
    "Modified: 20.6.1997 / 17:38:40 / cg"
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   377
! !
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   378
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   379
!CharacterEncoder class methodsFor:'class initialization'!
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   380
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   381
initialize
7973
6dea491d56f7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7972
diff changeset
   382
    AccessLock := Semaphore forMutualExclusion.
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   383
    NullEncoderInstance := NullEncoder new.
7973
6dea491d56f7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7972
diff changeset
   384
8126
33f9c4850e84 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8122
diff changeset
   385
    EncodersByName := Dictionary new.
33f9c4850e84 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8122
diff changeset
   386
    EncoderClassesByName := Dictionary new.
33f9c4850e84 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8122
diff changeset
   387
    CachedEncoders := Dictionary new.
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   388
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   389
    "/ class decoded-name array-of-encodingNames
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   390
    #(
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   391
        (ASCII              unicode     ( ascii 'us-ascii' 'iso-ir-6' 'ibm-367' 'ms-cp367' 'cp367'  'iso646-us' 'ibm-cp367' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   392
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   393
        (BIG5               unicode     ( big5 ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   394
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   395
        (CNS11643           unicode     ( 'cns11643' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   396
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   397
        (CP437              unicode     ( 'cp437'  'cp-437' 'ibm-437' 'ms-cp437' 'microsoft-cp437' 'ibm-cp437' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   398
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   399
        (GB2313_1980        unicode     ( 'gb2313' 'gb2313-1980' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   400
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   401
        (HANGUL             unicode     ( 'hangul' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   402
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   403
        (ISO10646_1         unicode     ( unicode 'iso10646_1' 'iso10646-1' 'iso-10646-1' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   404
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   405
        (ISO10646_to_UTF8   unicode     ( utf8 'utf-8' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   406
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   407
        (ISO8859_1          unicode     ( 'iso8859_1' 'iso8859-1' 'iso-8859-1' 'latin-1' 'latin1' 'iso-ir-100' 'ibm-819' 'ms-cp819' 'ibm-cp819' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   408
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   409
        (ISO8859_2          unicode     ( 'iso8859_2' 'iso8859-2' 'iso-8859-2' 'latin2' 'latin-2' 'iso-ir-101'))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   410
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   411
        (ISO8859_3          unicode     ( 'iso8859_3' 'iso8859-3' 'iso-8859-3' 'latin3' 'latin-3' 'iso-ir-109'))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   412
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   413
        (ISO8859_4          unicode     ( 'iso8859_4' 'iso8859-4' 'iso-8859-4' 'latin4' 'latin-4' 'iso-ir-110'))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   414
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   415
        (ISO8859_5          unicode     ( 'iso8859_5' 'iso8859-5' 'iso-8859-5' 'cyrillic' 'iso-ir-144' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   416
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   417
        (ISO8859_6          unicode     ( 'iso8859_6' 'iso8859-6' 'iso-8859-6' 'arabic' 'asmo-708' 'ecma-114' 'iso-ir-127' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   418
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   419
        (ISO8859_7          unicode     ( 'iso8859_7' 'iso8859-7' 'iso-8859-7' 'greek' 'iso-ir-126' 'ecma-118'))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   420
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   421
        (ISO8859_8          unicode     ( 'iso8859_8' 'iso8859-8' 'iso-8859-8' 'hebrew' 'iso-ir-138' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   422
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   423
        (ISO8859_9          unicode     ( 'iso8859_9' 'iso8859-9' 'iso-8859-9' 'latin5' 'latin-5' 'iso-ir-148'))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   424
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   425
        (ISO8859_10         unicode     ( 'iso8859_10' 'iso8859-10' 'iso-8859-10' 'latin6' 'latin-6' 'iso-ir-157'))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   426
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   427
        (ISO8859_11         unicode     ( 'iso8859_11' 'iso8859-11' 'iso-8859-11' 'thai' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   428
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   429
        (ISO8859_13         unicode     ( 'iso8859_13' 'iso8859-13' 'iso-8859-13' 'latin7' 'latin-7' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   430
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   431
        (ISO8859_14         unicode     ( 'iso8859_14' 'iso8859-14' 'iso-8859-14' 'latin8' 'latin-8' 'latin-celtic' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   432
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   433
        (ISO8859_15         unicode     ( 'iso8859_15' 'iso8859-15' 'iso-8859-15' 'latin9' 'latin-9' 'iso-ir-203'))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   434
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   435
        (ISO8859_16         unicode     ( 'iso8859_16' 'iso8859-16' 'iso-8859-16' 'latin10' 'latin-10' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   436
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   437
        (JIS0201            unicode     ( 'jis0201' #'jisx0201.1976-0'))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   438
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   439
        (JIS0208            unicode     ( jis0208 'jisx0208' 'jisx0208.1983-0' 'jisx0208.1990-0'))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   440
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   441
        (JIS0208_to_JIS7    jis0208     ( jis7 'jis-7' 'x-jis7' 'x-iso2022-jp' 'iso2022-jp'))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   442
8122
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   443
        (JIS0208_to_EUC     jis0208     ( euc #'x-euc-jp' ))
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   444
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   445
        (JIS0212            unicode     ( 'jis0212' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   446
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   447
        (JOHAB              unicode     ( 'johab' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   448
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   449
        (KOI7               unicode     ( 'koi7' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   450
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   451
        (KOI8_R             unicode     ( #'koi8-r' 'cp878' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   452
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   453
        (KOI8_U             unicode     ( #'koi8-u' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   454
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   455
        (KSC5601            unicode     ( #'ksc5601' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   456
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   457
        (MAC_Arabic         unicode     ( #'mac-arabic' 'macarabic' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   458
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   459
        (MAC_CentralEuropean unicode    ( #'mac-centraleuropean' #'mac-centraleurope' 'maccentraleurope' 'maccentraleuropean' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   460
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   461
        (MAC_Croatian       unicode     ( #'mac-croatian' 'maccroatian'))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   462
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   463
        (MAC_Cyrillic       unicode     ( #'mac-cyrillic' 'maccyrillic' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   464
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   465
        (MAC_Dingbats       unicode     ( #'mac-dingbats'  'macdingbats'  'macdingbat'))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   466
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   467
        (MAC_Farsi          unicode     ( #'mac-farsi' 'macfarsi' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   468
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   469
        (MAC_Greek          unicode     ( #'mac-greek' #'macgreek' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   470
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   471
        (MAC_Hebrew         unicode     ( #'mac-hebrew' #'machebrew'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   472
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   473
        (MAC_Iceland        unicode     ( #'mac-iceland' #'maciceland'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   474
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   475
        (MAC_Japanese       unicode     ( #'mac-japanese' #'macjapanese'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   476
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   477
        (MAC_Korean         unicode     ( #'mac-korean' #'mackorean'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   478
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   479
        (MAC_Roman          unicode     ( #'mac-roman' #'macroman'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   480
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   481
        (MAC_Romanian       unicode     ( #'mac-romanian' #'macromanian'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   482
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   483
        (MAC_Symbol         unicode     ( #'mac-symbol' #'macsymbol'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   484
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   485
        (MAC_Thai           unicode     ( #'mac-thai' #'macthai'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   486
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   487
        (MAC_Turkish        unicode     ( #'mac-turkish' #'macturkish'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   488
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   489
        (MS_Ansi            unicode     ( #'ms-ansi' 'ms-cp1252' 'microsoft-cp1252' 'cp1252' 'microsoft-ansi' 'windows-1252' 'windows-latin1'))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   490
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   491
        (MS_Arabic          unicode     ( 'ms-arabic' 'ms-cp1256' 'microsoft-cp1256' 'cp1256'  'microsoft-arabic' 'windows-1256'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   492
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   493
        (MS_Baltic          unicode     ( 'ms-baltic' 'ms-cp1257' 'microsoft-cp1257' 'cp1257' 'microsoft-baltic' 'windows-1257'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   494
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   495
        (MS_Cyrillic        unicode     ( 'ms-cyrillic' 'ms-cp1251' 'microsoft-cp1251' 'cp1251' 'microsoft-cyrillic' 'windows-1251'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   496
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   497
        (MS_EastEuropean    unicode     ( 'ms-easteuropean' 'ms-ee' 'cp1250' 'ms-cp1250' 'microsoft-cp1250' 'microsoft-easteuropean' 'windows-1250'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   498
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   499
        (MS_Greek           unicode     ( 'ms-greek' 'ms-cp1253' 'microsoft-cp1253' 'cp1253' 'microsoft-greek' 'windows-1253' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   500
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   501
        (MS_Hebrew          unicode     ( 'ms-hebrew' 'ms-cp1255' 'microsoft-cp1255' 'cp1255' 'microsoft-hebrew' 'windows-1255' ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   502
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   503
"/        (MS_Symbol           unicode     ( 'ms-symbol' 'microsoft-symbol'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   504
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   505
        (MS_Turkish         unicode     ( 'ms-turkish' 'ms-cp1254' 'microsoft-cp1254' 'cp1254' 'microsoft-turkish' 'windows-1254'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   506
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   507
        (NEXT               unicode     ( 'next' 'nextstep'  ))
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   508
8122
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   509
        (SJIS               unicode     ( 'sjis' 'shiftjis' 'x-sjis' #'x-shift-jis' #'shift-jis'))
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   510
    ) triplesDo:[:className :decodesTo :encodesTo |
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   511
        |implClass dict|
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   512
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   513
        implClass := (Smalltalk at:#CharacterEncoderImplementations) at:className.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   514
        implClass isNil ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   515
            self halt:'missing encoder-class'
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   516
        ] ifFalse:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   517
            dict := EncoderClassesByName at:decodesTo ifAbsent:nil.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   518
            dict isNil ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   519
                EncoderClassesByName at:decodesTo put:(dict := Dictionary new).
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   520
            ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   521
            encodesTo do:[:eachEncodingAlias |
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   522
                (dict includesKey:eachEncodingAlias) ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   523
                    self halt:'conflicting alias'
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   524
                ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   525
                dict at:eachEncodingAlias put:implClass.    
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   526
            ]
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   527
        ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   528
    ].
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   529
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   530
    "
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   531
     self initialize
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   532
    "
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
! !
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
8122
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   535
!CharacterEncoder class methodsFor:'constants'!
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   536
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   537
jis7KanjiEscapeSequence
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   538
    "return the escape sequence used to switch to kanji in jis7 encoded strings.
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   539
     This happens to be the same as ISO2022-JP's escape sequence."
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   540
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   541
    Jis7KanjiEscapeSequence isNil ifTrue:[
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   542
	Jis7KanjiEscapeSequence := Character esc asString , '$B'.
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   543
    ].
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   544
    ^ Jis7KanjiEscapeSequence.
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   545
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   546
    "Created: 26.2.1996 / 17:38:08 / cg"
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   547
    "Modified: 30.6.1997 / 16:03:16 / cg"
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   548
!
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   549
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   550
jis7KanjiOldEscapeSequence
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   551
    "return the escape sequence used to switch to kanji in some old jis7 encoded strings."
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   552
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   553
    Jis7KanjiOldEscapeSequence isNil ifTrue:[
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   554
        Jis7KanjiOldEscapeSequence := Character esc asString , '$@'..
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   555
    ].
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   556
    ^ Jis7KanjiOldEscapeSequence.
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   557
!
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   558
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   559
jis7RomanEscapeSequence
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   560
    "return the escape sequence used to switch to roman in jis7 encoded strings"
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   561
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   562
    Jis7RomanEscapeSequence isNil ifTrue:[
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   563
	Jis7RomanEscapeSequence := Character esc asString , '(J'.
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   564
    ].
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   565
    ^ Jis7RomanEscapeSequence.
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   566
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   567
    "Created: 26.2.1996 / 17:38:08 / cg"
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   568
    "Modified: 30.6.1997 / 16:03:16 / cg"
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   569
!
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   570
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   571
jisISO2022EscapeSequence
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   572
    "return the escape sequence used to switch to kanji in iso2022 encoded strings"
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   573
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   574
    JisISO2022EscapeSequence isNil ifTrue:[
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   575
        JisISO2022EscapeSequence := Character esc asString , '&@' , Character esc asString , '$B'.
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   576
    ].
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   577
    ^ JisISO2022EscapeSequence.
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   578
! !
29670db31014 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8120
diff changeset
   579
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   580
!CharacterEncoder class methodsFor:'encoding & decoding'!
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   581
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   582
decode:aCodePoint
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   583
    ^ self new decode:aCodePoint
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   584
!
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   585
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
decodeString:aString
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   587
    ^ self new decodeString:aString
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   588
!
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   589
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   590
decodeString:aString from:oldEncoding
8016
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   591
    ^ self encodeString:aString from:oldEncoding into:#'unicode'
7967
f9baf81d6991 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7964
diff changeset
   592
!
f9baf81d6991 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7964
diff changeset
   593
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   594
encode:aCodePoint
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   595
    ^ self new encode:aCodePoint
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   596
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   597
    "
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   598
     ISO8859_1 encode:16r00FF   
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   599
     ISO8859_1 decodeString:'hello'
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   600
     ISO8859_1 encodeString:(ISO8859_1 decodeString:'hello') 
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   601
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   602
     ISO8859_5 decodeString:(String 
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   603
				with:(Character value:16rE4)
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   604
				with:(Character value:16rE0)) 
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   605
    "
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   606
!
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   607
7994
42b5face56fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7986
diff changeset
   608
encode:codePoint from:oldEncodingArg into:newEncodingArg
8015
e85b0c11e871 caching encoders
Claus Gittinger <cg@exept.de>
parents: 7994
diff changeset
   609
    |oldEncoding newEncoding encoder|
7994
42b5face56fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7986
diff changeset
   610
42b5face56fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7986
diff changeset
   611
    oldEncoding := oldEncodingArg ? #'unicode'.
42b5face56fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7986
diff changeset
   612
    oldEncoding == #'iso10646-1' ifTrue:[ oldEncoding :=  #'unicode'].
42b5face56fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7986
diff changeset
   613
    newEncoding := newEncodingArg ? #'unicode'.
42b5face56fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7986
diff changeset
   614
    newEncoding == #'iso10646-1' ifTrue:[ newEncoding :=  #'unicode'].
42b5face56fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7986
diff changeset
   615
42b5face56fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7986
diff changeset
   616
    oldEncoding == newEncoding ifTrue:[^ codePoint].
42b5face56fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7986
diff changeset
   617
8016
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   618
    oldEncoding == #'unicode' ifTrue:[
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   619
        newEncoding == #'iso8859-1' ifTrue:[
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   620
            codePoint <= 16rFF ifTrue:[
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   621
                ^ codePoint
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   622
            ]
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   623
        ]
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   624
    ].
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   625
    newEncoding == #'unicode' ifTrue:[
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   626
        oldEncoding == #'iso8859-1' ifTrue:[
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   627
            codePoint <= 16rFF ifTrue:[
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   628
                ^ codePoint
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   629
            ]
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   630
        ]
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   631
    ].
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   632
    encoder := self encoderToEncodeFrom:oldEncoding into:newEncoding.
8015
e85b0c11e871 caching encoders
Claus Gittinger <cg@exept.de>
parents: 7994
diff changeset
   633
    ^ encoder encode:codePoint.
7994
42b5face56fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7986
diff changeset
   634
!
42b5face56fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7986
diff changeset
   635
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   636
encodeString:aUnicodeString
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   637
    "given a string in unicode, return a string in my encoding for it"
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   638
7912
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   639
    ^ self new encodeString:aUnicodeString
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   640
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   641
    "
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   642
     ISO8859_1 decodeString:'hello'
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   643
    "
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
   644
!
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
   645
7967
f9baf81d6991 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7964
diff changeset
   646
encodeString:aString from:oldEncodingArg into:newEncodingArg
8015
e85b0c11e871 caching encoders
Claus Gittinger <cg@exept.de>
parents: 7994
diff changeset
   647
    |oldEncoding newEncoding encoder|
7967
f9baf81d6991 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7964
diff changeset
   648
f9baf81d6991 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7964
diff changeset
   649
    oldEncoding := oldEncodingArg ? #'unicode'.
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   650
    oldEncoding == #'iso10646-1' ifTrue:[ oldEncoding :=  #'unicode'].
7967
f9baf81d6991 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7964
diff changeset
   651
    newEncoding := newEncodingArg ? #'unicode'.
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   652
    newEncoding == #'iso10646-1' ifTrue:[ newEncoding :=  #'unicode'].
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   653
7967
f9baf81d6991 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7964
diff changeset
   654
    oldEncoding == newEncoding ifTrue:[^ aString].
f9baf81d6991 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7964
diff changeset
   655
8016
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   656
    oldEncoding == #'unicode' ifTrue:[
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   657
        newEncoding == #'iso8859-1' ifTrue:[
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   658
            aString bitsPerCharacter == 8 ifTrue:[
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   659
                ^ aString
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   660
            ]
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   661
        ]
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   662
    ].
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   663
    newEncoding == #'unicode' ifTrue:[
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   664
        oldEncoding == #'iso8859-1' ifTrue:[
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   665
            aString bitsPerCharacter == 8 ifTrue:[
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   666
                ^ aString
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   667
            ]
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   668
        ]
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   669
    ].
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   670
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   671
    encoder := self encoderToEncodeFrom:oldEncoding into:newEncoding.
8015
e85b0c11e871 caching encoders
Claus Gittinger <cg@exept.de>
parents: 7994
diff changeset
   672
    ^ encoder encodeString:aString.
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   673
!
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   674
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   675
encodeString:aString into:newEncoding
8016
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   676
    ^ self encodeString:aString from:#'unicode' into:newEncoding
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   677
! !
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   678
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   679
!CharacterEncoder class methodsFor:'private'!
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   680
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   681
flushCode
8127
7531ed2cdf35 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8126
diff changeset
   682
    self initialize.
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
   683
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   684
    self isAbstract ifFalse:[
8015
e85b0c11e871 caching encoders
Claus Gittinger <cg@exept.de>
parents: 7994
diff changeset
   685
        (self mapFileURL1_relativePathName notNil
e85b0c11e871 caching encoders
Claus Gittinger <cg@exept.de>
parents: 7994
diff changeset
   686
        or:[ self mapFileURL2_relativePathName notNil]) ifTrue:[
e85b0c11e871 caching encoders
Claus Gittinger <cg@exept.de>
parents: 7994
diff changeset
   687
            self class removeSelector:#mapping.
e85b0c11e871 caching encoders
Claus Gittinger <cg@exept.de>
parents: 7994
diff changeset
   688
        ].
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   689
    ].
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   690
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   691
    "
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   692
     self flushCode
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   693
    "
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   694
! !
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   695
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   696
!CharacterEncoder class methodsFor:'private-mapping setup'!
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   697
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   698
generateCode
7909
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   699
    (CharacterEncoderCodeGenerator new targetClass:self) generateCode.
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   700
!
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   701
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   702
generateSubclassCode
a045c719fca2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
   703
    (CharacterEncoderCodeGenerator new targetClass:self) generateSubclassCode.
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   704
!
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   705
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
   706
mapFileURL1_codeColumn
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
   707
    ^ 1
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
   708
!
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
   709
7912
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   710
mapFileURL1_relativePathName
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   711
    "raise an error: must be redefined in concrete subclass(es)"
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   712
    
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   713
    ^ nil
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   714
!
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   715
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   716
mapFileURL2_relativePathName
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   717
    "raise an error: must be redefined in concrete subclass(es)"
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   718
    
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   719
    ^ nil
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   720
!
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   721
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   722
mappingURL1
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   723
    "raise an error: must be redefined in concrete subclass(es)"
7912
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   724
    
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   725
    |rel|
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   726
7912
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   727
    rel := self mapFileURL1_relativePathName.
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   728
    rel isNil ifTrue:[
7932
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   729
	^ nil
7912
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   730
    ].
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   731
    ^ 'http://www.unicode.org/Public/MAPPINGS/' , rel
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   732
!
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   733
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   734
mappingURL2
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   735
    "raise an error: must be redefined in concrete subclass(es)"
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   736
    
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   737
    |rel|
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   738
7912
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   739
    rel := self mapFileURL2_relativePathName.
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   740
    rel isNil ifTrue:[
7932
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
   741
	^ nil
7912
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   742
    ].
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   743
    ^ 'http://std.dkuug.dk/i18n/charmaps/' , rel
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   744
! !
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   745
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   746
!CharacterEncoder class methodsFor:'queries'!
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   747
7938
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   748
isEncoding:subSetEncodingArg subSetOf:superSetEncodingArg
7994
42b5face56fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7986
diff changeset
   749
    "return true, if superSetEncoding encoding includes all characters of subSetEncoding.
42b5face56fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7986
diff changeset
   750
     (this means: characters are included - not that they have the same encoding)"
7938
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   751
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   752
    |subSetEncoding superSetEncoding|
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   753
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   754
    subSetEncodingArg = superSetEncodingArg ifTrue:[^ true].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   755
    subSetEncoding := subSetEncodingArg asLowercase.
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   756
    superSetEncoding := superSetEncodingArg asLowercase.
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   757
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   758
    (subSetEncoding match:superSetEncoding) ifTrue:[^ true].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   759
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   760
    (('iso10646*' match:superSetEncoding) or:[superSetEncoding = 'unicode']) ifTrue:[
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   761
        ('ascii*' match:subSetEncoding) ifTrue:[^ true].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   762
        ('iso8859*' match:subSetEncoding) ifTrue:[^ true].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   763
        ('jis*' match:subSetEncoding) ifTrue:[^ true].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   764
        ('koi8*' match:subSetEncoding) ifTrue:[^ true].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   765
        ('ksc*' match:subSetEncoding) ifTrue:[^ true].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   766
        ('big*' match:subSetEncoding) ifTrue:[^ true].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   767
        ('cns*' match:subSetEncoding) ifTrue:[^ true].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   768
        ('gb2312*' match:subSetEncoding) ifTrue:[^ true].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   769
    ].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   770
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   771
    "/ if the subSet is iso8859-*, that means ascii (i.e. the lower 7 bits of iso8859 only).
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   772
    ((subSetEncoding = 'iso8859*') or:[subSetEncoding = 'iso8859-*']) ifTrue:[
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   773
        ('ascii*' match:superSetEncoding) ifTrue:[^ true].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   774
    ].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   775
    (subSetEncoding = 'ascii') ifTrue:[
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   776
        ('iso8859*' match:superSetEncoding) ifTrue:[^ true].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   777
    ].
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   778
7923
e8286ccdf20c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7922
diff changeset
   779
    "/ TODO: check the charSets mappingTables...
e8286ccdf20c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7922
diff changeset
   780
    "/ self halt.
e8286ccdf20c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7922
diff changeset
   781
    ^ false.
e8286ccdf20c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7922
diff changeset
   782
!
e8286ccdf20c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7922
diff changeset
   783
7919
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   784
nameOfDecodedCode
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   785
    "Most coders decode from their code into unicode / encode from unicode into their code.
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   786
     There are a few exceptions to this, though - these must redefine this."
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   787
    
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   788
    ^ #'unicode'
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   789
!
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   790
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   791
nameOfEncoding
7974
9905043988ee *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7973
diff changeset
   792
    ^ (self nameWithoutPrefix asLowercase copyReplaceAll:$_ with:$-) asSymbol
7919
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   793
!
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   794
7959
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   795
supportedExternalEncodings
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   796
    "return an array of arrays containing the names of supported
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   797
     encodings which are supported for external resources (i.e. files).
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   798
     The first element contains the internally used symbolic name,
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   799
     the second contains a user-readable string (description).
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   800
     More than one external name may be mapped onto the same symbolic."
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   801
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   802
    ^ #( 
8016
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   803
         ('utf8'        'Unicode as 8Bit characters'    )  
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   804
         ('utf7'        'Unicode as 7Bit characters'    ) 
7959
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   805
         nil
8016
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   806
         ('ascii'       'Common 7bit subset of iso8859' )
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   807
         ('iso8859-1'   'Latin1'                        )
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   808
         ('iso8859-2'   'Latin2'                        )
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   809
         ('iso8859-3'   'Latin3'                        )
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   810
         ('iso8859-4'   'Latin4'                        )
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   811
         ('iso8859-5'   'Cyrillic'                      )
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   812
         ('iso8859-6'   'Arabic'                        )
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   813
         ('iso8859-7'   'Greek'                         )
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   814
         ('iso8859-8'   'Hebrew'                        )
7959
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   815
         nil
8033
1d053d9909a1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8021
diff changeset
   816
         ('koi7'        'Cyrillic (Old)'                )
8016
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   817
         ('koi8-r'      'Cyrillic'                      )
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   818
         ('koi8-u'      'Cyrillic (Ukraine)'            )
7959
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   819
         nil
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   820
         ('cp437'       'msdos US / codepage 437'       )
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   821
         ('cp850'       'msdos Latin1 codepage 850'     )
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   822
         ('mac'         'macintosh 8 bit'               )
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   823
         ('next'        'NeXT 8 bit'                    )
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   824
         ('hp'          'hpux 8 bit'                    )
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   825
         nil
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   826
         ('euc'         'EUC - extended unix code japanese'     )
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   827
         ('jis7'        'JIS7 - jis 7bit escape codes japanese' )
8016
6344e4e47261 characterEncoding stuff
Claus Gittinger <cg@exept.de>
parents: 8015
diff changeset
   828
         ('iso-2022-jp' 'Same as jis 7bit'                      )
7959
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   829
         ('sjis'        'SJIS - shift jis 8bit codes japanese'  )
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   830
         nil
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   831
         ('gb'          'GB - mainland chin'                    )
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   832
         ('big5'        'BIG5 - taiwan'                         )
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   833
"/         ('ksc'         'korean'                        )
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   834
       )
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   835
!
0276f0a46dd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7956
diff changeset
   836
7947
16b2306f9bc9 utf8 - full 30 bit range
Claus Gittinger <cg@exept.de>
parents: 7942
diff changeset
   837
userFriendlyNameOfEncoding
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   838
    ^ self nameOfEncoding asUppercaseFirst
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   839
! !
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   840
7912
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   841
!CharacterEncoder class methodsFor:'testing'!
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   842
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   843
isAbstract
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   844
    ^ self == CharacterEncoder
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   845
! !
fbbb59645576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7909
diff changeset
   846
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   847
!CharacterEncoder methodsFor:'encoding & decoding'!
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   848
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   849
decode:anEncoding
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   850
    "given an integer in my encoding, return a unicode codePoint for it"
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   851
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   852
    self subclassResponsibility
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   853
!
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   854
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   855
decodeString:anEncodedString
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   856
    "given a string in my encoding, return a unicode-string for it"
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   857
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   858
    |newString|
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   859
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   860
    newString := String new:(anEncodedString size).
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   861
    1 to:anEncodedString size do:[:idx |
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   862
        |myCode uniCodePoint|
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   863
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   864
        myCode := (anEncodedString at:idx) codePoint.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   865
        uniCodePoint := self decode:myCode.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   866
        uniCodePoint > 16rFF ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   867
            uniCodePoint > 16rFFFF ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   868
                newString bitsPerCharacter < 32 ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   869
                    newString := Unicode32String fromString:newString.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   870
                ]
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   871
            ] ifFalse:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   872
                newString bitsPerCharacter < 16 ifTrue:[
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   873
                    newString := Unicode16String fromString:newString.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   874
                ]
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   875
            ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   876
        ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   877
        newString at:idx put:(Character value:uniCodePoint).
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   878
    ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   879
    ^ newString
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   880
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   881
    "
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   882
     ISO8859_1 decodeString:'hello'
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   883
    "
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   884
!
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   885
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   886
encode:aCodePoint
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   887
    "given a codePoint in unicode, return a byte in my encoding for it"
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   888
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   889
    self subclassResponsibility
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   890
!
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   891
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   892
encodeString:aUnicodeString
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   893
    "given a string in unicode, return a string in my encoding for it"
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   894
8118
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   895
    |newString myCode uniCodePoint|
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   896
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   897
    newString := self newString:(aUnicodeString size).
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   898
    1 to:aUnicodeString size do:[:idx |
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   899
        uniCodePoint := (aUnicodeString at:idx) codePoint.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   900
        myCode := self encode:uniCodePoint.
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   901
        newString at:idx put:(Character value:myCode).
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   902
    ].
efc99c0f68bc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8114
diff changeset
   903
    ^ newString
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   904
! !
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   905
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   906
!CharacterEncoder methodsFor:'error handling'!
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   907
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   908
decodingError 
7904
e3940bba2746 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7903
diff changeset
   909
    "report an error that there is no unicode-codePoint for a given codePoint in this encoding.
e3940bba2746 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7903
diff changeset
   910
     (which is unlikely) or that the encoding is undefined for that value
e3940bba2746 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7903
diff changeset
   911
     (for example, holes in the ISO8859-3 encoding)"
e3940bba2746 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7903
diff changeset
   912
7919
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   913
    |badCodePoint sender|
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   914
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   915
    sender := thisContext sender.
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   916
    ((sender selector == #encode:) or:[sender selector == #decode:]) ifFalse:[
7938
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   917
        badCodePoint := sender methodHome argAt:1
7919
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   918
    ].
8062
4a229fcbc220 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8061
diff changeset
   919
    ^ (EncodingError new)
7938
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   920
        defaultValue:(self defaultDecoderValue);
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   921
        parameter:badCodePoint;
8021
ce3a9f322c0e Use #messageText: instead of obsolete #errorString:
Stefan Vogel <sv@exept.de>
parents: 8019
diff changeset
   922
        messageText:'invalid code'; 
7938
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   923
        suspendedContext:sender;
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   924
        raiseRequest
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   925
!
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   926
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   927
defaultDecoderValue
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   928
    "placed into a decoded string, in case there is no unicode codePoint
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   929
     for a given encoded codePoint.
7904
e3940bba2746 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7903
diff changeset
   930
     (typically 16rFFFF)."
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   931
    
7904
e3940bba2746 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7903
diff changeset
   932
    ^ 16rFFFF
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   933
!
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   934
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   935
defaultEncoderValue
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   936
    "placed into an encoded string, in case there is no codePoint
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   937
     for a given unicode codePoint.
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   938
     (typically $?)."
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   939
8101
f7023a4735bf Use the ANSI-blessed #codePoint instead of deprecated #asciiValue
Stefan Vogel <sv@exept.de>
parents: 8087
diff changeset
   940
    ^ $? codePoint
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   941
!
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   942
7919
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   943
encodingError
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   944
    "report an error that some unicode-codePoint cannot be represented by this encoder"
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   945
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
   946
    |badCodePoint sender|
7904
e3940bba2746 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7903
diff changeset
   947
e3940bba2746 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7903
diff changeset
   948
    sender := thisContext sender.
e3940bba2746 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7903
diff changeset
   949
    ((sender selector == #encode:) or:[sender selector == #decode:]) ifFalse:[
7938
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   950
        badCodePoint := sender methodHome argAt:1
7904
e3940bba2746 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7903
diff changeset
   951
    ].
8048
293c8178c6eb utf8 errors
Claus Gittinger <cg@exept.de>
parents: 8033
diff changeset
   952
    ^ (EncodingError new)
7938
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   953
        defaultValue:(self defaultEncoderValue);
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   954
        parameter:badCodePoint;
8021
ce3a9f322c0e Use #messageText: instead of obsolete #errorString:
Stefan Vogel <sv@exept.de>
parents: 8019
diff changeset
   955
        messageText:'unrepresentable unicode'; 
7938
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   956
        suspendedContext:sender;
a53aae4a05bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7932
diff changeset
   957
        raiseRequest
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   958
! !
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
   959
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   960
!CharacterEncoder methodsFor:'printing'!
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   961
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   962
printOn:aStream
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   963
    aStream 
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   964
        nextPutAll:(self nameOfDecodedCode);
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   965
        nextPutAll:'->';
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   966
        nextPutAll:(self nameOfEncoding)
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   967
! !
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   968
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   969
!CharacterEncoder methodsFor:'private'!
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   970
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   971
newString:size
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   972
    self subclassResponsibility
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   973
! !
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   974
7917
3649394bf5c0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
   975
!CharacterEncoder methodsFor:'queries'!
3649394bf5c0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
   976
3649394bf5c0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
   977
isNullEncoder
3649394bf5c0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
   978
    ^ false
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   979
!
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   980
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   981
nameOfDecodedCode
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   982
    "Most coders decode from their code into unicode / encode from unicode into their code.
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   983
     There are a few exceptions to this, though - these must redefine this."
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   984
    
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   985
    ^ self class nameOfDecodedCode
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   986
!
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   987
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   988
nameOfEncoding
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   989
    ^ self class nameOfEncoding
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   990
!
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   991
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   992
userFriendlyNameOfEncoding
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
   993
    ^ self class userFriendlyNameOfEncoding
7917
3649394bf5c0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
   994
! !
3649394bf5c0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
   995
7915
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
   996
!CharacterEncoder::CompoundEncoder class methodsFor:'documentation'!
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
   997
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
   998
documentation
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
   999
"
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1000
    A compoundEncoder uses two real encoders;
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1001
    to encode:
7956
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1002
        string -> decoder(encode) -> encoder -> result
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1003
    to decode:
7956
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1004
        string -> encoder -> decoder -> result
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1005
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1006
    |e|
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1007
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1008
    e := CompoundEncoder new.
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1009
    e encoder:ISO8859_5 decoder:KOI8_R.
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1010
    e decode:16rB0.  'CYRILLIC CAPITAL LETTER A; 16rB0 in 8859-5; 16rE1 in KOI8-R'.
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1011
    e encode:16rE1.  
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1012
"
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1013
! !
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1014
7915
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
  1015
!CharacterEncoder::CompoundEncoder methodsFor:'accessing'!
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1016
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1017
encoder:encoderArg decoder:decoderArg  
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1018
    "set instance variables (automatically generated)"
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1019
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1020
    decoder := decoderArg.
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1021
    encoder := encoderArg.
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1022
! !
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1023
7915
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
  1024
!CharacterEncoder::CompoundEncoder methodsFor:'encoding & decoding'!
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1025
7956
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1026
decode:aCode
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1027
    ^ decoder encode:(encoder decode:aCode)
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1028
!
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1029
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1030
decodeString:aString
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1031
    ^ decoder encodeString:(encoder decodeString:aString)
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1032
!
c43ee9e00bab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7948
diff changeset
  1033
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1034
encode:aCode
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1035
    ^ encoder encode:(decoder decode:aCode)
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1036
!
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1037
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1038
encodeString:aString
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1039
    ^ encoder encodeString:(decoder decodeString:aString)
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1040
! !
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1041
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1042
!CharacterEncoder::CompoundEncoder methodsFor:'printing'!
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1043
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1044
printOn:aStream
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1045
    aStream 
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1046
        nextPutAll:(decoder nameOfEncoding);
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1047
        nextPutAll:'->'.
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1048
"/        nextPutAll:(decoder nameOfDecodedCode);
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1049
"/        nextPutAll:'->';
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1050
"/        nextPutAll:(encoder nameOfEncoding)
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1051
    encoder printOn:aStream
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1052
! !
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1053
7932
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
  1054
!CharacterEncoder::DefaultEncoder class methodsFor:'documentation'!
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
  1055
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
  1056
documentation
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
  1057
"
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1058
    That is only a dummy for ST80 compatibility
7932
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
  1059
"
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
  1060
! !
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
  1061
7915
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
  1062
!CharacterEncoder::InverseEncoder class methodsFor:'documentation'!
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1063
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1064
documentation
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1065
"
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1066
    An inverseEncoder does the inverse - i.e. encode is really a decode
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1067
    and decode is really an encode.
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1068
"
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1069
! !
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1070
7915
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
  1071
!CharacterEncoder::InverseEncoder methodsFor:'accessing'!
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1072
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1073
decoder:something
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1074
    decoder := something.
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1075
! !
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1076
7915
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
  1077
!CharacterEncoder::InverseEncoder methodsFor:'encoding & decoding'!
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1078
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1079
decode:aCode
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1080
    ^ decoder encode:aCode
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1081
!
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1082
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1083
decodeString:aString
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1084
    ^ decoder encodeString:aString
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1085
!
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1086
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1087
encode:aCode
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1088
    ^ decoder decode:aCode
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1089
!
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1090
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1091
encodeString:aString
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1092
    ^ decoder decodeString:aString
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1093
! !
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1094
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1095
!CharacterEncoder::InverseEncoder methodsFor:'printing'!
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1096
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1097
printOn:aStream
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1098
    aStream 
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1099
        nextPutAll:(decoder nameOfEncoding);
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1100
        nextPutAll:'->';
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1101
        nextPutAll:(decoder nameOfDecodedCode)
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1102
! !
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1103
7915
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
  1104
!CharacterEncoder::NullEncoder class methodsFor:'documentation'!
7914
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1105
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1106
documentation
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1107
"
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1108
    A NullEncoder does nothing.
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1109
"
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1110
! !
86a3784b40dd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
  1111
7915
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
  1112
!CharacterEncoder::NullEncoder methodsFor:'encoding & decoding'!
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1113
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1114
decode:aCode
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1115
    ^ aCode
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1116
!
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1117
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1118
decodeString:aString
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1119
    ^ aString
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1120
!
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1121
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1122
encode:aCode
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1123
    ^ aCode
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1124
!
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1125
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1126
encodeString:aString
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1127
    ^ aString
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1128
! !
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1129
7917
3649394bf5c0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
  1130
!CharacterEncoder::NullEncoder methodsFor:'queries'!
3649394bf5c0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
  1131
3649394bf5c0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
  1132
isNullEncoder
3649394bf5c0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
  1133
    ^ true
3649394bf5c0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
  1134
! !
3649394bf5c0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
  1135
7915
0b92b16542f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7914
diff changeset
  1136
!CharacterEncoder::OtherEncoding class methodsFor:'private'!
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1137
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1138
flushCode
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1139
!
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1140
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1141
generateEncoderCode
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1142
! !
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1143
7919
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1144
!CharacterEncoder::TwoStepEncoder class methodsFor:'documentation'!
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1145
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1146
documentation
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1147
"
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1148
    A twoStepEncoder uses two real encoders;
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1149
    to encode:
7932
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
  1150
	string -> encoder1(encode) -> encoder2(encode) -> result
7919
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1151
    to decode:
7932
ee233bf44df5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7924
diff changeset
  1152
	string -> encoder2(decode) -> encoder1(decode) -> result
7919
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1153
"
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1154
! !
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1155
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1156
!CharacterEncoder::TwoStepEncoder methodsFor:'accessing'!
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1157
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1158
encoder1:encoder1Arg encoder2:encoder2Arg
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1159
    "set instance variables (automatically generated)"
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1160
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1161
    encoder1 := encoder1Arg.
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1162
    encoder2 := encoder2Arg.
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1163
! !
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1164
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1165
!CharacterEncoder::TwoStepEncoder methodsFor:'encoding & decoding'!
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1166
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1167
decode:aCode
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1168
    ^ encoder1 decode:(encoder2 decode:aCode)
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1169
!
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1170
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1171
decodeString:aString
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1172
    ^ encoder1 decodeString:(encoder2 decodeString:aString)
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1173
!
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1174
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1175
encode:aCode
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1176
    ^ encoder2 encode:(encoder1 encode:aCode)
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1177
!
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1178
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1179
encodeString:aString
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1180
    ^ encoder2 encodeString:(encoder1 encodeString:aString)
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1181
! !
92b61bef1b1a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7917
diff changeset
  1182
7972
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1183
!CharacterEncoder::TwoStepEncoder methodsFor:'printing'!
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1184
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1185
printOn:aStream
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1186
    aStream 
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1187
        nextPutAll:(encoder1 nameOfDecodedCode);
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1188
        nextPutAll:'->';
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1189
        nextPutAll:(encoder1 nameOfEncoding);
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1190
        nextPutAll:'->';
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1191
        nextPutAll:(encoder2 nameOfEncoding)
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1192
! !
91aa73f89491 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7971
diff changeset
  1193
7892
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1194
!CharacterEncoder class methodsFor:'documentation'!
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1195
149a145e871c initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1196
version
8127
7531ed2cdf35 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8126
diff changeset
  1197
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.57 2004-03-09 00:08:33 cg Exp $'
7899
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1198
! !
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1199
7577df77ba95 character encodings - first attempt
Claus Gittinger <cg@exept.de>
parents: 7893
diff changeset
  1200
CharacterEncoder initialize!