Character.st
branchjv
changeset 18678 a9b30d72dff9
parent 18610 b9799e74a9c5
parent 18658 d1665870d020
child 18692 442b51ab0e41
--- a/Character.st	Mon Aug 03 21:05:52 2015 +0100
+++ b/Character.st	Wed Aug 05 22:44:27 2015 +0100
@@ -201,85 +201,85 @@
     c1 := aStream next.
     codePoint := c1 codePoint.
     codePoint <= 16r7F ifTrue:[
-        "/ 0xxxxxxx - 7 bits
-        ^ c1 asCharacter.
+	"/ 0xxxxxxx - 7 bits
+	^ c1 asCharacter.
     ].
 
     (codePoint bitAnd:2r11000000) == 2r10000000 ifTrue:[
-        "/ out of sync (got an intermediate character)
-        InvalidEncodingError raiseRequestWith:codePoint errorString:' - out of sync'.
-        ^ c1 asCharacter.
+	"/ out of sync (got an intermediate character)
+	InvalidEncodingError raiseRequestWith:codePoint errorString:' - out of sync'.
+	^ c1 asCharacter.
     ].
 
     fetchNext := [  |code|
-                    code := aStream next codePoint.
-                    (code bitAnd:2r11000000) == 2r10000000 ifFalse:[
-                        "/ followup chars must have 2r10 in high bits
-                        InvalidEncodingError raiseRequestWith:code.
-                        ^ c1 asCharacter.
-                    ].
-                    code bitAnd:16r3F
-                 ].
+		    code := aStream next codePoint.
+		    (code bitAnd:2r11000000) == 2r10000000 ifFalse:[
+			"/ followup chars must have 2r10 in high bits
+			InvalidEncodingError raiseRequestWith:code.
+			^ c1 asCharacter.
+		    ].
+		    code bitAnd:16r3F
+		 ].
 
     (codePoint bitAnd:2r11100000) == 2r11000000 ifTrue:[
-        "/ 110xxxxx 10xxxxxx - 11 bits
-        codePoint := codePoint bitAnd:16r1F.
-        codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
-        codePoint <= 16r7F ifTrue:[
-            InvalidEncodingError raiseRequestWith:codePoint.
-        ].
-        ^ Character codePoint:codePoint
+	"/ 110xxxxx 10xxxxxx - 11 bits
+	codePoint := codePoint bitAnd:16r1F.
+	codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
+	codePoint <= 16r7F ifTrue:[
+	    InvalidEncodingError raiseRequestWith:codePoint.
+	].
+	^ Character codePoint:codePoint
     ].
     (codePoint bitAnd:2r11110000) == 2r11100000 ifTrue:[
-        "/ 1110xxxx 10xxxxxx 10xxxxxx - 16 bits
-        codePoint := codePoint bitAnd:16r0F.
-        codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
-        codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
-        codePoint <= 16r7FF ifTrue:[
-            InvalidEncodingError raiseRequestWith:codePoint.
-        ].
-        ^ Character codePoint:codePoint
+	"/ 1110xxxx 10xxxxxx 10xxxxxx - 16 bits
+	codePoint := codePoint bitAnd:16r0F.
+	codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
+	codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
+	codePoint <= 16r7FF ifTrue:[
+	    InvalidEncodingError raiseRequestWith:codePoint.
+	].
+	^ Character codePoint:codePoint
     ].
 
     (codePoint bitAnd:2r11111000) == 2r11110000 ifTrue:[
-        "/ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - 21 bits
-        codePoint := codePoint bitAnd:16r07.
-        codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
-        codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
-        codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
-        codePoint <= 16rFFFF ifTrue:[
-            InvalidEncodingError raiseRequestWith:codePoint.
-        ].
-        ^ Character codePoint:codePoint
+	"/ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - 21 bits
+	codePoint := codePoint bitAnd:16r07.
+	codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
+	codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
+	codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
+	codePoint <= 16rFFFF ifTrue:[
+	    InvalidEncodingError raiseRequestWith:codePoint.
+	].
+	^ Character codePoint:codePoint
     ].
 
     (codePoint bitAnd:2r11111100) == 2r11111000 ifTrue:[
-        "/ 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - 26 bits
-        codePoint := codePoint bitAnd:16r03.
-        codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
-        codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
-        codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
-        codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
-        codePoint <= 16r1FFFFF ifTrue:[
-            InvalidEncodingError raiseRequestWith:codePoint.
-        ].
-        ^ Character codePoint:codePoint
+	"/ 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - 26 bits
+	codePoint := codePoint bitAnd:16r03.
+	codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
+	codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
+	codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
+	codePoint := (codePoint bitShift:6) bitOr:(fetchNext value).
+	codePoint <= 16r1FFFFF ifTrue:[
+	    InvalidEncodingError raiseRequestWith:codePoint.
+	].
+	^ Character codePoint:codePoint
     ].
 
     (codePoint bitAnd:2r11111110) == 2r11111100 ifTrue:[
-        "/ 1111110x ... 10xxxxxx - any number of bits
-        codePoint := codePoint bitAnd:16r01.
-
-        c2 := aStream peek.
-        [c2 notNil and:[(c2 codePoint bitAnd:2r11000000) == 2r10000000]] whileTrue:[
-            codePoint := (codePoint bitShift:6) bitOr:(c2 codePoint bitAnd:16r3F).
-            aStream next.
-            c2 := aStream peek.
-        ].
-        codePoint <= 16r3FFFFFF ifTrue:[
-            InvalidEncodingError raiseRequestWith:codePoint.
-        ].
-        ^ Character codePoint:codePoint
+	"/ 1111110x ... 10xxxxxx - any number of bits
+	codePoint := codePoint bitAnd:16r01.
+
+	c2 := aStream peek.
+	[c2 notNil and:[(c2 codePoint bitAnd:2r11000000) == 2r10000000]] whileTrue:[
+	    codePoint := (codePoint bitShift:6) bitOr:(c2 codePoint bitAnd:16r3F).
+	    aStream next.
+	    c2 := aStream peek.
+	].
+	codePoint <= 16r3FFFFFF ifTrue:[
+	    InvalidEncodingError raiseRequestWith:codePoint.
+	].
+	^ Character codePoint:codePoint
     ].
 
     InvalidEncodingError raiseRequestWith:codePoint.
