Character.st
author claus
Sat, 11 Dec 1993 01:46:55 +0100
changeset 12 8e03bd717355
parent 10 4f1f9a91e406
child 37 d9a302eaa3ef
permissions -rw-r--r--
*** empty log message ***
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
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
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
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
Magnitude subclass:#Character
a27a279701f8 Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'asciivalue'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    15
       classVariableNames:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    16
       poolDictionaries:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    17
       category:'Magnitude-General'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
Character comment:'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    21
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
    22
COPYRIGHT (c) 1988 by Claus Gittinger
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    23
              All Rights Reserved
a27a279701f8 Initial revision
claus
parents:
diff changeset
    24
a27a279701f8 Initial revision
claus
parents:
diff changeset
    25
Characters are unique; this means that for every asciiValue (0..255) there
a27a279701f8 Initial revision
claus
parents:
diff changeset
    26
is exactly one instance of Character, which is shared.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    27
a27a279701f8 Initial revision
claus
parents:
diff changeset
    28
Methods marked as (JS) come from the manchester Character goody
a27a279701f8 Initial revision
claus
parents:
diff changeset
    29
(CharacterComparing) by Jan Steinman, which allow Characters to be used as
2
claus
parents: 1
diff changeset
    30
Interval elements (i.e. ($a to:$z) do:[...] ); some of these have been
claus
parents: 1
diff changeset
    31
modified a bit.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    32
a27a279701f8 Initial revision
claus
parents:
diff changeset
    33
WARNING: characters are known by compiler and runtime system -
a27a279701f8 Initial revision
claus
parents:
diff changeset
    34
do not change the instance layout. (also, its not easy to define
a27a279701f8 Initial revision
claus
parents:
diff changeset
    35
subclasses of Character since the Compiler always creates Character
a27a279701f8 Initial revision
claus
parents:
diff changeset
    36
instances for $x and, since equality check on the Character class is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    37
wired into the system in many places.)
a27a279701f8 Initial revision
claus
parents:
diff changeset
    38
12
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
    39
$Header: /cvs/stx/stx/libbasic/Character.st,v 1.6 1993-12-11 00:44:49 claus Exp $
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    40
a27a279701f8 Initial revision
claus
parents:
diff changeset
    41
'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    42
a27a279701f8 Initial revision
claus
parents:
diff changeset
    43
!Character class methodsFor:'instance creation'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    44
a27a279701f8 Initial revision
claus
parents:
diff changeset
    45
basicNew
a27a279701f8 Initial revision
claus
parents:
diff changeset
    46
    "catch new - Characters cannot be created with new"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    47
a27a279701f8 Initial revision
claus
parents:
diff changeset
    48
    ^ self error:'Characters cannot be created with new'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    49
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    50
a27a279701f8 Initial revision
claus
parents:
diff changeset
    51
value:anInteger
a27a279701f8 Initial revision
claus
parents:
diff changeset
    52
    "return a character with asciivalue anInteger"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    53
a27a279701f8 Initial revision
claus
parents:
diff changeset
    54
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
    55
a27a279701f8 Initial revision
claus
parents:
diff changeset
    56
    int ascii;
a27a279701f8 Initial revision
claus
parents:
diff changeset
    57
