Character.st
author Claus Gittinger <cg@exept.de>
Mon, 23 Feb 2004 14:27:27 +0100
changeset 7988 cb1c920e67eb
parent 7987 eec82f92ad08
child 7989 7907420b2fab
permissions -rw-r--r--
isUppercase / isLowercase unicode changes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1988 by Claus Gittinger
154
d4236ec280a6 *** empty log message ***
claus
parents: 92
diff changeset
     3
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
5407
d6729266a95b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5315
diff changeset
    13
"{ Package: 'stx:libbasic' }"
d6729266a95b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5315
diff changeset
    14
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    15
Magnitude subclass:#Character
995
b018368b3a94 asString to 16-bit char should return a twoByteString
Claus Gittinger <cg@exept.de>
parents: 819
diff changeset
    16
	instanceVariableNames:'asciivalue'
b018368b3a94 asString to 16-bit char should return a twoByteString
Claus Gittinger <cg@exept.de>
parents: 819
diff changeset
    17
	classVariableNames:'CharacterTable'
b018368b3a94 asString to 16-bit char should return a twoByteString
Claus Gittinger <cg@exept.de>
parents: 819
diff changeset
    18
	poolDictionaries:''
b018368b3a94 asString to 16-bit char should return a twoByteString
Claus Gittinger <cg@exept.de>
parents: 819
diff changeset
    19
	category:'Magnitude-General'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    21
2124
6238280f6120 new infoMessage scheme
Claus Gittinger <cg@exept.de>
parents: 1491
diff changeset
    22
!Character class methodsFor:'documentation'!
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
    23
88
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    24
copyright
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    25
"
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    26
 COPYRIGHT (c) 1988 by Claus Gittinger
154
d4236ec280a6 *** empty log message ***
claus
parents: 92
diff changeset
    27
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    28
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    29
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    30
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    32
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    33
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    34
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    35
"
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    36
!
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    37
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
    38
documentation
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
    39
"
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    40
    This class represents characters.
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
    41
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
    42
    For now, unicode characters can be created and also put-into/taken from
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
    43
    Unicode strings, but the attribute queries (such as isLetter, isDigit etc. are
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
    44
    not yet unicode aware).
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
    45
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    46
    Notice, that actual character objects are not used when characters
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    47
    are stored in strings, symbols or twoByteStrings; these only store
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    48
    a characters asciiValue for a more compact representation.
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    49
    The word 'asciiValue' is a historic leftover - actually, any integer
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    50
    code is allowed (i.e. characters are not limited to 8bit).
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    51
1229
ace799c5765e commentary
Claus Gittinger <cg@exept.de>
parents: 1138
diff changeset
    52
    Single byte Characters are unique; 
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    53
    i.e. for every asciiValue (0..255) there exists exactly one instance of 
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    54
    Character, which is shared (Character value:xxx checks for this, and returns 
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    55
    a reference to an existing instance).
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    56
    Other characters (i.e. asciivalue > 255) are not shared; i.e. these
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    57
    are created as required.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    58
1229
ace799c5765e commentary
Claus Gittinger <cg@exept.de>
parents: 1138
diff changeset
    59
    This means: you may compare characters using #== ONLY IFF you are certain,
357
claus
parents: 345
diff changeset
    60
    that the characters ranges is 0..255. Otherwise, you HAVE TO compare
claus
parents: 345
diff changeset
    61
    using #=. (if in doubt, always compare using #=).
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    62
    Sorry for this inconvenience, but it is (practically) impossible to keep
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    63
    the possible maximum of 2^32 characters (Unicode) around, for that
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    64
    convenience alone.
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
    65
357
claus
parents: 345
diff changeset
    66
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    67
    Methods marked as (JS) come from the manchester Character goody
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    68
    (CharacterComparing) by Jan Steinman, which allow Characters to be used as
1229
ace799c5765e commentary
Claus Gittinger <cg@exept.de>
parents: 1138
diff changeset
    69
    Interval elements (i.e. ($a to:$z) do:[...] ); 
ace799c5765e commentary
Claus Gittinger <cg@exept.de>
parents: 1138
diff changeset
    70
    They are not a big deal, but convenient add-ons.
ace799c5765e commentary
Claus Gittinger <cg@exept.de>
parents: 1138
diff changeset
    71
    Some of these have been modified a bit.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    72
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    73
    WARNING: characters are known by compiler and runtime system -
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
    74
             do not change the instance layout. 
357
claus
parents: 345
diff changeset
    75
claus
parents: 345
diff changeset
    76
    Also, although you can create subclasses of Character, the compiler always
claus
parents: 345
diff changeset
    77
    creates instances of Character for literals ...
814
d4d28ca7afcd made the global CharacterTable a classVar of Character
Claus Gittinger <cg@exept.de>
parents: 760
diff changeset
    78
    ... and other classes are hard-wired to always return instances of characters
357
claus
parents: 345
diff changeset
    79
    in some cases (i.e. String>>at:, Symbol>>at: etc.).
claus
parents: 345
diff changeset
    80
    Therefore, it may not make sense to create a character-subclass.
1295
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 1271
diff changeset
    81
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 1271
diff changeset
    82
    [author:]
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
    83
        Claus Gittinger
1295
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 1271
diff changeset
    84
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 1271
diff changeset
    85
    [see also:]
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
    86
        String TwoByteString
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
    87
        StringCollection
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
    88
"
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
    89
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    90
2124
6238280f6120 new infoMessage scheme
Claus Gittinger <cg@exept.de>
parents: 1491
diff changeset
    91
!Character class methodsFor:'instance creation'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    92
a27a279701f8 Initial revision
claus
parents:
diff changeset
    93
basicNew
a27a279701f8 Initial revision
claus
parents:
diff changeset
    94
    "catch new - Characters cannot be created with new"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    95
a27a279701f8 Initial revision
claus
parents:
diff changeset
    96
    ^ self error:'Characters cannot be created with new'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    97
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    98
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
    99
digitValue:anInteger
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   100
    "return a character that corresponds to anInteger.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   101
     0-9 map to $0-$9, 10-35 map to $A-$Z"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   102
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   103
    |val "{ Class: SmallInteger }" |
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   104
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   105
    val := anInteger.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   106
    (val between:0 and:9) ifTrue:[
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   107
	^ Character value:(val + ($0 asciiValue))
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   108
    ].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   109
    (val between:10 and:35) ifTrue:[
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   110
	^ Character value:(val + ($A asciiValue - 10))
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   111
    ].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   112
    ^self error:'value not in range 0 to 35'
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   113
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   114
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   115
utf8DecodeFrom:aStream
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   116
    "read and return a single unicode character from an UTF8 encoded stream"
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   117
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   118
    |fetchNext c1 c2 c3 c4 c5 ascii|
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   119
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   120
    c1 := aStream next.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   121
    ascii := c1 asciiValue.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   122
    ascii <= 16r7F ifTrue:[
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   123
        "/ 0xxxxxxx - 7 bits   
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   124
        ^ c1.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   125
    ].
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   126
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   127
    (ascii bitAnd:2r11000000) == 2r10000000 ifTrue:[
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   128
        "/ out of sync (got an intermediate character)
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   129
        self error:'out of sync'.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   130
        ^ c1.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   131
    ].
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   132
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   133
    fetchNext := [  |ch|
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   134
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   135
                    ch := aStream next.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   136
                    (ch asciiValue bitAnd:2r11000000) == 2r10000000 ifFalse:[
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   137
                        "/ followup chars must have 2r10 in high bits
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   138
                        self error:'bad encoding'.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   139
                    ].
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   140
                    ch
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   141
                 ].
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   142
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   143
    (ascii bitAnd:2r11100000) == 2r11000000 ifTrue:[
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   144
        "/ 110xxxxx 10xxxxxx - 11 bits
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   145
        c2 := fetchNext value.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   146
        ascii := c1 asciiValue bitAnd:16r1F.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   147
        ascii := (ascii bitShift:6) bitOr:(c2 asciiValue bitAnd:16r3F).
6811
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   148
        ascii <= 16r7F ifTrue:[
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   149
            self error:'invalid encoding'.
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   150
        ].
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   151
        ^ Character value:ascii        
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   152
    ].
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   153
    (ascii bitAnd:2r11110000) == 2r11100000 ifTrue:[
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   154
        "/ 1110xxxx 10xxxxxx 10xxxxxx - 16 bits
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   155
        c2 := fetchNext value.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   156
        c3 := fetchNext value.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   157
        ascii := c1 asciiValue bitAnd:16r0F.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   158
        ascii := (ascii bitShift:6) bitOr:(c2 asciiValue bitAnd:16r3F).
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   159
        ascii := (ascii bitShift:6) bitOr:(c3 asciiValue bitAnd:16r3F).
6811
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   160
        ascii <= 16r7FF ifTrue:[
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   161
            self error:'invalid encoding'.
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   162
        ].
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   163
        ^ Character value:ascii        
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   164
    ].
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   165
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   166
    "/ notice: currently, characters can only have 16bit encoding;
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   167
    "/ therefore the following will raise a runtime exception,
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   168
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   169
    (ascii bitAnd:2r11111000) == 2r11110000 ifTrue:[
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   170
        "/ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - 21 bits
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   171
        c2 := fetchNext value.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   172
        c3 := fetchNext value.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   173
        c4 := fetchNext value.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   174
        ascii := c1 asciiValue bitAnd:16r07.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   175
        ascii := (ascii bitShift:6) bitOr:(c2 asciiValue bitAnd:16r3F).
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   176
        ascii := (ascii bitShift:6) bitOr:(c3 asciiValue bitAnd:16r3F).
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   177
        ascii := (ascii bitShift:6) bitOr:(c4 asciiValue bitAnd:16r3F).
6811
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   178
        ascii <= 16rFFFF ifTrue:[
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   179
            self error:'invalid encoding'.
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   180
        ].
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   181
        ^ Character value:ascii        
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   182
    ].
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   183
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   184
    (ascii bitAnd:2r11111100) == 2r11111000 ifTrue:[
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   185
        "/ 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - 26 bits
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   186
        c2 := fetchNext value.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   187
        c3 := fetchNext value.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   188
        c4 := fetchNext value.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   189
        c5 := fetchNext value.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   190
        ascii := c1 asciiValue bitAnd:16r03.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   191
        ascii := (ascii bitShift:6) bitOr:(c2 asciiValue bitAnd:16r3F).
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   192
        ascii := (ascii bitShift:6) bitOr:(c3 asciiValue bitAnd:16r3F).
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   193
        ascii := (ascii bitShift:6) bitOr:(c4 asciiValue bitAnd:16r3F).
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   194
        ascii := (ascii bitShift:6) bitOr:(c5 asciiValue bitAnd:16r3F).
6811
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   195
        ascii <= 16r1FFFFF ifTrue:[
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   196
            self error:'invalid encoding'.
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   197
        ].
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   198
        ^ Character value:ascii        
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   199
    ].
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   200
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   201
    (ascii bitAnd:2r11111110) == 2r11111100 ifTrue:[
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   202
        "/ 1111110x ... 10xxxxxx - any number of bits
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   203
        ascii := c1 asciiValue bitAnd:16r01.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   204
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   205
        c2 := aStream peek.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   206
        [ (c2 asciiValue bitAnd:2r11000000) == 2r10000000 ] whileTrue:[
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   207
            ascii := (ascii bitShift:6) bitOr:(c2 asciiValue bitAnd:16r3F).
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   208
            aStream next.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   209
        ].
6811
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   210
        ascii <= 16r3FFFFFF ifTrue:[
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   211
            self error:'invalid encoding'.
2fec3f732ac6 catch invalid utf8 encodings
Claus Gittinger <cg@exept.de>
parents: 6808
diff changeset
   212
        ].
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   213
        ^ Character value:ascii        
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   214
    ].
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   215
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   216
    self error:'bad encoding'.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   217
    ^ c1
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   218
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   219
    "
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   220
      Character utf8DecodeFrom:'a' readStream     
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   221
      Character utf8DecodeFrom:#[195 188] asString readStream   
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   222
    "                                            
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   223
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   224
    "test:
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   225
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   226
      |utf8Encoding original readBack|
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   227
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   228
      1 to:16rFFFF do:[:ascii |
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   229
        original := Character value:ascii.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   230
        utf8Encoding := original asString utf8Encoded.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   231
        readBack := Character utf8DecodeFrom:(utf8Encoding readStream).
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   232
        readBack asciiValue = ascii ifFalse:[
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   233
            self halt
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   234
        ]
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   235
      ]
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   236
    "
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   237
!
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   238
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   239
value:anInteger
a27a279701f8 Initial revision
claus
parents:
diff changeset
   240
    "return a character with asciivalue anInteger"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   241
