initial checkin
authorClaus Gittinger <cg@exept.de>
Mon, 23 Oct 2006 13:25:58 +0200
changeset 10109 df51d864e539
parent 10108 8e610353f2fa
child 10110 edfca0b7483d
initial checkin
CharacterEncoderImplementations__JavaText.st
Encoder_JavaText.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CharacterEncoderImplementations__JavaText.st	Mon Oct 23 13:25:58 2006 +0200
@@ -0,0 +1,150 @@
+"
+ COPYRIGHT (c) 2006 by eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libbasic' }"
+
+"{ NameSpace: CharacterEncoderImplementations }"
+
+TwoByteEncoder subclass:#ISO10646_to_JavaText
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Collections-Text-Encodings'
+!
+
+!ISO10646_to_JavaText class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2006 by eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    Translates \uXXXX-escapes in the text
+"
+! !
+
+!ISO10646_to_JavaText methodsFor:'encoding & decoding'!
+
+decode:aCode
+    self shouldNotImplement "/ no single byte conversion possible
+!
+
+decodeString:aStringOrByteCollection
+    "given a string in JavaText encoding (i.e. with \uXXXX escaped characters),
+     return a new string containing the same characters, in 16bit (or more) encoding.
+     Returns either a normal String, a TwoByteString or a FourByteString instance.
+     Only useful, when reading Java property and resource files.
+     This only handles up-to 30bit characters."
+
+    |nBits ch 
+     in out codePoint t|
+
+    nBits := 8.
+    in := aStringOrByteCollection readStream.
+    out := WriteStream on:(String new:10).
+    [in atEnd] whileFalse:[
+        ch := in next.
+        ch == $\ ifTrue:[
+            in peekOrNil == $u ifTrue:[
+                in next.
+                codePoint := 0.
+                4 timesRepeat:[
+                    ch := in peekOrNil.
+                    codePoint := (codePoint * 16) + ch digitValue.
+                    in next.
+                ].
+                codePoint > 16rFF ifTrue:[
+                    codePoint > 16rFFFF ifTrue:[
+                        nBits < 32 ifTrue:[
+                            t := out contents.
+                            out := WriteStream on:(Unicode32String fromString:t).
+                            out position:t size.
+                            nBits := 32.
+                        ]
+                    ] ifFalse:[
+                        nBits < 16 ifTrue:[
+                            t := out contents.
+                            out := WriteStream on:(Unicode16String fromString:t).
+                            out position:t size.
+                            nBits := 16.
+                        ]
+                    ]
+                ].
+                out nextPut:(Character value:codePoint).
+            ] ifFalse:[
+                out nextPut:ch
+            ]
+        ] ifFalse:[
+            out nextPut:ch
+        ].
+    ].
+    ^ out contents
+
+    "
+     CharacterEncoderImplementations::ISO10646_to_JavaText
+        decodeString:'AB\u1234CD' 
+    "
+
+    "Modified: / 23-10-2006 / 13:23:18 / cg"
+!
+
+encode:aCode
+    self shouldNotImplement "/ no single byte conversion possible
+!
+
+encodeString:aUnicodeString
+    "return the JavaText representation of aUnicodeString.
+     The resulting string is only useful to be stored on some external file,
+     not for being used inside ST/X."
+
+    |ch in out codePoint|
+
+    in := aUnicodeString readStream.
+    out := WriteStream on:(String new:10).
+    [in atEnd] whileFalse:[
+        ch := in next.
+        codePoint := ch codePoint.
+        (codePoint between:16r20 and:16r7F) ifTrue:[
+            out nextPut:ch.
+        ] ifFalse:[
+            out nextPutAll:'\u'.
+            out nextPutAll:((codePoint printStringRadix:16) leftPaddedTo:4 with:$0).
+        ].
+    ].
+    ^ out contents
+
+    "
+     CharacterEncoderImplementations::ISO10646_to_JavaText
+        encodeString:'hello äöü'  
+
+     CharacterEncoderImplementations::ISO10646_to_JavaText
+        decodeString:(CharacterEncoderImplementations::ISO10646_to_JavaText encodeString:'hello äöü') 
+    "
+
+    "Modified: / 23-10-2006 / 13:25:03 / cg"
+! !
+
+!ISO10646_to_JavaText class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoderImplementations__JavaText.st,v 1.1 2006-10-23 11:25:58 cg Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Encoder_JavaText.st	Mon Oct 23 13:25:58 2006 +0200
@@ -0,0 +1,150 @@
+"
+ COPYRIGHT (c) 2006 by eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libbasic' }"
+
+"{ NameSpace: CharacterEncoderImplementations }"
+
+TwoByteEncoder subclass:#ISO10646_to_JavaText
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Collections-Text-Encodings'
+!
+
+!ISO10646_to_JavaText class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2006 by eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    Translates \uXXXX-escapes in the text
+"
+! !
+
+!ISO10646_to_JavaText methodsFor:'encoding & decoding'!
+
+decode:aCode
+    self shouldNotImplement "/ no single byte conversion possible
+!
+
+decodeString:aStringOrByteCollection
+    "given a string in JavaText encoding (i.e. with \uXXXX escaped characters),
+     return a new string containing the same characters, in 16bit (or more) encoding.
+     Returns either a normal String, a TwoByteString or a FourByteString instance.
+     Only useful, when reading Java property and resource files.
+     This only handles up-to 30bit characters."
+
+    |nBits ch 
+     in out codePoint t|
+
+    nBits := 8.
+    in := aStringOrByteCollection readStream.
+    out := WriteStream on:(String new:10).
+    [in atEnd] whileFalse:[
+        ch := in next.
+        ch == $\ ifTrue:[
+            in peekOrNil == $u ifTrue:[
+                in next.
+                codePoint := 0.
+                4 timesRepeat:[
+                    ch := in peekOrNil.
+                    codePoint := (codePoint * 16) + ch digitValue.
+                    in next.
+                ].
+                codePoint > 16rFF ifTrue:[
+                    codePoint > 16rFFFF ifTrue:[
+                        nBits < 32 ifTrue:[
+                            t := out contents.
+                            out := WriteStream on:(Unicode32String fromString:t).
+                            out position:t size.
+                            nBits := 32.
+                        ]
+                    ] ifFalse:[
+                        nBits < 16 ifTrue:[
+                            t := out contents.
+                            out := WriteStream on:(Unicode16String fromString:t).
+                            out position:t size.
+                            nBits := 16.
+                        ]
+                    ]
+                ].
+                out nextPut:(Character value:codePoint).
+            ] ifFalse:[
+                out nextPut:ch
+            ]
+        ] ifFalse:[
+            out nextPut:ch
+        ].
+    ].
+    ^ out contents
+
+    "
+     CharacterEncoderImplementations::ISO10646_to_JavaText
+        decodeString:'AB\u1234CD' 
+    "
+
+    "Modified: / 23-10-2006 / 13:23:18 / cg"
+!
+
+encode:aCode
+    self shouldNotImplement "/ no single byte conversion possible
+!
+
+encodeString:aUnicodeString
+    "return the JavaText representation of aUnicodeString.
+     The resulting string is only useful to be stored on some external file,
+     not for being used inside ST/X."
+
+    |ch in out codePoint|
+
+    in := aUnicodeString readStream.
+    out := WriteStream on:(String new:10).
+    [in atEnd] whileFalse:[
+        ch := in next.
+        codePoint := ch codePoint.
+        (codePoint between:16r20 and:16r7F) ifTrue:[
+            out nextPut:ch.
+        ] ifFalse:[
+            out nextPutAll:'\u'.
+            out nextPutAll:((codePoint printStringRadix:16) leftPaddedTo:4 with:$0).
+        ].
+    ].
+    ^ out contents
+
+    "
+     CharacterEncoderImplementations::ISO10646_to_JavaText
+        encodeString:'hello äöü'  
+
+     CharacterEncoderImplementations::ISO10646_to_JavaText
+        decodeString:(CharacterEncoderImplementations::ISO10646_to_JavaText encodeString:'hello äöü') 
+    "
+
+    "Modified: / 23-10-2006 / 13:25:03 / cg"
+! !
+
+!ISO10646_to_JavaText class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/Encoder_JavaText.st,v 1.1 2006-10-23 11:25:58 cg Exp $'
+! !