a27a279701f8 Initial revision
claus
parents:
diff changeset
    58
    if (_isSmallInteger(anInteger)) {
a27a279701f8 Initial revision
claus
parents:
diff changeset
    59
        ascii = _intVal(anInteger);
a27a279701f8 Initial revision
claus
parents:
diff changeset
    60
        if ((ascii >= 0) && (ascii <= 255))
a27a279701f8 Initial revision
claus
parents:
diff changeset
    61
            RETURN ( _MKCHARACTER(_intVal(anInteger)) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
    62
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
    63
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
    64
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    65
    (anInteger between:0 and:16rFF) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
    66
        ^ CharacterTable at:(anInteger + 1)
a27a279701f8 Initial revision
claus
parents:
diff changeset
    67
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
    68
    (anInteger between:16r100 and:16rFFFF) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
    69
        ^ super basicNew setAsciiValue:anInteger
a27a279701f8 Initial revision
claus
parents:
diff changeset
    70
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
    71
    self error:'invalid ascii code for character'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    72
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    73
a27a279701f8 Initial revision
claus
parents:
diff changeset
    74
digitValue:anInteger
a27a279701f8 Initial revision
claus
parents:
diff changeset
    75
    "return a character that corresponds to anInteger.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    76
     0-9 map to $0-$9, 10-35 map to $A-$Z"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    77
a27a279701f8 Initial revision
claus
parents:
diff changeset
    78
    (anInteger between:0 and:9) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
    79
        ^ Character value:(anInteger + ($0 asciiValue))
a27a279701f8 Initial revision
claus
parents:
diff changeset
    80
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
    81
    (anInteger between:10 and:35) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
    82
        ^ Character value:(anInteger - 10 + ($A asciiValue))
a27a279701f8 Initial revision
claus
parents:
diff changeset
    83
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
    84
    ^self error:'value not in range 0 to 35'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    85
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    86
a27a279701f8 Initial revision
claus
parents:
diff changeset
    87
!Character class methodsFor:'primitive input'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    88
a27a279701f8 Initial revision
claus
parents:
diff changeset
    89
fromUser
a27a279701f8 Initial revision
claus
parents:
diff changeset
    90
    "return a character from the keyboard
a27a279701f8 Initial revision
claus
parents:
diff changeset
    91
     - this should only be used for emergency evaluators and the like."
a27a279701f8 Initial revision
claus
parents:
diff changeset
    92
a27a279701f8 Initial revision
claus
parents:
diff changeset
    93
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
    94
    int c;
a27a279701f8 Initial revision
claus
parents:
diff changeset
    95
a27a279701f8 Initial revision
claus
parents:
diff changeset
    96
    c = getchar();
a27a279701f8 Initial revision
claus
parents:
diff changeset
    97
    if (c < 0) {
a27a279701f8 Initial revision
claus
parents:
diff changeset
    98
        RETURN (nil);
a27a279701f8 Initial revision
claus
parents:
diff changeset
    99
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   100
    RETURN ( _MKCHARACTER(c & 0xFF) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   101
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   102
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   103
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   104
!Character class methodsFor:'queries'!
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   105
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   106
isBuiltInClass
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   107
    "this class is known by the run-time-system"
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   108
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   109
    ^ self == Character
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   110
! !
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   111
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   112
!Character class methodsFor:'constants'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   113
a27a279701f8 Initial revision
claus
parents:
diff changeset
   114
bell
a27a279701f8 Initial revision
claus
parents:
diff changeset
   115
    "return the bell character"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   116
a27a279701f8 Initial revision
claus
parents:
diff changeset
   117
    ^ Character value:7
a27a279701f8 Initial revision
claus
parents:
diff changeset
   118
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   119
a27a279701f8 Initial revision
claus
parents:
diff changeset
   120
backspace
a27a279701f8 Initial revision
claus
parents:
diff changeset
   121
    "return the backspace character"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   122
a27a279701f8 Initial revision
claus
parents:
diff changeset
   123
    ^ Character value:8
a27a279701f8 Initial revision
claus
parents:
diff changeset
   124
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   125
a27a279701f8 Initial revision
claus
parents:
diff changeset
   126
nl
a27a279701f8 Initial revision
claus
parents:
diff changeset
   127
    "return the newline character"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   128
a27a279701f8 Initial revision
claus
parents:
diff changeset
   129
    ^ Character value:10
a27a279701f8 Initial revision
claus
parents:
diff changeset
   130
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   131
a27a279701f8 Initial revision
claus
parents:
diff changeset
   132
lf
a27a279701f8 Initial revision
claus
parents:
diff changeset
   133
    "return the newline/linefeed character"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   134
a27a279701f8 Initial revision
claus
parents:
diff changeset
   135
    ^ Character value:10
a27a279701f8 Initial revision
claus
parents:
diff changeset
   136
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   137
a27a279701f8 Initial revision
claus
parents:
diff changeset
   138
cr
a27a279701f8 Initial revision
claus
parents:
diff changeset
   139
    "return the carriage-return character 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   140
     - actually (in unix) this is also a newline"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   141
a27a279701f8 Initial revision
claus
parents:
diff changeset
   142
    ^ Character value:10
a27a279701f8 Initial revision
claus
parents:
diff changeset
   143
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   144
a27a279701f8 Initial revision
claus
parents:
diff changeset
   145
tab
a27a279701f8 Initial revision
claus
parents:
diff changeset
   146
    "return the tabulator character"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   147
a27a279701f8 Initial revision
claus
parents:
diff changeset
   148
    ^ Character value:9
a27a279701f8 Initial revision
claus
parents:
diff changeset
   149
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   150
a27a279701f8 Initial revision
claus
parents:
diff changeset
   151
newPage
a27a279701f8 Initial revision
claus
parents:
diff changeset
   152
    "return the form-feed character"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   153
a27a279701f8 Initial revision
claus
parents:
diff changeset
   154
    ^ Character value:12
a27a279701f8 Initial revision
claus
parents:
diff changeset
   155
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   156
a27a279701f8 Initial revision
claus
parents:
diff changeset
   157
ff
a27a279701f8 Initial revision
claus
parents:
diff changeset
   158
    "return the form-feed character"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   159
a27a279701f8 Initial revision
claus
parents:
diff changeset
   160
    ^ Character value:12
a27a279701f8 Initial revision
claus
parents:
diff changeset
   161
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   162
a27a279701f8 Initial revision
claus
parents:
diff changeset
   163
space
a27a279701f8 Initial revision
claus
parents:
diff changeset
   164
    "return the blank character"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   165
a27a279701f8 Initial revision
claus
parents:
diff changeset
   166
    ^ Character value:32
a27a279701f8 Initial revision
claus
parents:
diff changeset
   167
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   168
a27a279701f8 Initial revision
claus
parents:
diff changeset
   169
esc
a27a279701f8 Initial revision
claus
parents:
diff changeset
   170
    "return the escape character"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   171
a27a279701f8 Initial revision
claus
parents:
diff changeset
   172
    ^ Character value:27
a27a279701f8 Initial revision
claus
parents:
diff changeset
   173
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   174
a27a279701f8 Initial revision
claus
parents:
diff changeset
   175
quote
a27a279701f8 Initial revision
claus
parents:
diff changeset
   176
    "return the single-quote character"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   177
a27a279701f8 Initial revision
claus
parents:
diff changeset
   178
    ^ Character value:39
a27a279701f8 Initial revision
claus
parents:
diff changeset
   179
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   180
a27a279701f8 Initial revision
claus
parents:
diff changeset
   181
doubleQuote
a27a279701f8 Initial revision
claus
parents:
diff changeset
   182
    "return the double-quote character"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   183
a27a279701f8 Initial revision
claus
parents:
diff changeset
   184
    ^ Character value:34
a27a279701f8 Initial revision
claus
parents:
diff changeset
   185
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   186
a27a279701f8 Initial revision
claus
parents:
diff changeset
   187
excla
a27a279701f8 Initial revision
claus
parents:
diff changeset
   188
    "return the exclamation-mark character"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   189
    ^ $!!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   190
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   191
a27a279701f8 Initial revision
claus
parents:
diff changeset
   192
!Character methodsFor:'copying'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   193
a27a279701f8 Initial revision
claus
parents:
diff changeset
   194
shallowCopy
a27a279701f8 Initial revision
claus
parents:
diff changeset
   195
    "return a shallow copy of myself
a27a279701f8 Initial revision
claus
parents:
diff changeset
   196
     reimplemented since characters are unique"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   197
a27a279701f8 Initial revision
claus
parents:
diff changeset
   198
     ^ self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   199
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   200
12
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   201
simpleDeepCopy
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   202
    "return a depp copy of myself
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   203
     reimplemented since characters are unique"
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   204
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   205
     ^ self
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   206
!
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   207
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   208
deepCopyUsing:aDictionary
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   209
    "return a depp copy of myself
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   210
     reimplemented since characters are unique"
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   211
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   212
     ^ self
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   213
!
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   214
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   215
deepCopy
a27a279701f8 Initial revision
claus
parents:
diff changeset
   216
    "return a depp copy of myself
a27a279701f8 Initial revision
claus
parents:
diff changeset
   217
     reimplemented since characters are unique"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   218
a27a279701f8 Initial revision
claus
parents:
diff changeset
   219
     ^ self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   220
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   221
a27a279701f8 Initial revision
claus
parents:
diff changeset
   222
!Character methodsFor:'private accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   223
a27a279701f8 Initial revision
claus
parents:
diff changeset
   224
setAsciiValue:anInteger
a27a279701f8 Initial revision
claus
parents:
diff changeset
   225
    "very private - set the ascii value - only used for
a27a279701f8 Initial revision
claus
parents:
diff changeset
   226
     characters with codes > 16rFF"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   227
a27a279701f8 Initial revision
claus
parents:
diff changeset
   228
    asciivalue := anInteger
a27a279701f8 Initial revision
claus
parents:
diff changeset
   229
! !
2
claus
parents: 1
diff changeset
   230
        
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   231
!Character methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   232
a27a279701f8 Initial revision
claus
parents:
diff changeset
   233
asciiValue
a27a279701f8 Initial revision
claus
parents:
diff changeset
   234
    "return the asciivalue of myself"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   235
a27a279701f8 Initial revision
claus
parents:
diff changeset
   236
    ^asciivalue
a27a279701f8 Initial revision
claus
parents:
diff changeset
   237
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   238
a27a279701f8 Initial revision
claus
parents:
diff changeset
   239
instVarAt:index put:anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   240
    "catch instvar access - asciivalue cannot be changed"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   241
a27a279701f8 Initial revision
claus
parents:
diff changeset
   242
    self error:'Characters may not be modified'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   243
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   244
a27a279701f8 Initial revision
claus
parents:
diff changeset
   245
!Character methodsFor:'converting'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   246
a27a279701f8 Initial revision
claus
parents:
diff changeset
   247
digitValue
a27a279701f8 Initial revision
claus
parents:
diff changeset
   248
    "return my digitValue for any base"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   249
a27a279701f8 Initial revision
claus
parents:
diff changeset
   250
    (asciivalue between:($0 asciiValue) and:($9 asciiValue)) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   251
        ^ asciivalue - $0 asciiValue
a27a279701f8 Initial revision
claus
parents:
diff changeset
   252
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   253
    (asciivalue between:($a asciiValue) and:($z asciiValue)) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   254
        ^ asciivalue - $a asciiValue + 10
a27a279701f8 Initial revision
claus
parents:
diff changeset
   255
    ]. 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   256
    (asciivalue between:($A asciiValue) and:($Z asciiValue)) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   257
        ^ asciivalue - $A asciiValue + 10
a27a279701f8 Initial revision
claus
parents:
diff changeset
   258
    ]. 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   259
    self error:'bad character'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   260
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   261
a27a279701f8 Initial revision
claus
parents:
diff changeset
   262
!Character methodsFor:'comparing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   263
a27a279701f8 Initial revision
claus
parents:
diff changeset
   264
= aCharacter
a27a279701f8 Initial revision
claus
parents:
diff changeset
   265
    "return true, if the argument, aCharacter is the same character
a27a279701f8 Initial revision
claus
parents:
diff changeset
   266
     redefined to avoid the overhead of [Object =] -> [Object ==] 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   267
     (although the compiler creates a shortcut code for this)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   268
a27a279701f8 Initial revision
claus
parents:
diff changeset
   269
    ^ (self == aCharacter)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   270
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   271
a27a279701f8 Initial revision
claus
parents:
diff changeset
   272
~= aCharacter
a27a279701f8 Initial revision
claus
parents:
diff changeset
   273
    "return true, if the argument, aCharacter is not the same character
a27a279701f8 Initial revision
claus
parents:
diff changeset
   274
     redefined to avoid the overhead of [Object ~=] -> [Object not] -> [Object =] -> [Object ==]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   275
     (although the compiler creates a shortcut code for this)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   276
a27a279701f8 Initial revision
claus
parents:
diff changeset
   277
    ^ (self ~~ aCharacter)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   278
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   279
a27a279701f8 Initial revision
claus
parents:
diff changeset
   280
> aCharacter
a27a279701f8 Initial revision
claus
parents:
diff changeset
   281
    "return true, if the arguments asciiValue is less than mine"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   282
a27a279701f8 Initial revision
claus
parents:
diff changeset
   283
    ^ (asciivalue > aCharacter asciiValue)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   284
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   285
a27a279701f8 Initial revision
claus
parents:
diff changeset
   286
< aCharacter
a27a279701f8 Initial revision
claus
parents:
diff changeset
   287
    "return true, if the arguments asciiValue is greater than mine"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   288
a27a279701f8 Initial revision
claus
parents:
diff changeset
   289
    ^ (asciivalue < aCharacter asciiValue)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   290
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   291
a27a279701f8 Initial revision
claus
parents:
diff changeset
   292
<= aCharacter
a27a279701f8 Initial revision
claus
parents:
diff changeset
   293
    "return true, if the arguments asciiValue is greater or equal to mine"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   294
a27a279701f8 Initial revision
claus
parents:
diff changeset
   295
    ^ (asciivalue <= aCharacter asciiValue)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   296
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   297
a27a279701f8 Initial revision
claus
parents:
diff changeset
   298
>= aCharacter
a27a279701f8 Initial revision
claus
parents:
diff changeset
   299
    "return true, if the arguments asciiValue is less or equal to mine"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   300
a27a279701f8 Initial revision
claus
parents:
diff changeset
   301
    ^ (asciivalue >= aCharacter asciiValue)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   302
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   303
a27a279701f8 Initial revision
claus
parents:
diff changeset
   304
identityHash
a27a279701f8 Initial revision
claus
parents:
diff changeset
   305
    "return an integer useful for hashing on identity"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   306
a27a279701f8 Initial revision
claus
parents:
diff changeset
   307
    ^ 4096 + asciivalue
a27a279701f8 Initial revision
claus
parents:
diff changeset
   308
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   309
a27a279701f8 Initial revision
claus
parents:
diff changeset
   310
!Character methodsFor: 'arithmetic'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   311
a27a279701f8 Initial revision
claus
parents:
diff changeset
   312
+ aMagnitude
a27a279701f8 Initial revision
claus
parents:
diff changeset
   313
    "Return the Character that is <aMagnitude> higher than the receiver. 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   314
     Wrap if the resulting value is not a legal Character value. (JS)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   315
2
claus
parents: 1
diff changeset
   316
    ^ Character value:(asciivalue + aMagnitude asInteger \\ 256)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   317
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   318
a27a279701f8 Initial revision
claus
parents:
diff changeset
   319
- aMagnitude
a27a279701f8 Initial revision
claus
parents:
diff changeset
   320
    "Return the Character that is <aMagnitude> lower than the receiver.  
a27a279701f8 Initial revision
claus
parents:
diff changeset
   321
     Wrap if the resulting value is not a legal Character value. (JS)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   322
2
claus
parents: 1
diff changeset
   323
    ^ Character value:(asciivalue - aMagnitude asInteger \\ 256)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   324
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   325
a27a279701f8 Initial revision
claus
parents:
diff changeset
   326
// aMagnitude
a27a279701f8 Initial revision
claus
parents:
diff changeset
   327
    "Return the Character who's value is the receiver divided by <aMagnitude>. 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   328
     Wrap if the resulting value is not a legal Character value. (JS)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   329
2
claus
parents: 1
diff changeset
   330
    ^ Character value:(asciivalue // aMagnitude asInteger \\ 256)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   331
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   332
a27a279701f8 Initial revision
claus
parents:
diff changeset
   333
\\ aMagnitude
a27a279701f8 Initial revision
claus
parents:
diff changeset
   334
    "Return the Character who's value is the receiver modulo <aMagnitude>.  
a27a279701f8 Initial revision
claus
parents:
diff changeset
   335
     Wrap if the resulting value is not a legal Character value. (JS)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   336
2
claus
parents: 1
diff changeset
   337
    ^ Character value:(asciivalue \\ aMagnitude asInteger \\ 256)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   338
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   339
a27a279701f8 Initial revision
claus
parents:
diff changeset
   340
!Character methodsFor:'testing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   341
a27a279701f8 Initial revision
claus
parents:
diff changeset
   342
isDigit
a27a279701f8 Initial revision
claus
parents:
diff changeset
   343
    "return true, if I am a digit (i.e. $0 .. $9)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   344
a27a279701f8 Initial revision
claus
parents:
diff changeset
   345
    ^ asciivalue between:($0 asciiValue) and:($9 asciiValue)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   346
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   347
a27a279701f8 Initial revision
claus
parents:
diff changeset
   348
isDigitRadix:r
a27a279701f8 Initial revision
claus
parents:
diff changeset
   349
    "return true, if I am a digit of a base r number"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   350
a27a279701f8 Initial revision
claus
parents:
diff changeset
   351
    (asciivalue < $0 asciiValue) ifTrue:[^ false]. 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   352
    (r > 10) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   353
        (asciivalue between:($0 asciiValue) and:($9 asciiValue)) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   354
            ^ true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   355
        ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   356
        ((asciivalue - $a asciiValue) between:0 and:(r - 10)) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   357
            ^ true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   358
        ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   359
        ^ (asciivalue - $A asciiValue) between:0 and:(r - 10)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   360
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   361
    (asciivalue - $0 asciiValue) < r ifTrue:[^ true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   362
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   363
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   364
a27a279701f8 Initial revision
claus
parents:
diff changeset
   365
isLowercase
a27a279701f8 Initial revision
claus
parents:
diff changeset
   366
    "return true, if I am a lower-case letter"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   367
a27a279701f8 Initial revision
claus
parents:
diff changeset
   368
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   369
a27a279701f8 Initial revision
claus
parents:
diff changeset
   370
    REGISTER int val;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   371
a27a279701f8 Initial revision
claus
parents:
diff changeset
   372
    val = _intVal(_INST(asciivalue));
a27a279701f8 Initial revision
claus
parents:
diff changeset
   373
    RETURN ( ((val >= 'a') && (val <= 'z')) ? true : false );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   374
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   375
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   376
a27a279701f8 Initial revision
claus
parents:
diff changeset
   377
isUppercase
a27a279701f8 Initial revision
claus
parents:
diff changeset
   378
    "return true, if I am an upper-case letter"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   379
a27a279701f8 Initial revision
claus
parents:
diff changeset
   380
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   381
a27a279701f8 Initial revision
claus
parents:
diff changeset
   382
    REGISTER int val;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   383
a27a279701f8 Initial revision
claus
parents:
diff changeset
   384
    val = _intVal(_INST(asciivalue));
a27a279701f8 Initial revision
claus
parents:
diff changeset
   385
    RETURN ( ((val >= 'A') && (val <= 'Z')) ? true : false );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   386
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   387
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   388
a27a279701f8 Initial revision
claus
parents:
diff changeset
   389
isLetter
a27a279701f8 Initial revision
claus
parents:
diff changeset
   390
    "return true, if I am a letter"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   391
a27a279701f8 Initial revision
claus
parents:
diff changeset
   392
%{  /*NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   393
a27a279701f8 Initial revision
claus
parents:
diff changeset
   394
    REGISTER int val;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   395
a27a279701f8 Initial revision
claus
parents:
diff changeset
   396
    val = _intVal(_INST(asciivalue));
a27a279701f8 Initial revision
claus
parents:
diff changeset
   397
    RETURN ( (((val >= 'a') && (val <= 'z')) ||
a27a279701f8 Initial revision
claus
parents:
diff changeset
   398
              ((val >= 'A') && (val <= 'Z'))) ? true : false );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   399
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   400
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   401
a27a279701f8 Initial revision
claus
parents:
diff changeset
   402
isAlphaNumeric
a27a279701f8 Initial revision
claus
parents:
diff changeset
   403
    "return true, if I am a letter or a digit"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   404
a27a279701f8 Initial revision
claus
parents:
diff changeset
   405
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   406
a27a279701f8 Initial revision
claus
parents:
diff changeset
   407
    REGISTER int val;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   408
a27a279701f8 Initial revision
claus
parents:
diff changeset
   409
    val = _intVal(_INST(asciivalue));
a27a279701f8 Initial revision
claus
parents:
diff changeset
   410
    if ((val >= 'a') && (val <= 'z')) {
a27a279701f8 Initial revision
claus
parents:
diff changeset
   411
        RETURN ( true );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   412
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   413
    if ((val >= 'A') && (val <= 'Z')) {
a27a279701f8 Initial revision
claus
parents:
diff changeset
   414
        RETURN ( true );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   415
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   416
    if ((val >= '0') && (val <= '9')) {
a27a279701f8 Initial revision
claus
parents:
diff changeset
   417
        RETURN ( true );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   418
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   419
    RETURN ( false );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   420
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   421
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   422
a27a279701f8 Initial revision
claus
parents:
diff changeset
   423
isVowel
a27a279701f8 Initial revision
claus
parents:
diff changeset
   424
    "return true, if I am a vowel (lower- or uppercase)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   425
a27a279701f8 Initial revision
claus
parents:
diff changeset
   426
    (self == $a) ifTrue:[^ true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   427
    (self == $e) ifTrue:[^ true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   428
    (self == $i) ifTrue:[^ true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   429
    (self == $o) ifTrue:[^ true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   430
    (self == $u) ifTrue:[^ true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   431
    (self == $A) ifTrue:[^ true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   432
    (self == $E) ifTrue:[^ true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   433
    (self == $I) ifTrue:[^ true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   434
    (self == $O) ifTrue:[^ true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   435
    (self == $U) ifTrue:[^ true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   436
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   437
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   438
a27a279701f8 Initial revision
claus
parents:
diff changeset
   439
isSeparator
a27a279701f8 Initial revision
claus
parents:
diff changeset
   440
    "return true if I am a space, cr, tab, nl, or newPage"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   441
a27a279701f8 Initial revision
claus
parents:
diff changeset
   442
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   443
a27a279701f8 Initial revision
claus
parents:
diff changeset
   444
    REGISTER int val;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   445
a27a279701f8 Initial revision
claus
parents:
diff changeset
   446
    val = _intVal(_INST(asciivalue));
a27a279701f8 Initial revision
claus
parents:
diff changeset
   447
    if (val <= ' ') {
a27a279701f8 Initial revision
claus
parents:
diff changeset
   448
        if ((val == ' ')
a27a279701f8 Initial revision
claus
parents:
diff changeset
   449
         || (val == '\n') 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   450
         || (val == '\t')
a27a279701f8 Initial revision
claus
parents:
diff changeset
   451
         || (val == '\r')
a27a279701f8 Initial revision
claus
parents:
diff changeset
   452
         || (val == '\f')) {
a27a279701f8 Initial revision
claus
parents:
diff changeset
   453
            RETURN ( true );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   454
        }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   455
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   456
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   457
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   458
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   459
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   460
a27a279701f8 Initial revision
claus
parents:
diff changeset
   461
isEndOfLineCharacter
a27a279701f8 Initial revision
claus
parents:
diff changeset
   462
    "return true if I am a line delimitting character"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   463
a27a279701f8 Initial revision
claus
parents:
diff changeset
   464
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   465
a27a279701f8 Initial revision
claus
parents:
diff changeset
   466
    REGISTER int val;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   467
a27a279701f8 Initial revision
claus
parents:
diff changeset
   468
    val = _intVal(_INST(asciivalue));
a27a279701f8 Initial revision
claus
parents:
diff changeset
   469
    if (val <= ' ') {
a27a279701f8 Initial revision
claus
parents:
diff changeset
   470
        if ((val == '\n')
a27a279701f8 Initial revision
claus
parents:
diff changeset
   471
         || (val == '\r')
a27a279701f8 Initial revision
claus
parents:
diff changeset
   472
         || (val == '\f')) {
a27a279701f8 Initial revision
claus
parents:
diff changeset
   473
            RETURN ( true );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   474
        }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   475
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   476
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   477
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   478
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   479
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   480
10
claus
parents: 5
diff changeset
   481
!Character methodsFor:'national testing'!
claus
parents: 5
diff changeset
   482
claus
parents: 5
diff changeset
   483
isNationalLetter
claus
parents: 5
diff changeset
   484
    "return true, if the receiver is a letter in the
claus
parents: 5
diff changeset
   485
     current language (Language variable)"
claus
parents: 5
diff changeset
   486
claus
parents: 5
diff changeset
   487
    "stupid - should be configurable from a table ...
claus
parents: 5
diff changeset
   488
     ... good thing is, that iso8859 puts all national
claus
parents: 5
diff changeset
   489
     characters above 16rC0"
claus
parents: 5
diff changeset
   490
claus
parents: 5
diff changeset
   491
    self isLetter ifTrue:[^ true].
claus
parents: 5
diff changeset
   492
    ^ self asciiValue between:16rC0 and:16rFF
claus
parents: 5
diff changeset
   493
!
claus
parents: 5
diff changeset
   494
claus
parents: 5
diff changeset
   495
isNationalAlphaNumeric
claus
parents: 5
diff changeset
   496
    "return true, if the receiver is a letter in the
claus
parents: 5
diff changeset
   497
     current language (Language variable)"
claus
parents: 5
diff changeset
   498
claus
parents: 5
diff changeset
   499
    "stupid - should be configurable from a table ...
claus
parents: 5
diff changeset
   500
     ... good thing is, that iso8859 puts all national
claus
parents: 5
diff changeset
   501
     characters above 16rC0"
claus
parents: 5
diff changeset
   502
claus
parents: 5
diff changeset
   503
    self isAlphaNumeric ifTrue:[^ true].
claus
parents: 5
diff changeset
   504
    ^ self asciiValue between:16rC0 and:16rFF
claus
parents: 5
diff changeset
   505
! !
claus
parents: 5
diff changeset
   506
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   507
!Character methodsFor:'converting'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   508
a27a279701f8 Initial revision
claus
parents:
diff changeset
   509
asLowercase
a27a279701f8 Initial revision
claus
parents:
diff changeset
   510
    "return a character with same letter as myself but lowercase
a27a279701f8 Initial revision
claus
parents:
diff changeset
   511
     (myself if I am lowercase)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   512
a27a279701f8 Initial revision
claus
parents:
diff changeset
   513
    self isUppercase ifFalse:[^ self].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   514
    ^ Character value:(asciivalue + 32)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   515
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   516
a27a279701f8 Initial revision
claus
parents:
diff changeset
   517
asUppercase
a27a279701f8 Initial revision
claus
parents:
diff changeset
   518
    "return a character with same letter as myself but uppercase
a27a279701f8 Initial revision
claus
parents:
diff changeset
   519
     (myself if I am lowercase)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   520
a27a279701f8 Initial revision
claus
parents:
diff changeset
   521
    self isLowercase ifFalse:[^ self].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   522
    ^ Character value:(asciivalue - 32)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   523
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   524
a27a279701f8 Initial revision
claus
parents:
diff changeset
   525
asInteger
a27a279701f8 Initial revision
claus
parents:
diff changeset
   526
    "return an Integer with my ascii-value"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   527
a27a279701f8 Initial revision
claus
parents:
diff changeset
   528
    ^ asciivalue
a27a279701f8 Initial revision
claus
parents:
diff changeset
   529
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   530
a27a279701f8 Initial revision
claus
parents:
diff changeset
   531
asSymbol
a27a279701f8 Initial revision
claus
parents:
diff changeset
   532
    "return a unique symbol which prints like I print"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   533
a27a279701f8 Initial revision
claus
parents:
diff changeset
   534
    ^ Symbol internCharacter:self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   535
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   536
a27a279701f8 Initial revision
claus
parents:
diff changeset
   537
asString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   538
    "return a string of len 1 with myself as contents"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   539
a27a279701f8 Initial revision
claus
parents:
diff changeset
   540
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   541
a27a279701f8 Initial revision
claus
parents:
diff changeset
   542
    char buffer[2];
a27a279701f8 Initial revision
claus
parents:
diff changeset
   543
a27a279701f8 Initial revision
claus
parents:
diff changeset
   544
    buffer[0] = (char) _intVal(_characterVal(self));
a27a279701f8 Initial revision
claus
parents:
diff changeset
   545
    buffer[1] = '\0';
a27a279701f8 Initial revision
claus
parents:
diff changeset
   546
    RETURN ( _MKSTRING(buffer COMMA_SND) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   547
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   548
a27a279701f8 Initial revision
claus
parents:
diff changeset
   549
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   550
    |newString|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   551
a27a279701f8 Initial revision
claus
parents:
diff changeset
   552
    newString := String new:1.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   553
    newString at:1 put:self.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   554
    ^ newString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   555
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   556
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   557
a27a279701f8 Initial revision
claus
parents:
diff changeset
   558
to:aMagnitude
a27a279701f8 Initial revision
claus
parents:
diff changeset
   559
    "Return an Interval over the characters from the receiver to <aMagnitude>. 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   560
     Wrap <aMagnitude> if it is not a legal Character value. (JS)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   561
a27a279701f8 Initial revision
claus
parents:
diff changeset
   562
    ^ Interval from:self to:(aMagnitude \\ 256)
2
claus
parents: 1
diff changeset
   563
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   564
2
claus
parents: 1
diff changeset
   565
!Character methodsFor:'enumeration'!
claus
parents: 1
diff changeset
   566
claus
parents: 1
diff changeset
   567
to:stopCharacter do:aBlock
claus
parents: 1
diff changeset
   568
    "evaluate aBlock for each character in self .. stopCharacter.
claus
parents: 1
diff changeset
   569
     This is somewhat stupid, since it depends on the ascii encoding
claus
parents: 1
diff changeset
   570
     (370-users watch out :-)"
claus
parents: 1
diff changeset
   571
claus
parents: 1
diff changeset
   572
    |runChar|
claus
parents: 1
diff changeset
   573
claus
parents: 1
diff changeset
   574
    runChar := self.
claus
parents: 1
diff changeset
   575
    [runChar <= stopCharacter] whileTrue:[
claus
parents: 1
diff changeset
   576
        aBlock value:runChar.
claus
parents: 1
diff changeset
   577
        runChar := runChar + 1
claus
parents: 1
diff changeset
   578
    ]
claus
parents: 1
diff changeset
   579
! !
claus
parents: 1
diff changeset
   580
claus
parents: 1
diff changeset
   581
!Character methodsFor: 'binary storage'!
claus
parents: 1
diff changeset
   582
claus
parents: 1
diff changeset
   583
hasSpecialBinaryRepresentation
claus
parents: 1
diff changeset
   584
    ^ true
claus
parents: 1
diff changeset
   585
!
claus
parents: 1
diff changeset
   586
claus
parents: 1
diff changeset
   587
storeBinaryOn: stream manager: manager
claus
parents: 1
diff changeset
   588
    stream nextPut: manager codeForCharacter.
claus
parents: 1
diff changeset
   589
    stream nextPut:(self asciiValue)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   590
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   591
a27a279701f8 Initial revision
claus
parents:
diff changeset
   592
!Character methodsFor:'printing & storing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   593
12
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   594
isLiteral
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   595
    "return true, if the receiver can be used as a literal"
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   596
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   597
    ^ true
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   598
!
8e03bd717355 *** empty log message ***
claus
parents: 10
diff changeset
   599
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   600
printString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   601
    "return a string to print me"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   602
a27a279701f8 Initial revision
claus
parents:
diff changeset
   603
    ^ self asString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   604
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   605
a27a279701f8 Initial revision
claus
parents:
diff changeset
   606
printOn:aStream
a27a279701f8 Initial revision
claus
parents:
diff changeset
   607
    "print myself on aStream"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   608
a27a279701f8 Initial revision
claus
parents:
diff changeset
   609
    aStream nextPut:self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   610
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   611
a27a279701f8 Initial revision
claus
parents:
diff changeset
   612
print
a27a279701f8 Initial revision
claus
parents:
diff changeset
   613
    "print myself on stdout"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   614
a27a279701f8 Initial revision
claus
parents:
diff changeset
   615
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   616
a27a279701f8 Initial revision
claus
parents:
diff changeset
   617
    putchar(_intVal(_INST(asciivalue)));
a27a279701f8 Initial revision
claus
parents:
diff changeset
   618
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   619
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   620
a27a279701f8 Initial revision
claus
parents:
diff changeset
   621
displayString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   622
    "return a string used when the receiver is to be displayed
a27a279701f8 Initial revision
claus
parents:
diff changeset
   623
     in an inspector kind-of-thing"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   624
a27a279701f8 Initial revision
claus
parents:
diff changeset
   625
    ^ self storeString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   626
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   627
a27a279701f8 Initial revision
claus
parents:
diff changeset
   628
storeString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   629
    "return a string for storing"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   630
a27a279701f8 Initial revision
claus
parents:
diff changeset
   631
    (asciivalue between:33 and:127) ifFalse:[
2
claus
parents: 1
diff changeset
   632
        (self == Character space) ifTrue:[
claus
parents: 1
diff changeset
   633
            ^ '(Character space)'
claus
parents: 1
diff changeset
   634
        ].
claus
parents: 1
diff changeset
   635
        (self == Character cr) ifTrue:[
claus
parents: 1
diff changeset
   636
            ^ '(Character cr)'
claus
parents: 1
diff changeset
   637
        ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   638
        ^ '(Character value:' , asciivalue printString , ')'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   639
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   640
    ^ '$' , self asString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   641
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   642
a27a279701f8 Initial revision
claus
parents:
diff changeset
   643
storeOn:aStream
a27a279701f8 Initial revision
claus
parents:
diff changeset
   644
    "store myself on aStream"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   645
a27a279701f8 Initial revision
claus
parents:
diff changeset
   646
    (asciivalue between:33 and:127) ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   647
        aStream nextPutAll:'(Character value:'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   648
        aStream nextPutAll:(asciivalue printString).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   649
        aStream nextPutAll:')'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   650
    ] ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   651
        aStream nextPut:$$.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   652
        aStream nextPut:self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   653
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   654
! !