allow proceeding after a decoder error
authorClaus Gittinger <cg@exept.de>
Sat, 28 Jun 1997 21:06:18 +0200
changeset 2730 1fbfddfa1d3f
parent 2729 184013fb5dfd
child 2731 0ba9228a6677
allow proceeding after a decoder error
CharArray.st
CharacterArray.st
--- a/CharArray.st	Sat Jun 28 20:24:11 1997 +0200
+++ b/CharArray.st	Sat Jun 28 21:06:18 1997 +0200
@@ -53,14 +53,14 @@
 !CharacterArray class methodsFor:'initialization'!
 
 initialize
-    DecodingFailedSignal := (Signal new) mayProceed:true.
+    DecodingFailedSignal := Signal new mayProceed:true.
     DecodingFailedSignal notifierString:'decoding failure'.
 
     "
      CharacterArray initialize
     "
 
-    "Modified: 28.6.1997 / 20:12:26 / cg"
+    "Modified: 28.6.1997 / 21:05:17 / cg"
 ! !
 
 !CharacterArray class methodsFor:'instance creation'!
@@ -728,9 +728,9 @@
      b1     "{ Class: SmallInteger }"
      b2     "{ Class: SmallInteger }"
      val    "{ Class: SmallInteger }"
-     romans c|
-
-    romans := JISEncodedString romanJISDecoderTable.
+     romans c c2|
+
+"/    romans := JISEncodedString romanJISDecoderTable.
 
     sz := aString size.
     newString := JISEncodedString new:sz.
@@ -756,16 +756,24 @@
 "/                    ]
                 ] ifFalse:[
                     start := start + 1.
-                    b1 := b1 - 161 + 33.
-                    b2 := (aString at:start) asciiValue.
-                    b2 := b2 - 161 + 33.
-                    val := (b1 bitShift:8) bitOr:b2.
-                    val <= 0 ifTrue:[
-                        ^ DecodingFailedSignal 
+                    start <= sz ifTrue:[    
+                        b1 := b1 - 161 + 33.
+                        b2 := (c2 := aString at:start) asciiValue.
+                        b2 := b2 - 161 + 33.
+                        val := (b1 bitShift:8) bitOr:b2.
+                        val <= 0 ifTrue:[
+                            DecodingFailedSignal 
                                 raiseWith:aString
-                                errorString:'EUC decoding failed (not EUC encoded ?)'
+                                errorString:'EUC decoding failed (not EUC encoded ?)'.
+                            newString at:dstIdx put:c.
+                            dstIdx := dstIdx + 1.
+                            newString at:dstIdx put:c2.
+                        ] ifFalse:[
+                            newString at:dstIdx put:(Character value:val).
+                        ].
+                    ] ifFalse:[
+                        newString at:dstIdx put:c.
                     ].
-                    newString at:dstIdx put:(Character value:val).
                     dstIdx := dstIdx + 1.
                 ]
             ].
@@ -784,7 +792,7 @@
     "
 
     "Created: 17.4.1996 / 16:10:22 / cg"
-    "Modified: 28.6.1997 / 20:11:28 / cg"
+    "Modified: 28.6.1997 / 21:03:44 / cg"
 !
 
 decodeFromGB:aString