a27a279701f8 Initial revision
claus
parents:
diff changeset
   242
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   243
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
   244
    INT ascii;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   245
249
claus
parents: 216
diff changeset
   246
    if (__isSmallInteger(anInteger)) {
7951
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   247
        ascii = __intVal(anInteger);
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   248
        if ((ascii & ~0xFF) == 0 /* (ascii >= 0) && (ascii <= 255) */)
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   249
            RETURN ( __MKCHARACTER(ascii) );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   250
    }
819
f17cddc493f4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 814
diff changeset
   251
%}.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   252
    (anInteger between:0 and:16rFF) ifTrue:[
7951
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   253
        ^ CharacterTable at:(anInteger + 1)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   254
    ].
7951
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   255
    (anInteger between:16r100 and:16r3FFFFFFF) ifTrue:[
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   256
        ^ super basicNew setAsciiValue:anInteger
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   257
    ].
357
claus
parents: 345
diff changeset
   258
    "
7951
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   259
     a characters ascii-code must be 0..16r3FFFFFFF.
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   260
     (i.e. only characters with up-to 30 bits are allowed.)
357
claus
parents: 345
diff changeset
   261
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   262
    self error:'invalid ascii code for character'
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   263
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   264
7300
461bb09c5954 category
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
   265
!Character class methodsFor:'Compatibility-ANSI'!
5945
Claus Gittinger <cg@exept.de>
parents: 5847
diff changeset
   266
Claus Gittinger <cg@exept.de>
parents: 5847
diff changeset
   267
codePoint:asciiValue
Claus Gittinger <cg@exept.de>
parents: 5847
diff changeset
   268
    ^ self value:asciiValue
Claus Gittinger <cg@exept.de>
parents: 5847
diff changeset
   269
! !
Claus Gittinger <cg@exept.de>
parents: 5847
diff changeset
   270
2214
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   271
!Character class methodsFor:'accessing untypeable characters'!
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   272
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   273
endOfInput
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   274
	"Answer the Character representing ctrl-d ."
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   275
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   276
	^self value: 4
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   277
!
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   278
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   279
leftParenthesis
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   280
	"Answer the Character representing a left parenthesis."
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   281
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   282
	^self value: 40
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   283
!
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   284
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   285
period
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   286
	"Answer the Character representing a carriage period."
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   287
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   288
	^self value: 46
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   289
!
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   290
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   291
poundSign
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   292
	"Answer the Character representing a pound sign."
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   293
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   294
	^self value: 35
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   295
!
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   296
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   297
rightParenthesis
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   298
	"Answer the Character representing a right parenthesis."
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   299
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   300
	^self value: 41
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   301
! !
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   302
2124
6238280f6120 new infoMessage scheme
Claus Gittinger <cg@exept.de>
parents: 1491
diff changeset
   303
!Character class methodsFor:'constants'!
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   304
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   305
backspace
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   306
    "return the backspace character"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   307
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   308
    ^ Character value:8
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   309
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   310
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   311
bell
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   312
    "return the bell character"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   313
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   314
    ^ Character value:7
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   315
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   316
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   317
cr
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   318
    "return the lineEnd character 
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   319
     - actually (in unix) this is a newline character"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   320
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   321
    ^ Character value:10
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   322
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   323
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   324
del 
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   325
    "return the delete character"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   326
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   327
    ^ Character value:16r7F 
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   328
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   329
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   330
doubleQuote
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   331
    "return the double-quote character"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   332
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   333
    ^ Character value:34
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   334
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   335
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   336
esc
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   337
    "return the escape character"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   338
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   339
    ^ Character value:27
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   340
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   341
7688
8494a4155037 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7354
diff changeset
   342
euro
7689
3f4870a7f12e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7688
diff changeset
   343
    "The Euro currency sign (notice: not all fonts support it).
3f4870a7f12e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7688
diff changeset
   344
     Thats the ascii-character code; the Unicode encoding is 0x8364"
7688
8494a4155037 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7354
diff changeset
   345
7976
1ce9243a8601 euro encoding
Claus Gittinger <cg@exept.de>
parents: 7951
diff changeset
   346
    ^ Character value: 16r20AC
7689
3f4870a7f12e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7688
diff changeset
   347
3f4870a7f12e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7688
diff changeset
   348
    "
7976
1ce9243a8601 euro encoding
Claus Gittinger <cg@exept.de>
parents: 7951
diff changeset
   349
     Transcript showCR:Character euro asString
1ce9243a8601 euro encoding
Claus Gittinger <cg@exept.de>
parents: 7951
diff changeset
   350
    "
1ce9243a8601 euro encoding
Claus Gittinger <cg@exept.de>
parents: 7951
diff changeset
   351
    "
7689
3f4870a7f12e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7688
diff changeset
   352
     0 to:255 do:[:i |
3f4870a7f12e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7688
diff changeset
   353
        Transcript 
3f4870a7f12e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7688
diff changeset
   354
            show:'| '; show:((i printStringRadix:16) leftPaddedTo:2);
3f4870a7f12e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7688
diff changeset
   355
            show:' | '; show:(i printStringPaddedTo:3);
3f4870a7f12e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7688
diff changeset
   356
            show:' | '; show:(Character value:i);
3f4870a7f12e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7688
diff changeset
   357
            cr.
3f4870a7f12e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7688
diff changeset
   358
     ]
3f4870a7f12e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7688
diff changeset
   359
    "
7688
8494a4155037 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7354
diff changeset
   360
!
8494a4155037 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7354
diff changeset
   361
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   362
excla
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   363
    "return the exclamation-mark character"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   364
    ^ $!!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   365
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   366
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   367
ff
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   368
    "return the form-feed character"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   369
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   370
    ^ Character value:12
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   371
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   372
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   373
lf
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   374
    "return the newline/linefeed character"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   375
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   376
    ^ Character value:10
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   377
!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   378
4340
523ef8410fad added #linefeed - squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4337
diff changeset
   379
linefeed
523ef8410fad added #linefeed - squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4337
diff changeset
   380
    "squeak compatibility: return the newline/linefeed character"
523ef8410fad added #linefeed - squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4337
diff changeset
   381
523ef8410fad added #linefeed - squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4337
diff changeset
   382
    ^ Character value:10
523ef8410fad added #linefeed - squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4337
diff changeset
   383
!
523ef8410fad added #linefeed - squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4337
diff changeset
   384
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   385
maxValue 
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   386
    "return the maximum asciiValue a character can have"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   387
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   388
    ^ 16rFFFF
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   389
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   390
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   391
newPage
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   392
    "return the form-feed character"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   393
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   394
    ^ Character value:12
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   395
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   396
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   397
nl
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   398
    "return the newline character"
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   399
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   400
    ^ Character value:10
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   401
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   402
6324
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   403
null
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   404
    ^ Character value:0
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   405
!
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   406
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   407
quote
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   408
    "return the single-quote character"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   409
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   410
    ^ Character value:39
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   411
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   412
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   413
return 
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   414
    "return the return character.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   415
     In ST/X, this is different from cr - for Unix reasons."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   416
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   417
    ^ Character value:13 
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   418
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   419
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   420
space
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   421
    "return the blank character"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   422
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   423
    ^ Character value:32
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   424
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   425
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   426
tab
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   427
    "return the tabulator character"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   428
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   429
    ^ Character value:9
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   430
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   431
2124
6238280f6120 new infoMessage scheme
Claus Gittinger <cg@exept.de>
parents: 1491
diff changeset
   432
!Character class methodsFor:'primitive input'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   433
a27a279701f8 Initial revision
claus
parents:
diff changeset
   434
fromUser
357
claus
parents: 345
diff changeset
   435
    "return a character from the keyboard (C's standard input stream)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   436
     - this should only be used for emergency evaluators and the like."
a27a279701f8 Initial revision
claus
parents:
diff changeset
   437
a27a279701f8 Initial revision
claus
parents:
diff changeset
   438
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   439
    int c;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   440
a27a279701f8 Initial revision
claus
parents:
diff changeset
   441
    c = getchar();
a27a279701f8 Initial revision
claus
parents:
diff changeset
   442
    if (c < 0) {
5433
aa2365ee12cf migration support
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
   443
        RETURN (nil);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   444
    }
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1007
diff changeset
   445
    RETURN ( __MKCHARACTER(c & 0xFF) );
5433
aa2365ee12cf migration support
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
   446
%}.
aa2365ee12cf migration support
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
   447
    ^ Stdin next
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   448
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   449
2124
6238280f6120 new infoMessage scheme
Claus Gittinger <cg@exept.de>
parents: 1491
diff changeset
   450
!Character class methodsFor:'queries'!
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   451
4337
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   452
allCharacters
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   453
    "added for squeak compatibility: return a collection of all chars"
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   454
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   455
    ^ CharacterTable
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   456
        
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   457
    "
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   458
     Character allCharacters 
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   459
    "
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   460
!
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   461
4655
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
   462
hasSharedInstances
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
   463
    "return true if this class has shared instances, that is, instances
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
   464
     with the same value are identical.
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
   465
     False is returned here, only redefined in classes which have unified
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
   466
     instances (or should be treated so)."
2672
dc3662188b2c added #hasImmediateInstances for VW compatibility
Claus Gittinger <cg@exept.de>
parents: 2561
diff changeset
   467
4655
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
   468
    ^ true
2672
dc3662188b2c added #hasImmediateInstances for VW compatibility
Claus Gittinger <cg@exept.de>
parents: 2561
diff changeset
   469
4655
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
   470
2672
dc3662188b2c added #hasImmediateInstances for VW compatibility
Claus Gittinger <cg@exept.de>
parents: 2561
diff changeset
   471