@@ -295,12 +295,12 @@
       |utf8Encoding original readBack|
 
       1 to:16rFFFF do:[:codePoint |
-        original := Character value:codePoint.
-        utf8Encoding := original utf8Encoded.
-        readBack := Character utf8DecodeFrom:(utf8Encoding readStream).
-        readBack codePoint = codePoint ifFalse:[
-            self halt
-        ]
+	original := Character value:codePoint.
+	utf8Encoding := original utf8Encoded.
+	readBack := Character utf8DecodeFrom:(utf8Encoding readStream).
+	readBack codePoint = codePoint ifFalse:[
+	    self halt
+	]
       ]
     "
 !
@@ -1726,15 +1726,15 @@
 characterSize
     "return the number of bits I require for storage.
      Protocol compatibility with CharacterArray."
-    
+
     asciivalue <= 16r80 ifTrue:[
-        ^ 7
+	^ 7
     ].
     asciivalue <= 16rFF ifTrue:[
-        ^ 8
+	^ 8
     ].
     asciivalue <= 16rFFFF ifTrue:[
-        ^ 16
+	^ 16
     ].
     ^ 32
 !
@@ -1914,198 +1914,200 @@
 %{  /* NOCONTEXT */
 
     REGISTER unsigned INT val;
+    REGISTER unsigned int lowByte;
 #define TRUE_IF_ODD(x)      ((x & 1) ? true : false)
 #define TRUE_IF_EVEN(x)     ((x & 1) ? false : true)
 
     /* because used so often, this is open coded, instead of table driven */
     val = __intVal(__INST(asciivalue));
+    lowByte = val & 0xFF;
 
     /* the most likely case here, outside the switch */
     if (val <= 0xFF) {
-	if ((unsigned INT)(val - 'a') <= ('z' - 'a')) {
+	if ((unsigned)(lowByte - 'a') <= ('z' - 'a')) {
 	    RETURN ( true );
 	}
 
 	/* iso8859 puts national lower case characters at e0 .. ff */
-	if ((val >= 0xDF) && (val <= 0xFF)) {
-	    if (val != 0xF7) {
+	if ((lowByte >= 0xDF) && (lowByte <= 0xFF)) {
+	    if (lowByte != 0xF7) {
 		RETURN(true);
 	    }
 	}
-	if (val == 0xAA) RETURN(true);     /* FEMININE ORDINAL INDICATOR (high a-underline) */
-	if (val == 0xB5) RETURN(true);     /* MICRO SIGN */
-	if (val == 0xBA) RETURN(true);     /* MASCULINE ORDINAL INDICATOR (high o-underline) */
+	if (lowByte == 0xAA) RETURN(true);     /* FEMININE ORDINAL INDICATOR (high a-underline) */
+	if (lowByte == 0xB5) RETURN(true);     /* MICRO SIGN */
+	if (lowByte == 0xBA) RETURN(true);     /* MASCULINE ORDINAL INDICATOR (high o-underline) */
 	RETURN (false);
     }
 
     switch (val >> 8) {
 	case 0x01:
-	    if (val <= 0x0137) { RETURN (TRUE_IF_ODD(val)); }
-	    if (val <= 0x0148) { RETURN (TRUE_IF_EVEN(val)); }
-	    if (val <= 0x0178) { RETURN (TRUE_IF_ODD(val)); }
-	    if (val <= 0x017E) { RETURN (TRUE_IF_EVEN(val)); }
-	    if (val <= 0x0180) { RETURN (true); }
-	    if (val < 0x01CD) {
-		if (val == 0x0181) { RETURN (false); }
-		if (val <= 0x0185) {
-		    RETURN (TRUE_IF_ODD(val));
+	    if (lowByte <= 0x37) { RETURN (TRUE_IF_ODD(lowByte)); }
+	    if (lowByte <= 0x48) { RETURN (TRUE_IF_EVEN(lowByte)); }
+	    if (lowByte <= 0x78) { RETURN (TRUE_IF_ODD(lowByte)); }
+	    if (lowByte <= 0x7E) { RETURN (TRUE_IF_EVEN(lowByte)); }
+	    if (lowByte <= 0x80) { RETURN (true); }
+	    if (lowByte < 0xCD) {
+		if (lowByte == 0x81) { RETURN (false); }
+		if (lowByte <= 0x85) {
+		    RETURN (TRUE_IF_ODD(lowByte));
 		}
-		if (val == 0x0188) { RETURN (true); }
-		if (val == 0x018C) { RETURN (true); }
-		if (val == 0x018D) { RETURN (true); }
-		if (val == 0x0192) { RETURN (true); }
-		if (val == 0x0195) { RETURN (true); }
-		if (val == 0x0199) { RETURN (true); }
-		if (val == 0x019A) { RETURN (true); }
-		if (val == 0x019B) { RETURN (true); }
-		if (val == 0x019E) { RETURN (true); }
-		if (val <= 0x01A0) { RETURN (false); }
-		if (val <= 0x01A6) { RETURN (TRUE_IF_ODD(val)); }
-		if (val <= 0x01AA) { RETURN (TRUE_IF_EVEN(val)); }
-		if (val <= 0x01AE) { RETURN (TRUE_IF_ODD(val)); }
-		if (val == 0x01B2) { RETURN (false); }
-		if (val <= 0x01B6) { RETURN (TRUE_IF_EVEN(val)); }
-		if (val == 0x01B9) { RETURN (true); }
-		if (val == 0x01BA) { RETURN (true); }
-		if (val == 0x01BD) { RETURN (true); }
-		if (val == 0x01BE) { RETURN (true); }
-		if (val == 0x01BF) { RETURN (true); }
-		if (val == 0x01C6) { RETURN (true); }
-		if (val == 0x01C9) { RETURN (true); }
-		if (val == 0x01CC) { RETURN (true); }
+		if (lowByte == 0x88) { RETURN (true); }
+		if (lowByte == 0x8C) { RETURN (true); }
+		if (lowByte == 0x8D) { RETURN (true); }
+		if (lowByte == 0x92) { RETURN (true); }
+		if (lowByte == 0x95) { RETURN (true); }
+		if (lowByte == 0x99) { RETURN (true); }
+		if (lowByte == 0x9A) { RETURN (true); }
+		if (lowByte == 0x9B) { RETURN (true); }
+		if (lowByte == 0x9E) { RETURN (true); }
+		if (lowByte <= 0xA0) { RETURN (false); }
+		if (lowByte <= 0xA6) { RETURN (TRUE_IF_ODD(lowByte)); }
+		if (lowByte <= 0xAA) { RETURN (TRUE_IF_EVEN(lowByte)); }
+		if (lowByte <= 0xAE) { RETURN (TRUE_IF_ODD(lowByte)); }
+		if (lowByte == 0xB2) { RETURN (false); }
+		if (lowByte <= 0xB6) { RETURN (TRUE_IF_EVEN(lowByte)); }
+		if (lowByte == 0xB9) { RETURN (true); }
+		if (lowByte == 0xBA) { RETURN (true); }
+		if (lowByte == 0xBD) { RETURN (true); }
+		if (lowByte == 0xBE) { RETURN (true); }
+		if (lowByte == 0xBF) { RETURN (true); }
+		if (lowByte == 0xC6) { RETURN (true); }
+		if (lowByte == 0xC9) { RETURN (true); }
+		if (lowByte == 0xCC) { RETURN (true); }
 		RETURN (false);
 	    }
-	    if (val <= 0x01DC) { RETURN (TRUE_IF_EVEN(val)); }
-	    if (val <= 0x01EF) { RETURN (TRUE_IF_ODD(val)); }
-	    if (val == 0x01F0) { RETURN (true); }
-	    if (val == 0x01F1) { RETURN (false); }
-	    if (val == 0x01F2) { RETURN (false); }
-	    if (val == 0x01F3) { RETURN (true); }
-	    if (val <= 0x01F6) { RETURN (TRUE_IF_ODD(val)); }
-	    if (val == 0x01F7) { RETURN (false); }
-	    RETURN (TRUE_IF_ODD(val));
+	    if (lowByte <= 0xDC) { RETURN (TRUE_IF_EVEN(lowByte)); }
+	    if (lowByte <= 0xEF) { RETURN (TRUE_IF_ODD(lowByte)); }
+	    if (lowByte == 0xF0) { RETURN (true); }
+	    if (lowByte == 0xF1) { RETURN (false); }
+	    if (lowByte == 0xF2) { RETURN (false); }
+	    if (lowByte == 0xF3) { RETURN (true); }
+	    if (lowByte <= 0xF6) { RETURN (TRUE_IF_ODD(lowByte)); }
+	    if (lowByte == 0xF7) { RETURN (false); }
+	    RETURN (TRUE_IF_ODD(lowByte));
 
 	case 0x02:
-	    if (val <= 0x0233) { RETURN (TRUE_IF_ODD(val)); }
-	    if (val <= 0x0236) { RETURN (true); }
-	    if (val < 0x0250) { RETURN (false); }
-	    if (val < 0x02B0) { RETURN (true); }
+	    if (lowByte <= 0x33) { RETURN (TRUE_IF_ODD(lowByte)); }
+	    if (lowByte <= 0x36) { RETURN (true); }
+	    if (lowByte < 0x50) { RETURN (false); }
+	    if (lowByte < 0xB0) { RETURN (true); }
 	    RETURN (false);
 
 
 	case 0x03:
-	    if (val == 0x0390) { RETURN (true); }
-	    if (val <= 0x03AB) { RETURN (false); }
-	    if (val <= 0x03D1) { RETURN (true); }
-	    if (val == 0x03D5) { RETURN (true); }
-	    if (val == 0x03D6) { RETURN (true); }
-	    if (val < 0x03D7) { RETURN (false); }
-	    if (val <= 0x03EF) { RETURN (TRUE_IF_ODD(val)); }
-	    if (val <= 0x03F3) { RETURN (true); }
-	    if (val == 0x03F5) { RETURN (true); }
+	    if (lowByte == 0x90) { RETURN (true); }
+	    if (lowByte <= 0xAB) { RETURN (false); }
+	    if (lowByte <= 0xD1) { RETURN (true); }
+	    if (lowByte == 0xD5) { RETURN (true); }
+	    if (lowByte == 0xD6) { RETURN (true); }
+	    if (lowByte < 0xD7) { RETURN (false); }
+	    if (lowByte <= 0xEF) { RETURN (TRUE_IF_ODD(lowByte)); }
+	    if (lowByte <= 0xF3) { RETURN (true); }
+	    if (lowByte == 0xF5) { RETURN (true); }
 #ifndef UNICODE_3_2
-	    if (val == 0x03F8) { RETURN (true); }
-	    if (val == 0x03FB) { RETURN (true); }
+	    if (lowByte == 0xF8) { RETURN (true); }
+	    if (lowByte == 0xFB) { RETURN (true); }
 #endif
 	    RETURN (false);
 
 	case 0x04:
-	    if (val <= 0x042F) { RETURN (false); }
-	    if (val <= 0x045F) { RETURN (true); }
-	    if (val <= 0x0481) { RETURN (TRUE_IF_ODD(val)); }
-	    if (val < 0x048A) { RETURN (false); }
-	    if (val <= 0x04C0) { RETURN (TRUE_IF_ODD(val)); }
+	    if (lowByte <= 0x2F) { RETURN (false); }
+	    if (lowByte <= 0x5F) { RETURN (true); }
+	    if (lowByte <= 0x81) { RETURN (TRUE_IF_ODD(lowByte)); }
+	    if (lowByte < 0x8A) { RETURN (false); }
+	    if (lowByte <= 0xC0) { RETURN (TRUE_IF_ODD(lowByte)); }
 #ifdef UNICODE_3_2
-	    if (val == 0x04C5) { RETURN (true); }
+	    if (lowByte == 0xC5) { RETURN (true); }
 #endif
 #ifdef UNICODE_3_2
-	    if (val <= 0x04C8) { RETURN (TRUE_IF_EVEN(val)); }
+	    if (lowByte <= 0xC8) { RETURN (TRUE_IF_EVEN(lowByte)); }
 #else
-	    if (val <= 0x04CA) { RETURN (TRUE_IF_EVEN(val)); }
-	    if (val == 0x04CD) { RETURN (false); }
-	    if (val == 0x04CE) { RETURN (true); }
+	    if (lowByte <= 0xCA) { RETURN (TRUE_IF_EVEN(lowByte)); }
+	    if (lowByte == 0xCD) { RETURN (false); }
+	    if (lowByte == 0xCE) { RETURN (true); }
 #endif
-	    if (val == 0x04CB) { RETURN (false); }
-	    if (val == 0x04CC) { RETURN (true); }
-	    RETURN (TRUE_IF_ODD(val));
+	    if (lowByte == 0xCB) { RETURN (false); }
+	    if (lowByte == 0xCC) { RETURN (true); }
+	    RETURN (TRUE_IF_ODD(lowByte));
 
 	case 0x05:
-	    if (val <= 0x050F) { RETURN (TRUE_IF_ODD(val)); }
-	    if (val < 0x0561) { RETURN (false); }
-	    if (val <= 0x0587) { RETURN (true); }
+	    if (lowByte <= 0x0F) { RETURN (TRUE_IF_ODD(lowByte)); }
+	    if (lowByte < 0x61) { RETURN (false); }
+	    if (lowByte <= 0x87) { RETURN (true); }
 	    RETURN (false);
 
 	case 0x1D:
 #ifndef UNICODE_3_2
-	    if (val <= 0x1D2B) { RETURN (true); }
-	    if (val <= 0x1D61) { RETURN (false); }
-	    if (val <= 0x1D70) { RETURN (true); }
+	    if (lowByte <= 0x2B) { RETURN (true); }
+	    if (lowByte <= 0x61) { RETURN (false); }
+	    if (lowByte <= 0x70) { RETURN (true); }
 #endif
 	    RETURN (false);
 
 	case 0x1E:
-	    if (val < 0x1E96) { RETURN (TRUE_IF_ODD(val)); }
-	    if (val <= 0x1E9F) { RETURN (true); }
-	    RETURN (TRUE_IF_ODD(val));
+	    if (lowByte < 0x96) { RETURN (TRUE_IF_ODD(lowByte)); }
+	    if (lowByte <= 0x9F) { RETURN (true); }
+	    RETURN (TRUE_IF_ODD(lowByte));
 
 	case 0x1F:
-	    if (val <= 0x1F6F) {
-		if (val & 0x0008) { RETURN (false); }
+	    if (lowByte <= 0x6F) {
+		if (lowByte & 0x0008) { RETURN (false); }
 		RETURN (true);
 	    }
-	    if (val <= 0x1F87) { RETURN (true); }
-	    if (val < 0x1FB8) {
-		if (val & 0x0008) { RETURN (false); }
+	    if (lowByte <= 0x87) { RETURN (true); }
+	    if (lowByte < 0xB8) {
+		if (lowByte & 0x0008) { RETURN (false); }
 		RETURN (true);
 	    }
-	    if (val == 0x1FBE) { RETURN (true); }
-	    if (val == 0x1FD4) { RETURN (false); }
-	    if (val == 0x1FC5) { RETURN (false); }
-	    if (val == 0x1FD5) { RETURN (false); }
-	    if (val == 0x1FC1) { RETURN (false); }
-	    if (val == 0x1FF1) { RETURN (false); }
-	    if (val == 0x1FC0) { RETURN (false); }
-	    if (val == 0x1FF0) { RETURN (false); }
-	    if (((val & 0x000F) >= 0x0000) && ((val & 0x000F) <= 0x0007)) { RETURN (true); }
+	    if (lowByte == 0xBE) { RETURN (true); }
+	    if (lowByte == 0xD4) { RETURN (false); }
+	    if (lowByte == 0xC5) { RETURN (false); }
+	    if (lowByte == 0xD5) { RETURN (false); }
+	    if (lowByte == 0xC1) { RETURN (false); }
+	    if (lowByte == 0xF1) { RETURN (false); }
+	    if (lowByte == 0xC0) { RETURN (false); }
+	    if (lowByte == 0xF0) { RETURN (false); }
+	    if (((lowByte & 0x000F) >= 0x0000) && ((lowByte & 0x000F) <= 0x0007)) { RETURN (true); }
 	    RETURN (false);
 
 	case 0x20:
 #ifndef UNICODE_3_2
-	    if (val == 0x2071) { RETURN (true); }
+	    if (lowByte == 0x71) { RETURN (true); }
 #endif
-	    if (val == 0x207F) { RETURN (true); }
+	    if (lowByte == 0x7F) { RETURN (true); }
 	    RETURN (false);
 
 	case 0x21:
-	    if (val == 0x210A) { RETURN (true); }
-	    if (val < 0x210E) { RETURN (false); }
-	    if (val <= 0x210F) { RETURN (true); }
-	    if (val == 0x2113) { RETURN (true); }
-	    if (val == 0x212F) { RETURN (true); }
-	    if (val == 0x2134) { RETURN (true); }
-	    if (val == 0x2139) { RETURN (true); }
+	    if (lowByte == 0x0A) { RETURN (true); }
+	    if (lowByte < 0x0E) { RETURN (false); }
+	    if (lowByte <= 0x0F) { RETURN (true); }
+	    if (lowByte == 0x13) { RETURN (true); }
+	    if (lowByte == 0x2F) { RETURN (true); }
+	    if (lowByte == 0x34) { RETURN (true); }
+	    if (lowByte == 0x39) { RETURN (true); }
 #ifndef UNICODE_3_2
-	    if (val == 0x213D) { RETURN (true); }
-	    if (val <= 0x2145) { RETURN (false); }
-	    if (val <= 0x2149) { RETURN (true); }
+	    if (lowByte == 0x3D) { RETURN (true); }
+	    if (lowByte <= 0x45) { RETURN (false); }
+	    if (lowByte <= 0x49) { RETURN (true); }
 #endif
 	    RETURN (false);
 
 	case 0xFB:
-	    if (val <= 0xFB1C) { RETURN (true); }
+	    if (lowByte <= 0x1C) { RETURN (true); }
 	    RETURN (false);
 
 	case 0xFF:
-	    if ((val >= 0xFF41) && (val <= 0xFF5A)) { RETURN (true); }
+	    if ((lowByte >= 0x41) && (lowByte <= 0x5A)) { RETURN (true); }
 	    RETURN (false);
 
 	case 0x104:
-	    if (val <= 0x10427) { RETURN (false); }
-	    if (val <= 0x1044D) { RETURN (true); }
+	    if (lowByte <= 0x27) { RETURN (false); }
+	    if (lowByte <= 0x4D) { RETURN (true); }
 #ifdef UNICODE_3_2
-	    if (val <= 0x1044D) { RETURN (true); }
+	    if (lowByte <= 0x4D) { RETURN (true); }
 #else
-	    if (val <= 0x1044F) { RETURN (true); }
+	    if (lowByte <= 0x4F) { RETURN (true); }
 #endif
 	    RETURN (false);
 
@@ -2126,11 +2128,11 @@
 
 #ifdef UNICODE_4
 	case 0x1D7:
-	    if (val <= 0x1D71b) { RETURN (true); }
-	    if (val <= 0x1D735) { RETURN (false); }
-	    if (val <= 0x1D755) { RETURN (true); }
-	    if (val <= 0x1D76f) { RETURN (false); }
-	    if (val <= 0x1D78F) { RETURN (true); }
+	    if (lowByte <= 0x1b) { RETURN (true); }
+	    if (lowByte <= 0x35) { RETURN (false); }
+	    if (lowByte <= 0x55) { RETURN (true); }
+	    if (lowByte <= 0x6f) { RETURN (false); }
+	    if (lowByte <= 0x8F) { RETURN (true); }
 
 	    RETURN (false);
 #endif
@@ -2200,17 +2202,19 @@
 
     /* because used so often, this is open coded, instead of table driven */
     REGISTER unsigned INT val;
+    REGISTER int lowByte;
 
     val = __intVal(__INST(asciivalue));
+    lowByte = val & 0xFF;
 
     /* the most likely case here, outside the switch */
     if (val <= 0xFF) {
-	if ((unsigned INT)(val - 'A') <= ('Z' - 'A')) {
+	if ((unsigned int)(lowByte - 'A') <= ('Z' - 'A')) {
 	    RETURN ( true );
 	}
 	/* iso8859 puts national upper case characters at c0 .. df */
-	if ((val >= 0xC0) && (val <= 0xDE)) {
-	    if (val != 0xD7) {
+	if ((lowByte >= 0xC0) && (lowByte <= 0xDE)) {
+	    if (lowByte != 0xD7) {
 		RETURN(true);
 	    }
 	}
@@ -2219,164 +2223,164 @@
 
     switch (val >> 8) {
 	case 0x01:
-	    if (val <= 0x0137) { RETURN (TRUE_IF_EVEN(val)); }
-	    if (val <= 0x0148) { RETURN (TRUE_IF_ODD(val)); }
-	    if (val <= 0x0178) { RETURN (TRUE_IF_EVEN(val)); }
-	    if (val <= 0x017E) { RETURN (TRUE_IF_ODD(val)); }
-	    if (val < 0x01CD) {
-		if (val == 0x0180) { RETURN (false); }
-		if (val == 0x0181) { RETURN (true); }
-		if (val <= 0x0186) {
-		    RETURN (TRUE_IF_EVEN(val));
+	    if (lowByte <= 0x37) { RETURN (TRUE_IF_EVEN(lowByte)); }
+	    if (lowByte <= 0x48) { RETURN (TRUE_IF_ODD(lowByte)); }
+	    if (lowByte <= 0x78) { RETURN (TRUE_IF_EVEN(lowByte)); }
+	    if (lowByte <= 0x7E) { RETURN (TRUE_IF_ODD(lowByte)); }
+	    if (lowByte < 0xCD) {
+		if (lowByte == 0x80) { RETURN (false); }
+		if (lowByte == 0x81) { RETURN (true); }
+		if (lowByte <= 0x86) {
+		    RETURN (TRUE_IF_EVEN(lowByte));
 		}
-		if (val <= 0x0189) {
-		    RETURN (TRUE_IF_ODD(val));
+		if (lowByte <= 0x89) {
+		    RETURN (TRUE_IF_ODD(lowByte));
 		}
-		if (val <= 0x018B) { RETURN (true); }
-		if (val <= 0x018D) { RETURN (false); }
-		if (val <= 0x0191) { RETURN (true); }
-		if (val == 0x0193) { RETURN (true); }
-		if (val == 0x0194) { RETURN (true); }
-		if (val == 0x0196) { RETURN (true); }
-		if (val == 0x0197) { RETURN (true); }
-		if (val == 0x0198) { RETURN (true); }
-		if (val == 0x019C) { RETURN (true); }
-		if (val == 0x019D) { RETURN (true); }
-		if (val == 0x019F) { RETURN (true); }
-		if (val < 0x01A0) { RETURN (false); }
-		if (val <= 0x01A6) { RETURN (TRUE_IF_EVEN(val)); }
-		if (val <= 0x01AA) { RETURN (TRUE_IF_ODD(val)); }
-		if (val <= 0x01AE) { RETURN (TRUE_IF_EVEN(val)); }
-		if (val == 0x01B2) { RETURN (true); }
-		if (val <= 0x01B7) { RETURN (TRUE_IF_ODD(val)); }
-		if (val == 0x01B8) { RETURN (true); }
-		if (val == 0x01BC) { RETURN (true); }
-		if (val == 0x01C4) { RETURN (true); }
-		if (val == 0x01C7) { RETURN (true); }
+		if (lowByte <= 0x8B) { RETURN (true); }
+		if (lowByte <= 0x8D) { RETURN (false); }
+		if (lowByte <= 0x91) { RETURN (true); }
+		if (lowByte == 0x93) { RETURN (true); }
+		if (lowByte == 0x94) { RETURN (true); }
+		if (lowByte == 0x96) { RETURN (true); }
+		if (lowByte == 0x97) { RETURN (true); }
+		if (lowByte == 0x98) { RETURN (true); }
+		if (lowByte == 0x9C) { RETURN (true); }
+		if (lowByte == 0x9D) { RETURN (true); }
+		if (lowByte == 0x9F) { RETURN (true); }
+		if (lowByte < 0xA0) { RETURN (false); }
+		if (lowByte <= 0xA6) { RETURN (TRUE_IF_EVEN(lowByte)); }
+		if (lowByte <= 0xAA) { RETURN (TRUE_IF_ODD(lowByte)); }
+		if (lowByte <= 0xAE) { RETURN (TRUE_IF_EVEN(lowByte)); }
+		if (lowByte == 0xB2) { RETURN (true); }
+		if (lowByte <= 0xB7) { RETURN (TRUE_IF_ODD(lowByte)); }
+		if (lowByte == 0xB8) { RETURN (true); }
+		if (lowByte == 0xBC) { RETURN (true); }
+		if (lowByte == 0xC4) { RETURN (true); }
+		if (lowByte == 0xC7) { RETURN (true); }
 #if 0
-		if (val == 0x01C8) { RETURN (true); }
+		if (lowByte == 0xC8) { RETURN (true); }
 #endif
-		if (val == 0x01CA) { RETURN (true); }
+		if (lowByte == 0xCA) { RETURN (true); }
 #if 0
-		if (val == 0x01CB) { RETURN (true); }
+		if (lowByte == 0xCB) { RETURN (true); }
 #endif
 		RETURN (false);         /* WRONG !!! */
 	    }
-	    if (val <= 0x01DC) { RETURN (TRUE_IF_ODD(val)); }
-	    if (val <= 0x01EF) { RETURN (TRUE_IF_EVEN(val)); }
-	    if (val == 0x01F0) { RETURN (false); }
-	    if (val == 0x01F1) { RETURN (true); }
-	    if (val == 0x01F2) { RETURN (false); }
-	    if (val == 0x01F3) { RETURN (false); }
-	    if (val == 0x01F4) { RETURN (true); }
-	    if (val == 0x01F5) { RETURN (false); }
-	    if (val == 0x01F6) { RETURN (true); }
-	    if (val == 0x01F7) { RETURN (true); }
-	    RETURN (TRUE_IF_EVEN(val));
+	    if (lowByte <= 0xDC) { RETURN (TRUE_IF_ODD(lowByte)); }
+	    if (lowByte <= 0xEF) { RETURN (TRUE_IF_EVEN(lowByte)); }
+	    if (lowByte == 0xF0) { RETURN (false); }
+	    if (lowByte == 0xF1) { RETURN (true); }
+	    if (lowByte == 0xF2) { RETURN (false); }
+	    if (lowByte == 0xF3) { RETURN (false); }
+	    if (lowByte == 0xF4) { RETURN (true); }
+	    if (lowByte == 0xF5) { RETURN (false); }
+	    if (lowByte == 0xF6) { RETURN (true); }
+	    if (lowByte == 0xF7) { RETURN (true); }
+	    RETURN (TRUE_IF_EVEN(lowByte));
 
 	case 0x02:
-	    if (val <= 0x0233) { RETURN (TRUE_IF_EVEN(val)); }
+	    if (lowByte <= 0x33) { RETURN (TRUE_IF_EVEN(lowByte)); }
 	    RETURN (false);
 
 	case 0x03:
-	    if (val < 0x0386) { RETURN (false); }
-	    if (val == 0x0387) { RETURN (false); }
-	    if (val == 0x0390) { RETURN (false); }
-	    if (val <= 0x03AB) { RETURN (true); }
-	    if (val <= 0x03D1) { RETURN (false); }
-	    if (val <= 0x03D4) { RETURN (true); }
-	    if (val <= 0x03D7) { RETURN (false); }
-	    if (val <= 0x03EF) { RETURN (TRUE_IF_EVEN(val)); }
-	    if (val == 0x03F4) { RETURN (true); }
+	    if (lowByte < 0x86) { RETURN (false); }
+	    if (lowByte == 0x87) { RETURN (false); }
+	    if (lowByte == 0x90) { RETURN (false); }
+	    if (lowByte <= 0xAB) { RETURN (true); }
+	    if (lowByte <= 0xD1) { RETURN (false); }
+	    if (lowByte <= 0xD4) { RETURN (true); }
+	    if (lowByte <= 0xD7) { RETURN (false); }
+	    if (lowByte <= 0xEF) { RETURN (TRUE_IF_EVEN(lowByte)); }
+	    if (lowByte == 0xF4) { RETURN (true); }
 #ifndef UNICODE_3_2
-	    if (val == 0x03F7) { RETURN (true); }
-	    if (val == 0x03F9) { RETURN (true); }
-	    if (val == 0x03Fa) { RETURN (true); }
+	    if (lowByte == 0xF7) { RETURN (true); }
+	    if (lowByte == 0xF9) { RETURN (true); }
+	    if (lowByte == 0xFa) { RETURN (true); }
 #endif
 	    RETURN (false);
 
 	case 0x04:
-	    if (val <= 0x042F) { RETURN (true); }
-	    if (val <= 0x045F) { RETURN (false); }
-	    if (val <= 0x0481) { RETURN (TRUE_IF_EVEN(val)); }
-	    if (val < 0x048A) { RETURN (false); }
-	    if (val <= 0x04C0) { RETURN (TRUE_IF_EVEN(val)); }
+	    if (lowByte <= 0x2F) { RETURN (true); }
+	    if (lowByte <= 0x5F) { RETURN (false); }
+	    if (lowByte <= 0x81) { RETURN (TRUE_IF_EVEN(lowByte)); }
+	    if (lowByte < 0x8A) { RETURN (false); }
+	    if (lowByte <= 0xC0) { RETURN (TRUE_IF_EVEN(lowByte)); }
 #ifdef UNICODE_3_2
-	    if (val == 0x04C5) { RETURN (false); }
+	    if (lowByte == 0xC5) { RETURN (false); }
 #endif
 #ifdef UNICODE_3_2
-	    if (val <= 0x04C8) { RETURN (TRUE_IF_ODD(val)); }
+	    if (lowByte <= 0xC8) { RETURN (TRUE_IF_ODD(lowByte)); }
 #else
-	    if (val <= 0x04CA) { RETURN (TRUE_IF_ODD(val)); }
-	    if (val == 0x04CD) { RETURN (true); }
-	    if (val == 0x04CE) { RETURN (false); }
+	    if (lowByte <= 0xCA) { RETURN (TRUE_IF_ODD(lowByte)); }
+	    if (lowByte == 0xCD) { RETURN (true); }
+	    if (lowByte == 0xCE) { RETURN (false); }
 #endif
-	    if (val == 0x04CB) { RETURN (true); }
-	    if (val == 0x04CC) { RETURN (false); }
-	    RETURN (TRUE_IF_EVEN(val));
+	    if (lowByte == 0xCB) { RETURN (true); }
+	    if (lowByte == 0xCC) { RETURN (false); }
+	    RETURN (TRUE_IF_EVEN(lowByte));
 
 	case 0x05:
-	    if (val <= 0x050F) { RETURN (TRUE_IF_EVEN(val)); }
-	    if (val < 0x0531) { RETURN (false); }
-	    if (val <= 0x0556) { RETURN (true); }
+	    if (lowByte <= 0x0F) { RETURN (TRUE_IF_EVEN(lowByte)); }
+	    if (lowByte < 0x31) { RETURN (false); }
+	    if (lowByte <= 0x56) { RETURN (true); }
 	    RETURN (false);
 
 	case 0x10:
-	    if (val < 0x10A0) { RETURN (false); }
-	    if (val <= 0x10CF) { RETURN (true); }
+	    if (lowByte < 0xA0) { RETURN (false); }
+	    if (lowByte <= 0xCF) { RETURN (true); }
 	    RETURN (false);
 
 	case 0x1E:
-	    if (val < 0x1E96) { RETURN (TRUE_IF_EVEN(val)); }
-	    if (val < 0x1EA0) { RETURN (false); }
-	    RETURN (TRUE_IF_EVEN(val));
+	    if (lowByte < 0x96) { RETURN (TRUE_IF_EVEN(lowByte)); }
+	    if (lowByte < 0xA0) { RETURN (false); }
+	    RETURN (TRUE_IF_EVEN(lowByte));
 
 	case 0x1F:
-	    if (val <= 0x1F6F) {
-		if (val & 0x0008) { RETURN (true); }
+	    if (lowByte <= 0x6F) {
+		if (lowByte & 0x0008) { RETURN (true); }
 	    }
-	    if (val <= 0x1F87) { RETURN (false); }
-	    if (val < 0x1FB8) { RETURN (false); }
-	    if (val < 0x1FBC) { RETURN (true); }
-	    if (val == 0x1FEC) { RETURN (true); }
-	    if (((val & 0x000F) >= 0x0008) && ((val & 0x000F) <= 0x000B)) { RETURN (true); }
+	    if (lowByte <= 0x87) { RETURN (false); }
+	    if (lowByte < 0xB8) { RETURN (false); }
+	    if (lowByte < 0xBC) { RETURN (true); }
+	    if (lowByte == 0xEC) { RETURN (true); }
+	    if (((lowByte & 0x000F) >= 0x0008) && ((lowByte & 0x000F) <= 0x000B)) { RETURN (true); }
 	    RETURN (false);
 
 	case 0x21:
-	    if (val == 0x2102) { RETURN (true); }
-	    if (val == 0x2107) { RETURN (true); }
-	    if (val < 0x210B) { RETURN (false); }
-	    if (val < 0x210E) { RETURN (true); }
-	    if (val == 0x2110) { RETURN (true); }
-	    if (val == 0x2111) { RETURN (true); }
-	    if (val == 0x2112) { RETURN (true); }
-	    if (val == 0x2115) { RETURN (true); }
-	    if (val == 0x2119) { RETURN (true); }
-	    if (val == 0x211A) { RETURN (true); }
-	    if (val == 0x211B) { RETURN (true); }
-	    if (val == 0x211C) { RETURN (true); }
-	    if (val == 0x211D) { RETURN (true); }
-	    if (val < 0x2124) { RETURN (false); }
-	    if (val <= 0x212A) { RETURN (TRUE_IF_EVEN(val)); }
-	    if (val == 0x212B) { RETURN (true); }
-	    if (val == 0x212C) { RETURN (true); }
-	    if (val == 0x212D) { RETURN (true); }
-	    if (val == 0x2130) { RETURN (true); }
-	    if (val == 0x2131) { RETURN (true); }
-	    if (val == 0x2133) { RETURN (true); }
+	    if (lowByte == 0x02) { RETURN (true); }
+	    if (lowByte == 0x07) { RETURN (true); }
+	    if (lowByte < 0x0B) { RETURN (false); }
+	    if (lowByte < 0x0E) { RETURN (true); }
+	    if (lowByte == 0x10) { RETURN (true); }
+	    if (lowByte == 0x11) { RETURN (true); }
+	    if (lowByte == 0x12) { RETURN (true); }
+	    if (lowByte == 0x15) { RETURN (true); }
+	    if (lowByte == 0x19) { RETURN (true); }
+	    if (lowByte == 0x1A) { RETURN (true); }
+	    if (lowByte == 0x1B) { RETURN (true); }
+	    if (lowByte == 0x1C) { RETURN (true); }
+	    if (lowByte == 0x1D) { RETURN (true); }
+	    if (lowByte < 0x24) { RETURN (false); }
+	    if (lowByte <= 0x2A) { RETURN (TRUE_IF_EVEN(lowByte)); }
+	    if (lowByte == 0x2B) { RETURN (true); }
+	    if (lowByte == 0x2C) { RETURN (true); }
+	    if (lowByte == 0x2D) { RETURN (true); }
+	    if (lowByte == 0x30) { RETURN (true); }
+	    if (lowByte == 0x31) { RETURN (true); }
+	    if (lowByte == 0x33) { RETURN (true); }
 #ifndef UNICODE_3_2
-	    if (val == 0x213E) { RETURN (true); }
-	    if (val == 0x213F) { RETURN (true); }
-	    if (val == 0x2145) { RETURN (true); }
+	    if (lowByte == 0x3E) { RETURN (true); }
+	    if (lowByte == 0x3F) { RETURN (true); }
+	    if (lowByte == 0x45) { RETURN (true); }
 #endif
 	    RETURN (false);
 
 	case 0xFF:
-	    if ((val >= 0xFF21) && (val <= 0xFF3A)) { RETURN (true); }
+	    if ((lowByte >= 0x21) && (lowByte <= 0x3A)) { RETURN (true); }
 	    RETURN (false);
 
 	case 0x104:
-	    if (val <= 0x10427) { RETURN (true); }
+	    if (lowByte <= 0x27) { RETURN (true); }
 	    RETURN (false);
 
 	case 0x1D4:
@@ -2834,7 +2838,7 @@
 	    RETURN (false);
 
 	case 0x1d:
-	    if (val = 0x1d00) { RETURN (true); }
+	    if (val == 0x1d00) { RETURN (true); }
 	    RETURN (false);
 
 	case 0x1e:
@@ -3056,4 +3060,3 @@
 version_CVS
     ^ '$Header$'
 ! !
-