@@ -1044,11 +1052,15 @@
                     b2 := (b2 - cellOffs).
                     val := (b1 bitShift:8) + b2.
                     val <= 0 ifTrue:[
-                        ^ DecodingFailedSignal 
+                        DecodingFailedSignal 
                                 raiseWith:aString
-                                errorString:'SJIS decoding failed (not SJIS encoded ?)'
-                    ].
-                    newString at:dstIdx put:(Character value:val).
+                                errorString:'SJIS decoding failed (not SJIS encoded ?)'.
+                        newString at:dstIdx put:char1.
+                        dstIdx := dstIdx + 1.
+                        newString at:dstIdx put:char2.
+                    ] ifFalse:[
+                        newString at:dstIdx put:(Character value:val).
+                    ]
                 ] ifFalse:[
                     "/ mhmh - append untranslated
 
@@ -1081,7 +1093,7 @@
     "
 
     "Created: 28.6.1997 / 19:19:23 / cg"
-    "Modified: 28.6.1997 / 20:12:10 / cg"
+    "Modified: 28.6.1997 / 21:00:12 / cg"
 !
 
 encodeIntoBIG5withRomans:aBIG5String
@@ -4443,6 +4455,6 @@
 !CharacterArray class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/CharArray.st,v 1.114 1997-06-28 18:16:37 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/CharArray.st,v 1.115 1997-06-28 19:06:18 cg Exp $'
 ! !
 CharacterArray initialize!
--- a/CharacterArray.st	Sat Jun 28 20:24:11 1997 +0200
+++ b/CharacterArray.st	Sat Jun 28 21:06:18 1997 +0200
@@ -53,14 +53,14 @@
 !CharacterArray class methodsFor:'initialization'!
 
 initialize
-    DecodingFailedSignal := (Signal new) mayProceed:true.
+    DecodingFailedSignal := Signal new mayProceed:true.
     DecodingFailedSignal notifierString:'decoding failure'.
 
     "
      CharacterArray initialize
     "
 
-    "Modified: 28.6.1997 / 20:12:26 / cg"
+    "Modified: 28.6.1997 / 21:05:17 / cg"
 ! !
 
 !CharacterArray class methodsFor:'instance creation'!
@@ -728,9 +728,9 @@
      b1     "{ Class: SmallInteger }"
      b2     "{ Class: SmallInteger }"
      val    "{ Class: SmallInteger }"
-     romans c|
-
-    romans := JISEncodedString romanJISDecoderTable.
+     romans c c2|
+
+"/    romans := JISEncodedString romanJISDecoderTable.
 
     sz := aString size.
     newString := JISEncodedString new:sz.
@@ -756,16 +756,24 @@
 "/                    ]
                 ] ifFalse:[
                     start := start + 1.
-                    b1 := b1 - 161 + 33.
-                    b2 := (aString at:start) asciiValue.
-                    b2 := b2 - 161 + 33.
-                    val := (b1 bitShift:8) bitOr:b2.
-                    val <= 0 ifTrue:[
-                        ^ DecodingFailedSignal 
+                    start <= sz ifTrue:[    
+                        b1 := b1 - 161 + 33.
+                        b2 := (c2 := aString at:start) asciiValue.
+                        b2 := b2 - 161 + 33.
+                        val := (b1 bitShift:8) bitOr:b2.
+                        val <= 0 ifTrue:[
+                            DecodingFailedSignal 
                                 raiseWith:aString
-                                errorString:'EUC decoding failed (not EUC encoded ?)'
+                                errorString:'EUC decoding failed (not EUC encoded ?)'.
+                            newString at:dstIdx put:c.
+                            dstIdx := dstIdx + 1.
+                            newString at:dstIdx put:c2.
+                        ] ifFalse:[
+                            newString at:dstIdx put:(Character value:val).
+                        ].
+                    ] ifFalse:[
+                        newString at:dstIdx put:c.
                     ].
-                    newString at:dstIdx put:(Character value:val).
                     dstIdx := dstIdx + 1.
                 ]
             ].
@@ -784,7 +792,7 @@
     "
 
     "Created: 17.4.1996 / 16:10:22 / cg"
-    "Modified: 28.6.1997 / 20:11:28 / cg"
+    "Modified: 28.6.1997 / 21:03:44 / cg"
 !
 
 decodeFromGB:aString
@@ -1044,11 +1052,15 @@
                     b2 := (b2 - cellOffs).
                     val := (b1 bitShift:8) + b2.
                     val <= 0 ifTrue:[
-                        ^ DecodingFailedSignal 
+                        DecodingFailedSignal 
                                 raiseWith:aString
-                                errorString:'SJIS decoding failed (not SJIS encoded ?)'
-                    ].
-                    newString at:dstIdx put:(Character value:val).
+                                errorString:'SJIS decoding failed (not SJIS encoded ?)'.
+                        newString at:dstIdx put:char1.
+                        dstIdx := dstIdx + 1.
+                        newString at:dstIdx put:char2.
+                    ] ifFalse:[
+                        newString at:dstIdx put:(Character value:val).
+                    ]
                 ] ifFalse:[
                     "/ mhmh - append untranslated
 
@@ -1081,7 +1093,7 @@
     "
 
     "Created: 28.6.1997 / 19:19:23 / cg"
-    "Modified: 28.6.1997 / 20:12:10 / cg"
+    "Modified: 28.6.1997 / 21:00:12 / cg"
 !
 
 encodeIntoBIG5withRomans:aBIG5String
@@ -4443,6 +4455,6 @@
 !CharacterArray class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.114 1997-06-28 18:16:37 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.115 1997-06-28 19:06:18 cg Exp $'
 ! !
 CharacterArray initialize!