!
dc3662188b2c added #hasImmediateInstances for VW compatibility
Claus Gittinger <cg@exept.de>
parents: 2561
diff changeset
   472
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   473
isBuiltInClass
1271
a11ef7b9c780 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1229
diff changeset
   474
    "return true if this class is known by the run-time-system.
a11ef7b9c780 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1229
diff changeset
   475
     Here, true is returned for myself, false for subclasses."
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   476
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   477
    ^ self == Character
1271
a11ef7b9c780 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1229
diff changeset
   478
a11ef7b9c780 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1229
diff changeset
   479
    "Modified: 23.4.1996 / 15:56:39 / cg"
4337
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   480
!
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   481
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   482
separators
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   483
    "added for squeak compatibility: return a collection of separator chars"
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   484
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   485
    ^ Array 
7019
6591ea303fbd *** empty log message ***
penk
parents: 6811
diff changeset
   486
        with:Character space
6591ea303fbd *** empty log message ***
penk
parents: 6811
diff changeset
   487
        with:Character return
6591ea303fbd *** empty log message ***
penk
parents: 6811
diff changeset
   488
        "/ with:Character cr
6591ea303fbd *** empty log message ***
penk
parents: 6811
diff changeset
   489
        with:Character tab
6591ea303fbd *** empty log message ***
penk
parents: 6811
diff changeset
   490
        with:Character lf
6591ea303fbd *** empty log message ***
penk
parents: 6811
diff changeset
   491
        with:Character ff
4337
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   492
        
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   493
    "
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   494
     Character separators
07fad5b7af9b added #allCharacters & #separators for Squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 4037
diff changeset
   495
    "
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   496
! !
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   497
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7257
diff changeset
   498
!Character methodsFor:'Compatibility-ANSI'!
5945
Claus Gittinger <cg@exept.de>
parents: 5847
diff changeset
   499
Claus Gittinger <cg@exept.de>
parents: 5847
diff changeset
   500
codePoint
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   501
    "return the codePoint of myself.
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   502
     Traditionally, this was named 'asciiValue'; 
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   503
     however, characters are not limited to 8bit characters."
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   504
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   505
    ^ asciivalue
5945
Claus Gittinger <cg@exept.de>
parents: 5847
diff changeset
   506
! !
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   507
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7257
diff changeset
   508
!Character methodsFor:'Compatibility-Dolphin'!
6324
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   509
7351
1f805a32d551 comments in isAlphaNumeric and isAlphabetic
Claus Gittinger <cg@exept.de>
parents: 7300
diff changeset
   510
isAlphaNumeric
1f805a32d551 comments in isAlphaNumeric and isAlphabetic
Claus Gittinger <cg@exept.de>
parents: 7300
diff changeset
   511
    "return true, if I am a letter or a digit
1f805a32d551 comments in isAlphaNumeric and isAlphabetic
Claus Gittinger <cg@exept.de>
parents: 7300
diff changeset
   512
     Please use isLetterOrDigit for compatibility reasons (which is ANSI)."
1f805a32d551 comments in isAlphaNumeric and isAlphabetic
Claus Gittinger <cg@exept.de>
parents: 7300
diff changeset
   513
1f805a32d551 comments in isAlphaNumeric and isAlphabetic
Claus Gittinger <cg@exept.de>
parents: 7300
diff changeset
   514
    ^ self isLetterOrDigit
1f805a32d551 comments in isAlphaNumeric and isAlphabetic
Claus Gittinger <cg@exept.de>
parents: 7300
diff changeset
   515
!
1f805a32d551 comments in isAlphaNumeric and isAlphabetic
Claus Gittinger <cg@exept.de>
parents: 7300
diff changeset
   516
1f805a32d551 comments in isAlphaNumeric and isAlphabetic
Claus Gittinger <cg@exept.de>
parents: 7300
diff changeset
   517
isAlphabetic
1f805a32d551 comments in isAlphaNumeric and isAlphabetic
Claus Gittinger <cg@exept.de>
parents: 7300
diff changeset
   518
    "return true, if I am a letter.
1f805a32d551 comments in isAlphaNumeric and isAlphabetic
Claus Gittinger <cg@exept.de>
parents: 7300
diff changeset
   519
     Please use isLetter for compatibility reasons (which is ANSI)."
1f805a32d551 comments in isAlphaNumeric and isAlphabetic
Claus Gittinger <cg@exept.de>
parents: 7300
diff changeset
   520
1f805a32d551 comments in isAlphaNumeric and isAlphabetic
Claus Gittinger <cg@exept.de>
parents: 7300
diff changeset
   521
    ^ self isLetter
1f805a32d551 comments in isAlphaNumeric and isAlphabetic
Claus Gittinger <cg@exept.de>
parents: 7300
diff changeset
   522
!
1f805a32d551 comments in isAlphaNumeric and isAlphabetic
Claus Gittinger <cg@exept.de>
parents: 7300
diff changeset
   523
6324
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   524
isControl
7353
a5227413a23a comment
Claus Gittinger <cg@exept.de>
parents: 7351
diff changeset
   525
    "return true if I am a control character (i.e. ascii value < 32)"
a5227413a23a comment
Claus Gittinger <cg@exept.de>
parents: 7351
diff changeset
   526
a5227413a23a comment
Claus Gittinger <cg@exept.de>
parents: 7351
diff changeset
   527
    ^ self isControlCharacter
6324
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   528
!
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   529
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   530
isHexDigit
7354
b22823ab2232 comment
Claus Gittinger <cg@exept.de>
parents: 7353
diff changeset
   531
    "return true if I am a valid hexadecimal digit"
b22823ab2232 comment
Claus Gittinger <cg@exept.de>
parents: 7353
diff changeset
   532
6324
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   533
    ^ '0123456789abcdefABCDEF' includes:self
7354
b22823ab2232 comment
Claus Gittinger <cg@exept.de>
parents: 7353
diff changeset
   534
b22823ab2232 comment
Claus Gittinger <cg@exept.de>
parents: 7353
diff changeset
   535
    "
b22823ab2232 comment
Claus Gittinger <cg@exept.de>
parents: 7353
diff changeset
   536
     $a isHexDigit
b22823ab2232 comment
Claus Gittinger <cg@exept.de>
parents: 7353
diff changeset
   537
    "
6324
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   538
!
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   539
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   540
isPunctuation
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   541
    "the code below is not unicode aware"
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   542
6327
6f90155dd142 #isPunctuation
Claus Gittinger <cg@exept.de>
parents: 6324
diff changeset
   543
    ^ (asciivalue between:16r21 and:16r40)
6f90155dd142 #isPunctuation
Claus Gittinger <cg@exept.de>
parents: 6324
diff changeset
   544
      or:[ (asciivalue between:16r5B and:16r60)
6f90155dd142 #isPunctuation
Claus Gittinger <cg@exept.de>
parents: 6324
diff changeset
   545
      or:[ (asciivalue between:123 and:126)
6f90155dd142 #isPunctuation
Claus Gittinger <cg@exept.de>
parents: 6324
diff changeset
   546
      or:[ (asciivalue between:161 and:191)
6f90155dd142 #isPunctuation
Claus Gittinger <cg@exept.de>
parents: 6324
diff changeset
   547
      or:[ (asciivalue == 215 )
6f90155dd142 #isPunctuation
Claus Gittinger <cg@exept.de>
parents: 6324
diff changeset
   548
      or:[ (asciivalue == 247 ) ]]]]]
6324
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   549
! !
377c841da590 added #null
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   550
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   551
!Character methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   552
a27a279701f8 Initial revision
claus
parents:
diff changeset
   553
asciiValue
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
   554
    "return the asciivalue of myself.
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   555
     The name 'asciiValue' is a historic leftover:
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   556
        characters are not limited to 8bit characters.
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   557
     So the actual value returned is a codePoint (i.e. full potential for 31bit encoding).
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   558
     PP has removed this method with 4.1 and providing asInteger instead."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   559
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   560
    ^ asciivalue
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   561
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   562
    "Modified: 27.6.1996 / 12:34:34 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   563
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   564
a27a279701f8 Initial revision
claus
parents:
diff changeset
   565
instVarAt:index put:anObject
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
   566
    "catch instvar access - asciivalue may not be changed"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   567
a27a279701f8 Initial revision
claus
parents:
diff changeset
   568
    self error:'Characters may not be modified'
2214
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   569
!
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   570
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   571
newDigitValue
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   572
	"Answer 0-9 if the receiver is $0-$9, 10-35 if it is $A-$Z, and < 0 otherwise. 
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   573
	This is used to parse literal numbers of radix 2-36."
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   574
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   575
	| code value |
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   576
	code := self asInteger.
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   577
	value := code - $0 asInteger.
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   578
	value <= 9 ifTrue: [^value].
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   579
	value := code - $A asInteger.
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   580
	(value >= 0 and: [value < 26])
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   581
		ifTrue: [^value + 10].
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   582
	^-1
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   583
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   584
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   585
!Character methodsFor:'arithmetic'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   586
a27a279701f8 Initial revision
claus
parents:
diff changeset
   587
+ aMagnitude
a27a279701f8 Initial revision
claus
parents:
diff changeset
   588
    "Return the Character that is <aMagnitude> higher than the receiver. 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   589
     Wrap if the resulting value is not a legal Character value. (JS)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   590
6531
8798c9a1d1e6 arithmetic wraps at 16bit bounds (unicode)
Claus Gittinger <cg@exept.de>
parents: 6527
diff changeset
   591
    ^ Character value:(asciivalue + aMagnitude asInteger \\ 16rFFFF)
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   592
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   593
    "
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   594
     $A + 5
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   595
    "
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   596
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   597
    "Modified: 27.6.1996 / 12:34:51 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   598
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   599
a27a279701f8 Initial revision
claus
parents:
diff changeset
   600
- aMagnitude
a27a279701f8 Initial revision
claus
parents:
diff changeset
   601
    "Return the Character that is <aMagnitude> lower than the receiver.  
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   602
     Wrap if the resulting value is not a legal Character value. (JS)
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   603
     claus: 
6531
8798c9a1d1e6 arithmetic wraps at 16bit bounds (unicode)
Claus Gittinger <cg@exept.de>
parents: 6527
diff changeset
   604
        modified to return the difference as integer, if the argument
8798c9a1d1e6 arithmetic wraps at 16bit bounds (unicode)
Claus Gittinger <cg@exept.de>
parents: 6527
diff changeset
   605
        is another character. If the argument is a number, a character is
8798c9a1d1e6 arithmetic wraps at 16bit bounds (unicode)
Claus Gittinger <cg@exept.de>
parents: 6527
diff changeset
   606
        returned."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   607
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   608
    aMagnitude isCharacter ifTrue:[
6531
8798c9a1d1e6 arithmetic wraps at 16bit bounds (unicode)
Claus Gittinger <cg@exept.de>
parents: 6527
diff changeset
   609
        ^ self asciiValue - aMagnitude asciiValue
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   610
    ].
6531
8798c9a1d1e6 arithmetic wraps at 16bit bounds (unicode)
Claus Gittinger <cg@exept.de>
parents: 6527
diff changeset
   611
    ^ Character value:(asciivalue - aMagnitude asInteger \\ 16rFFFF)
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   612
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   613
    "
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   614
     $z - $a  
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   615
     $d - 3
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   616
    "
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   617
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   618
    "Modified: 27.6.1996 / 12:35:34 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   619
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   620
a27a279701f8 Initial revision
claus
parents:
diff changeset
   621
