CharacterEncoderImplementations__JavaText.st
author Claus Gittinger <cg@exept.de>
Wed, 24 Oct 2012 18:36:16 +0200
changeset 14426 6ac120dc7add
parent 10109 df51d864e539
permissions -rw-r--r--
changed: #initializeSystem temporary with traces
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10109
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 2006 by eXept Software AG
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
              All Rights Reserved
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 hereby transferred.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libbasic' }"
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ NameSpace: CharacterEncoderImplementations }"
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
TwoByteEncoder subclass:#ISO10646_to_JavaText
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	instanceVariableNames:''
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	classVariableNames:''
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	poolDictionaries:''
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	category:'Collections-Text-Encodings'
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!ISO10646_to_JavaText class methodsFor:'documentation'!
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
copyright
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
"
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
 COPYRIGHT (c) 2006 by eXept Software AG
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
              All Rights Reserved
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
 This software is furnished under a license and may be used
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
 only in accordance with the terms of that license and with the
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
 be provided or otherwise made available to, or used by, any
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
 other person.  No title to or ownership of the software is
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
 hereby transferred.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
"
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
!
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
documentation
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
"
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    Translates \uXXXX-escapes in the text
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
"
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
! !
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
!ISO10646_to_JavaText methodsFor:'encoding & decoding'!
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
decode:aCode
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
    self shouldNotImplement "/ no single byte conversion possible
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
!
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
decodeString:aStringOrByteCollection
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    "given a string in JavaText encoding (i.e. with \uXXXX escaped characters),
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
     return a new string containing the same characters, in 16bit (or more) encoding.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
     Returns either a normal String, a TwoByteString or a FourByteString instance.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
     Only useful, when reading Java property and resource files.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
     This only handles up-to 30bit characters."
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    |nBits ch 
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
     in out codePoint t|
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
    nBits := 8.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    in := aStringOrByteCollection readStream.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    out := WriteStream on:(String new:10).
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    [in atEnd] whileFalse:[
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
        ch := in next.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
        ch == $\ ifTrue:[
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
            in peekOrNil == $u ifTrue:[
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
                in next.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
                codePoint := 0.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
                4 timesRepeat:[
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
                    ch := in peekOrNil.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
                    codePoint := (codePoint * 16) + ch digitValue.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
                    in next.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
                ].
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
                codePoint > 16rFF ifTrue:[
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
                    codePoint > 16rFFFF ifTrue:[
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
                        nBits < 32 ifTrue:[
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
                            t := out contents.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
                            out := WriteStream on:(Unicode32String fromString:t).
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
                            out position:t size.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
                            nBits := 32.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
                        ]
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
                    ] ifFalse:[
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
                        nBits < 16 ifTrue:[
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
                            t := out contents.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
                            out := WriteStream on:(Unicode16String fromString:t).
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
                            out position:t size.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
                            nBits := 16.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
                        ]
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
                    ]
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
                ].
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
                out nextPut:(Character value:codePoint).
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
            ] ifFalse:[
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
                out nextPut:ch
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
            ]
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
        ] ifFalse:[
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
            out nextPut:ch
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
        ].
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
    ].
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
    ^ out contents
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
    "
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
     CharacterEncoderImplementations::ISO10646_to_JavaText
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
        decodeString:'AB\u1234CD' 
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    "
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
    "Modified: / 23-10-2006 / 13:23:18 / cg"
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
!
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
encode:aCode
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
    self shouldNotImplement "/ no single byte conversion possible
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
!
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
encodeString:aUnicodeString
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
    "return the JavaText representation of aUnicodeString.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
     The resulting string is only useful to be stored on some external file,
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
     not for being used inside ST/X."
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
    |ch in out codePoint|
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
    in := aUnicodeString readStream.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
    out := WriteStream on:(String new:10).
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
    [in atEnd] whileFalse:[
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
        ch := in next.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
        codePoint := ch codePoint.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
        (codePoint between:16r20 and:16r7F) ifTrue:[
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
            out nextPut:ch.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
        ] ifFalse:[
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
            out nextPutAll:'\u'.
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
            out nextPutAll:((codePoint printStringRadix:16) leftPaddedTo:4 with:$0).
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
        ].
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
    ].
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
    ^ out contents
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
    "
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
     CharacterEncoderImplementations::ISO10646_to_JavaText
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
        encodeString:'hello äöü'  
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
     CharacterEncoderImplementations::ISO10646_to_JavaText
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
        decodeString:(CharacterEncoderImplementations::ISO10646_to_JavaText encodeString:'hello äöü') 
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
    "
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
    "Modified: / 23-10-2006 / 13:25:03 / cg"
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
! !
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
!ISO10646_to_JavaText class methodsFor:'documentation'!
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
version
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoderImplementations__JavaText.st,v 1.1 2006-10-23 11:25:58 cg Exp $'
df51d864e539 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
! !