// aMagnitude
a27a279701f8 Initial revision
claus
parents:
diff changeset
   622
    "Return the Character who's value is the receiver divided by <aMagnitude>. 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   623
     Wrap if the resulting value is not a legal Character value. (JS)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   624
6531
8798c9a1d1e6 arithmetic wraps at 16bit bounds (unicode)
Claus Gittinger <cg@exept.de>
parents: 6527
diff changeset
   625
    ^ Character value:(asciivalue // aMagnitude asInteger \\ 16rFFFF)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   626
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   627
a27a279701f8 Initial revision
claus
parents:
diff changeset
   628
\\ aMagnitude
a27a279701f8 Initial revision
claus
parents:
diff changeset
   629
    "Return the Character who's value is the receiver modulo <aMagnitude>.  
a27a279701f8 Initial revision
claus
parents:
diff changeset
   630
     Wrap if the resulting value is not a legal Character value. (JS)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   631
6531
8798c9a1d1e6 arithmetic wraps at 16bit bounds (unicode)
Claus Gittinger <cg@exept.de>
parents: 6527
diff changeset
   632
    ^ Character value:(asciivalue \\ aMagnitude asInteger \\ 16rFFFF)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   633
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   634
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   635
!Character methodsFor:'binary storage'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   636
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   637
hasSpecialBinaryRepresentation
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   638
    "return true, if the receiver has a special binary representation"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   639
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   640
    ^ true
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   641
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   642
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   643
storeBinaryOn:stream manager:manager
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   644
    "store a binary representation of the receiver on stream;
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   645
     redefined, since single-byte characters are stored more compact
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   646
     with a special type-code followed by the asciiValue."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   647
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   648
    (asciivalue < 256) ifTrue:[
4655
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
   649
	stream nextPut:manager codeForCharacter; nextPut:asciivalue.
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   650
    ] ifFalse:[
4655
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
   651
	stream nextPut:manager codeForTwoByteCharacter.
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
   652
	stream nextPutShort:asciivalue MSB:true
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   653
    ]
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   654
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   655
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   656
!Character methodsFor:'comparing'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   657
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   658
< aCharacter
7799
99753997e677 comments
Claus Gittinger <cg@exept.de>
parents: 7715
diff changeset
   659
    "return true, if the arguments asciiValue is greater than the receiver's"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   660
5315
04052c5626bf allow compare against integers (asciiValue compare).
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
   661
    ^ (asciivalue < aCharacter asInteger)
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   662
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   663
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   664
<= aCharacter
7799
99753997e677 comments
Claus Gittinger <cg@exept.de>
parents: 7715
diff changeset
   665
    "return true, if the arguments asciiValue is greater or equal to the receiver's"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   666
5315
04052c5626bf allow compare against integers (asciiValue compare).
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
   667
    ^ (asciivalue <= aCharacter asInteger)
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   668
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   669
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   670
= aCharacter
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   671
    "return true, if the argument, aCharacter is the same character
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   672
     Redefined to take care of 16bit characters."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   673
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   674
    self == aCharacter ifTrue:[^ true].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   675
    aCharacter isCharacter ifFalse:[^ false].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   676
    ^ (asciivalue = aCharacter asciiValue)
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   677
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   678
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   679
> aCharacter
7799
99753997e677 comments
Claus Gittinger <cg@exept.de>
parents: 7715
diff changeset
   680
    "return true, if the arguments asciiValue is less than the receiver's"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   681
5315
04052c5626bf allow compare against integers (asciiValue compare).
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
   682
    ^ (asciivalue > aCharacter asInteger)
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   683
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   684
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   685
>= aCharacter
7799
99753997e677 comments
Claus Gittinger <cg@exept.de>
parents: 7715
diff changeset
   686
    "return true, if the arguments asciiValue is less or equal to the receiver's"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   687
5315
04052c5626bf allow compare against integers (asciiValue compare).
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
   688
    ^ (asciivalue >= aCharacter asInteger)
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   689
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   690
5540
7e0811b2ded9 added #hash
Claus Gittinger <cg@exept.de>
parents: 5473
diff changeset
   691
hash
7e0811b2ded9 added #hash
Claus Gittinger <cg@exept.de>
parents: 5473
diff changeset
   692
    "return an integer useful for hashing"
7e0811b2ded9 added #hash
Claus Gittinger <cg@exept.de>
parents: 5473
diff changeset
   693
7e0811b2ded9 added #hash
Claus Gittinger <cg@exept.de>
parents: 5473
diff changeset
   694
    ^ asciivalue
7e0811b2ded9 added #hash
Claus Gittinger <cg@exept.de>
parents: 5473
diff changeset
   695
!
7e0811b2ded9 added #hash
Claus Gittinger <cg@exept.de>
parents: 5473
diff changeset
   696
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   697
identityHash
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   698
    "return an integer useful for hashing on identity"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   700
    asciivalue <= 255 ifTrue:[
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   701
	^ 4096 + asciivalue
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   702
    ].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   703
    ^ super identityHash
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   704
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   705
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   706
sameAs:aCharacter
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   707
    "return true, if the argument, aCharacter is the same character,
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   708
     ignoring case differences."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   709
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   710
    self == aCharacter ifTrue:[^ true].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   711
    ^ self asLowercase = aCharacter asLowercase
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   712
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   713
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   714
~= aCharacter
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   715
    "return true, if the argument, aCharacter is not the same character
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   716
     Redefined to take care of 16bit characters."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   717
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   718
    self == aCharacter ifTrue:[^ false].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   719
    aCharacter isCharacter ifFalse:[^ true].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   720
    ^ (asciivalue ~~ aCharacter asciiValue)
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   721
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   722
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   723
!Character methodsFor:'converting'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   724
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   725
asCharacter
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   726
    "usually sent to integers, but redefined here to allow integers
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   727
     and characters to be used commonly without a need for a test."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   728
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   729
    ^ self
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   730
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   731
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   732
     32 asCharacter  
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   733
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   734
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   735
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   736
asInteger
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   737
    "return an Integer with my ascii-value.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   738
     OWST4.2 compatibility (sigh)"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   739
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   740
    ^ asciivalue
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   741
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   742
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   743
asLowercase
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   744
    "return a character with same letter as the receiver,
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   745
     but lowercase (the receiver if its lowercase or nonLetter)"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   746
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   747
    |code "{Class: SmallInteger }"|
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   748
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   749
"/ the old code:
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   750
"/    self isUppercase ifFalse:[^ self].
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   751
"/    ^ Character value:(asciivalue + 32)
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   752
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   753
    code := asciivalue.
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   754
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   755
    "/ ISO Latin-1
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   756
    ((code >= $A asciiValue) and:[code <= $Z asciiValue]) ifTrue:[
7985
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   757
        ^ Character value:(code + ($a asciiValue - $A asciiValue))
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   758
    ].
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   759
    code < 16r00C0 ifTrue:[^ self].
7985
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   760
    code <= 16r00FF ifTrue:[
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   761
        code >= 16r00DF ifTrue:[^ self].
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   762
        code == 16r00D7 ifTrue:[^ self].
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   763
        ^ Character value:(code + 16r20)
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   764
    ].
7987
eec82f92ad08 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7985
diff changeset
   765
    code <= 16r021F ifTrue:[
7985
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   766
        code even ifTrue:[ ^ Character value:(code + 1) ].
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   767
        ^ self.
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   768
    ].
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   769
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   770
    "/ mhmh - in which encoding is this character.
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   771
    "/ here, assume Unicode
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   772
2124
6238280f6120 new infoMessage scheme
Claus Gittinger <cg@exept.de>
parents: 1491
diff changeset
   773
    'Character [info]: Unicode support is under construction' infoPrintCR.
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   774
    ^ self
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   775
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   776
    "
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   777
     $A asLowercase 
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   778
     $1 asLowercase  
7985
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   779
     (Character value:16r10d) asLowercase  
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   780
     (Character value:16r10d) asUppercase  
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   781
    "
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   782
2124
6238280f6120 new infoMessage scheme
Claus Gittinger <cg@exept.de>
parents: 1491
diff changeset
   783
    "Modified: 10.1.1997 / 15:35:44 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   784
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   785
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   786
asString
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   787
    "return a string of len 1 with myself as contents"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   788
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   789
%{  /* NOCONTEXT */
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   790
    char buffer[2];
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   791
    OBJ s;
995
b018368b3a94 asString to 16-bit char should return a twoByteString
Claus Gittinger <cg@exept.de>
parents: 819
diff changeset
   792
    unsigned val;
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   793
995
b018368b3a94 asString to 16-bit char should return a twoByteString
Claus Gittinger <cg@exept.de>
parents: 819
diff changeset
   794
    val = __intVal(_characterVal(self));
b018368b3a94 asString to 16-bit char should return a twoByteString
Claus Gittinger <cg@exept.de>
parents: 819
diff changeset
   795
    if (val <= 0xFF) {
5407
d6729266a95b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5315
diff changeset
   796
        buffer[0] = (char) val;
d6729266a95b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5315
diff changeset
   797
        buffer[1] = '\0';
d6729266a95b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5315
diff changeset
   798
        s = __MKSTRING_L(buffer, 1 COMMA_SND);
d6729266a95b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5315
diff changeset
   799
        if (s != nil) {
d6729266a95b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5315
diff changeset
   800
            RETURN (s);
d6729266a95b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5315
diff changeset
   801
        }
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   802
    }
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   803
%}.
7951
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   804
    asciivalue > 16rFF ifTrue:[
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   805
        asciivalue > 16rFFFF ifTrue:[
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   806
            ^ (FourByteString new:1) at:1 put:self; yourself
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   807
        ].
5407
d6729266a95b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5315
diff changeset
   808
        ^ (TwoByteString new:1) at:1 put:self; yourself
995
b018368b3a94 asString to 16-bit char should return a twoByteString
Claus Gittinger <cg@exept.de>
parents: 819
diff changeset
   809
    ].
b018368b3a94 asString to 16-bit char should return a twoByteString
Claus Gittinger <cg@exept.de>
parents: 819
diff changeset
   810
5407
d6729266a95b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5315
diff changeset
   811
    ^ (String new:1) at:1 put:self; yourself.
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   812
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   813
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   814
asSymbol
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   815
    "return a unique symbol which prints like I print"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   816
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   817
    ^ Symbol internCharacter:self
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   818
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   819
6029
594664bbbc47 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5945
diff changeset
   820
asUnicodeString
594664bbbc47 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5945
diff changeset
   821
    "return a unicode string of len 1 with myself as contents"
594664bbbc47 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5945
diff changeset
   822
7951
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   823
    asciivalue > 16rFFFF ifTrue:[
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   824
        ^ (Unicode32String new:1) at:1 put:self; yourself.
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   825
    ].
062ac899852e care for 4-byte characters
Claus Gittinger <cg@exept.de>
parents: 7897
diff changeset
   826
    ^ (Unicode16String new:1) at:1 put:self; yourself.
6029
594664bbbc47 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5945
diff changeset
   827
!
594664bbbc47 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5945
diff changeset
   828
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   829
asUppercase
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   830
    "return a character with same letter as the receiver,
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   831
     but uppercase (the receiver if its uppercase or nonLetter)"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   832
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   833
    |code "{Class: SmallInteger }"|
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   834
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   835
"/ the old code:
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   836
"/    self isLowercase ifFalse:[^ self].
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   837
"/    ^ Character value:(asciivalue - 32)
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   838
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   839
    code := asciivalue.
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   840
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   841
    "/ ISO Latin-1
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   842
    ((code >= $a asciiValue) and:[code <= $z asciiValue]) ifTrue:[
7985
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   843
        ^ Character value:(code + ($A asciiValue - $a asciiValue))
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   844
    ].
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   845
    code < 16r00E0 ifTrue:[^ self].
7985
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   846
    code <= 16r00FF ifTrue:[
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   847
        code == 16r00F7 ifTrue:[^ self]. "/ division
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   848
"/        code == 16r00FF ifTrue:[^ Character value:16r0178].  "/ y diaresis (no uppercase equivalent in ISO-latin 1
7985
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   849
        code == 16r00FF ifTrue:[^ self]. 
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   850
7985
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   851
        ^ Character value:(code - 16r20)
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   852
    ].
7987
eec82f92ad08 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7985
diff changeset
   853
    code <= 16r021F ifTrue:[
7985
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   854
        code even ifTrue:[ ^ self ].
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
   855
        ^ Character value:(code - 1).
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   856
    ].
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   857
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   858
    "/ mhmh - in which encoding is this character.
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   859
    "/ here, assume Unicode
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   860
2124
6238280f6120 new infoMessage scheme
Claus Gittinger <cg@exept.de>
parents: 1491
diff changeset
   861
    'Character [info]: Unicode support is under construction' infoPrintCR.
1491
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   862
    ^ self
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   863
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   864
    "
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   865
     $A asLowercase 
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   866
     $1 asLowercase  
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   867
    "
a42ae3fbb756 fixed asLowercase / asUppercase for national characters
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   868
2124
6238280f6120 new infoMessage scheme
Claus Gittinger <cg@exept.de>
parents: 1491
diff changeset
   869
    "Modified: 10.1.1997 / 15:35:51 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   870
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   871
3058
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   872
decodeAsLiteralArray
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   873
    "given a literalEncoding in the receiver,
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   874
     create & return the corresponding object.
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   875
     The inverse operation to #literalArrayEncoding."
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   876
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   877
    ^ self
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   878
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   879
    "Created: / 27.10.1997 / 14:40:16 / cg"
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   880
!
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   881
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   882
digitValue
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   883
    "return my digitValue for any base"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   884
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   885
    |ascii "{ Class: SmallInteger }" |
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   886
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   887
    ascii := asciivalue.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   888
    (ascii between:($0 asciiValue) and:($9 asciiValue)) ifTrue:[
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   889
	^ ascii - $0 asciiValue
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   890
    ].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   891
    (ascii between:($a asciiValue) and:($z asciiValue)) ifTrue:[
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   892
	^ ascii + (10 - $a asciiValue)
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   893
    ]. 
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   894
    (ascii between:($A asciiValue) and:($Z asciiValue)) ifTrue:[
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   895
	^ ascii + (10 - $A asciiValue)
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   896
    ]. 
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   897
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   898
"remove error below for X3J20 conformance ... "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   899
    self error:'bad character'.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   900
" "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   901
    ^ -1
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   902
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   903
3058
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   904
literalArrayEncoding
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   905
    "encode myself as an array literal, from which a copy of the receiver
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   906
     can be reconstructed with #decodeAsLiteralArray."
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   907
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   908
    ^ self
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   909
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   910
    "Created: / 27.10.1997 / 14:40:37 / cg"
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   911
!
187372cf3eb8 added #encodeAsLiteralArray & #decodeAsLiteralArray
Claus Gittinger <cg@exept.de>
parents: 2908
diff changeset
   912
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   913
to:aMagnitude
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   914
    "Return an Interval over the characters from the receiver to <aMagnitude>. 
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   915
     Wrap <aMagnitude> if it is not a legal Character value. (JS)"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   916
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   917
    ^ Interval from:self to:(aMagnitude \\ 256)
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   918
!
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   919
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   920
utf8Encoded
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   921
    "convert a character from ISO8859-1 to its UTF-8 encoding.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   922
     this returns a String"
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   923
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   924
    |s|
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   925
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   926
    asciivalue <= 16r7F ifTrue:[
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   927
        ^ self asString.
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   928
    ].
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   929
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   930
    s := (String new:6) writeStream.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   931
    self utf8EncodedOn:s.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   932
    ^ s contents
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   933
!
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   934
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   935
utf8EncodedOn:aStream
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   936
    "append my UTF-8 representation to the argument, aStream.
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   937
     Up to 31 bits can be encoded in up to 6 bytes. 
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   938
     However, currently, characters are limited to 16 bits."
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   939
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   940
    |b1 b2 b3 b4 b5 v|
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   941
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   942
    asciivalue <= 16r7F ifTrue:[
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   943
        aStream nextPut:self.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   944
        ^ self.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   945
    ].
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   946
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   947
    b1 := Character value:((asciivalue bitAnd:16r3F) bitOr:2r10000000).
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   948
    v := asciivalue bitShift:-6.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   949
    v <= 16r1F ifTrue:[
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   950
        aStream nextPut:(Character value:(v bitOr:2r11000000)).
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   951
        aStream nextPut:b1.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   952
        ^ self.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   953
    ].
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   954
    b2 := Character value:((v bitAnd:16r3F) bitOr:2r10000000).
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   955
    v := v bitShift:-6.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   956
    v <= 16r0F ifTrue:[
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   957
        aStream nextPut:(Character value:(v bitOr:2r11100000)).
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   958
        aStream nextPut:b2; nextPut:b1.
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   959
        ^ self.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   960
    ].
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   961
    b3 := Character value:((v bitAnd:16r3F) bitOr:2r10000000).
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   962
    v := v bitShift:-6.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   963
    v <= 16r07 ifTrue:[
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   964
        aStream nextPut:(Character value:(v bitOr:2r11110000)).
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   965
        aStream nextPut:b3; nextPut:b2; nextPut:b1.
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   966
        ^ self.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   967
    ].
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   968
    b4 := Character value:((v bitAnd:16r3F) bitOr:2r10000000).
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   969
    v := v bitShift:-6.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   970
    v <= 16r03 ifTrue:[
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   971
        aStream nextPut:(Character value:(v bitOr:2r11111000)).
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   972
        aStream nextPut:b4; nextPut:b3; nextPut:b2; nextPut:b1.
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   973
        ^ self.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   974
    ].
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   975
    b5 := Character value:((v bitAnd:16r3F) bitOr:2r10000000).
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   976
    v := v bitShift:-6.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   977
    v <= 16r01 ifTrue:[
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   978
        aStream nextPut:(Character value:(v bitOr:2r11111100)).
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
   979
        aStream nextPut:b5; nextPut:b4; nextPut:b3; nextPut:b2; nextPut:b1.
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   980
        ^ self.
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   981
    ].
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   982
    "/ cannot happen - we only support up to 16 bit characters
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   983
    self error:'ascii value > 31bit in utf8Encode'.
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   984
        
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   985
    "
6527
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
   986
      $a utf8Encoded   
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
   987
      $ü utf8Encoded asByteArray  
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
   988
      (Character value:16r1fff) utf8Encoded asByteArray      
6808
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   989
      (Character value:16rffff) utf8Encoded asByteArray      
f45445c6dfdb utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6531
diff changeset
   990
      (Character value:16r800) utf8Encoded asByteArray      
5847
aab6e1f01f55 UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5746
diff changeset
   991
    "
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   992
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   993
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   994
!Character methodsFor:'copying'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   995
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   996
copy
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   997
    "return a copy of myself
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   998
     reimplemented since characters are unique"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   999
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1000
     ^ self
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1001
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1002
2214
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1003
copyUpToLast: char 
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1004
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1005
	^self
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1006
!
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1007
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1008
deepCopyUsing:aDictionary
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1009
    "return a deep copy of myself
4728
37eaa8241422 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  1010
     reimplemented since characters are immutable"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1011
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1012
     ^ self
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1013
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1014
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1015
shallowCopy
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1016
    "return a shallow copy of myself
4728
37eaa8241422 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  1017
     reimplemented since characters are immutable"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1018
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1019
     ^ self
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1020
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1021
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1022
simpleDeepCopy
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1023
    "return a deep copy of myself
4728
37eaa8241422 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  1024
     reimplemented since characters are immutable"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1025
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1026
     ^ self
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1027
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1028
5471
a57eeb01c5ab General encoding method (#encodeOn:with:)
Stefan Vogel <sv@exept.de>
parents: 5452
diff changeset
  1029
!Character methodsFor:'encoding'!
a57eeb01c5ab General encoding method (#encodeOn:with:)
Stefan Vogel <sv@exept.de>
parents: 5452
diff changeset
  1030
a57eeb01c5ab General encoding method (#encodeOn:with:)
Stefan Vogel <sv@exept.de>
parents: 5452
diff changeset
  1031
encodeOn:anEncoder with:aParameter
a57eeb01c5ab General encoding method (#encodeOn:with:)
Stefan Vogel <sv@exept.de>
parents: 5452
diff changeset
  1032
a57eeb01c5ab General encoding method (#encodeOn:with:)
Stefan Vogel <sv@exept.de>
parents: 5452
diff changeset
  1033
    anEncoder encodeCharacter:self with:aParameter
a57eeb01c5ab General encoding method (#encodeOn:with:)
Stefan Vogel <sv@exept.de>
parents: 5452
diff changeset
  1034
a57eeb01c5ab General encoding method (#encodeOn:with:)
Stefan Vogel <sv@exept.de>
parents: 5452
diff changeset
  1035
6508
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1036
!
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1037
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1038
rot13
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1039
     "Usenet: from `rotate alphabet 13 places'] 
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1040
      The simple Caesar-cypher encryption that replaces each English
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1041
      letter with the one 13 places forward or back along the alphabet, 
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1042
      so that 'The butler did it!!' becomes 'Gur ohgyre qvq vg!!'
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1043
      Most Usenet news reading and posting programs include a rot13 feature. 
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1044
      It is used to enclose the text in a sealed wrapper that the reader must choose
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1045
      to open -- e.g., for posting things that might offend some readers, or spoilers. 
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1046
      A major advantage of rot13 over rot(N) for other N is that it
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1047
      is self-inverse, so the same code can be used for encoding and decoding."
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1048
7715
0e69a830f5d8 use #and: - not #& you lazy bone, you
Claus Gittinger <cg@exept.de>
parents: 7689
diff changeset
  1049
    (((self >= $a) and:[ self < $n]) or:[(self >= $A) and:[ self < $N]])
6508
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1050
        ifTrue: [ ^ Character value:(self asciiValue + 13) ].
7715
0e69a830f5d8 use #and: - not #& you lazy bone, you
Claus Gittinger <cg@exept.de>
parents: 7689
diff changeset
  1051
    (((self > $m) and:[ self <= $z]) or:[(self > $M) and:[ self <= $Z]])
6508
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1052
        ifTrue: [ ^ Character value:(self asciiValue - 13) ].
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1053
    ^ self
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1054
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1055
    "
7715
0e69a830f5d8 use #and: - not #& you lazy bone, you
Claus Gittinger <cg@exept.de>
parents: 7689
diff changeset
  1056
     $h rot13      
0e69a830f5d8 use #and: - not #& you lazy bone, you
Claus Gittinger <cg@exept.de>
parents: 7689
diff changeset
  1057
     $h rot13 rot13           
0e69a830f5d8 use #and: - not #& you lazy bone, you
Claus Gittinger <cg@exept.de>
parents: 7689
diff changeset
  1058
     'The butler did it!!' rot13             -> 'Gur ohgyre qvq vg!!'
0e69a830f5d8 use #and: - not #& you lazy bone, you
Claus Gittinger <cg@exept.de>
parents: 7689
diff changeset
  1059
     'The butler did it!!' rot13 rot13       -> 'The butler did it!!'
6508
Claus Gittinger <cg@exept.de>
parents: 6398
diff changeset
  1060
    "
5471
a57eeb01c5ab General encoding method (#encodeOn:with:)
Stefan Vogel <sv@exept.de>
parents: 5452
diff changeset
  1061
! !
a57eeb01c5ab General encoding method (#encodeOn:with:)
Stefan Vogel <sv@exept.de>
parents: 5452
diff changeset
  1062
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1063
!Character methodsFor:'national testing'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1064
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1065
isNationalAlphaNumeric
2214
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1066
    "return true, if the receiver is a letter or digit in the
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1067
     current language (Language variable)"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1068
7988
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1069
    self isNationalLetter ifTrue:[^ true].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1070
    ^ self isDigit 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1071
!
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1072
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1073
isNationalDigit
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1074
    "return true, if the receiver is a digit.
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1075
     This assumes unicode encoding.
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1076
     WARNING: this method is not complete."
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1077
7988
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1078
    |codePoint "{ Class SmallInteger }"|
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1079
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1080
    codePoint := asciivalue.
2214
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1081
7988
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1082
    codePoint <= 16rFF ifTrue:[                "/ u00xx - unicode latin1 page 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1083
        (codePoint between:($0 asciiValue) and:($9 asciiValue)) ifTrue:[^ true].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1084
        ^ false
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1085
    ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1086
    ^ false.
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1087
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1088
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1089
isNationalLetter
7988
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1090
    "return true, if the receiver is a letter.
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1091
     This assumes unicode encoding.
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1092
     WARNING: this method is not complete."
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1093
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1094
    |codePoint "{ Class SmallInteger }"|
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1095
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1096
    codePoint := asciivalue.
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1097
7988
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1098
    codePoint <= 16rFF ifTrue:[                "/ u00xx - unicode latin1 page 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1099
        (codePoint between:($a asciiValue) and:($z asciiValue)) ifTrue:[^ true].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1100
        (codePoint between:($A asciiValue) and:($Z asciiValue)) ifTrue:[^ true].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1101
        codePoint < 16rC0 ifTrue:[^ false].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1102
        codePoint == 16rD7 ifTrue:[^ false].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1103
        codePoint == 16rF7 ifTrue:[^ false].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1104
        ^ true
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1105
    ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1106
    codePoint <= 16r1FF ifTrue:[               "/ u0100..u017F - unicode european latin (Latin ext-A) page
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1107
        ^ true                                 "/ u0180..u01FF - unicode european latin (Latin ext-B) page
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1108
    ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1109
    codePoint <= 16r2FF ifTrue:[               "/ u02xx - unicode latin page
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1110
        codePoint <= 16r2B8 ifTrue:[               
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1111
            ^ true
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1112
        ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1113
        ^ false
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1114
    ].                                         
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1115
    codePoint <= 16r3FF ifTrue:[               "/ u03xx - unicode accent & greek page
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1116
        codePoint <= 16r385 ifTrue:[ ^ false ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1117
        codePoint == 16r387 ifTrue:[ ^ false ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1118
        ^ true
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1119
    ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1120
    codePoint <= 16r4FF ifTrue:[               "/ u04xx - unicode cyrillic
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1121
        ^ true
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1122
    ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1123
    codePoint <= 16r5FF ifTrue:[               "/ u05xx - 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1124
        codePoint <= 16r50F ifTrue:[           "/ u05xx - unicode cyrillic supplementary
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1125
            ^ true
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1126
        ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1127
        codePoint <= 16r530 ifTrue:[ ^ false ]. 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1128
        codePoint <= 16r556 ifTrue:[           "/ u05xx - unicode armenian
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1129
            ^ true
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1130
        ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1131
        codePoint <= 16r550 ifTrue:[ ^ false ]. 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1132
        codePoint <= 16r587 ifTrue:[           
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1133
            ^ true
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1134
        ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1135
        codePoint <= 16r5CF ifTrue:[ ^ false ]."/ u05xx - unicode hebrew           
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1136
        codePoint <= 16r5F2 ifTrue:[          
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1137
            ^ true
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1138
        ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1139
        ^ false.
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1140
    ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1141
    codePoint <= 16r6FF ifTrue:[               "/ u06xx - arabic
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1142
        codePoint <= 16r620 ifTrue:[ ^ false ]. 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1143
        codePoint <= 16r64A ifTrue:[ ^ true ]. 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1144
        codePoint <= 16r66D ifTrue:[ ^ false ]. 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1145
        codePoint <= 16r6D3 ifTrue:[ ^ true ]. 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1146
        codePoint == 16r6D5 ifTrue:[ ^ true ]. 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1147
        codePoint == 16r6EE ifTrue:[ ^ true ]. 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1148
        codePoint == 16r6EF ifTrue:[ ^ true ]. 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1149
        ^ false.
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1150
    ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1151
    codePoint <= 16r7FF ifTrue:[               "/ u06xx - syriac / thaana
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1152
        codePoint < 16r710 ifTrue:[ ^ false ]. 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1153
        codePoint < 16r74F ifTrue:[ ^ true ]. 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1154
        codePoint < 16r780 ifTrue:[ ^ false ]. 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1155
        codePoint < 16r7B0 ifTrue:[ ^ true ]. 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1156
        ^ false.
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1157
    ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1158
    codePoint <= 16rDFF ifTrue:[               
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1159
        "/ self halt:'unimplemented character range'.
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1160
        ^ false.
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1161
    ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1162
    codePoint <= 16rEFF ifTrue:[               "/ u0Exx - thai / lao
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1163
        codePoint < 16rE50 ifTrue:[ ^ true].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1164
        codePoint < 16rE80 ifTrue:[ ^ false].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1165
        codePoint < 16rED0 ifTrue:[ ^ true].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1166
        ^ false.
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1167
    ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1168
    "/ self halt:'unimplemented character range'.
2214
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1169
    ^ false.
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1170
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1171
    "Modified: 21.1.1997 / 11:13:02 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1172
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1173
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1174
!Character methodsFor:'printing & storing'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1175
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1176
displayString
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1177
    "return a string used when the receiver is to be displayed
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1178
     in an inspector kind-of-thing"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1179
2908
b3be3629fcb1 vms stuff
Claus Gittinger <cg@exept.de>
parents: 2840
diff changeset
  1180
    ^ (self storeString , ' "16r' , (asciivalue printStringRadix:16) , '"')
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1181
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1182
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1183
isLiteral
4655
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1184
    "return true, if the receiver can be used as a literal constant in ST syntax
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1185
     (i.e. can be used in constant arrays)"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1186
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1187
    ^ true
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1188
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1189
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1190
print
5746
cf5e42cb72ef do not overwrite the standard printing conventions
Claus Gittinger <cg@exept.de>
parents: 5566
diff changeset
  1191
    "print myself on stdout.
cf5e42cb72ef do not overwrite the standard printing conventions
Claus Gittinger <cg@exept.de>
parents: 5566
diff changeset
  1192
     This method does NOT (by purpose) use the stream classes and 
cf5e42cb72ef do not overwrite the standard printing conventions
Claus Gittinger <cg@exept.de>
parents: 5566
diff changeset
  1193
     will therefore work even in case of emergency (but only, if Stdout is nil)."
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1194
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1195
%{  /* NOCONTEXT */
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1196
5746
cf5e42cb72ef do not overwrite the standard printing conventions
Claus Gittinger <cg@exept.de>
parents: 5566
diff changeset
  1197
    if (@global(Stdout) == nil) {
cf5e42cb72ef do not overwrite the standard printing conventions
Claus Gittinger <cg@exept.de>
parents: 5566
diff changeset
  1198
        putchar(__intVal(__INST(asciivalue)));
cf5e42cb72ef do not overwrite the standard printing conventions
Claus Gittinger <cg@exept.de>
parents: 5566
diff changeset
  1199
        RETURN(self);
cf5e42cb72ef do not overwrite the standard printing conventions
Claus Gittinger <cg@exept.de>
parents: 5566
diff changeset
  1200
    }
5452
71fd110c347a allow print, printCR during early initialization
Claus Gittinger <cg@exept.de>
parents: 5433
diff changeset
  1201
%}.
71fd110c347a allow print, printCR during early initialization
Claus Gittinger <cg@exept.de>
parents: 5433
diff changeset
  1202
    super print
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1203
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1204
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1205
printOn:aStream
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1206
    "print myself on aStream"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1207
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1208
    aStream nextPut:self
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1209
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1210
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1211
printString
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1212
    "return a string to print me"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1213
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1214
    ^ self asString
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1215
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1216
2214
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1217
reconstructOn:aStream
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1218
    aStream nextPut:$$; nextPut:self
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1219
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1220
    "Created: 6.2.1996 / 09:46:12 / stefan"
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1221
    "Modified: 6.2.1996 / 10:57:35 / stefan"
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1222
!
2c73e6907cbc fixed #isNationalLetter
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
  1223
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1224
storeOn:aStream
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1225
    "store myself on aStream"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1226
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1227
    |special|
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1228
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1229
    (asciivalue between:33 and:127) ifFalse:[
4655
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1230
	(self == Character space) ifTrue:[
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1231
	    special := 'space'
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1232
	] ifFalse:[
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1233
	    (self == Character cr) ifTrue:[
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1234
		special := 'cr'.
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1235
	    ] ifFalse:[
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1236
		(self == Character tab) ifTrue:[
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1237
		    special := 'tab'.
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1238
		] ifFalse:[
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1239
		    (self == Character esc) ifTrue:[
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1240
			special := 'esc'.
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1241
		    ]
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1242
		]
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1243
	    ]
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1244
	].
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1245
	special notNil ifTrue:[
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1246
	    aStream nextPutAll:'(Character '; nextPutAll:special; nextPut:$).
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1247
	    ^ self
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1248
	].
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1249
	aStream nextPutAll:'(Character value:16r'.
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1250
	asciivalue printOn:aStream base:16.
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1251
	aStream nextPut:$)
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1252
    ] ifTrue:[
4655
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1253
	aStream nextPut:$$; nextPut:self
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1254
    ]
995
b018368b3a94 asString to 16-bit char should return a twoByteString
Claus Gittinger <cg@exept.de>
parents: 819
diff changeset
  1255
3190
81ffb25d1d86 Use #printOn: instead of #printString
Stefan Vogel <sv@exept.de>
parents: 3072
diff changeset
  1256
    "Modified: / 23.2.1996 / 23:27:32 / cg"
81ffb25d1d86 Use #printOn: instead of #printString
Stefan Vogel <sv@exept.de>
parents: 3072
diff changeset
  1257
    "Modified: / 20.1.1998 / 14:10:46 / stefan"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1258
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1259
7257
b9f0fb923c72 method category rename
Claus Gittinger <cg@exept.de>
parents: 7250
diff changeset
  1260
!Character methodsFor:'private-accessing'!
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1261
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1262
setAsciiValue:anInteger
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
  1263
    "very private - set the asciivalue / codePoint. 
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1264
     - use this only for characters with codes > 16rFF.
7897
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
  1265
     DANGER alert: 
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
  1266
        funny things happen, if this is applied to
08fd96f5c1d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7799
diff changeset
  1267
        one of the shared characters with codePoints 0..255."
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1268
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1269
    asciivalue := anInteger
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1270
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1271
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1272
!Character methodsFor:'testing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1273
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
  1274
isCharacter
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
  1275
    "return true,  if the receiver is some kind of character"
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
  1276
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
  1277
    ^ true
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
  1278
!
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
  1279
3667
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1280
isControlCharacter
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1281
    "return true if I am a control character (i.e. ascii value < 32)"
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1282
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1283
%{  /* NOCONTEXT */
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1284
#ifdef NON_ASCII       /* i.e. EBCDIC ;-) */
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1285
    not yet implemented - fails when compiled
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1286
#else
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1287
    REGISTER int val;
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1288
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1289
    val = __intVal(__INST(asciivalue));
3881
e8fd1f890897 fixed isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3667
diff changeset
  1290
    if (val < ' ') {
5423
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1291
        RETURN ( true );
3667
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1292
    }
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1293
#endif
5423
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1294
    RETURN (false);
3667
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1295
%}.
5423
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1296
    ^ asciivalue < 16r20.
3667
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1297
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1298
    "
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1299
     (Character value:1) isControlCharacter
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1300
     $a isControlCharacter
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1301
    "
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1302
!
83b1cebac287 added #isControlCharacter
Claus Gittinger <cg@exept.de>
parents: 3190
diff changeset
  1303
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1304
isDigit
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1305
    "return true, if I am a digit (i.e. $0 .. $9)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1306
7980
058af5174df2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7979
diff changeset
  1307
%{  /* NOCONTEXT */
6527
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1308
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1309
    REGISTER int val;
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1310
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1311
    val = __intVal(__INST(asciivalue));
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1312
    if ((unsigned)(val - '0') <= ('9' - '0')) {
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1313
        RETURN ( true );
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1314
    }
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1315
    RETURN ( false );
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1316
%}.
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1317
    ^ asciivalue between:$0 asciiValue and:$9 asciiValue
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1318
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1319
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1320
isDigitRadix:r
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1321
    "return true, if I am a digit of a base r number"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1322
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1323
    (asciivalue < $0 asciiValue) ifTrue:[^ false]. 
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1324
    (r > 10) ifTrue:[
6527
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1325
        (asciivalue <= $9 asciiValue) ifTrue:[
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1326
            ^ true
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1327
        ].
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1328
        ((asciivalue - $a asciiValue) between:0 and:(r - 11)) ifTrue:[
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1329
            ^ true
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1330
        ].
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1331
        ^ (asciivalue - $A asciiValue) between:0 and:(r - 11)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1332
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1333
    (asciivalue - $0 asciiValue) < r ifTrue:[^ true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1334
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1335
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1336
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1337
isEndOfLineCharacter
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1338
    "return true if I am a line delimitting character"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1339
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1340
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1341
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1342
    REGISTER int val;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1343
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1007
diff changeset
  1344
    val = __intVal(__INST(asciivalue));
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1345
    if ((val == '\n')
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1346
     || (val == '\r')
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1347
     || (val == '\f')) {
5423
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1348
        RETURN ( true );
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 37
diff changeset
  1349
    }
5423
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1350
    RETURN (false);
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1351
%}.
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1352
    ^ asciivalue == 16r0A
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1353
      or:[asciivalue == 16r0D
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1354
      or:[asciivalue == 16r0C]]
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1355
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1356
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1357
5473
c48d8c45c740 isImmediate returns true for shared characters
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
  1358
isImmediate
c48d8c45c740 isImmediate returns true for shared characters
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
  1359
    "return true if I am an immediate object
c48d8c45c740 isImmediate returns true for shared characters
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
  1360
     i.e. I am represented in the pointer itself and
c48d8c45c740 isImmediate returns true for shared characters
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
  1361
     no real object header/storage is used me.
c48d8c45c740 isImmediate returns true for shared characters
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
  1362
     For VW compatibility, shared characters (i.e. in the range 0..255) 
c48d8c45c740 isImmediate returns true for shared characters
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
  1363
     also return true here"
c48d8c45c740 isImmediate returns true for shared characters
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
  1364
c48d8c45c740 isImmediate returns true for shared characters
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
  1365
    ^ asciivalue <= 255
c48d8c45c740 isImmediate returns true for shared characters
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
  1366
c48d8c45c740 isImmediate returns true for shared characters
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
  1367
!
c48d8c45c740 isImmediate returns true for shared characters
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
  1368
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1369
isLetter
7979
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1370
    "return true, if I am a letter in the 'a'..'z' range.
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1371
     Use isNationalLetter, if you are interested in those."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1372
7980
058af5174df2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7979
diff changeset
  1373
%{  /* NOCONTEXT */
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1374
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1375
    REGISTER int val;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1376
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1007
diff changeset
  1377
    val = __intVal(__INST(asciivalue));
6527
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1378
    if ((unsigned)(val - 'a') <= ('z' - 'a')) {
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1379
        RETURN ( true );
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1380
    }
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1381
    if ((unsigned)(val - 'A') <= ('Z' - 'A')) {
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1382
        RETURN ( true );
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1383
    }
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1384
    RETURN ( false );
5423
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1385
%}.
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1386
    ^ (asciivalue between:($a asciiValue) and:($z asciiValue))
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1387
      or:[(asciivalue between:($A asciiValue) and:($Z asciiValue))]
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1388
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1389
154
d4236ec280a6 *** empty log message ***
claus
parents: 92
diff changeset
  1390
isLetterOrDigit
7979
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1391
    "return true, if I am a letter (a..z or A..Z) or a digit (0..9)
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1392
     Use isNationalAlphaNumeric, if you are interested in those."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1393
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1394
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1395
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1396
    REGISTER int val;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1397
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1007
diff changeset
  1398
    val = __intVal(__INST(asciivalue));
6527
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1399
    if ((unsigned)(val - 'a') <= ('z' - 'a')) {
5423
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1400
        RETURN ( true );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1401
    }
6527
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1402
    if ((unsigned)(val - 'A') <= ('Z' - 'A')) {
5423
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1403
        RETURN ( true );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1404
    }
6527
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1405
    if ((unsigned)(val - '0') <= ('9' - '0')) {
5423
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1406
        RETURN ( true );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1407
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1408
    RETURN ( false );
5423
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1409
%}.
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1410
    ^ self isLetter or:[self isDigit]
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1411
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1412
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1413
isLowercase
7979
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1414
    "return true, if I am a lower-case letter.
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1415
     This one does care for national characters."
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1416
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1417
%{  /* NOCONTEXT */
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1418
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1419
    REGISTER int val;
154
d4236ec280a6 *** empty log message ***
claus
parents: 92
diff changeset
  1420
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1007
diff changeset
  1421
    val = __intVal(__INST(asciivalue));
6527
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1422
    if ((unsigned)(val - 'a') <= ('z' - 'a')) {
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1423
        RETURN ( true );
e6528da50c43 isXXX tuned
Claus Gittinger <cg@exept.de>
parents: 6526
diff changeset
  1424
    }
7979
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1425
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1426
    /* iso8859 puts national lower case characters at e0 .. ff */
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1427
    if ((val >= 0xE0) && (val <= 0xFF)) {
7979
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1428
        if (val != 0xE7) {
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1429
            RETURN(true);
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1430
        }
5423
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1431
        RETURN(true);
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1432
    }
7979
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1433
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1434
    if (val <= 0xFF) {
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1435
        RETURN (false);
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1436
    }
5423
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1437
%}.
7988
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1438
    asciivalue <= 16r01FF ifTrue:[
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1439
        asciivalue <= 16r0137 ifTrue:[ ^ asciivalue odd ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1440
        asciivalue <= 16r0137 ifTrue:[ ^ asciivalue odd ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1441
        asciivalue == 16r0138 ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1442
        asciivalue <= 16r0148 ifTrue:[ ^ asciivalue even ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1443
        asciivalue == 16r0149 ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1444
        asciivalue <= 16r0178 ifTrue:[ ^ asciivalue odd ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1445
        asciivalue <= 16r017E ifTrue:[ ^ asciivalue even ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1446
        asciivalue == 16r017F ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1447
        asciivalue < 16r01CD ifTrue:[ 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1448
            asciivalue == 16r01C6 ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1449
            asciivalue == 16r01C9 ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1450
            asciivalue == 16r01CC ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1451
            ^ false "WRONG !!!!!! " 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1452
        ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1453
        asciivalue <= 16r01DC ifTrue:[ ^ asciivalue even ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1454
        asciivalue == 16r01DD ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1455
        asciivalue <= 16r01EF ifTrue:[ ^ asciivalue odd ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1456
        asciivalue == 16r01F0 ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1457
        asciivalue == 16r01F1 ifTrue:[ ^ false ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1458
        asciivalue == 16r01F2 ifTrue:[ ^ false ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1459
        asciivalue == 16r01F3 ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1460
        asciivalue < 16r01F4 ifTrue:[ self halt. ^ false ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1461
        asciivalue <= 16r01F6 ifTrue:[ ^ asciivalue odd ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1462
        asciivalue == 16r01F7 ifTrue:[ ^ false ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1463
        asciivalue < 16r01F8 ifTrue:[ self halt. ^ false ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1464
        asciivalue <= 16r01FF ifTrue:[ ^ asciivalue odd ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1465
        ^ false.
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1466
    ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1467
    asciivalue <= 16r02FF ifTrue:[
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1468
        asciivalue <= 16r0233 ifTrue:[ ^ asciivalue odd ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1469
        asciivalue <= 16r0236 ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1470
        asciivalue < 16r0250 ifTrue:[ ^ false ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1471
        asciivalue < 16r02B0 ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1472
        ^ false
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1473
    ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1474
    asciivalue <= 16r03FF ifTrue:[
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1475
        asciivalue <= 16r03AB ifTrue:[ ^ false ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1476
        asciivalue <= 16r03D1 ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1477
        asciivalue == 16r03D6 ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1478
        asciivalue <= 16r03D7 ifTrue:[ ^ false ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1479
        asciivalue <= 16r03EF ifTrue:[ ^ asciivalue odd ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1480
        asciivalue <= 16r03F2 ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1481
        ^ false
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1482
    ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1483
    asciivalue <= 16r04FF ifTrue:[
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1484
        asciivalue <= 16r042F ifTrue:[ ^ false ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1485
        asciivalue <= 16r045F ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1486
        asciivalue <= 16r0481 ifTrue:[ ^ asciivalue odd ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1487
        asciivalue < 16r048A ifTrue:[ ^ false ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1488
        asciivalue < 16r04BF ifTrue:[ ^ asciivalue odd ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1489
        asciivalue == 16r04C0 ifTrue:[ ^ false ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1490
        ^ asciivalue odd
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1491
    ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1492
    asciivalue <= 16r05FF ifTrue:[
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1493
        asciivalue <= 16r050F ifTrue:[ ^ asciivalue odd ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1494
        asciivalue < 16r0561 ifTrue:[ ^ false ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1495
        asciivalue <= 16r0587 ifTrue:[ ^ true ].
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1496
        ^ false
7985
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
  1497
    ].
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
  1498
7979
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1499
    "/ TODO: care for unicode lowercase characters.
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1500
    ^ false
154
d4236ec280a6 *** empty log message ***
claus
parents: 92
diff changeset
  1501
!
d4236ec280a6 *** empty log message ***
claus
parents: 92
diff changeset
  1502
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1503
isPrintable
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1504
    "return true, if the receiver is a useful printable character
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1505
     (see fileBrowsers showFile:-method on how it can be used)"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1506
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1507
    (asciivalue between:32 and:127) ifTrue:[^ true].
6398
1a32afa7b397 ff isPrintable -> true
Claus Gittinger <cg@exept.de>
parents: 6327
diff changeset
  1508
    asciivalue == 12 ifTrue:[^ true].   "/ FF
1a32afa7b397 ff isPrintable -> true
Claus Gittinger <cg@exept.de>
parents: 6327
diff changeset
  1509
    asciivalue == 13 ifTrue:[^ true].   "/ CR
1a32afa7b397 ff isPrintable -> true
Claus Gittinger <cg@exept.de>
parents: 6327
diff changeset
  1510
    asciivalue == 9 ifTrue:[^ true].    "/ TAB
1a32afa7b397 ff isPrintable -> true
Claus Gittinger <cg@exept.de>
parents: 6327
diff changeset
  1511
    asciivalue == 10 ifTrue:[^ true].   "/ NL
2840
493b24293589 isPrintable
Claus Gittinger <cg@exept.de>
parents: 2672
diff changeset
  1512
493b24293589 isPrintable
Claus Gittinger <cg@exept.de>
parents: 2672
diff changeset
  1513
    (asciivalue between:16rA0 and:16rBF) ifTrue:[^ true]. "/ ISO8859
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1514
    ^ self isNationalLetter
2840
493b24293589 isPrintable
Claus Gittinger <cg@exept.de>
parents: 2672
diff changeset
  1515
493b24293589 isPrintable
Claus Gittinger <cg@exept.de>
parents: 2672
diff changeset
  1516
    "Modified: 7.8.1997 / 17:05:24 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1517
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1518
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1519
isSeparator
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1520
    "return true if I am a space, cr, tab, nl, or newPage"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1521
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1522
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1523
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1524
    REGISTER int val;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1525
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1007
diff changeset
  1526
    val = __intVal(__INST(asciivalue));
328
claus
parents: 314
diff changeset
  1527
#ifndef NON_ASCII       /* i.e. EBCDIC ;-) */
claus
parents: 314
diff changeset
  1528
    if (val <= ' ')
claus
parents: 314
diff changeset
  1529
#endif
5423
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1530
        if ((val == ' ')
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1531
         || (val == '\n') 
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1532
         || (val == '\t')
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1533
         || (val == '\r')
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1534
         || (val == '\f')) {
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1535
            RETURN ( true );
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1536
        }
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1537
    RETURN (false);
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1538
%}.                                  
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1539
    ^ (asciivalue == 16r20)
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1540
      or:[asciivalue == 16r0D
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1541
      or:[asciivalue == 16r0A
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1542
      or:[asciivalue == 16r09
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1543
      or:[asciivalue == 16r0C]]]]
e33decc83182 non-primitive fallBack code added
Claus Gittinger <cg@exept.de>
parents: 5407
diff changeset
  1544
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1545
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1546
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1547
isUppercase
7979
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1548
    "return true, if I am an upper-case letter.
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1549
     This one does care for national characters."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1550
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1551
%{  /* NOCONTEXT */
7988
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1552
#define TRUE_IF_ODD(x)      ((x & 1) ? true : false)
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1553
#define TRUE_IF_EVEN(x)     ((x & 1) ? false : true)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1554
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1555
    REGISTER int val;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1556
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1007
diff changeset
  1557
    val = __intVal(__INST(asciivalue));
7979
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1558
7988
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1559
    switch (val >> 8) {
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1560
        case 0x00:
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1561
            if ((unsigned)(val - 'A') <= ('Z' - 'A')) {
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1562
                RETURN ( true );
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1563
            }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1564
            /* iso8859 puts national upper case characters at c0 .. df */
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1565
            if ((val >= 0xC0) && (val <= 0xDF)) {
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1566
                if (val != 0xD7) {
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1567
                    RETURN(true);
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1568
                }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1569
            }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1570
            RETURN (false);
7979
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1571
7988
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1572
        case 0x01:
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1573
            if (val <= 0x0137) { RETURN (TRUE_IF_EVEN(val)); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1574
            if (val <= 0x0148) { RETURN (TRUE_IF_ODD(val)); } 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1575
            if (val <= 0x0178) { RETURN (TRUE_IF_EVEN(val)); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1576
            if (val <= 0x017E) { RETURN (TRUE_IF_ODD(val)); } 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1577
            if (val < 0x01CD) { 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1578
                if (val == 0x01C4) { RETURN (true); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1579
                if (val == 0x01C5) { RETURN (true); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1580
                if (val == 0x01C7) { RETURN (true); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1581
                if (val == 0x01C8) { RETURN (true); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1582
                if (val == 0x01CA) { RETURN (true); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1583
                if (val == 0x01CB) { RETURN (true); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1584
                RETURN (false);         /* WRONG !!! */ 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1585
            }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1586
            if (val <= 0x01DC) { RETURN (TRUE_IF_ODD(val)); } 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1587
            if (val <= 0x01EF) { RETURN (TRUE_IF_EVEN(val)); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1588
            if (val == 0x01F0) { RETURN (false); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1589
            if (val == 0x01F1) { RETURN (true); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1590
            if (val == 0x01F2) { RETURN (false); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1591
            if (val == 0x01F3) { RETURN (false); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1592
            if (val < 0x01F4) { RETURN (false); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1593
            if (val <= 0x01F7) { RETURN (TRUE_IF_ODD(val)); } 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1594
            RETURN (TRUE_IF_EVEN(val));
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1595
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1596
        case 0x02:
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1597
            if (val <= 0x0233) { RETURN (TRUE_IF_EVEN(val)); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1598
            RETURN (false); 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1599
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1600
        case 0x03:
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1601
            if (val < 0x0386) { RETURN (false); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1602
            if (val == 0x0387) { RETURN (false); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1603
            if (val <= 0x03AB) { RETURN (true); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1604
            if (val <= 0x03D1) { RETURN (false); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1605
            if (val <= 0x03D4) { RETURN (true); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1606
            if (val <= 0x03D7) { RETURN (false); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1607
            if (val <= 0x03EF) { RETURN (TRUE_IF_EVEN(val)); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1608
            RETURN (false); 
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1609
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1610
        case 0x04:
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1611
            if (val <= 0x042F) { RETURN (true); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1612
            if (val <= 0x045F) { RETURN (false); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1613
            if (val <= 0x0481) { RETURN (TRUE_IF_EVEN(val)); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1614
            if (val < 0x048A) { RETURN (false); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1615
            if (val == 0x04C0) { RETURN (false); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1616
            RETURN (TRUE_IF_EVEN(val));
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1617
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1618
        case 0x05:
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1619
            if (val <= 0x050F) { RETURN (TRUE_IF_EVEN(val)); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1620
            if (val < 0x0531) { RETURN (false); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1621
            if (val < 0x0556) { RETURN (true); }
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1622
            RETURN (false);
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1623
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1624
        case 0x06:
7979
7515722ccfb1 isUppercase / isLowercase fix for division character.
Claus Gittinger <cg@exept.de>
parents: 7976
diff changeset
  1625
    }
7988
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1626
    RETURN (false);
7985
4a28f0e3832d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 7980
diff changeset
  1627
7988
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1628
#undef TRUE_IF_ODD(x)     
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1629
#undef TRUE_IF_EVEN(x)    
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1630
%}
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1631
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1632
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1633
isVowel
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1634
    "return true, if I am a vowel (lower- or uppercase)"
333
claus
parents: 328
diff changeset
  1635
6066
ca508f7658dc comment
Claus Gittinger <cg@exept.de>
parents: 6029
diff changeset
  1636
    "/ I know the code is ugly;
ca508f7658dc comment
Claus Gittinger <cg@exept.de>
parents: 6029
diff changeset
  1637
    "/ better code is:
ca508f7658dc comment
Claus Gittinger <cg@exept.de>
parents: 6029
diff changeset
  1638
    "/     'aeiou' includes:self asLowercase
ca508f7658dc comment
Claus Gittinger <cg@exept.de>
parents: 6029
diff changeset
  1639
    "/ or:
ca508f7658dc comment
Claus Gittinger <cg@exept.de>
parents: 6029
diff changeset
  1640
    "/     'aeiouAEIOU' includes:self
ca508f7658dc comment
Claus Gittinger <cg@exept.de>
parents: 6029
diff changeset
  1641
    "/
ca508f7658dc comment
Claus Gittinger <cg@exept.de>
parents: 6029
diff changeset
  1642
    "/ until I have a smart compiler, I use the shorter (codewise):
ca508f7658dc comment
Claus Gittinger <cg@exept.de>
parents: 6029
diff changeset
  1643
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1644
    (self == $a) ifTrue:[^ true].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1645
    (self == $e) ifTrue:[^ true].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1646
    (self == $i) ifTrue:[^ true].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1647
    (self == $o) ifTrue:[^ true].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1648
    (self == $u) ifTrue:[^ true].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1649
    (self == $A) ifTrue:[^ true].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1650
    (self == $E) ifTrue:[^ true].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1651
    (self == $I) ifTrue:[^ true].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1652
    (self == $O) ifTrue:[^ true].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1653
    (self == $U) ifTrue:[^ true].
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1654
    ^ false
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1655
! !
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1656
4655
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1657
!Character methodsFor:'tracing'!
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1658
4682
4158042a9c8c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4655
diff changeset
  1659
traceInto:aRequestor level:level from:referrer
4655
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1660
    "double dispatch into tracer, passing my type implicitely in the selector"
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1661
4682
4158042a9c8c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4655
diff changeset
  1662
    ^ aRequestor traceCharacter:self level:level from:referrer
4655
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1663
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1664
! !
b9405ca0bb4e added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4340
diff changeset
  1665
2124
6238280f6120 new infoMessage scheme
Claus Gittinger <cg@exept.de>
parents: 1491
diff changeset
  1666
!Character class methodsFor:'documentation'!
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1667
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1668
version
7988
cb1c920e67eb isUppercase / isLowercase unicode changes
Claus Gittinger <cg@exept.de>
parents: 7987
diff changeset
  1669
    ^ '$Header: /cvs/stx/stx/libbasic/Character.st,v 1.99 2004-02-23 13:27:27 cg Exp $'
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
  1670
! !