CharacterArray.st
author Stefan Vogel <sv@exept.de>
Mon, 16 Mar 2009 16:16:39 +0100
changeset 11632 b82e9f3cabd1
parent 11630 6db5956f188f
child 11754 5132248cfd6e
permissions -rw-r--r--
new: #actionForAll: #emphasisAtPoint:on: for Text compatibility
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     1
"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1994 by Claus Gittinger
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
     3
	      All Rights Reserved
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     4
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    11
"
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
    12
"{ Package: 'stx:libbasic' }"
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
    13
3926
4cc33691696a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3879
diff changeset
    14
ByteArray variableByteSubclass:#CharacterArray
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    15
	instanceVariableNames:''
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    16
	classVariableNames:'PreviousMatch DecoderTables EncoderTables DecodingFailedSignal
11348
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
    17
		EncodingFailedSignal LastString LastShiftTable'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    18
	poolDictionaries:''
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    19
	category:'Collections-Text'
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    20
!
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    21
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
    22
!CharacterArray class methodsFor:'documentation'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    23
82
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    24
copyright
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    25
"
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    26
 COPYRIGHT (c) 1994 by Claus Gittinger
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    27
	      All Rights Reserved
82
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    28
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    29
 This software is furnished under a license and may be used
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    30
 only in accordance with the terms of that license and with the
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    32
 be provided or otherwise made available to, or used by, any
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    33
 other person.  No title to or ownership of the software is
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    34
 hereby transferred.
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    35
"
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    36
!
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    37
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    38
documentation
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    39
"
255
2b2c5c0facab *** empty log message ***
claus
parents: 247
diff changeset
    40
    CharacterArray is a superclass for all kinds of Strings (i.e.
68
59faa75185ba *** empty log message ***
claus
parents: 64
diff changeset
    41
    (singleByte-)Strings, TwoByteStrings and whatever comes in the future.
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    42
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
    43
    This class is abstract, meaning that there are no instances of it.
2537
9398b135cec4 comment
Claus Gittinger <cg@exept.de>
parents: 2520
diff changeset
    44
    All this class does is provide common protocol for concrete subclasses.
1290
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    45
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    46
    [author:]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    47
	Claus Gittinger
1290
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    48
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    49
    [see also:]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    50
	String TwoByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    51
	StringCollection
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    52
"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    53
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    54
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    55
!CharacterArray class methodsFor:'initialization'!
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    56
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    57
initialize
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
    58
    DecodingFailedSignal isNil ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    59
	DecodingFailedSignal := DecodingError.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    60
	DecodingFailedSignal notifierString:'error during decode'.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    61
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    62
	EncodingFailedSignal :=EncodingError.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    63
	EncodingFailedSignal notifierString:'error during encode'.
5440
ba9207f592c9 only init once
Claus Gittinger <cg@exept.de>
parents: 5352
diff changeset
    64
    ]
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    65
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    66
    "
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    67
     CharacterArray initialize
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    68
    "
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    69
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
    70
    "Modified: 3.8.1997 / 18:15:59 / cg"
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    71
! !
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    72
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
    73
!CharacterArray class methodsFor:'instance creation'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    74
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    75
basicNew
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    76
    "return a new empty string"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    77
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    78
    ^ self basicNew:0
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    79
!
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    80
2734
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    81
fromBytes:aByteCollection
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    82
    "return an instance of the receiver class,
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    83
     taking untranslated bytes from the argument, aByteCollection.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    84
     Only useful, when reading twoByteStrings from external sources."
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    85
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    86
    |mySize nBytes newString dstIdx|
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    87
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    88
    nBytes := aByteCollection size.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    89
    mySize := self basicNew bitsPerCharacter.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    90
    mySize == 16 ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    91
	newString := self basicNew:(nBytes // 2).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    92
	dstIdx := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    93
	aByteCollection pairWiseDo:[:hi :lo |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    94
	    newString at:dstIdx put:(Character value:(hi bitShift:8)+lo).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    95
	    dstIdx := dstIdx + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    96
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    97
	^ newString.
2734
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    98
    ].
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    99
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   100
    ^ (self basicNew:nBytes) replaceFrom:1 with:aByteCollection
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   101
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   102
    "
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   103
     TwoByteString fromBytes:#[16r21 16r21]
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   104
    "
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   105
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   106
    "Modified: 30.6.1997 / 20:08:37 / cg"
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   107
!
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   108
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   109
fromString:aString
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   110
    "return a copy of the argument, aString"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   111
68
59faa75185ba *** empty log message ***
claus
parents: 64
diff changeset
   112
    ^ (self basicNew:(aString size)) replaceFrom:1 with:aString
59faa75185ba *** empty log message ***
claus
parents: 64
diff changeset
   113
59faa75185ba *** empty log message ***
claus
parents: 64
diff changeset
   114
    "TwoByteString fromString:'hello'"
581
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   115
!
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   116
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   117
fromStringCollection:aCollectionOfStrings
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   118
    "return new string formed by concatenating a copy of the argument, aString"
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   119
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   120
    ^ self fromStringCollection:aCollectionOfStrings separatedBy:''
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   121
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   122
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   123
     String fromStringCollection:#('hello' 'world' 'how' 'about' 'this')
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   124
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   125
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   126
    "Created: 20.11.1995 / 15:26:59 / cg"
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   127
!
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   128
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   129
fromStringCollection:aCollectionOfStrings separatedBy:aSeparatorString
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   130
    "return new string formed by concatenating a copy of the argument, aString"
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   131
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   132
    |newString first|
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   133
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   134
    newString := ''.
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   135
    first := true.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   136
    aCollectionOfStrings do:[:s |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   137
	first ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   138
	    newString := newString , aSeparatorString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   139
	] ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   140
	    first := false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   141
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   142
	newString := newString , s
581
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   143
    ].
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   144
    ^ newString
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   145
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   146
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   147
     String fromStringCollection:#('hello' 'world' 'how' 'about' 'this') separatedBy:' '
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   148
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   149
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   150
    "Created: 20.11.1995 / 15:32:17 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   151
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   152
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   153
fromUTF8Bytes:aByteCollection
5758
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   154
    "return a new string which represents the characters as decoded
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   155
     from the utf8 encoded bytes, aByteCollection.
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   156
     Returns either a normal String, or a TwoByteString instance.
6810
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   157
     Only useful, when reading twoByteStrings from external sources.
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   158
     This only handles up-to 16bit characters"
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   159
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   160
    ^ self decodeFromUTF8:aByteCollection.
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   161
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   162
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   163
     CharacterArray fromUTF8Bytes:#[ 16r41 16r42 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   164
     CharacterArray fromUTF8Bytes:#[ 16rC1 16r02 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   165
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r81 16r02 ]
6810
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   166
     CharacterArray fromUTF8Bytes:#[ 16rEF 16rBF 16rBF ]
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   167
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   168
   rfc2279 examples:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   169
     CharacterArray fromUTF8Bytes:#[ 16r41 16rE2 16r89 16rA2 16rCE 16r91 16r2E ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   170
     CharacterArray fromUTF8Bytes:#[ 16rED 16r95 16r9C 16rEA 16rB5 16rAD 16rEC 16r96 16rB4 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   171
     CharacterArray fromUTF8Bytes:#[ 16rE6 16r97 16rA5 16rE6 16r9C 16rAC 16rE8 16rAA 16r9E ]
6810
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   172
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   173
   invalid:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   174
     CharacterArray fromUTF8Bytes:#[ 16rC0 16r80 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   175
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r80 16r80 ]
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   176
    "
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   177
!
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   178
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   179
new
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   180
    "return a new empty string"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   181
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   182
    ^ self basicNew:0
9425
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   183
!
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   184
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   185
readSmalltalkStringFrom:aStreamOrString onError:exceptionBlock
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   186
    "read & return the next String from the (character-)stream aStream;
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   187
     skipping all whitespace first; return the value of exceptionBlock,
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   188
     if no string can be read. The sequence of characters as read from the
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   189
     stream must be one as stored via storeOn: or storeString."
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   190
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   191
    |str collected char|
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   192
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   193
    str := aStreamOrString readStream.
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   194
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   195
    "skip whiteSpace"
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   196
    str skipSeparators.
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   197
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   198
    (str nextOrNil == $') ifTrue:[
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   199
        collected := self writeStream.
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   200
        [str atEnd] whileFalse:[
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   201
            char := str next.
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   202
            char == $' ifTrue:[
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   203
                "/ look for another quote
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   204
                str peekOrNil ~~ $' ifTrue:[
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   205
                    "end of string reached"
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   206
                    ^ collected contents.
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   207
                ].
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   208
                "eat doubled quote"
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   209
                str next.
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   210
            ].
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   211
            ((char ~~ Character return) or:[str peekOrNil ~~ Character lf]) ifTrue:[
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   212
                "compress CRLF to LF, but keep a single CR"
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   213
                collected nextPut:char.
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   214
            ].
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   215
        ].
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   216
        "if we come here, we reached the end without finding a closing $'"
9425
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   217
    ].
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   218
    ^ exceptionBlock value
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   219
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   220
    "
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   221
     String readFrom:('''hello world''' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   222
     String readFrom:('''hello '''' world''' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   223
     String readFrom:('1 ''hello'' ' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   224
     String readFrom:('1 ''hello'' ' readStream) onError:['foobar']
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   225
    "
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   226
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   227
    "Created: / 05-07-2006 / 16:41:04 / cg"
10045
bbd328940fb4 care for cr-lf when reading a smalltalk string
Claus Gittinger <cg@exept.de>
parents: 9845
diff changeset
   228
    "Modified: / 06-10-2006 / 14:05:32 / cg"
11243
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   229
!
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   230
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   231
writeStream
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   232
    "create a write-stream on an instance of the receiver-class"
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   233
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   234
    ^ CharacterWriteStream on:(self new:50).
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   235
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   236
    "
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   237
     String writeStream
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   238
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   239
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   240
9265
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   241
!CharacterArray class methodsFor:'Compatibility-VW'!
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   242
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   243
fromIntegerArray: anArray
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   244
    "Answer a new instance of the receiver that is created from the argument, anArray."
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   245
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   246
    | new |
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   247
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   248
    new := self new: anArray size.
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   249
    1 to: anArray size do:[:index |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   250
	new at: index put: (anArray at: index) asCharacter
9265
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   251
    ].
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   252
    ^new
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   253
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   254
    "
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   255
     String fromIntegerArray: #[8 127]
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   256
    "
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   257
! !
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   258
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   259
!CharacterArray class methodsFor:'Signal constants'!
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   260
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   261
decodingFailedSignal
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   262
    "return the signal, raised when decoding of a string is not possible
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   263
     due to invalid characters contained in the source.
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   264
     This may happen for example, if a non EUC coded 8-bit string
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   265
     is attempted to be decoded into a JIS string."
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   266
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   267
    ^ DecodingFailedSignal
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   268
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   269
    "Created: 28.6.1997 / 20:09:55 / cg"
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   270
    "Modified: 3.8.1997 / 18:16:47 / cg"
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   271
!
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   272
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   273
encodingFailedSignal
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   274
    "return the (query-) signal, raised when encoding of a string is not possible
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   275
     due to invalid characters contained in the source."
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   276
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   277
    ^ EncodingFailedSignal
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   278
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   279
    "Modified: 28.6.1997 / 20:09:35 / cg"
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   280
    "Created: 3.8.1997 / 18:16:40 / cg"
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   281
! !
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   282
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   283
!CharacterArray class methodsFor:'cleanup'!
991
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   284
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   285
lowSpaceCleanup
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   286
    "cleanup in low-memory situations"
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   287
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   288
    DecoderTables := EncoderTables := nil
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   289
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   290
    "
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   291
     CharacterArray lowSpaceCleanup
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   292
    "
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   293
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   294
    "Created: 22.2.1996 / 16:30:30 / cg"
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   295
    "Modified: 22.2.1996 / 17:58:05 / cg"
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   296
! !
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   297
7421
4e6c6edb90d9 category rename
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
   298
!CharacterArray class methodsFor:'encoding & decoding'!
1202
200f7cd0a457 moved encode/decode stuff into class methods / added big5/gb support
Claus Gittinger <cg@exept.de>
parents: 1145
diff changeset
   299
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   300
decodeFromUTF8:aStringOrByteCollection
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   301
    "return a string which represents the characters as decoded
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   302
     from the utf8 encoded bytes, aByteCollection.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   303
     Returns either a normal String, or a TwoByteString instance.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   304
     Only useful, when reading twoByteStrings from external sources.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   305
     This only handles up-to 16bit characters."
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   306
8124
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
   307
    ^ CharacterEncoderImplementations::ISO10646_to_UTF8 decodeString:aStringOrByteCollection
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   308
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   309
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   310
     CharacterArray fromUTF8Bytes:#[ 16r41 16r42 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   311
     CharacterArray fromUTF8Bytes:#[ 16rC1 16r02 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   312
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r81 16r02 ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   313
     CharacterArray fromUTF8Bytes:#[ 16rEF 16rBF 16rBF ]
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   314
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   315
   rfc2279 examples:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   316
     CharacterArray fromUTF8Bytes:#[ 16r41 16rE2 16r89 16rA2 16rCE 16r91 16r2E ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   317
     CharacterArray fromUTF8Bytes:#[ 16rED 16r95 16r9C 16rEA 16rB5 16rAD 16rEC 16r96 16rB4 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   318
     CharacterArray fromUTF8Bytes:#[ 16rE6 16r97 16rA5 16rE6 16r9C 16rAC 16rE8 16rAA 16r9E ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   319
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   320
   invalid:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   321
     CharacterArray fromUTF8Bytes:#[ 16rC0 16r80 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   322
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r80 16r80 ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   323
    "
443
Claus Gittinger <cg@exept.de>
parents: 428
diff changeset
   324
! !
Claus Gittinger <cg@exept.de>
parents: 428
diff changeset
   325
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   326
!CharacterArray class methodsFor:'pattern matching'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   327
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   328
matchEscapeCharacter
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   329
    "return the character used to escape a matchCharacter
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   330
     (i.e. make it a regular character in a matchPattern)"
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   331
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   332
    ^ $\
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   333
!
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   334
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   335
matchScan:matchScanArray from:matchStart to:matchStop with:aString from:start to:stop ignoreCase:ignoreCase
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   336
    "helper for match; return true if the characters from start to stop in
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   337
     aString are matching the scan in matchScan from matchStart to matchStop.
328
claus
parents: 327
diff changeset
   338
     The matchScan is as created by asMatchScanArray.
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   339
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   340
     This algorithm is not at all the most efficient;
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   341
     for heavy duty pattern matching, an interface (primitive) to the regex
328
claus
parents: 327
diff changeset
   342
     pattern matching package should be added."
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   343
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   344
    |matchEntry
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   345
     mStart "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   346
     mStop  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   347
     sStart "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   348
     sStop  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   349
     mSize  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   350
     sSize  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   351
     index  "{ Class: SmallInteger }"
2561
205ee33decf9 removed unused var
Claus Gittinger <cg@exept.de>
parents: 2554
diff changeset
   352
     quickCheck matchLast nextMatchEntry
986
c3a9f590146d removed unused locals
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
   353
     checkChar included|
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   354
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   355
    mStart := matchStart.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   356
    mStop := matchStop.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   357
    sStart := start.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   358
    sStop := stop.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   359
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   360
    [true] whileTrue:[
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   361
"/ Transcript showCR:('match: ''' , (aString copyFrom:sStart to:sStop) ,
3537
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
   362
"/                    ''' against:' , (matchScanArray copyFrom:mStart to:mStop) printString).
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
   363
11018
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   364
        mSize := mStop - mStart + 1.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   365
        sSize := sStop - sStart + 1.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   366
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   367
        "empty strings match"
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   368
        (mSize == 0) ifTrue:[^ (sSize == 0)].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   369
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   370
        matchEntry := matchScanArray at:mStart.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   371
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   372
        "/ the most common case first:
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   373
        (sSize ~~ 0
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   374
        and:[(checkChar := (aString at:sStart)) = matchEntry]) ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   375
            "advance by one and continue"
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   376
            mStart := mStart + 1.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   377
            sStart := sStart + 1
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   378
        ] ifFalse:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   379
            (matchEntry == #any) ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   380
                "restString empty -> no match"
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   381
                (sSize == 0) ifTrue:[^ false].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   382
                "# matches single character"
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   383
                ((sSize == 1) and:[mSize == 1]) ifTrue:[^ true].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   384
                "advance by one and continue"
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   385
                mStart := mStart + 1.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   386
                sStart := sStart + 1
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   387
            ] ifFalse:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   388
                (matchEntry == #anyString) ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   389
                    "* alone matches anything"
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   390
                    (mSize == 1) ifTrue:[^ true].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   391
                    "restString empty & matchString not empty -> no match"
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   392
                    (sSize == 0) ifTrue:[^ false].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   393
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   394
                    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   395
                     try to avoid some of the recursion by checking last
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   396
                     character and continue with shortened strings if possible
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   397
                    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   398
                    quickCheck := false.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   399
                    (mStop >= mStart) ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   400
                        matchLast := matchScanArray at:mStop.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   401
                        (matchLast ~~ #anyString) ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   402
                            (matchLast == #any) ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   403
                                quickCheck := true
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   404
                            ] ifFalse:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   405
                                matchLast == (aString at:sStop) ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   406
                                    quickCheck := true
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   407
                                ] ifFalse:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   408
                                    matchLast isString ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   409
                                        quickCheck := matchLast includes:(aString at:sStop)
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   410
                                    ]
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   411
                                ]
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   412
                            ]
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   413
                        ]
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   414
                    ].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   415
                    quickCheck ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   416
                        "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   417
                         quickCheck ok, advance from the right
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   418
                        "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   419
                        mStop := mStop - 1.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   420
                        sStop := sStop - 1
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   421
                    ] ifFalse:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   422
                        "/ no quick check;
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   423
                        "/ look for the next character(s)
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   424
                        "/ and try matching there
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   425
                        "/ (to avoid recursion)
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   426
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   427
                        mStart < mStop ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   428
                            nextMatchEntry := matchScanArray at:mStart+1.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   429
                            nextMatchEntry isCharacter ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   430
                                sStart <= sStop ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   431
                                    [true] whileTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   432
                                        ignoreCase ifFalse:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   433
                                            index := aString indexOf:nextMatchEntry startingAt:sStart
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   434
                                        ] ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   435
                                            index := aString findFirst:[:c | c asLowercase = nextMatchEntry asLowercase]
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   436
                                                           startingAt:sStart.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   437
                                        ].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   438
                                        (index == 0 or:[index > sStop]) ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   439
                                            ^ false
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   440
                                        ].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   441
                                        (self matchScan:matchScanArray
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   442
                                              from:(mStart + 1)
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   443
                                              to:mStop
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   444
                                              with:aString
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   445
                                              from:index
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   446
                                              to:sStop
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   447
                                              ignoreCase:ignoreCase
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   448
                                        ) ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   449
                                            ^ true
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   450
                                        ].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   451
                                        sStart := index + 1.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   452
                                    ]
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   453
                                ]
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   454
                            ]
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   455
                        ].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   456
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   457
                        "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   458
                         no quick check possible;
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   459
                         loop over all possible substrings
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   460
                        "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   461
                        index := sStart.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   462
                        [index <= sStop] whileTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   463
                            (self matchScan:matchScanArray
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   464
                                  from:(mStart + 1)
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   465
                                  to:mStop
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   466
                                  with:aString
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   467
                                  from:index
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   468
                                  to:sStop
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   469
                                  ignoreCase:ignoreCase
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   470
                            ) ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   471
                                ^ true
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   472
                            ].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   473
                            index := index + 1
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   474
                        ].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   475
                        ^ false
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   476
                    ].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   477
                ] ifFalse:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   478
                    (matchEntry isString) ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   479
                        "testString empty -> no match"
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   480
                        (sSize == 0) ifTrue:[^ false].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   481
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   482
                        included := false.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   483
                        "/ checkChar := aString at:sStart.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   484
                        included := matchEntry includes:checkChar.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   485
                        included ifFalse:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   486
                            ignoreCase ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   487
                                checkChar isUppercase ifTrue:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   488
                                    included := matchEntry includes:checkChar asLowercase.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   489
                                ] ifFalse:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   490
                                    included := matchEntry includes:checkChar asUppercase.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   491
                                ]
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   492
                            ].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   493
                        ].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   494
                        mStart := mStart + 1.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   495
                        mSize := mSize - 1.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   496
                        included ifFalse:[^ false].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   497
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   498
                        ((sSize == 1) and:[mSize == 0]) ifTrue:[^ true].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   499
                        "cut off 1st char and continue"
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   500
                        sStart := sStart + 1
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   501
                    ] ifFalse:[
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   502
                        "/ must be single character
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   503
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   504
                        "testString empty ?"
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   505
                        (sSize == 0) ifTrue:[^ false].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   506
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   507
                        "first characters equal ?"
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   508
                        "/ checkChar := aString at:sStart.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   509
                        ignoreCase ifFalse:[^ false].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   510
                        (checkChar asUppercase ~= matchEntry asUppercase) ifTrue:[^ false].
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   511
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   512
                        "advance and continue"
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   513
                        mStart := mStart + 1.
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   514
                        sStart := sStart + 1
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   515
                    ]
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   516
                ]
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   517
            ]
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   518
        ]
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   519
    ].
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   520
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   521
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   522
     |scanArray s|
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   523
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   524
     scanArray := self matchScanArrayFrom:'*hello'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   525
     s := 'foo bar hello world'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   526
     CharacterArray
11018
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   527
         matchScan:scanArray
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   528
         from:1
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   529
         to:scanArray size
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   530
         with:s
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   531
         from:1
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   532
         to:s size
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   533
         ignoreCase:false
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   534
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   535
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   536
     |scanArray s|
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   537
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   538
     scanArray := self matchScanArrayFrom:'*hello*'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   539
     s := 'foo bar hello world'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   540
     CharacterArray
11018
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   541
         matchScan:scanArray
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   542
         from:1
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   543
         to:scanArray size
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   544
         with:s
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   545
         from:1
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   546
         to:s size
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
   547
         ignoreCase:false
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   548
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   549
3879
d586b598394b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3668
diff changeset
   550
    "Modified: / 15.10.1998 / 13:39:25 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   551
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   552
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   553
matchScanArrayFrom:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   554
    "scan a pattern string and decompose it into a scanArray.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   555
     This is processed faster (especially with character ranges), and
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   556
     can also be reused later. (if the same pattern is to be searched again)"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   557
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   558
    ^ self matchScanArrayFrom:aString escapeCharacter:(self matchEscapeCharacter)
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   559
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   560
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   561
     String matchScanArrayFrom:'*ute*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   562
     String matchScanArrayFrom:'**ute**'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   563
     String matchScanArrayFrom:'*uter'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   564
     String matchScanArrayFrom:'\*uter'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   565
     String matchScanArrayFrom:'[cC]#mpute[rR]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   566
     String matchScanArrayFrom:'[abcd]*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   567
     String matchScanArrayFrom:'[a-k]*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   568
     String matchScanArrayFrom:'*some*compl*ern*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   569
     String matchScanArrayFrom:'[a-'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   570
     String matchScanArrayFrom:'[a-zA-Z]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   571
     String matchScanArrayFrom:'[a-z01234A-Z]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   572
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   573
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   574
    "Modified: 2.4.1997 / 16:20:29 / cg"
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   575
!
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   576
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   577
matchScanArrayFrom:aString escapeCharacter:escape
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   578
    "scan a pattern string and decompose it into a scanArray.
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   579
     This is processed faster (especially with character ranges), and
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   580
     can also be reused later. (if the same pattern is to be searched again)"
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   581
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   582
    |coll
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   583
     idx "{ Class: SmallInteger }"
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   584
     end c1 c2 matchSet previous|
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   585
5487
cb4c5ae75c63 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5469
diff changeset
   586
    previous := nil.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   587
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   588
    coll := OrderedCollection new.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   589
    idx := 1. end := aString size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   590
    [idx <= end] whileTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   591
	|char this|
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   592
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   593
	char := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   594
	char == $* ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   595
	    previous ~~ #anyString ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   596
		this := #anyString
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   597
	    ]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   598
	] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   599
	    char == $# ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   600
		previous ~~ #anyString ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   601
		    this := #any
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   602
		]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   603
	    ] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   604
		char == $[ ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   605
		    matchSet := IdentitySet new.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   606
		    idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   607
		    idx > end ifTrue:[^ nil].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   608
		    char := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   609
		    c1 := nil.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   610
		    [char ~~ $]] whileTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   611
			((char == $-) and:[c1 notNil]) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   612
			    idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   613
			    idx > end ifTrue:[^ nil].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   614
			    c2 := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   615
			    c1 to:c2 do:[:c | matchSet add:c].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   616
			    c1 := nil.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   617
			    idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   618
			] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   619
			    (char ~~ $]) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   620
				matchSet add:char.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   621
				c1 := char.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   622
				idx := idx + 1
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   623
			    ]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   624
			].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   625
			idx > end ifTrue:[^ nil].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   626
			char := aString at:idx
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   627
		    ].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   628
		    this := matchSet asString
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   629
		] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   630
		    char == escape ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   631
			idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   632
			idx > end ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   633
			    "/ mhmh - what should we do here ?
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   634
			    this := char
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   635
			] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   636
			    this := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   637
			]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   638
		    ] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   639
			this := char
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   640
		    ]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   641
		]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   642
	    ]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   643
	].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   644
	this notNil ifTrue:[coll add:this. previous := this].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   645
	idx := idx + 1
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   646
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   647
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   648
    ^ coll asArray
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   649
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   650
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   651
     String matchScanArrayFrom:'*ute*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   652
     String matchScanArrayFrom:'**ute**'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   653
     String matchScanArrayFrom:'*uter'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   654
     String matchScanArrayFrom:'\*uter'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   655
     String matchScanArrayFrom:'[cC]#mpute[rR]'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   656
     String matchScanArrayFrom:'[abcd]*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   657
     String matchScanArrayFrom:'[a-k]*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   658
     String matchScanArrayFrom:'*some*compl*ern*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   659
     String matchScanArrayFrom:'[a-'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   660
     String matchScanArrayFrom:'[a-zA-Z]'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   661
     String matchScanArrayFrom:'[a-z01234A-Z]'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   662
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   663
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   664
    "Modified: 2.4.1997 / 16:20:29 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   665
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   666
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   667
!CharacterArray class methodsFor:'queries'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   668
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   669
isAbstract
11229
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   670
    "Return if this class is an abstract class.
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   671
     True is returned for CharacterArray here; false for subclasses.
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   672
     Abstract subclasses must redefine again."
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   673
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   674
    ^ self == CharacterArray
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   675
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   676
11525
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   677
!CharacterArray methodsFor:'AEG-Extensions'!
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   678
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   679
asCollectionOfSubstringsSeparatedBy:aCharacter exceptIn:ch
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   680
    "return a collection containing the lines (separated by aCharacter) 
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   681
     of the receiver. If aCharacter occurs multiple times in a row, 
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   682
     the result will contain empty strings."
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   683
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   684
    |lines myClass except i c
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   685
     startIndex    "{ Class:SmallInteger }"
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   686
     stopIndex     "{ Class:SmallInteger }" |
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   687
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   688
    lines := OrderedCollection new.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   689
    myClass := self species.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   690
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   691
    startIndex := 1.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   692
    except := false.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   693
    [
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   694
	i := startIndex-1.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   695
	[
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   696
	    i := i+1.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   697
	    c := self at:i.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   698
	    c = ch ifTrue:[ except := except not. ].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   699
	    i < self size and:[except or:[c ~= aCharacter]]
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   700
	]whileTrue.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   701
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   702
	c = aCharacter ifTrue:[
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   703
	    stopIndex := i -1.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   704
	] ifFalse: [
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   705
	    stopIndex := i.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   706
	].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   707
	(stopIndex < startIndex) ifTrue: [
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   708
	    lines add:(myClass new:0)
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   709
	] ifFalse: [
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   710
	    lines add:(self copyFrom:startIndex to:stopIndex)
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   711
	].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   712
	startIndex := stopIndex + 2.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   713
	startIndex <= self size
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   714
    ]whileTrue.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   715
    ^ lines
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   716
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   717
    "
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   718
     'asd''f;d''dd;s' asCollectionOfSubstringsSeparatedBy:$; exceptIn:$' 
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   719
    "
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   720
!
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   721
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   722
asLowercaseLast
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   723
    "return a copy of myself where the last character is
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   724
     converted to lowercase."
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   725
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   726
    |newString sz|
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   727
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   728
    sz := self size.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   729
    newString := self copyFrom:1 to:sz.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   730
    sz > 0 ifTrue:[
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   731
	newString at:sz put:(newString at:sz) asLowercase
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   732
    ].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   733
    ^ newString
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   734
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   735
    "
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   736
     'HelloWorld' asLowercase   
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   737
     'HelloWorlD' asLowercaseLast   
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   738
    "
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   739
!
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   740
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   741
asNegNumber
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   742
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   743
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   744
    (self size == 1 and:[self first == $-]) ifTrue:[
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   745
	^0
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   746
    ].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   747
!
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   748
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   749
asStringsWidth:aInteger for:aFont
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   750
"^<OrderedCollection of:String>"
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   751
"simple formating to the column width 'aInteger'"
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   752
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   753
    |lines strings start lastSeparator width width2|
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   754
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   755
    (aFont widthOf:self) > aInteger ifFalse:[^OrderedCollection with:self].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   756
    strings := OrderedCollection new.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   757
    lastSeparator := 0.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   758
    start := 1.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   759
    width := width2 := 0.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   760
    self keysAndValuesDo:[:pos :ch|
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   761
	width := width + (aFont widthOf:ch).
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   762
	(width > aInteger and:[start<=lastSeparator]) ifTrue:[
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   763
	    strings add:(self copyFrom: start to:lastSeparator).
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   764
	    start := lastSeparator+1.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   765
	    width := width-width2.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   766
	].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   767
	ch isSeparator ifTrue:[
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   768
	    lastSeparator := pos.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   769
	    width2 := width.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   770
	].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   771
    ].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   772
    strings add:(self copyFrom: start).    
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   773
    ^strings
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   774
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   775
"
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   776
'This class is provided to make porting of existing ST-80 applications easier. Instances can be used to control the geometry of a subview, within its superview. Like a layoutOrigin, it controls the origin of a component by given fraction and offset dimensions; in addition, the bottom-right corner is also controlled by corresponding values. Therefore, the components preferredExtent is ignored.'
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   777
asStringsWidth:120 for:DPUDisplayObject nameFont
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   778
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   779
"
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   780
!
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   781
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   782
isLowercaseFirst
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   783
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   784
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   785
    self size = 0 ifTrue:[^false].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   786
    ^self first isLowercase
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   787
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   788
    "
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   789
     'helloWorld' isLowercaseFirst    
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   790
     'HelloWorld' isLowercaseFirst    
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   791
    "
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   792
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   793
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   794
!
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   795
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   796
isUppercaseFirst
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   797
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   798
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   799
    self size = 0 ifTrue:[^false].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   800
    ^self first isUppercase
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   801
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   802
    "
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   803
     'helloWorld' isUppercaseFirst 
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   804
     'HelloWorld' isUppercaseFirst    
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   805
    "
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   806
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   807
!
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   808
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   809
withQuotesDoubled
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   810
    "return the raw storeString of myself"
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   811
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   812
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   813
    |s|
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   814
    s := OrderedCollection new.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   815
    self do:[:thisChar |
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   816
	(thisChar == $') ifTrue:[
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   817
	    s add: thisChar
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   818
	].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   819
	s add: thisChar
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   820
    ].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   821
    ^s asString
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   822
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   823
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   824
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   825
!
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   826
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   827
withQuotesReduced
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   828
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   829
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   830
    |s found|
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   831
    found := false.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   832
    s := OrderedCollection new.   
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   833
    self do:[:thisChar |
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   834
	(thisChar == $') ifTrue:[
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   835
	    found ifFalse:[
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   836
	       s add: thisChar.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   837
	       found := true.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   838
	    ]
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   839
	] ifFalse:[
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   840
	    s add: thisChar.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   841
	    found := false.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   842
	].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   843
    ].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   844
    ^s asString
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   845
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   846
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   847
"
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   848
'e''f' withQuotesReduced  
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   849
"
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   850
!
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   851
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   852
withoutAllSpaces
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   853
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   854
    |col string|
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   855
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   856
    col := self asCollectionOfWords.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   857
    string := String new.
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   858
    col do:[:el|
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   859
       string := string,el
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   860
    ].
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   861
    ^string
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   862
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   863
    "
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   864
     'hello wwww'  withoutAllSpaces   
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   865
    "
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   866
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   867
    "Modified: / 18.7.1998 / 22:53:08 / cg"
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   868
! !
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
   869
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   870
!CharacterArray methodsFor:'Compatibility-ANSI'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   871
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   872
addLineDelimiters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   873
    "Ansi compatibility - same as withCRs"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   874
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   875
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   876
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   877
    "Modified: / 13.11.2001 / 19:16:25 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   878
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   879
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   880
!CharacterArray methodsFor:'Compatibility-Dolphin'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   881
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   882
argumentCount
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   883
    "same as #numArgs - return the number of arguments a message with myself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   884
     as selector would take."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   885
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   886
    ^  self numArgs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   887
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   888
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   889
copyExpanding:expandTable
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   890
    "return a copy of myself, with translations from the expandTable sliced in.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   891
     The argument is supposed to map from characters to either characters or strings."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   892
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   893
    |ds|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   894
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   895
    ds := WriteStream on:(self species new).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   896
    self do:[:eachChar |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   897
	|repl|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   898
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   899
	repl := expandTable at:eachChar ifAbsent:nil.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   900
	repl isNil ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   901
	    ds nextPut:eachChar
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   902
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   903
	    repl size == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   904
		ds nextPut:repl
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   905
	    ] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   906
		ds nextPutAll:repl
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   907
	    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   908
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   909
    ].
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   910
    ^ ds contents.
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   911
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   912
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   913
formatWith:aString
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   914
    "same as #bindWith: for dolphin compatibility"
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   915
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   916
    ^ self bindWith:aString
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   917
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   918
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   919
     'hello%1world' formatWith:'123'
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   920
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   921
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   922
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   923
formatWith:arg1 with:arg2
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   924
    "same as #bindWith: for dolphin compatibility"
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   925
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   926
    ^ self bindWith:arg1 with:arg2
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   927
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   928
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   929
     'hello%1 %2world' formatWith:'123' with:234
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   930
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   931
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   932
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   933
formatWith:arg1 with:arg2 with:arg3
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   934
    "same as #bindWith: for dolphin compatibility"
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   935
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   936
    ^ self bindWith:arg1 with:arg2 with:arg3
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   937
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   938
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   939
     'hello%1 %2 %3world' formatWith:'123' with:234 with:345
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   940
    "
6391
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   941
! !
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   942
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7247
diff changeset
   943
!CharacterArray methodsFor:'Compatibility-ST/V'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   944
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   945
byteAt:index put:aByte
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   946
    "store a byte at given index.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   947
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   948
1333
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   949
"/    (aByte == 0) ifTrue:[
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   950
"/        "store a space instead"
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   951
"/        ^ super basicAt:index put:(Character space)
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   952
"/    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   953
    ^ super at:index put:(Character value:aByte)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   954
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   955
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   956
     'hello' copy at:1 put:$H asciiValue; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   957
     'hello' copy byteAt:1 put:72; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   958
     'hello' copy byteAt:1 put:0; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   959
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   960
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   961
    "Modified: 6.5.1996 / 10:35:26 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   962
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   963
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   964
replChar:oldChar with:newChar
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   965
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   966
     by newChar.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   967
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   968
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   969
    ^ self copyReplaceAll:oldChar with:newChar
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   970
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   971
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   972
     '12345678901234567890' replChar:$0 with:$*
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   973
    "
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   974
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   975
    "Modified: / 18.7.1998 / 22:52:57 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   976
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   977
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   978
replChar:oldChar withString:newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   979
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   980
     by newString (i.e. slice in the newString in place of the oldChar).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   981
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   982
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   983
    |tmpStream|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   984
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   985
    tmpStream := WriteStream on:(self class new).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   986
    self do:[:element |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   987
	element = oldChar ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   988
	    tmpStream nextPutAll:newString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   989
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   990
	    tmpStream nextPut:element
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   991
	].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   992
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   993
    ^ tmpStream contents
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   994
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   995
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   996
     '12345678901234567890' replChar:$0 withString:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   997
     'a string with spaces' replChar:$  withString:' foo '
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   998
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   999
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1000
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1001
replString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
  1002
    "return a copy of the receiver, with all sequences of subString replaced
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
  1003
     by newString (i.e. slice in the newString in place of the oldString)."
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
  1004
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  1005
    ^ self copyReplaceString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
  1006
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
  1007
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1008
     '12345678901234567890' replString:'123' withString:'OneTwoThree'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1009
     '12345678901234567890' replString:'123' withString:'*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1010
     '12345678901234567890' replString:'234' withString:'foo'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
  1011
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
  1012
     ('a string with spaces' replChar:$  withString:' foo ')
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1013
	replString:'foo' withString:'bar'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
  1014
    "
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
  1015
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  1016
    "Modified: / 12-05-2004 / 12:00:27 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1017
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1018
9275
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
  1019
subString:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
  1020
    ^ self copyFrom:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
  1021
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
  1022
   "
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
  1023
     '12345678901234567890' subString:3 to:8
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
  1024
    "
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
  1025
!
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
  1026
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1027
trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1028
    "return a copy of the receiver without leading
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1029
     and trailing spaces.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1030
     This is an ST/V compatibility method."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1031
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1032
    ^ self withoutSpaces
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1033
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1034
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1035
     '    spaces at beginning' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1036
     'spaces at end    ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1037
     '    spaces at beginning and end     ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1038
     'no spaces' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1039
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1040
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1041
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1042
!CharacterArray methodsFor:'Compatibility-Squeak'!
4409
86e049b21f8d added #includesSubstring:caseSensitive:
Claus Gittinger <cg@exept.de>
parents: 4389
diff changeset
  1043
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
  1044
asDate
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
  1045
    "Many allowed forms, see Date.readFrom:"
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
  1046
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
  1047
    ^ Date readFrom: (ReadStream on: self)
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
  1048
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
  1049
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1050
     '30 Apr 1999' asDate dayName capitalized
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
  1051
    "
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
  1052
!
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
  1053
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1054
asUrl
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1055
    ^ self asURL
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1056
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1057
10840
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1058
asWideString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1059
    ^ self asTwoByteString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1060
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1061
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1062
     'abc' asWideString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1063
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1064
!
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1065
4989
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1066
capitalized
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1067
    ^ self asUppercaseFirst
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1068
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1069
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1070
     'hello' capitalized
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1071
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1072
!
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1073
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1074
caseInsensitiveLessOrEqual:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1075
    ^ (self compareCaselessWith:aString) <= 0
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1076
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1077
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1078
caseSensitiveLessOrEqual:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1079
    ^ self <= aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1080
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1081
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1082
charactersExactlyMatching:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1083
    |idx nMax|
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1084
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1085
    nMax :=(self size) min:(aString size).
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1086
    idx := 1.
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1087
    [idx <= nMax] whileTrue:[
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1088
        (self at:idx) = (aString at:idx) ifFalse:[
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1089
            ^ idx - 1
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1090
        ].
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1091
        idx := idx + 1.
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1092
    ].
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1093
    ^ nMax
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1094
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1095
    "
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1096
     'abc' charactersExactlyMatching:'abc'   
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1097
     'abc' charactersExactlyMatching:'abcd'   
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1098
     'abcd' charactersExactlyMatching:'abc'   
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1099
     'abc' charactersExactlyMatching:'abd'   
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1100
     'abc' charactersExactlyMatching:'xxx'   
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1101
    "
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1102
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1103
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1104
endsWithDigit
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1105
    "Answer whether the receiver's final character represents a digit.  3/11/96 sw"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1106
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1107
    ^ self size > 0 and: [self last isDigit]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1108
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1109
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1110
findDelimiters:delimiters startingAt:start
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1111
    "Answer the index of the character within the receiver, starting at start, that matches one of the delimiters. If the receiver does not contain any of the delimiters, answer size + 1."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1112
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1113
    |idx|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1114
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1115
    idx := self indexOfAny:delimiters startingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1116
    idx == 0 ifTrue:[^ self size + 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1117
    ^ idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1118
"/start to: self size do: [:i |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1119
"/        |char|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1120
"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1121
"/        char := self at: i.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1122
"/        delimiters do: [:delim | delim = char ifTrue: [^ i]]
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1123
"/    ].
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1124
"/    ^ self size + 1
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1125
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1126
4981
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
  1127
findTokens:delimiters
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
  1128
    "cg: I am not sure, if this is really the squeak semantics (w.r.t. empty fields)"
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
  1129
4981
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
  1130
    ^ self asCollectionOfSubstringsSeparatedByAny:delimiters
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
  1131
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
  1132
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1133
     'a|b#c||e' findTokens:#($# $|)
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
  1134
    "
4981
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
  1135
!
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
  1136
4974
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1137
includesSubString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1138
    "return true, if a substring is contained in the receiver.
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1139
     The compare is case sensitive."
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1140
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1141
    ^ self includesString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1142
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1143
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1144
     'hello world' includesSubString:'Hel'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1145
     'hello world' includesSubString:'hel'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1146
     'hello world' includesSubString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1147
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1148
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1149
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1150
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1151
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1152
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
  1153
includesSubString:aString caseSensitive:caseSensitive
11179
178086a92325 *** empty log message ***
sr
parents: 11178
diff changeset
  1154
    ^ self includesSubstring:aString caseSensitive:caseSensitive
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
  1155
!
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
  1156
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1157
includesSubstring:aString caseSensitive:caseSensitive
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1158
    "return true, if a substring is contained in the receiver.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1159
     The argument, caseSensitive controls if case is ignored in the compare."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1160
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1161
    "/ for now,  a q&d hack ...
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1162
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1163
    caseSensitive ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1164
	^ self asLowercase includesString:aString asLowercase
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1165
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1166
    ^ self includesString:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1167
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1168
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1169
     'hello world' includesSubstring:'Hel' caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1170
     'hello world' includesSubstring:'Hel' caseSensitive:false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1171
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1172
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1173
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1174
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1175
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1176
6979
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1177
isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1178
    "Answer whether the receiver's characters are all digits"
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1179
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1180
    ^ self conform:[:eachChar | eachChar isDigit]
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1181
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1182
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1183
     'hello world' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1184
     '12344' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1185
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1186
!
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1187
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1188
lastSpacePosition
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1189
    ^ self lastIndexOfSeparator
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1190
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1191
7022
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1192
padded:leftOrRight to:paddedSize with:padCharacter
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1193
    leftOrRight == #left ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1194
	^ self leftPaddedTo:paddedSize with:padCharacter
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1195
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1196
    ^ self paddedTo:paddedSize with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1197
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1198
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1199
     'hello' padded:#right to:10 with:$.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1200
     'hello' padded:#left to:10 with:$.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1201
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1202
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1203
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1204
skipDelimiters:delimiters startingAt:start
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1205
    "Answer the index of the character within the receiver, starting at start,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1206
     that does NOT match one of the delimiters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1207
     If the receiver does not contain any of the delimiters, answer size + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1208
     Assumes the delimiters to be a non-empty string."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1209
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1210
    start to:self size do:[:i |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1211
	delimiters detect:[:delim | delim = (self at:i) ] ifNone:[ ^ i ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1212
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1213
    ^ self size + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1214
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1215
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1216
     '123***7890' skipDelimiters:'*' startingAt:4
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1217
     '123***7890' skipDelimiters:'*' startingAt:3
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1218
     '123***7890' skipDelimiters:'*' startingAt:10
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1219
     '123*******' skipDelimiters:'*' startingAt:10
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1220
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1221
!
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1222
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1223
substrings
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1224
    ^ self asCollectionOfWords
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1225
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1226
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1227
     'foo bar baz' substrings
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1228
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1229
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1230
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1231
truncateTo:smallSize
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1232
    "return myself or a copy shortened to smallSize.  1/18/96 sw"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1233
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1234
    self size <= smallSize ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1235
    ^ self copyFrom: 1 to: smallSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1236
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1237
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1238
     'hello world' truncateTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1239
     'hello' truncateTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1240
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1241
     'hello world' copyTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1242
     'hello' copyTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1243
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1244
!
5795
d67a8ff4d98e added #truncateTo:
Claus Gittinger <cg@exept.de>
parents: 5794
diff changeset
  1245
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1246
withBlanksTrimmed
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1247
    "Return a copy of the receiver from which leading and trailing blanks have been trimmed."
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1248
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1249
    ^ self withoutSpaces
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1250
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1251
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1252
     '  hello    world    ' withBlanksTrimmed
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1253
    "
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1254
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1255
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1256
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1257
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1258
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1259
withNoLineLongerThan: aNumber
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1260
    "Answer a string with the same content as receiver, but rewrapped so that no line has more characters than the given number"
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1261
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1262
    | listOfLines currentLast currentStart resultString putativeLast putativeLine crPosition |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1263
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1264
    aNumber isNumber not | (aNumber < 1) ifTrue: [self error: 'too narrow'].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1265
    listOfLines _ OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1266
    currentLast _ 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1267
    [currentLast < self size] whileTrue:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1268
	    [currentStart _ currentLast + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1269
	    putativeLast _ (currentStart + aNumber - 1) min: self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1270
	    putativeLine _ self copyFrom: currentStart to: putativeLast.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1271
	    (crPosition _ putativeLine indexOf: Character cr) > 0 ifTrue:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1272
		    [putativeLast _ currentStart + crPosition - 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1273
		    putativeLine _ self copyFrom: currentStart to: putativeLast].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1274
	    currentLast _ putativeLast == self size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1275
		    ifTrue:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1276
			    [putativeLast]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1277
		    ifFalse:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1278
			    [currentStart + putativeLine lastSpacePosition - 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1279
	    currentLast <= currentStart ifTrue:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1280
		    ["line has NO spaces; baleout!!"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1281
		    currentLast _ putativeLast].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1282
	    listOfLines add: (self copyFrom: currentStart to: currentLast) withBlanksTrimmed].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1283
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1284
    listOfLines size > 0 ifFalse: [^ ''].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1285
    resultString _ listOfLines first.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1286
    2 to: listOfLines size do:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1287
	    [:i | resultString _ resultString, Character cr asString, (listOfLines at: i)].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1288
    ^ resultString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1289
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1290
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1291
     #(5 7 20) collect:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1292
	[:i | 'Fred the bear went down to the brook to read his book in silence' withNoLineLongerThan: i]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1293
    "
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1294
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1295
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1296
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1297
!
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1298
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1299
withoutTrailing:char
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1300
    "return a copy of myself without trailing char.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1301
     Returns an empty string, if the receiver consist only of char."
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1302
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1303
    |index sz|
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1304
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1305
    index := sz := self size.
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1306
    [index ~~ 0] whileTrue:[
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1307
        (self at:index) == char ifFalse:[
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1308
            index == sz ifTrue:[^ self].
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1309
            ^ self copyTo:index
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1310
        ].
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1311
        index := index - 1
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1312
    ].
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1313
    ^ ''
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1314
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1315
    "
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1316
     '    foo....' withoutTrailing:$. 
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1317
     'foo....'     withoutTrailing:$.   
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1318
     '    foo'     withoutTrailing:$.    
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1319
     '.......'     withoutTrailing:$.  
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1320
     'foo'         withoutTrailing:$.  
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1321
    "
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1322
!
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1323
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1324
withoutTrailingBlanks
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1325
    "return a copy of myself without trailing spaces.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1326
     Notice: this does NOT remove tabs, newline or any other whitespace.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1327
     Returns an empty string, if the receiver consist only of spaces."
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1328
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1329
    ^ self withoutTrailing:Character space
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1330
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1331
    "
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1332
     '    foo    ' withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1333
     'foo    '     withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1334
     '    foo'     withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1335
     '       '     withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1336
     'foo'         withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1337
     ('  ' , Character tab asString , ' foo   ') withoutTrailingBlanks inspect
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1338
     ('   foo' , Character tab asString) withoutTrailingBlanks inspect
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1339
    "
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1340
! !
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1341
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1342
!CharacterArray methodsFor:'Compatibility-V''Age'!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1343
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1344
addLineDelimiter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1345
    "replace all '\'-characters by line delimiter (cr) - characters.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1346
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1347
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1348
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1349
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1350
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1351
bindWith:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1352
    "return a copy of the receiver, where a '%1' escape is
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1353
     replaced by aString.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1354
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1355
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1356
    ^ self expandPlaceholdersWith:(Array with:aString)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1357
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1358
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1359
     'do you like %1 ?' bindWith:'smalltalk'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1360
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1361
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1362
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1363
bindWith:string1 with:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1364
    "return a copy of the receiver, where a '%1' escape is
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1365
     replaced by string1 and '%2' is replaced by string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1366
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1367
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1368
    ^ self expandPlaceholdersWith:(Array with:string1 with:string2)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1369
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1370
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1371
     'do you prefer %1 or rather %2 ?'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1372
	bindWith:'smalltalk' with:'c++'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1373
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1374
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1375
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1376
bindWith:str1 with:str2 with:str3
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1377
    "return a copy of the receiver, where a '%1', '%2' and '%3' escapes
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1378
     are replaced by str1, str2 and str3 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1379
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1380
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1381
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1382
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1383
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1384
     'do you prefer %1 or rather %2 (not talking about %3) ?'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1385
	bindWith:'smalltalk' with:'c++' with:'c'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1386
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1387
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1388
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1389
bindWith:str1 with:str2 with:str3 with:str4
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1390
    "return a copy of the receiver, where a '%1', '%2', '%3' and '%4' escapes
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1391
     are replaced by str1, str2, str3 and str4 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1392
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1393
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1394
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3 with:str4)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1395
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1396
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1397
     'do you prefer %1 or rather %2 (not talking about %3 or even %4) ?'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1398
	bindWith:'smalltalk' with:'c++' with:'c' with:'assembler'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1399
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1400
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1401
2344
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1402
bindWith:str1 with:str2 with:str3 with:str4 with:str5
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1403
    "return a copy of the receiver, where a '%1' .. '%5' escapes
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1404
     are replaced by str1 .. str5 respectively.
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1405
     This has been added for VisualAge compatibility."
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1406
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1407
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3 with:str4 with:str5)
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1408
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1409
    "Created: 31.1.1997 / 16:25:42 / cg"
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1410
!
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1411
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1412
bindWith:str1 with:str2 with:str3 with:str4 with:str5 with:str6
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1413
    "return a copy of the receiver, where a '%1' .. '%6' escapes
11524
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1414
     are replaced by str1 .. str6 respectively.
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1415
     This has been added for VisualAge compatibility."
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1416
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1417
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
11524
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1418
                                         with:str3 with:str4
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1419
                                         with:str5 with:str6)
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1420
!
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1421
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1422
bindWith:str1 with:str2 with:str3 with:str4 with:str5 with:str6 with:str7
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1423
    "return a copy of the receiver, where a '%1' .. '%7' escapes
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1424
     are replaced by str1 .. str7 respectively.
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1425
     This has been added for VisualAge compatibility."
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1426
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1427
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1428
                                         with:str3 with:str4
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1429
                                         with:str5 with:str6
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1430
                                         with:str7)
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1431
!
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1432
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1433
bindWithArguments:anArrayOfStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1434
    "return a copy of the receiver, where a '%i' escape
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1435
     is replaced by the coresponding string from the argument array.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1436
     'i' may be between 1 and 9 (i.e. a maximum of 9 placeholders is allowed).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1437
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1438
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1439
    ^ self expandPlaceholdersWith:anArrayOfStrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1440
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1441
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1442
     'do you prefer %1 or rather %2 (not talking about %3) ?'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1443
	bindWithArguments:#('smalltalk' 'c++' 'c')
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1444
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1445
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1446
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1447
subStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1448
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1449
     Words are separated by whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1450
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1451
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1452
    ^ self asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1453
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1454
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1455
     'hello world, this is smalltalk' subStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1456
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1457
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1458
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1459
subStrings:separatorCharacter
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1460
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1461
     Words are separated by separatorCharacter.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1462
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1463
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1464
    ^ self asCollectionOfSubstringsSeparatedBy:separatorCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1465
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1466
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1467
     'foo:bar:baz:smalltalk' subStrings:$:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1468
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1469
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1470
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1471
trimSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1472
    "return a copy of the receiver without leading and trailing whiteSpace"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1473
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1474
    ^ self withoutSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1475
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1476
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1477
!CharacterArray methodsFor:'Compatibility-VW'!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1478
6139
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1479
asLogicalFileSpecification
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1480
    ^ self asFilename
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1481
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1482
    "Created: / 30.10.2001 / 17:29:53 / cg"
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1483
!
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1484
6119
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1485
asQualifiedReference
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1486
    ^ BindingReference pathString:(self string)
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1487
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1488
!
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1489
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1490
expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1491
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1492
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1493
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1494
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1495
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1496
    ^ self expandMacrosWithArguments:#()
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1497
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1498
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1499
     'hello<n>foo' expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1500
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1501
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1502
    "Modified: / 18.6.1998 / 16:03:02 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1503
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1504
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1505
expandMacrosWith:arg
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1506
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1507
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1508
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1509
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1510
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1511
    ^ self expandMacrosWithArguments:(Array with:arg)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1512
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1513
    "Created: / 1.11.1997 / 13:01:28 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1514
    "Modified: / 1.11.1997 / 13:30:50 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1515
!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1516
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1517
expandMacrosWith:arg1 with:arg2
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1518
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1519
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1520
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1521
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1522
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1523
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2)
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1524
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1525
    "Modified: / 6.7.1998 / 21:58:14 / cg"
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1526
!
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1527
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1528
expandMacrosWith:arg1 with:arg2 with:arg3
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1529
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1530
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1531
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1532
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1533
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1534
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2 with:arg3)
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1535
!
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1536
10353
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1537
expandMacrosWith:arg1 with:arg2 with:arg3 with:arg4
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1538
    "ST80 compatibility - expand '<..>' macros with
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1539
     argument strings. Similar to #bindWith:.
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1540
     Read the comment in #expandMacrosWithArguments: about
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1541
     limited compatibility issues."
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1542
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1543
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2 with:arg3 with:arg4)
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1544
!
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1545
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1546
expandMacrosWithArguments:argArray
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1547
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1548
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1549
     WARNING: possibly not all ST80 expansions are supported here."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1550
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1551
    "/ supported expansions:
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1552
    "/
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1553
    "/   <#p>       # is arg Number; slice in the args printString
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  1554
    "/   <#s>       # is arg Number; slice in the arg itself (must know asString)
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1555
    "/   <#?s1:s2>  # is arg Number; slice in s1 if the arg is true, s2 otherwise
7643
53536a53dcbc comment
Claus Gittinger <cg@exept.de>
parents: 7641
diff changeset
  1556
    "/              use first arg if # is not given (i.e. no number before s,p ...)
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1557
    "/   <n>        replace by a newLine character
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1558
    "/   <t>        replace by a tab character
6834
eba4b58b8692 fixed expandMacros (%-escape)
Claus Gittinger <cg@exept.de>
parents: 6810
diff changeset
  1559
    "/   %X         the X character itself
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1560
8999
f3fda66ea51e #expandMacrosWithArguments: - be mor friendly to xml strings.
Stefan Vogel <sv@exept.de>
parents: 8971
diff changeset
  1561
    |in out c fmt nr arg s1 s2 peekc|
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1562
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1563
    in := self readStream.
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1564
    out := CharacterWriteStream on:(self species uninitializedNew:self size).
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1565
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1566
    [in atEnd] whileFalse:[
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1567
        c := in next.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1568
        c == $% ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1569
            c := in next.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1570
            out nextPut:c
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1571
        ] ifFalse:[c ~~ $< ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1572
            out nextPut:c.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1573
        ] ifFalse:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1574
            peekc := in peek.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1575
            [peekc == $<] whileTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1576
                out nextPut:$<.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1577
                peekc := in nextPeek.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1578
            ].
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1579
            peekc == $n ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1580
                peekc := in nextPeek.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1581
                peekc == $> ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1582
                    in next.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1583
                    out cr.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1584
                ] ifFalse:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1585
                    out nextPutAll:'<n'.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1586
                ]
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1587
            ] ifFalse:[peekc == $t ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1588
                peekc := in nextPeek.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1589
                peekc == $> ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1590
                    in next.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1591
                    out tab.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1592
                ] ifFalse:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1593
                    out nextPutAll:'<t'.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1594
                ]
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1595
            ] ifFalse:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1596
                peekc isDigit ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1597
                    "start an argument expansion ..."
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1598
                    nr := Integer readFrom:in onError:nil.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1599
                    nr isNil ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1600
                        "this cannot happen (there is at least one digit)"
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1601
                        self error:'invalid format' mayProceed:true.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1602
                        ^ self
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1603
                    ].
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1604
                    fmt := in next.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1605
                    (fmt ~~ $? and:[in peek ~~ $>]) ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1606
                        out nextPut:$<.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1607
                        nr printOn:out.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1608
                        out nextPut:fmt.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1609
                    ] ifFalse:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1610
                        (nr between:1 and:argArray size) ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1611
                            arg := argArray at:nr.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1612
                        ] ifFalse:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1613
                            arg := ''
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1614
                        ].
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1615
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1616
                        fmt == $p ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1617
                            "expand with args printString"
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1618
                            arg printOn:out.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1619
                        ] ifFalse:[fmt == $s ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1620
                            "expand with arg itself"
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1621
                            arg isText ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1622
                                out contentsSpecies isText ifFalse:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1623
                                    out := (WriteStream on:Text new) nextPutAll:out contents; yourself.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1624
                                ].
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1625
                                out nextPutAll:arg.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1626
                            ] ifFalse:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1627
                                out nextPutAll:arg "asString" string.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1628
                            ]
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1629
                        ] ifFalse:[fmt == $? ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1630
                            s1 := in upTo:$:.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1631
                            s2 := in nextUpTo:$>.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1632
                            arg == true ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1633
                                out nextPutAll:s1
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1634
                            ] ifFalse:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1635
                                out nextPutAll:s2
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1636
                            ].
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1637
                        ] ifFalse:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1638
                            "what does VW do here ?"
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1639
                            self error:'invalid format' mayProceed:true.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1640
                            ^ self
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1641
                        ]]].
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1642
                        c := in next.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1643
                        c ~~ $> ifTrue:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1644
                            "what does VW do here ?"
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1645
                            self error:'invalid format' mayProceed:true.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1646
                            ^ self
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1647
                        ]
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1648
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1649
                    ].
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1650
                ] ifFalse:[
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1651
                    out nextPut:$<.
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1652
                ].
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1653
            ]].
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1654
        ]].
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1655
    ].
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1656
    ^ out contents
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1657
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1658
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1659
     'hello <1s> how are you' expandMacrosWith:(OperatingSystem getLoginName)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1660
     'one plus one is <1p>' expandMacrosWith:2
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1661
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1662
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1663
    "Modified: / 18-09-2007 / 22:50:43 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1664
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1665
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1666
isCharacters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1667
    "added for visual works compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1668
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1669
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1670
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  1671
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1672
!CharacterArray methodsFor:'character searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1673
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1674
includesMatchCharacters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1675
    "return true if the receiver includes any meta characters (i.e. $* or $#)
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1676
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1677
     Here, do not care for $\ escapes"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1678
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1679
    ^ self includesAny:'*#['
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1680
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1681
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1682
     '*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1683
     '\*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1684
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1685
     '*foo' includesMatchCharacters
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1686
     '\\*foo' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1687
     'foo*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1688
     'foo\*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1689
     'foo\' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1690
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1691
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1692
    "Modified: 2.4.1997 / 18:12:34 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1693
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1694
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1695
includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1696
    "return true, if the receiver contains any whitespace characters"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1697
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1698
    ^ (self indexOfSeparator ~~ 0)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1699
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1700
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1701
     'hello world' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1702
     'helloworld' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1703
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1704
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1705
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1706
includesUnescapedMatchCharacters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1707
    "return true if the receiver really includes any meta characters (i.e. $* or $#)
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1708
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1709
     Here, care for $\ escapes"
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1710
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1711
    |idx sz specialChars escape|
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1712
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1713
    idx := 1.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1714
    sz := self size.
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1715
    specialChars := '*#[\'.
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1716
    (escape := self class matchEscapeCharacter) ~~ $\ ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1717
	specialChars := specialChars copy.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1718
	specialChars at:specialChars size put:escape
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1719
    ].
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1720
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1721
    [true] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1722
	idx := self indexOfAny:specialChars startingAt:idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1723
	idx == 0 ifTrue:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1724
	(self at:idx) == escape ifFalse:[^ true].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1725
	idx := idx + 2.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1726
	idx > sz ifTrue:[^ false].
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1727
    ].
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1728
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1729
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1730
     '*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1731
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1732
     '\\foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1733
     '\\\$foo' includesUnescapedMatchCharacters
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1734
     '*foo' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1735
     '\\*foo' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1736
     'foo*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1737
     'foo\*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1738
     'foo\' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1739
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1740
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1741
    "Modified: 2.4.1997 / 17:08:52 / cg"
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1742
    "Created: 2.4.1997 / 17:23:26 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1743
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1744
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1745
indexOfControlCharacterStartingAt:startIndex
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1746
    "return the index of the next control character;
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1747
     starting the search at startIndex, searching forward;
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1748
     that is a character with asciiValue < 32.
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1749
     Return 0 if none is found."
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1750
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1751
    |start  "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1752
     mySize "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1753
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1754
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1755
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1756
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1757
    start to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1758
	(self at:index) isControlCharacter ifTrue:[^ index]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1759
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1760
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1761
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1762
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1763
     'hello world' asTwoByteString            indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1764
     'hello world\foo' withCRsasTwoByteString indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1765
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1766
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1767
    "Modified: / 21.7.1998 / 17:25:07 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1768
!
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1769
8541
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1770
indexOfNonSeparator
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1771
    "return the index of the first non-whitespace character.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1772
     return 0 if no non-separator was found"
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1773
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1774
    ^ self indexOfNonSeparatorStartingAt:1.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1775
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1776
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1777
     '    hello world' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1778
     '    ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1779
     'a   ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1780
     'abc' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1781
     ' ' indexOfNonSeparator
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1782
     '' indexOfNonSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1783
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1784
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1785
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1786
indexOfNonSeparatorStartingAt:startIndex
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1787
    "return the index of the next non-whitespace character,
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1788
     starting the search at startIndex, searching forward;
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1789
     return 0 if no non-separator was found"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1790
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1791
    |start  "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1792
     mySize "{ Class: SmallInteger }"|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1793
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1794
    start := startIndex.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1795
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1796
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1797
    start to:mySize do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1798
	(self at:index) isSeparator ifFalse:[^ index]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1799
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1800
    ^ 0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1801
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1802
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1803
     '    hello world' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1804
     '    ' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1805
     'a   ' indexOfNonSeparatorStartingAt:2
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1806
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1807
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1808
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1809
     |s index1 index2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1810
     s := '   foo    bar      baz'.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1811
     index1 := s indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1812
     index2 := s indexOfSeparatorStartingAt:index1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1813
     s copyFrom:index1 to:index2 - 1
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1814
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1815
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1816
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1817
indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1818
    "return the index of the first whitespace character;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1819
     starting the search at the beginning, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1820
     return 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1821
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1822
    ^ self indexOfSeparatorStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1823
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1824
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1825
     'hello world' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1826
     'helloworld' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1827
     'hello   ' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1828
     '   hello' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1829
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1830
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1831
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1832
indexOfSeparatorStartingAt:startIndex
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1833
    "return the index of the next whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1834
     starting the search at startIndex, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1835
     return 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1836
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1837
    |start  "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1838
     mySize "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1839
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1840
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1841
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1842
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1843
    start to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1844
	(self at:index) isSeparator ifTrue:[^ index]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1845
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1846
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1847
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1848
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1849
     'hello world' indexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1850
     ' hello world' indexOfSeparatorStartingAt:3
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1851
     'hello world ' indexOfSeparatorStartingAt:3
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1852
     'hello world ' indexOfSeparatorStartingAt:6
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1853
     'hello world ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1854
     'helloworld ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1855
     'helloworld' indexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1856
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1857
!
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1858
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1859
lastIndexOfSeparator
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1860
    "return the last index of the whitespace character.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1861
     (i.e. start the search at the end and search backwards);
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1862
     Returns 0 if no separator is found."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1863
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1864
    ^ self lastIndexOfSeparatorStartingAt:(self size)
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1865
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1866
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1867
     'hello world' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1868
     'helloworld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1869
     'hel lo wor ld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1870
     'hel   ' lastIndexOfSeparator 6
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1871
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1872
!
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1873
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1874
lastIndexOfSeparatorStartingAt:startIndex
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1875
    "return the index of the previous whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1876
     starting the search at startIndex (and searching backwards);
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1877
     returns 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1878
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1879
    |start  "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1880
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1881
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1882
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1883
    start to:1 by:-1 do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1884
	(self at:index) isSeparator ifTrue:[^ index]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1885
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1886
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1887
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1888
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1889
     'hello world' lastIndexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1890
     'hello world' lastIndexOfSeparatorStartingAt:7
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1891
     'helloworld' lastIndexOfSeparatorStartingAt:7
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1892
     ' helloworld' lastIndexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1893
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1894
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1895
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1896
!CharacterArray methodsFor:'comparing'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1897
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1898
< aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1899
    "Compare the receiver with the argument and return true if the
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1900
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1901
     This comparison is based on the elements ascii code -
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1902
     i.e. upper/lowercase & upper/lowercase & national characters are NOT treated specially."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1903
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1904
    |mySize    "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1905
     otherSize "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1906
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1907
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1908
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1909
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1910
    otherSize := aString string size.
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1911
    n := mySize min:otherSize.
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1912
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1913
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1914
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1915
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1916
	(c1 == c2 or:[c1 = c2]) ifFalse:[^ c1 < c2].
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1917
    ].
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1918
    ^ mySize < otherSize
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1919
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1920
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1921
= aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1922
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1923
     receiver is equal to the argument. Otherwise return false.
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1924
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  1925
     This compare does NOT ignore case differences,
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1926
     therefore 'foo' = 'Foo' will return false.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1927
     Since this is incompatible to ST-80 (at least, V2.x) , this may change."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1928
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1929
    |mySize    "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1930
     otherSize |
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1931
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  1932
    (aString isString or:[aString species == self species]) ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1933
	^ false
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  1934
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1935
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1936
    otherSize := aString size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1937
    mySize == otherSize ifFalse:[^ false].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1938
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1939
    1 to:mySize do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1940
	(self at:index) = (aString at:index) ifFalse:[^ false].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1941
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1942
    ^ true
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1943
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1944
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1945
     'foo' = 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1946
     'foo' = 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1947
     'foo' = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1948
     'foo' = 'foo' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1949
     'foo' asText = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1950
     'foo' asText = 'foo' asText
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1951
    "
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1952
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1953
    "Modified: 22.4.1996 / 15:53:58 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1954
!
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1955
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  1956
> aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1957
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1958
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1959
     This comparison is based on the elements ascii code -
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1960
     i.e. upper/lowercase & upper/lowercase & national characters are NOT treated specially."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1961
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1962
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1963
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1964
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1965
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1966
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1967
    mySize := self size.
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1968
    otherSize := aString string size.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1969
    n := mySize min:otherSize.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1970
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1971
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1972
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1973
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1974
	(c1 == c2 or:[c1 = c2]) ifFalse:[^ c1 > c2].
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1975
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1976
    ^ mySize > otherSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1977
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1978
    "Modified: 22.4.1996 / 15:55:00 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1979
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1980
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1981
compareCaselessWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1982
    "Compare the receiver against the argument, ignoreing case.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1983
     Return 1 if the receiver is greater, 0 if equal and -1 if less than the argument.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1984
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1985
     This comparison is based on the elements ascii code -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1986
     i.e. national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1987
     'foo' compareWith: 'Foo' will return 0"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1988
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1989
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1990
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1991
     n         "{ Class: SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1992
     c1 c2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1993
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1994
    mySize := self size.
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  1995
    otherSize := aString string size.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1996
    n := mySize min:otherSize.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1997
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1998
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1999
	c1 := (self at:index) asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2000
	c2 := (aString at:index) asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2001
	c1 > c2 ifTrue:[^ 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2002
	c1 < c2 ifTrue:[^ -1].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2003
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2004
    mySize > otherSize ifTrue:[^ 1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2005
    mySize < otherSize ifTrue:[^ -1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2006
    ^ 0
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  2007
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  2008
    "Modified: 22.4.1996 / 15:56:07 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2009
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2010
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2011
compareWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2012
    "Compare the receiver with the argument and return 1 if the receiver is
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2013
     greater, 0 if equal and -1 if less than the argument.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2014
     This comparison is based on the elements ascii code -
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2015
     i.e. upper/lowercase & national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2016
     'foo' compareWith: 'Foo' will return 1.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2017
     while 'foo' sameAs:'Foo' will return true"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2018
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2019
    |mySize    "{ Class: SmallInteger }"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2020
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2021
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2022
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2023
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2024
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2025
    otherSize := aString string size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2026
    n := mySize min:otherSize.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2027
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2028
    1 to:n do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2029
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2030
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2031
	c1 > c2 ifTrue:[^ 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2032
	c1 < c2 ifTrue:[^ -1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2033
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2034
    mySize > otherSize ifTrue:[^ 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2035
    mySize < otherSize ifTrue:[^ -1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2036
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2037
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2038
    "Modified: 22.4.1996 / 15:56:07 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2039
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2040
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2041
hash
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2042
    "return an integer useful as a hash-key"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2043
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2044
    |h g|
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2045
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2046
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2047
    "/ this is the dragon-book algorithm
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2048
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2049
    h := 0.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2050
    self reverseDo:[:char |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2051
"/ Sorry, stc cannot compile this (as of 10.9.2007)
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2052
"/        h := (h bitShift:4) + char asciiValue.
11483
711ec2b11843 asciiValue obsoleted by codePoint
Claus Gittinger <cg@exept.de>
parents: 11441
diff changeset
  2053
        h := (h bitShift:4).
711ec2b11843 asciiValue obsoleted by codePoint
Claus Gittinger <cg@exept.de>
parents: 11441
diff changeset
  2054
        h:= h + char codePoint.
711ec2b11843 asciiValue obsoleted by codePoint
Claus Gittinger <cg@exept.de>
parents: 11441
diff changeset
  2055
        h := h bitAnd:16rFFFFFFFF.
711ec2b11843 asciiValue obsoleted by codePoint
Claus Gittinger <cg@exept.de>
parents: 11441
diff changeset
  2056
        g := (h bitAnd: 16rF0000000).
711ec2b11843 asciiValue obsoleted by codePoint
Claus Gittinger <cg@exept.de>
parents: 11441
diff changeset
  2057
        g ~~ 0 ifTrue:[
711ec2b11843 asciiValue obsoleted by codePoint
Claus Gittinger <cg@exept.de>
parents: 11441
diff changeset
  2058
            h := h bitXor:(g bitShift:-24).
711ec2b11843 asciiValue obsoleted by codePoint
Claus Gittinger <cg@exept.de>
parents: 11441
diff changeset
  2059
            h := h bitXor:g.
711ec2b11843 asciiValue obsoleted by codePoint
Claus Gittinger <cg@exept.de>
parents: 11441
diff changeset
  2060
        ].
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2061
    ].
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2062
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2063
    "/ multiply by large prime to spread values
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2064
    "/ This speeds up Set and Dictionary by a factor of 10!!
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2065
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2066
    h := h * 31415821.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2067
    h := h bitAnd:16r3fffffff.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2068
    ^ h
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2069
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2070
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2071
     'a' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2072
     'a' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2073
     'aa' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2074
     'aa' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2075
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2076
     'ab' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2077
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2078
     'ab' asArray hash
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2079
    "
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2080
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2081
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2082
sameAs:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2083
    "Compare the receiver with the argument like =, but ignore case differences.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2084
     Return true or false."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2085
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2086
    |mySize "{ Class: SmallInteger }"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2087
     otherSize c1 c2|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2088
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2089
    self == aString ifTrue:[^ true].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2090
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2091
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2092
    otherSize := aString string size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2093
    mySize == otherSize ifFalse:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2094
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2095
    1 to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2096
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2097
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2098
	c1 == c2 ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2099
	    (c1 sameAs:c2) ifFalse:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2100
	]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2101
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2102
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2103
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2104
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2105
     'foo' sameAs: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2106
     'foo' sameAs: 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2107
     'foo' sameAs: 'foo'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2108
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2109
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2110
    "Modified: 22.4.1996 / 15:56:17 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2111
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2112
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2113
sameAs:aString ignoreCase:ignoreCase
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2114
    "Compare the receiver with the argument.
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2115
     If ignoreCase is true, this is the same as #sameAs:,
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2116
     if false, this is the same as #=."
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2117
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2118
    ignoreCase ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2119
	^ self sameAs:aString
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2120
    ].
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2121
    ^ self = aString
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2122
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2123
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2124
     'foo' sameAs:'Foo' ignoreCase:false
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2125
     'foo' sameAs:'foo' ignoreCase:true
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2126
    "
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2127
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2128
!
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2129
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2130
sameCharacters:aString
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2131
    "count & return the number of characters which are the same
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2132
     (ignoring case and emphasis) in the receiver and the argument, aString."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2133
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2134
    |n "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2135
     c1 c2 cnt|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2136
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2137
    n := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2138
    n := n min:(aString string size).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2139
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2140
    cnt := 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2141
    1 to:n do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2142
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2143
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2144
	((c1 == c2)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2145
	or:[c1 asLowercase = c2 asLowercase]) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2146
	    cnt := cnt + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2147
	]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2148
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2149
    ^ cnt
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2150
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2151
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2152
     'foobarbaz' sameCharacters: 'foo'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2153
     'foobarbaz' sameCharacters: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2154
     'foobarbaz' sameCharacters: 'baz'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2155
    "
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2156
!
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2157
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2158
sameEmphasisAs:aStringOrText
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2159
    "compare the receivers and the arguments emphasis"
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2160
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2161
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2162
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2163
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2164
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2165
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2166
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2167
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2168
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2169
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2170
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2171
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2172
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2173
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  2174
sameStringAndEmphasisAs:aStringOrText
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  2175
    "compare both emphasis and string of the receiver and the argument"
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2176
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2177
    aStringOrText isString ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2178
    (self string = aStringOrText string) ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2179
    self hasChangeOfEmphasis = aStringOrText hasChangeOfEmphasis ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2180
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2181
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2182
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2183
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2184
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2185
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2186
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2187
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2188
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2189
     'hello' sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2190
     'hello' sameEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2191
     'hello' sameEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2192
     'hello' sameEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2193
     'hello' sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2194
     'hello' sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2195
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2196
     'hello' asText sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2197
     'hello' asText sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2198
     'hello' asText allBold sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2199
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2200
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2201
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2202
     'hello' sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2203
     'hello' sameStringAndEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2204
     'hello' sameStringAndEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2205
     'hello' sameStringAndEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2206
     'hello' sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2207
     'hello' sameStringAndEmphasisAs: 'fooba' asText allItalic
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2208
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2209
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2210
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2211
!CharacterArray methodsFor:'converting'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2212
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2213
asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2214
    "return an array of substrings from the receiver, interpreting
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2215
     separators (i.e. spaces & newlines) as word-delimiters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2216
     This is a compatibility method - the actual work is done in
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2217
     asCollectionOfWords."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2218
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2219
    ^ self asCollectionOfWords asArray
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2220
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2221
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2222
     '1 one two three four 5 five' asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2223
     '1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2224
one
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2225
	two three four 5 five' asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2226
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2227
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2228
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2229
asCollectionOfLines
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2230
    "return a collection containing the lines (separated by cr)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2231
     of the receiver. If multiple cr's occur in a row, the result will
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2232
     contain empty strings."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2233
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2234
    ^ self asCollectionOfSubstringsSeparatedBy:Character cr
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2235
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2236
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2237
     '1 one\2 two\3 three\4 four\5 five' withCRs asCollectionOfLines
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2238
     '1 one\\\\2 two\3 three' withCRs asCollectionOfLines
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2239
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2240
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2241
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2242
asCollectionOfSubstringsSeparatedBy:aCharacter
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2243
    "return a collection containing the lines (separated by aCharacter)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2244
     of the receiver. If aCharacter occurs multiple times in a row,
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2245
     the result will contain empty strings."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2246
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2247
    ^ self asCollectionOfSubCollectionsSeparatedBy:aCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2248
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2249
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2250
     '1 one:2 two:3 three:4 four:5 five' withCRs asCollectionOfSubstringsSeparatedBy:$:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2251
     '1 one 2 two 3 three 4 four 5 five' withCRs asCollectionOfSubstringsSeparatedBy:Character space
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2252
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2253
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2254
10501
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2255
asCollectionOfSubstringsSeparatedBy: aFieldSeparator textSeparator:aTextSeparatorOrNil
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2256
    "return a collection containing the words (separated by aFieldSeparator)
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2257
     of the receiver. This allows breaking up csv strings."
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2258
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2259
    ^ self asCollectionOfSubstringsSeparatedByAll: aFieldSeparator
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2260
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2261
"/     '"First", "Second,SecondAdd", "Third"' asCollectionOfSubstringsSeparatedBy:',' textSeparator: '"'
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2262
"/     'First,Second,Third' asCollectionOfSubstringsSeparatedBy:',' textSeparator: nil
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2263
!
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2264
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2265
asCollectionOfSubstringsSeparatedByAll:aSeparatorString
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2266
    "return a collection containing the lines (separated by aSeparatorString)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2267
     of the receiver. If aSeparatorString occurs multiple times in a row,
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2268
     the result will contain empty strings."
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2269
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2270
    ^ self asCollectionOfSubCollectionsSeparatedByAll:aSeparatorString
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2271
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2272
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2273
     '1::2::3::4::5::' asCollectionOfSubstringsSeparatedByAll:'::'
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2274
    "
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2275
!
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2276
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2277
asCollectionOfSubstringsSeparatedByAny:aCollectionOfSeparators
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2278
    "return a collection containing the words (separated by any character
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2279
     from aCollectionOfSeparators) of the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2280
     This allows breaking up strings using any character as separator."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2281
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2282
    ^ self asCollectionOfSubCollectionsSeparatedByAny:aCollectionOfSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2283
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2284
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2285
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:#($:)
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2286
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:':'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2287
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:(Array with:$: with:Character space)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2288
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:': '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2289
     'h1e2l3l4o' asCollectionOfSubstringsSeparatedByAny:($1 to: $9)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2290
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2291
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2292
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2293
asCollectionOfWords
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2294
    "return a collection containing the words (separated by whitespace)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2295
     of the receiver. Multiple occurrences of whitespace characters will
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2296
     be treated like one - i.e. whitespace is skipped."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2297
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2298
    |words|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2299
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2300
    words := OrderedCollection new.
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2301
    self asCollectionOfWordsDo:[:w | words add:w].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2302
    ^ words
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2303
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2304
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2305
     'hello world isnt this nice' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2306
     '    hello    world   isnt   this   nice  ' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2307
     'hello' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2308
     '' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2309
     '      ' asCollectionOfWords
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2310
     ' foo bar__baz__bla__ bar ' asCollectionOfWords
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2311
     ' foo __bar__baz__bla__ bar ' asCollectionOfWords
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2312
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2313
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2314
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2315
asCollectionOfWordsDo:aBlock
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2316
    "evaluate aBlock for each word (separated by whitespace) of the receiver.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2317
     Multiple occurrences of whitespace characters will be treated like one
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2318
     - i.e. whitespace is skipped.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2319
     Returns the number of words (i.e. the number of invocations of aBlock)."
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2320
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2321
    |count  "{ Class:SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2322
     start  "{ Class:SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2323
     stop   "{ Class:SmallInteger }"
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2324
     mySize "{ Class:SmallInteger }"|
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2325
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2326
    count := 0.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2327
    start := 1.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2328
    mySize := self size.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2329
    [start <= mySize] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2330
	start := self indexOfNonSeparatorStartingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2331
	start == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2332
	    ^ count
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2333
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2334
	stop := self indexOfSeparatorStartingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2335
	stop == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2336
	    aBlock value:(self copyFrom:start to:mySize).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2337
	    ^ count + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2338
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2339
	aBlock value:(self copyFrom:start to:(stop - 1)).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2340
	start := stop.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2341
	count := count + 1
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2342
    ].
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2343
    ^ count
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2344
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2345
    "
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2346
     'hello world isnt this nice' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2347
     '    hello    world   isnt   this   nice  ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2348
     'hello' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2349
     '' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2350
     '      ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2351
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2352
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2353
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2354
asComposedText
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2355
    "ST-80 compatibility
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2356
     - ST/X does not (as today) support composedTexts."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2357
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2358
    ^ ComposedText fromString:self string
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2359
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2360
    "Modified: 27.4.1996 / 13:30:30 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2361
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2362
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2363
asFilename
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2364
    "return a Filename with pathname taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2365
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2366
    ^ Filename named:self "(self asSingleByteStringReplaceInvalidWith:$?)"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2367
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2368
    "Modified: 20.5.1996 / 09:38:15 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2369
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2370
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2371
asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2372
    "read a fixedPoint number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2373
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  2374
     so you better setup some signal handler when using this method."
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2375
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2376
    ^ FixedPoint readFromString:self
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2377
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2378
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2379
     '0.123' asFixedPoint
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2380
     '12345' asFixedPoint
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2381
     '(1/5)' asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2382
     'foo' asFixedPoint
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2383
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFixedPoint]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2384
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2385
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2386
    "Modified: / 25.10.1997 / 15:19:00 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2387
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2388
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2389
asFixedPoint:scale
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2390
    "read a fixedPoint number with scale number of post-decimal digits
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2391
     from the receiver. Scale controls the number of displayed digits,
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2392
     not the number of actually valid digits.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2393
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  2394
     so you better setup some signal handler when using this method."
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2395
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2396
    ^ (FixedPoint readFromString:self) scale:scale
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2397
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2398
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2399
     '0.123' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2400
     '123456' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2401
     ('3.14157' asFixedPoint:1) asFixedPoint:5
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2402
     '3.14157' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2403
     'foo' asFixedPoint:2
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2404
    "
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2405
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2406
    "Modified: / 25.10.1997 / 15:21:57 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2407
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2408
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2409
asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2410
    "read a float number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2411
     Notice, that errors may occur during the read,
7422
200486204923 comments
Claus Gittinger <cg@exept.de>
parents: 7421
diff changeset
  2412
     so you better setup some exception handler when using this method."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2413
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2414
    ^ (Number readFromString:self) asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2415
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2416
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2417
     '0.123' asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2418
     '12345' asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2419
     '(1/5)' asFloat
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2420
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFloat]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2421
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2422
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2423
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2424
asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2425
    "convert the receiver into an integer.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2426
     Notice, that errors may occur during the read,
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2427
     so you better setup some exception handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2428
     Also notice, that this method here is more strict than the code found
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2429
     in other smalltalks.
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2430
     For less strict integer reading, use Integer readFrom:aString"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2431
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2432
    ^ Integer readFromString:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2433
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2434
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2435
     '12345678901234567890' asInteger
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2436
     '-1234' asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2437
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2438
     The following raises an error:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2439
	 '0.123' asInteger              <- reader finds more after reading 0
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2440
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2441
     whereas the less strict readFrom does not:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2442
	 Integer readFrom:'0.123'       <- reader stops at ., returning 0
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2443
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2444
     '0.123' asInteger
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2445
     '0.123' asNumber    <- returns what you expect
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2446
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asInteger]
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2447
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2448
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2449
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2450
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2451
asLowercase
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2452
    "return a copy of myself in lowercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2453
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2454
    |newStr c bitsPerCharacter
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2455
     mySize "{ Class: SmallInteger }" |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2456
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2457
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2458
    mySize == 0 ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2459
    newStr := self species new:mySize.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2460
    bitsPerCharacter := newStr bitsPerCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2461
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2462
    1 to:mySize do:[:i |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2463
	c := (self at:i) asLowercase.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2464
	c bitsPerCharacter > bitsPerCharacter ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2465
	    newStr := c stringSpecies fromString:newStr.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2466
	].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2467
	newStr at:i put:c
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2468
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2469
    ^ newStr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2470
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2471
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2472
     'HelloWorld' asLowercase
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2473
     'HelloWorld' asLowercaseFirst
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2474
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2475
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2476
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2477
asLowercaseFirst
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2478
    "return a copy of myself where the first character is converted to lowercase."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2479
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2480
    |newString firstChar firstCharAsLowercase|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2481
11525
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
  2482
    self isEmpty ifTrue:[^ self].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2483
    firstChar := (self at:1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2484
    firstCharAsLowercase := firstChar asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2485
    firstChar == firstCharAsLowercase ifTrue:[ ^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2486
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2487
    firstCharAsLowercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
11525
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
  2488
        newString := firstCharAsLowercase stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2489
    ] ifFalse:[
11525
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
  2490
        newString := self stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2491
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2492
    newString at:1 put:firstCharAsLowercase.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2493
    ^ newString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2494
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2495
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2496
     'HelloWorld' asLowercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2497
     'HelloWorld' asLowercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2498
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2499
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2500
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2501
asNumber
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2502
    "read a number from the receiver.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2503
     Notice, that (in contrast to ST-80) errors may occur during the read,
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2504
     so you better setup some signal handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2505
     Also notice, that this is meant to read end-user numbers from a string;
9135
c6396149df08 comment
Claus Gittinger <cg@exept.de>
parents: 9087
diff changeset
  2506
     it does not handle smalltalk numbers (i.e. radix).
c6396149df08 comment
Claus Gittinger <cg@exept.de>
parents: 9087
diff changeset
  2507
     To read a smalltalk number, use Number >> readSmalltalkFrom:.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2508
     This may change if ANSI specifies it."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2509
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2510
"/ ST-80 behavior:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2511
"/  ^ Number readFromString:self onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2512
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2513
    ^ Number readFromString:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2514
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2515
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2516
     '123'     asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2517
     '123.567' asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2518
     '(5/6)'   asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2519
     'foo'     asNumber
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2520
     Object errorSignal handle:[:ex | ex returnWith:0] do:['foo' asNumber]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2521
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2522
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2523
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2524
asNumberFromFormatString:ignored
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2525
    "read a number from the receiver, ignoring any nonDigit characters.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2526
     This is typically used to convert from strings which include
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2527
     dollar-signs or millenium digits. However, this method also ignores
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2528
     the decimal point (if any) and therefore should be used with care."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2529
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2530
    |tempString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2531
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2532
    tempString := self collect:[:char | char isDigit].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2533
    ^ Number readFromString:tempString onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2534
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2535
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2536
     'USD 123' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2537
     'DM 123'  asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2538
     '123'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2539
     '123.567' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2540
     '(5/6)'   asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2541
     'foo'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2542
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2543
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2544
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2545
asOneByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2546
    "return the receiver converted to a 'normal' string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2547
     Same as asSingleByteString - for compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2548
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2549
    ^ self asSingleByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2550
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2551
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2552
asSingleByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2553
    "return the receiver converted to a 'normal' string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2554
     Raises an error if unrepresentable characters are encountered."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2555
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2556
    ^ String fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2557
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2558
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2559
asSingleByteStringIfPossible
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2560
    "if possible, return the receiver converted to a 'normal' string.
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2561
     It is only possible, if there are no characters with codePoints above 255 in the receiver."
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2562
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2563
    self bitsPerCharacter == 8 ifTrue:[^ self].
8102
e0537422e2d3 Use the ANSI-blessed #codePoint instead of deprecated #asciiValue
Stefan Vogel <sv@exept.de>
parents: 8083
diff changeset
  2564
    (self contains:[:char | char codePoint > 255]) ifFalse:[^ self asSingleByteString].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2565
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2566
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2567
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2568
     'hello' asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2569
     'hello' asUnicodeString asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2570
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2571
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2572
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2573
asSingleByteStringReplaceInvalidWith:replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2574
    "return the receiver converted to a 'normal' string,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2575
     with invalid characters replaced by replacementCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2576
     Can be used to convert from 16-bit strings to 8-bit strings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2577
     and replace characters above code-255 with some replacement."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2578
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2579
    |newString|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2580
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2581
    newString := String new:(self size).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2582
    1 to:self size do:[:idx |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2583
	|char|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2584
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2585
	char := self at:idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2586
	char codePoint <= 16rFF ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2587
	    newString at:idx put:char
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2588
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2589
	    newString at:idx put:replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2590
	].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2591
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2592
    ^ newString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2593
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2594
    "Created: 30.6.1997 / 13:02:14 / cg"
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2595
!
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2596
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2597
asSoundexCode
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2598
    "return a soundex string or nil.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2599
     Soundex returns similar codes for similar sounding words, making it a useful
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2600
     tool when searching for words where the correct spelling is unknown.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2601
     (read Knuth or search the web if you dont know what a soundex code is).
8862
6f550a144c6a isUnarySelector/isBinarySelector -> CharacterArray and fixed
Claus Gittinger <cg@exept.de>
parents: 8852
diff changeset
  2602
     Caveat: 'similar sounding words' means: 'similar sounding in english'."
5843
9fe653bcf3e1 soundex added
Claus Gittinger <cg@exept.de>
parents: 5815
diff changeset
  2603
11441
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2604
    |inStream codeStream ch last lch codeLength codes sc|
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2605
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2606
    inStream := self readStream.
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2607
    inStream skipSeparators.
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2608
    inStream atEnd ifTrue:[
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2609
        ^ nil
5843
9fe653bcf3e1 soundex added
Claus Gittinger <cg@exept.de>
parents: 5815
diff changeset
  2610
    ].
11441
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2611
    ch := inStream next.
5843
9fe653bcf3e1 soundex added
Claus Gittinger <cg@exept.de>
parents: 5815
diff changeset
  2612
    ch isLetter ifFalse:[
11441
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2613
        ^ nil
5843
9fe653bcf3e1 soundex added
Claus Gittinger <cg@exept.de>
parents: 5815
diff changeset
  2614
    ].
11441
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2615
    codeLength := 0.
5843
9fe653bcf3e1 soundex added
Claus Gittinger <cg@exept.de>
parents: 5815
diff changeset
  2616
9fe653bcf3e1 soundex added
Claus Gittinger <cg@exept.de>
parents: 5815
diff changeset
  2617
    codes := Dictionary new.
8862
6f550a144c6a isUnarySelector/isBinarySelector -> CharacterArray and fixed
Claus Gittinger <cg@exept.de>
parents: 8852
diff changeset
  2618
    codes atAll:'bpfv'     put:$1.
6f550a144c6a isUnarySelector/isBinarySelector -> CharacterArray and fixed
Claus Gittinger <cg@exept.de>
parents: 8852
diff changeset
  2619
    codes atAll:'cskgjqxz' put:$2.
6f550a144c6a isUnarySelector/isBinarySelector -> CharacterArray and fixed
Claus Gittinger <cg@exept.de>
parents: 8852
diff changeset
  2620
    codes atAll:'dt'       put:$3.
11441
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2621
    codes atAll:'l'        put:$4.
8862
6f550a144c6a isUnarySelector/isBinarySelector -> CharacterArray and fixed
Claus Gittinger <cg@exept.de>
parents: 8852
diff changeset
  2622
    codes atAll:'nm'       put:$5.
11441
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2623
    codes atAll:'r'        put:$6.
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2624
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2625
    codeStream := WriteStream on:(String new:4).
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2626
    codeStream nextPut:(ch asUppercase).
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2627
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2628
    [inStream atEnd] whileFalse:[
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2629
        ch := inStream next.
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2630
        lch := ch asLowercase.
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2631
        lch = last ifFalse:[
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2632
            last := lch.
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2633
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2634
            sc := codes at:ch ifAbsent:nil.
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2635
            sc notNil ifTrue:[
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2636
                codeLength < 3 ifTrue:[
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2637
                    codeStream nextPut:sc.
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2638
                    codeLength := codeLength + 1.
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2639
                ]
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2640
            ] ifFalse:[
5843
9fe653bcf3e1 soundex added
Claus Gittinger <cg@exept.de>
parents: 5815
diff changeset
  2641
"/                ch isLetter ifFalse:[
9fe653bcf3e1 soundex added
Claus Gittinger <cg@exept.de>
parents: 5815
diff changeset
  2642
"/                    "/ something else - ignore it
9fe653bcf3e1 soundex added
Claus Gittinger <cg@exept.de>
parents: 5815
diff changeset
  2643
"/                ] ifTrue:[
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2644
"/                    "/ else its a vowel and we ignore it
5843
9fe653bcf3e1 soundex added
Claus Gittinger <cg@exept.de>
parents: 5815
diff changeset
  2645
"/                ]
11441
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2646
            ].
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2647
        ]
5843
9fe653bcf3e1 soundex added
Claus Gittinger <cg@exept.de>
parents: 5815
diff changeset
  2648
    ].
11441
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2649
    [ codeLength < 3 ] whileTrue:[
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2650
        codeStream nextPut:$0.
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2651
        codeLength := codeLength + 1.
5843
9fe653bcf3e1 soundex added
Claus Gittinger <cg@exept.de>
parents: 5815
diff changeset
  2652
    ].
9fe653bcf3e1 soundex added
Claus Gittinger <cg@exept.de>
parents: 5815
diff changeset
  2653
11441
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2654
    ^ codeStream contents
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2655
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2656
    "
a20b998d098e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11348
diff changeset
  2657
     'claus' asSoundexCode     
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2658
     'clause' asSoundexCode
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2659
     'close' asSoundexCode
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2660
     'smalltalk' asSoundexCode
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2661
     'smaltalk' asSoundexCode
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2662
     'smaltak' asSoundexCode
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2663
     'smaltok' asSoundexCode
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2664
     'smoltok' asSoundexCode
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2665
     'aa' asSoundexCode
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2666
     'by' asSoundexCode
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2667
     'bab' asSoundexCode
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2668
     'bob' asSoundexCode
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2669
     'bop' asSoundexCode
5843
9fe653bcf3e1 soundex added
Claus Gittinger <cg@exept.de>
parents: 5815
diff changeset
  2670
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2671
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2672
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2673
asString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2674
    "return myself - I am a string"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2675
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2676
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2677
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2678
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2679
asStringCollection
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2680
    "return a collection of lines from myself."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2681
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2682
    ^ StringCollection fromString:self "string"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2683
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2684
    "Modified: 13.5.1996 / 20:36:59 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2685
!
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  2686
1434
a317ba02d685 allow aText asSymbol
Claus Gittinger <cg@exept.de>
parents: 1429
diff changeset
  2687
asSymbol
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  2688
    "Return a unique symbol with the name taken from the receivers characters.
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2689
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2690
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2691
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2692
    |str|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2693
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2694
    str := self string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2695
    str ~~ self ifTrue:[ ^ str asSymbol ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2696
    ^ self asSingleByteString asSymbol
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2697
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2698
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2699
asSymbolIfInterned
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2700
    "If a symbol with the receivers characters is already known, return it. Otherwise, return nil.
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  2701
     This can be used to query for an existing symbol and is the same as:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2702
	self knownAsSymbol ifTrue:[self asSymbol] ifFalse:[nil]
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2703
     but slightly faster, since the symbol lookup operation is only performed once.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2704
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2705
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  2706
6642
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2707
    |s|
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2708
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2709
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2710
    s := self string.
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2711
    s ~~ self ifTrue:[
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2712
       ^ s asSymbolIfInterned
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2713
    ].
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2714
    ^ nil.
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  2715
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  2716
    "Created: 22.5.1996 / 16:37:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2717
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2718
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2719
asText
9403
ba6ca2bcfe10 documentation
Stefan Vogel <sv@exept.de>
parents: 9391
diff changeset
  2720
    "return a Text-object (string with emphasis) from myself."
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2721
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2722
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2723
    Text isNil ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2724
    ^ Text fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2725
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2726
    "Created: 12.5.1996 / 10:41:14 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2727
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2728
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2729
asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2730
    "return a version of the receiver, where the first character is converted to titlecase,
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2731
     and everything else to lowercase.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2732
     See the comment in Character on what titlecase is."
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2733
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2734
    |newStr c bitsPerCharacter
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2735
     mySize "{ Class: SmallInteger }" |
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2736
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2737
    mySize := self size.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2738
    newStr := self species new:mySize.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2739
    bitsPerCharacter := newStr bitsPerCharacter.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2740
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2741
    1 to:mySize do:[:i |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2742
	i == 1 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2743
	    c := (self at:i) asTitlecase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2744
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2745
	    c := (self at:i) asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2746
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2747
	c bitsPerCharacter > bitsPerCharacter ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2748
	    newStr := c stringSpecies fromString:newStr.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2749
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2750
	newStr at:i put:c
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2751
    ].
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2752
    ^ newStr
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2753
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2754
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2755
     'helloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2756
     'HelloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2757
     'HELLOWORLD' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2758
     'helloworld' asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2759
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2760
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2761
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2762
asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2763
    "return a version of the receiver, where the first character is converted to titlecase.
8024
93db40068fba comment
Claus Gittinger <cg@exept.de>
parents: 8023
diff changeset
  2764
     Titlecase is much like uppercase for most characters, with the exception of some combined
93db40068fba comment
Claus Gittinger <cg@exept.de>
parents: 8023
diff changeset
  2765
     (2-character glyphs), which consist of an upper- and lower-case characters.
93db40068fba comment
Claus Gittinger <cg@exept.de>
parents: 8023
diff changeset
  2766
     If the first character is already titlecase, or there is no titlecasepercase for it, return the
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2767
     receiver."
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2768
8026
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2769
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2770
     For example, in Unicode, character U+01F3 is LATIN SMALL LETTER DZ.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2771
     (Let us write this compound character using ASCII as 'dz'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2772
     This character uppercases to character U+01F1, LATIN CAPITAL LETTER DZ.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2773
     (Which is basically 'DZ'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2774
     But it titlecases to to character U+01F2, LATIN CAPITAL LETTER D WITH SMALL LETTER Z.
8026
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2775
     (Which we can write 'Dz'.)
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2776
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2777
      character uppercase titlecase
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2778
      --------- --------- ---------
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2779
      dz        DZ        Dz
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2780
    "
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2781
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2782
    |newString firstChar firstCharAsTitlecase|
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2783
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2784
    firstChar := (self at:1).
8025
04d9b6ef3012 comments
Claus Gittinger <cg@exept.de>
parents: 8024
diff changeset
  2785
    firstCharAsTitlecase := firstChar asTitlecase.
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2786
    firstChar == firstCharAsTitlecase ifTrue:[ ^ self].
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2787
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2788
    firstCharAsTitlecase bitsPerCharacter > self bitsPerCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2789
	newString := firstCharAsTitlecase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2790
    ] ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2791
	newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2792
    ].
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2793
    newString at:1 put:firstCharAsTitlecase.
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2794
    ^ newString
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2795
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2796
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2797
     'helloWorld' asTitlecaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2798
     'HelloWorld' asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2799
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2800
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2801
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2802
asTwoByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2803
    "return the receiver converted to a two-byte string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2804
     Will be obsolete soon."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2805
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2806
    ^ TwoByteString fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2807
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2808
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2809
asURI
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2810
    "return an URI with string taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2811
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2812
    ^ URI fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2813
!
8710
Stefan Vogel <sv@exept.de>
parents: 8646
diff changeset
  2814
5776
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  2815
asURL
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  2816
    "return an URL-object from myself."
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  2817
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  2818
    ^ URL fromString:self
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  2819
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  2820
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2821
     'http://www.exept.de:80/index.html' asURL host
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2822
     'http://www.exept.de:80/index.html' asURL port
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2823
     'http://www.exept.de:80/index.html' asURL method
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2824
     'http://www.exept.de:80/index.html' asURL path
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2825
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2826
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2827
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2828
asUnicode16String
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2829
    "thats not really true - characters above ascii 16r7F may need special treatment"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2830
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2831
    ^ ((Unicode16String new:self size) replaceFrom:1 to:self size with:self startingAt:1)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2832
!
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2833
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2834
asUnicode32String
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2835
    "thats not really true - characters above ascii 16r7F may need special treatment"
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2836
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2837
    ^ ((Unicode32String new:self size) replaceFrom:1 to:self size with:self startingAt:1)
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2838
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2839
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2840
asUnicodeString
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2841
    "thats not really true - characters above ascii 16r7F may need special treatment"
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2842
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2843
    ^ ((UnicodeString new:self size) replaceFrom:1 to:self size with:self startingAt:1)
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2844
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2845
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2846
asUppercase
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2847
    "return a copy of myself in uppercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2848
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2849
    |newStr c bitsPerCharacter
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2850
     mySize "{ Class: SmallInteger }" |
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2851
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2852
    mySize := self size.
8954
12e701d7b5ac allow for receiver to be empty in asLowercase and asUppercase.
Claus Gittinger <cg@exept.de>
parents: 8938
diff changeset
  2853
    mySize == 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2854
    newStr := self species new:mySize.
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2855
    bitsPerCharacter := newStr bitsPerCharacter.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2856
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2857
    1 to:mySize do:[:i |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2858
	c := (self at:i) asUppercase.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2859
	c bitsPerCharacter > bitsPerCharacter ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2860
	    newStr := c stringSpecies fromString:newStr.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2861
	].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2862
	newStr at:i put:c
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2863
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2864
    ^ newStr
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2865
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2866
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2867
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2868
     'helloWorld' asUppercaseFirst
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2869
     (Character value:16rB5) asString asUppercase   -- needs 16 bits !!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2870
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2871
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2872
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2873
asUppercaseFirst
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2874
    "return a version of the receiver, where the first character is converted to uppercase.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2875
     If the first character is already uppercase, or there is no uppercase for it, return the
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2876
     receiver."
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2877
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2878
    |newString firstChar firstCharAsUppercase|
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2879
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2880
    firstChar := (self at:1).
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2881
    firstCharAsUppercase := firstChar asUppercase.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2882
    firstChar == firstCharAsUppercase ifTrue:[ ^ self].
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2883
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2884
    firstCharAsUppercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2885
	newString := firstCharAsUppercase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2886
    ] ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2887
	newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2888
    ].
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2889
    newString at:1 put:firstCharAsUppercase.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2890
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2891
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2892
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2893
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2894
     'helloWorld' asUppercaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2895
     'HelloWorld' asUppercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2896
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2897
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2898
11062
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  2899
literalArrayEncoding
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  2900
    "encode myself as an array literal, from which a copy of the receiver
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  2901
     can be reconstructed with #decodeAsLiteralArray."
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  2902
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  2903
    ^ self
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  2904
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  2905
    "Modified: 1.9.1995 / 02:25:45 / claus"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  2906
    "Modified: 22.4.1996 / 13:00:50 / cg"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  2907
!
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  2908
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2909
string
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2910
    "return the receiver - for ST-80 compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2911
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2912
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2913
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2914
    "Modified: 27.4.1996 / 13:29:30 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2915
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2916
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2917
tokensBasedOn:aCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2918
    "this is an ST-80 alias for the ST/X method
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2919
	asCollectionOfSubstringsSeparatedBy:"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2920
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2921
    ^ self asCollectionOfSubstringsSeparatedBy:aCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2922
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2923
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2924
     'hello:world:isnt:this nice' tokensBasedOn:$:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2925
     'foo,bar,baz' tokensBasedOn:$,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2926
     '/etc/passwd' asFilename readStream nextLine tokensBasedOn:$:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2927
    "
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  2928
!
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  2929
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  2930
writeStream
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  2931
    ^ CharacterWriteStream on:self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2932
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2933
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2934
!CharacterArray methodsFor:'copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2935
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2936
, aStringOrCharacter
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  2937
    "redefined to allow characters and mixed strings to be appended.
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  2938
     This is nonStandard, but convenient"
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  2939
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  2940
    |myWidth otherWidth|
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  2941
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  2942
    aStringOrCharacter isCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2943
	^ self copyWith:aStringOrCharacter
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  2944
    ].
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  2945
    aStringOrCharacter isText ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2946
	^ aStringOrCharacter concatenateFromString:self
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  2947
    ].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  2948
    aStringOrCharacter isString ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2949
	(otherWidth := aStringOrCharacter bitsPerCharacter) ~~ (myWidth := self bitsPerCharacter) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2950
	    otherWidth > myWidth ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2951
		^ (aStringOrCharacter species fromString:self) , aStringOrCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2952
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2953
	    ^ self , (self species fromString:aStringOrCharacter)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2954
	].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  2955
    ].
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  2956
    ^ super , aStringOrCharacter
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  2957
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  2958
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2959
     'hello' , $1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2960
     'hello' , '1'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2961
     'hello' , (' world' asText allBold)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2962
     'hello' , (JISEncodedString fromString:' world')
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  2963
     (JISEncodedString fromString:'hello') , ' world'
1411
a3b3ab3044c6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1396
diff changeset
  2964
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1411
diff changeset
  2965
     Transcript showCR:
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2966
	 (Text string:'hello' emphasis:#italic) , (Text string:' world' emphasis:#bold)
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  2967
    "
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  2968
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  2969
    "Modified: 28.6.1997 / 00:13:17 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2970
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2971
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2972
,, aString
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  2973
    "concatenate with a newLine in between"
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  2974
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  2975
    ^ (self copyWith:Character cr) , aString
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  2976
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  2977
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  2978
     hello ,, world
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  2979
     'hello' ,, 'world'
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  2980
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  2981
!
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  2982
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2983
chopTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2984
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2985
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2986
     in the middle have been removed for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2987
     of maxLen."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2988
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2989
    |sz n1 n2|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2990
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2991
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2992
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2993
    n1 := n2 := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2994
    maxLen odd ifTrue:[
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2995
	n2 := n1 + 1
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2996
    ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2997
    ^ (self copyFrom:1 to:n1) , (self copyFrom:sz - n2 + 1)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2998
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  2999
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3000
     '12345678901234'   chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3001
     '123456789012345'  chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3002
     '1234567890123456' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3003
     'aShortString' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3004
     'aVeryLongNameForAStringThatShouldBeShortened' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3005
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3006
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3007
    "Modified: / 24-10-2006 / 12:32:01 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3008
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3009
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3010
concatenate:string1 and:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3011
    "return the concatenation of myself and the arguments, string1 and string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3012
     This is equivalent to self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3013
     - generated by compiler when such a construct is detected and the receiver
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3014
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3015
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3016
    ^ self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3017
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3018
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3019
concatenate:string1 and:string2 and:string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3020
    "return the concatenation of myself and the string arguments.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3021
     This is equivalent to self , string1 , string2 , string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3022
     - generated by compiler when such a construct is detected and the receiver
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3023
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3024
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3025
    ^ self , string1 , string2 , string3
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3026
!
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3027
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3028
contractAtBeginningTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3029
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3030
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3031
     at the beginning have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3032
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3033
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3034
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3035
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3036
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3037
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3038
    ^ '...' , (self copyFrom:(sz - (maxLen - 4)))
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3039
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3040
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3041
     '12345678901234' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3042
     '123456789012345' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3043
     '1234567890123456' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3044
     'aShortString' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3045
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3046
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3047
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3048
    "Modified: / 24-10-2006 / 12:32:13 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3049
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3050
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3051
contractAtEndTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3052
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3053
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3054
     at the end have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3055
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3056
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3057
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3058
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3059
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3060
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3061
    ^ (self copyTo:maxLen-3),'...'
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3062
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3063
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3064
     '12345678901234' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3065
     '123456789012345' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3066
     '1234567890123456' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3067
     'aShortString' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3068
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3069
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3070
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3071
    "Modified: / 24-10-2006 / 12:32:26 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3072
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3073
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3074
contractLeftTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3075
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3076
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3077
     near the first quarter have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3078
     of maxLen. 
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3079
     Very similar to contractTo:, but better to abbreviate long filename entries, 
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3080
     where the right part is of more use than the left."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3081
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3082
    |sz "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3083
     halfSize quarterSize "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3084
     leftEnd rightEnd rightStart|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3085
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3086
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3087
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3088
    halfSize := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3089
    quarterSize := maxLen // 4.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3090
    leftEnd := quarterSize-1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3091
    rightEnd := maxLen - leftEnd - 3.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3092
    rightStart := sz - rightEnd + 1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3093
    ^ (self copyTo:leftEnd),'...',(self copyFrom:rightStart)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3094
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3095
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3096
     '12345678901234' contractLeftTo:15  
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3097
     '123456789012345' contractLeftTo:15     
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3098
     '1234567890123456' contractLeftTo:15   
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3099
     'aShortString' contractLeftTo:15             
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3100
     'aVeryLongNameForAStringThatShouldBeShortened' contractLeftTo:15  
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3101
     'C:\Dokumente und Einstellungen\cg\work\bosch\dapas\hw_schnittstellen\DAPAS__HpibDLL.st' contractLeftTo:40
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3102
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3103
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3104
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3105
contractTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3106
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3107
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3108
     in the middle have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3109
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3110
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3111
    |sz "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3112
     halfSize "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3113
     leftEnd rightStart|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3114
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3115
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3116
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3117
    halfSize := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3118
    leftEnd := halfSize-1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3119
    rightStart := sz-halfSize+2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3120
    halfSize even ifTrue:[
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3121
	rightStart := rightStart+1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3122
    ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3123
    ^ (self copyTo:leftEnd),'...',(self copyFrom:rightStart)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3124
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3125
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3126
     '12345678901234' contractTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3127
     '123456789012345' contractTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3128
     '1234567890123456' contractTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3129
     'aShortString' contractTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3130
     'aVeryLongNameForAStringThatShouldBeShortened' contractTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3131
     'C:\Dokumente und Einstellungen\cg\work\bosch\dapas\hw_schnittstellen\DAPAS__HpibDLL.st' contractTo:40
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3132
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3133
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3134
    "Modified: / 24-10-2006 / 12:23:56 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3135
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3136
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3137
copyReplaceString:subString withString:newString
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3138
    "return a copy of the receiver, with all sequences of subString replaced
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3139
     by newString (i.e. slice in the newString in place of the oldString)."
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3140
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3141
    |tmpStream idx idx1|
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3142
11348
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  3143
    tmpStream := CharacterWriteStream on:(self class new).
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3144
    idx := 1.
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3145
    [idx ~~ 0] whileTrue:[
11348
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  3146
        idx1 := idx.
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  3147
        idx := self indexOfSubCollection:subString startingAt:idx.
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  3148
        idx ~~ 0 ifTrue:[
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  3149
            tmpStream nextPutAll:(self copyFrom:idx1 to:idx-1).
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  3150
            tmpStream nextPutAll:newString.
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  3151
            idx := idx + subString size
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  3152
        ]
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3153
    ].
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3154
    tmpStream nextPutAll:(self copyFrom:idx1).
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3155
    ^ tmpStream contents
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3156
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3157
   "
9306
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3158
     '12345678901234567890' copyReplaceString:'123' withString:'OneTwoThree'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3159
     '12345678901234567890' copyReplaceString:'123' withString:'*'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3160
     '12345678901234567890' copyReplaceString:'234' withString:'foo'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3161
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3162
     ('a string with spaces' copyReplaceAll:$  withAll:' foo ')
11348
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  3163
        copyReplaceString:'foo' withString:'bar'
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3164
    "
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3165
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3166
    "Modified: / 31-05-1999 / 12:33:59 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3167
    "Created: / 12-05-2004 / 12:00:00 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3168
!
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3169
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3170
copyWith:aCharacter
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3171
    "return a new string containing the receivers characters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3172
     and the single new character, aCharacter.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3173
     This is different from concatentation, which expects another string
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3174
     as argument, but equivalent to copy-and-addLast.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3175
     The code below cares for different width characters
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3176
     (i.e. when appending a 16bit char to an 8bit string)"
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3177
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3178
    |sz newString|
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3179
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3180
    aCharacter bitsPerCharacter > self bitsPerCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3181
	sz := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3182
	newString := aCharacter stringSpecies new:sz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3183
	newString replaceFrom:1 to:sz with:self startingAt:1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3184
	newString at:sz+1 put:aCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3185
	^ newString.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3186
    ].
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3187
    ^ super copyWith:aCharacter
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3188
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3189
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3190
!CharacterArray methodsFor:'displaying'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3191
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3192
displayOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3193
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3194
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3195
    "q&d hack"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3196
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3197
    (self copyFrom:start to:stop) displayOn:aGC x:x y:y opaque:false
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3198
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3199
    "Modified: 12.5.1996 / 12:49:33 / cg"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3200
!
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3201
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  3202
displayOn:aGc x:x y:y opaque:opaque
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3203
    "display the receiver in a graphicsContext - this method allows
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3204
     strings to be used like DisplayObjects."
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3205
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3206
    |s|
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3207
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3208
    s := self string.
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  3209
    opaque ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3210
	aGc displayOpaqueString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3211
    ] ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3212
	aGc displayString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3213
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3214
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3215
    "Modified: 11.5.1996 / 14:42:48 / cg"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3216
!
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3217
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3218
displayOpaqueOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3219
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3220
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3221
    "q&d hack"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3222
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3223
    (self copyFrom:start to:stop) displayOn:aGC x:x y:y opaque:true
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3224
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3225
    "Created: 12.5.1996 / 12:29:37 / cg"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3226
    "Modified: 12.5.1996 / 12:49:19 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3227
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3228
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3229
!CharacterArray methodsFor:'emphasis'!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3230
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3231
actionForAll:aBlock
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3232
    "change the action block of all characters"
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3233
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3234
    ^ self asText actionForAll:aBlock
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3235
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3236
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3237
allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3238
    "return a test object representing the receiver, but all boldified"
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3239
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3240
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
6187
d4788adb7a8e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6184
diff changeset
  3241
    Text isNil ifTrue:[^ self].
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3242
    ^ self asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3243
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3244
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3245
     Transcript showCR:'hello' asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3246
     Transcript showCR:'hello' allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3247
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3248
!
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3249
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3250
allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3251
    "return a test object representing the receiver, but all in italic"
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3252
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3253
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
6187
d4788adb7a8e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6184
diff changeset
  3254
    Text isNil ifTrue:[^ self].
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3255
    ^ self asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3256
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3257
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3258
     Transcript showCR:'hello' asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3259
     Transcript showCR:'hello' allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3260
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3261
!
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3262
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3263
allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3264
    "return a test object representing the receiver, but all in strikeout"
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3265
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3266
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3267
    Text isNil ifTrue:[^ self].
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3268
    ^ self asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3269
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3270
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3271
     Transcript showCR:'hello' asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3272
     Transcript showCR:'hello' allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3273
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3274
!
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3275
10862
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3276
allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3277
    "return a test object representing the receiver, but all with underline"
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3278
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3279
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3280
    Text isNil ifTrue:[^ self].
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3281
    ^ self asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3282
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3283
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3284
     Transcript showCR:'hello' asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3285
     Transcript showCR:'hello' allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3286
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3287
!
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3288
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3289
colorizeAllWith:aColor
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3290
    ^ self asText colorizeAllWith:aColor
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3291
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3292
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3293
     Transcript showCR:('hello' colorizeAllWith:Color red)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3294
     Transcript showCR:('world' colorizeAllWith:Color green darkened)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3295
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3296
!
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3297
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3298
emphasis
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3299
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3300
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3301
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3302
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3303
    ^ RunArray new:self size withAll:nil
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3304
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3305
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3306
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3307
6655
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3308
emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3309
    ^ self asText emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3310
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3311
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3312
     Transcript showCR:('hello' emphasis:#(bold bold bold bold bold))
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3313
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3314
!
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3315
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3316
emphasisAt:characterIndex
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3317
    "return the emphasis at some index.
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3318
     Since characterArrays do not hold any emphasis information,
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3319
     nil (no emphasis) is returned here."
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3320
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3321
    ^ nil
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3322
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3323
    "Created: 11.5.1996 / 14:13:27 / cg"
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3324
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3325
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3326
emphasisAtPoint:aPoint on:aGC
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3327
    "return the emphasis at a given point, or nil if there is none"
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3328
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3329
    ^ nil
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3330
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3331
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3332
emphasisCollection
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3333
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3334
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3335
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3336
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3337
    ^ RunArray new:(self size)
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3338
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3339
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3340
    "Modified: 14.5.1996 / 15:02:29 / cg"
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3341
!
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3342
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3343
emphasizeAllWith:emphasis
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3344
    ^ self asText emphasizeAllWith:emphasis
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3345
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3346
    "
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3347
     Transcript showCR:('hello' emphasizeAllWith:#bold)
3599
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3348
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3349
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3350
    "
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3351
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3352
    "Modified: / 17.6.1998 / 12:51:44 / cg"
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3353
!
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3354
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3355
makeSelectorBoldIn:aClass
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3356
    "the receiver represents some source code for
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3357
     a method in aClass.
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3358
     Change myself to boldify the selector.
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3359
     Not yet implemented (could easily use the syntaxHighlighter
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3360
     for this ...)"
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3361
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3362
    ^ self
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3363
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3364
    "Modified: / 13.12.1999 / 21:49:11 / cg"
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3365
    "Created: / 13.12.1999 / 21:49:24 / cg"
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3366
!
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3367
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3368
withoutEmphasis:emphasisToRemove
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3369
    ^ self
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3370
! !
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3371
7265
3b007758ff5b method category rename
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  3372
!CharacterArray methodsFor:'encoding & decoding'!
991
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  3373
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  3374
decodeFrom:encodingSymbol
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3375
    "given the receiver encoded as described by encodingSymbol,
8124
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  3376
     convert it into internal ST/X (unicode) encoding and return a corresponding CharacterArray."
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  3377
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  3378
    |myEncoding encoder|
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3379
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3380
    encodingSymbol isNil ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3381
    myEncoding := self encoding.
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3382
    encodingSymbol == myEncoding ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3383
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3384
    encoder := CharacterEncoder encoderToEncodeFrom:(self encoding) into:encodingSymbol.
8124
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  3385
    encoder isNil ifTrue:[^ self].
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  3386
    ^ encoder decodeString:self.
991
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  3387
!
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  3388
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3389
encodeFrom:oldEncoding into:newEncoding
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3390
    ^ CharacterEncoder encodeString:self from:oldEncoding into:newEncoding
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3391
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3392
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3393
rot13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3394
     "Usenet: from `rotate alphabet 13 places']
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3395
      The simple Caesar-cypher encryption that replaces each English
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3396
      letter with the one 13 places forward or back along the alphabet,
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3397
      so that 'The butler did it!!' becomes 'Gur ohgyre qvq vg!!'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3398
      Most Usenet news reading and posting programs include a rot13 feature.
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3399
      It is used to enclose the text in a sealed wrapper that the reader must choose
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3400
      to open -- e.g., for posting things that might offend some readers, or spoilers.
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3401
      A major advantage of rot13 over rot(N) for other N is that it
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3402
      is self-inverse, so the same code can be used for encoding and decoding."
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3403
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3404
    ^ self species
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3405
	streamContents:[:aStream |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3406
	    self do:[:char |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3407
		aStream nextPut:char rot13 ]]
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3408
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3409
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3410
     'hello world' rot13
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3411
     'hello world' rot13 rot13
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3412
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3413
!
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3414
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3415
utf8Decoded
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3416
    "Interpreting myself as an UTF-8 representation, decode and return the decoded string."
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3417
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3418
    |in out is16Bit c|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3419
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3420
    is16Bit := false.
11326
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  3421
    out := CharacterWriteStream on:(String uninitializedNew:self size).
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3422
    in := self readStream.
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3423
    [in atEnd] whileFalse:[
11326
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  3424
        c := Character utf8DecodeFrom:in.
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  3425
        out nextPut:c.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3426
    ].
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3427
    ^ out contents
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3428
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3429
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3430
     #[16rC8 16rA0] asString utf8Decoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3431
     (Character value:16r220) utf8Encoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3432
     (Character value:16r220) utf8Encoded utf8Decoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3433
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3434
     (Character value:16r800) utf8Encoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3435
     (Character value:16r220) utf8Encoded utf8Decoded
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3436
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3437
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3438
    "test:
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3439
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3440
      |utf8Encoding original readBack|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3441
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3442
      1 to:16rFFFF do:[:ascii |
11326
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  3443
        original := (Character value:ascii) asString.
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  3444
        utf8Encoding := original utf8Encoded.
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  3445
        readBack := utf8Encoding utf8Decoded.
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  3446
        readBack = original ifFalse:[
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  3447
            self halt
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  3448
        ]
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3449
      ]
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3450
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3451
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3452
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3453
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3454
    "Interpreting myself as an UTF-8 representation, decode and return
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3455
     the decoded string. Suppress all 2-byte (above 16rFF) characters,
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3456
     and replace them with replacementCharacter"
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3457
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3458
    |in out c|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3459
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  3460
    out := WriteStream on:(String uninitializedNew:self size).
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3461
    in := self readStream.
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3462
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3463
	c := Character utf8DecodeFrom:in.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3464
	c codePoint > 16rFF ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3465
	    c := replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3466
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3467
	out nextPut:c.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3468
    ].
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3469
    ^ out contents
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3470
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3471
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3472
     (Character value:16r220) utf8Encoded
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3473
	utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3474
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3475
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3476
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3477
utf8Encoded
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3478
    "Return my UTF-8 representation as a new String"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3479
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3480
    |s|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3481
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3482
    s := WriteStream on:(String uninitializedNew:self size).
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3483
    s nextPutAllUtf8:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3484
    ^ s contents
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3485
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3486
    "
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3487
        'abcdeäöüß' utf8Encoded
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3488
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3489
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3490
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3491
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3492
!CharacterArray methodsFor:'padded copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3493
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3494
centerPaddedTo:newSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3495
     "return a new string consisting of the receivers characters,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3496
     plus spaces up to length and center the receivers characters in
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3497
     the resulting string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3498
     If the receivers size is equal or greater than the length argument,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3499
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3500
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3501
     ^ self centerPaddedTo:newSize with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3502
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3503
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3504
     'foo' centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3505
     123 printString centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3506
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3507
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3508
    "Created: 25.11.1995 / 10:53:57 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3509
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3510
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3511
centerPaddedTo:size with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3512
    "return a new string of length size, which contains the receiver
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3513
     centered (i.e. padded on both sides).
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3514
     Characters are filled with padCharacter.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3515
     If the receivers size is equal or greater than the length argument,
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3516
     the original receiver is returned unchanged."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3517
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3518
    |len s|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3519
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3520
    len := self size.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3521
    (len < size) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3522
	s := self species new:size withAll:padCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3523
	s replaceFrom:(size - len) // 2  + 1 with:self.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3524
	^ s
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3525
    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3526
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3527
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3528
     'foo' centerPaddedTo:11 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3529
     'fooBar' centerPaddedTo:5 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3530
     123 printString centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3531
     (' ' , 123 printString) centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3532
     (Float pi printString) centerPaddedTo:15 with:(Character space)
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3533
     (Float pi printString) centerPaddedTo:15 with:$-
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3534
     (' ' , Float pi class name) centerPaddedTo:15 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3535
    "
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3536
!
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3537
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3538
decimalPaddedTo:size and:afterPeriod at:decimalCharacter
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3539
    "return a new string of overall length size, which contains the receiver
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3540
     aligned at the decimal-period column and afterPeriod characters to the right
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3541
     of the period. The periodCharacter is passed as arguments (allowing for US and European formats
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3542
     to be padded).
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3543
     If the receivers size is equal or greater than the length argument,
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3544
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3545
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3546
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3547
    ^ self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3548
	decimalPaddedTo:size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3549
	and:afterPeriod
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3550
	at:decimalCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3551
	withLeft:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3552
	right:$0
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3553
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3554
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3555
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123    '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3556
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123.000'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3557
     '123.' decimalPaddedTo:10 and:3 at:$.     -> '   123.000'
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3558
     '123.1' decimalPaddedTo:10 and:3 at:$.    -> '   123.100'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3559
     '123.1' decimalPaddedTo:10 and:3 at:$.    -> '   123.1  '
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3560
     '123.123' decimalPaddedTo:10 and:3 at:$.  -> '   123.123'
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3561
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3562
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3563
    "Created: 23.12.1995 / 13:11:52 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3564
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3565
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3566
decimalPaddedTo:size and:afterPeriod at:decimalCharacter withLeft:leftPadChar right:rightPadChar
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3567
    "return a new string of overall length size, which contains the receiver
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3568
     aligned at the decimal-period column and afterPeriod characters to the right
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3569
     of the period.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3570
     Characters on the left are filled with leftPadChar.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3571
     If rightPadChar is nil, characters on the right are filled with leftPadCharacter too;
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3572
     otherwise, if missing, a decimal point is added and right characters filled with this.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3573
     If the receivers size is equal or greater than the length argument,
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3574
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3575
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3576
5230
655c21ffe6cc care for negative size of rest-string when decimalPadding
Claus Gittinger <cg@exept.de>
parents: 5221
diff changeset
  3577
    |s idx n rest|
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3578
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3579
    idx := self indexOf:decimalCharacter.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3580
    idx == 0 ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3581
	"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3582
	"/ no decimal point found; adjust string to the left of the period column
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3583
	"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3584
	rightPadChar isNil ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3585
	    s := self , (self species new:afterPeriod + 1 withAll:leftPadChar)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3586
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3587
	    s:= self , decimalCharacter asString , (self species new:afterPeriod withAll:rightPadChar).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3588
	].
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3589
    ] ifFalse:[
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3590
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3591
	"/ the number of after-decimalPoint characters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3592
	n := self size - idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3593
	rest := afterPeriod - n.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3594
	rest > 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3595
	    s := (self species new:rest withAll:(rightPadChar ? leftPadChar)).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3596
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3597
	    s := ''
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3598
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3599
	s := self , s.
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3600
    ].
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3601
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3602
    ^ s leftPaddedTo:size with:leftPadChar
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3603
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3604
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3605
     '123' decimalPaddedTo:10 and:3 at:$. withLeft:(Character space) right:nil     -> '   123    '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3606
     '123' decimalPaddedTo:10 and:3 at:$. withLeft:(Character space) right:$0      -> '   123.000'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3607
     '123.' decimalPaddedTo:10 and:3 at:$. withLeft:(Character space) right:$0     -> '   123.000'
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3608
     '123.1' decimalPaddedTo:10 and:3 at:$. withLeft:(Character space) right:$0    -> '   123.100'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3609
     '123.1' decimalPaddedTo:10 and:3 at:$. withLeft:(Character space) right:nil   -> '   123.1  '
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3610
     '123.123' decimalPaddedTo:10 and:3 at:$. withLeft:(Character space) right:$0  -> '   123.123'
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3611
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3612
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  3613
    "Modified: 23.12.1995 / 13:08:18 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3614
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3615
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3616
leftPaddedTo:size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3617
    "return a new string of length size, which contains the receiver
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3618
     right-adjusted (i.e. padded on the left).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3619
     Characters on the left are filled with spaces.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3620
     If the receivers size is equal or greater than the length argument,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3621
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3622
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3623
    ^ self leftPaddedTo:size with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3624
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3625
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3626
     'foo' leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3627
     'fooBar' leftPaddedTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3628
     123 printString leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3629
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3630
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3631
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3632
paddedTo:newSize
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3633
     "return a new string consisting of the receivers characters,
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3634
     plus spaces up to length.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3635
     If the receivers size is equal or greater than the length argument,
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3636
     the original receiver is returned unchanged."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3637
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3638
     ^ self paddedTo:newSize with:(Character space)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3639
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3640
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3641
     'foo' paddedTo:10
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3642
     123 printString paddedTo:10
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3643
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  3644
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  3645
328
claus
parents: 327
diff changeset
  3646
!CharacterArray methodsFor:'pattern matching'!
claus
parents: 327
diff changeset
  3647
2551
46c18418fb05 added compoundMatch
Claus Gittinger <cg@exept.de>
parents: 2537
diff changeset
  3648
compoundMatch:aString
3253
735ed6008eef Fix typo
Stefan Vogel <sv@exept.de>
parents: 3195
diff changeset
  3649
    "like match, but the receiver may be a compound match pattern,
2551
46c18418fb05 added compoundMatch
Claus Gittinger <cg@exept.de>
parents: 2537
diff changeset
  3650
     consisting of multiple simple patterns, separated by semicolons.
46c18418fb05 added compoundMatch
Claus Gittinger <cg@exept.de>
parents: 2537
diff changeset
  3651
     This is usable with fileName pattern fields."
46c18418fb05 added compoundMatch
Claus Gittinger <cg@exept.de>
parents: 2537
diff changeset
  3652
5124
727f88b16fb3 case-insensitive version of compoundMatch: added
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
  3653
    ^self compoundMatch:aString ignoreCase:false
727f88b16fb3 case-insensitive version of compoundMatch: added
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
  3654
727f88b16fb3 case-insensitive version of compoundMatch: added
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
  3655
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3656
     'f*' match:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3657
     'b*' match:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3658
     'f*;b*' match:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3659
     'f*;b*' match:'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3660
     'f*;b*' compoundMatch:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3661
     'f*;b*' compoundMatch:'bar'
5124
727f88b16fb3 case-insensitive version of compoundMatch: added
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
  3662
    "
727f88b16fb3 case-insensitive version of compoundMatch: added
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
  3663
727f88b16fb3 case-insensitive version of compoundMatch: added
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
  3664
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
727f88b16fb3 case-insensitive version of compoundMatch: added
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
  3665
    "Modified: / 16.12.1999 / 01:22:08 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3666
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3667
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3668
compoundMatch:aString ignoreCase:ignoreCase
5124
727f88b16fb3 case-insensitive version of compoundMatch: added
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
  3669
    "like match, but the receiver may be a compound match pattern,
727f88b16fb3 case-insensitive version of compoundMatch: added
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
  3670
     consisting of multiple simple patterns, separated by semicolons.
727f88b16fb3 case-insensitive version of compoundMatch: added
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
  3671
     This is usable with fileName pattern fields."
727f88b16fb3 case-insensitive version of compoundMatch: added
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
  3672
2551
46c18418fb05 added compoundMatch
Claus Gittinger <cg@exept.de>
parents: 2537
diff changeset
  3673
    |matchers|
46c18418fb05 added compoundMatch
Claus Gittinger <cg@exept.de>
parents: 2537
diff changeset
  3674
46c18418fb05 added compoundMatch
Claus Gittinger <cg@exept.de>
parents: 2537
diff changeset
  3675
    matchers := self asCollectionOfSubstringsSeparatedBy:$;.
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3676
    ^ matchers contains:[:aPattern |
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3677
	aPattern match:aString ignoreCase:ignoreCase escapeCharacter:nil
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3678
      ].
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  3679
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  3680
"/    matchers do:[:aPattern |
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  3681
"/        (aPattern match:aString ignoreCase:ignoreCase) ifTrue:[^ true].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  3682
"/    ].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  3683
"/    ^ false.
2551
46c18418fb05 added compoundMatch
Claus Gittinger <cg@exept.de>
parents: 2537
diff changeset
  3684
46c18418fb05 added compoundMatch
Claus Gittinger <cg@exept.de>
parents: 2537
diff changeset
  3685
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3686
     'f*' match:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3687
     'b*' match:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3688
     'f*;b*' match:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3689
     'f*;b*' match:'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3690
     'f*;b*' compoundMatch:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3691
     'f*;b*' compoundMatch:'bar'
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3692
     'f*;b*' compoundMatch:'Foo' ignoreCase:true
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3693
     'f*;b*' compoundMatch:'Bar' ignoreCase:true
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3694
     'f*;b*' compoundMatch:'ccc' ignoreCase:true
2551
46c18418fb05 added compoundMatch
Claus Gittinger <cg@exept.de>
parents: 2537
diff changeset
  3695
    "
46c18418fb05 added compoundMatch
Claus Gittinger <cg@exept.de>
parents: 2537
diff changeset
  3696
3253
735ed6008eef Fix typo
Stefan Vogel <sv@exept.de>
parents: 3195
diff changeset
  3697
    "Modified: / 15.4.1997 / 15:50:33 / cg"
735ed6008eef Fix typo
Stefan Vogel <sv@exept.de>
parents: 3195
diff changeset
  3698
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
5124
727f88b16fb3 case-insensitive version of compoundMatch: added
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
  3699
    "Created: / 16.12.1999 / 01:21:35 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3700
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3701
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3702
findMatchString:matchString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3703
    "like findString/indexOfSubCollection, but allowing match patterns.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3704
     find matchstring; if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3705
     if not found, return 0."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3706
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3707
    ^ self findMatchString:matchString startingAt:1 ignoreCase:false ifAbsent:0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3708
!
328
claus
parents: 327
diff changeset
  3709
claus
parents: 327
diff changeset
  3710
findMatchString:matchString startingAt:index
claus
parents: 327
diff changeset
  3711
    "like findString, but allowing match patterns.
claus
parents: 327
diff changeset
  3712
     find matchstring, starting at index. if found, return the index;
claus
parents: 327
diff changeset
  3713
     if not found, return 0."
claus
parents: 327
diff changeset
  3714
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3715
    ^ self findMatchString:matchString startingAt:index ignoreCase:false ifAbsent:0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3716
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3717
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3718
findMatchString:matchString startingAt:index ignoreCase:ignoreCase ifAbsent:exceptionBlock
328
claus
parents: 327
diff changeset
  3719
    "like findString, but allowing match patterns.
claus
parents: 327
diff changeset
  3720
     find matchstring, starting at index. if found, return the index;
claus
parents: 327
diff changeset
  3721
     if not found, return the result of evaluating exceptionBlock.
claus
parents: 327
diff changeset
  3722
     This is a q&d hack - not very efficient"
claus
parents: 327
diff changeset
  3723
2916
dd8672addeca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2833
diff changeset
  3724
    |firstChar firstSet
328
claus
parents: 327
diff changeset
  3725
     startIndex "{ Class: SmallInteger }"
claus
parents: 327
diff changeset
  3726
     matchSize  "{ Class: SmallInteger }"
claus
parents: 327
diff changeset
  3727
     mySize     "{ Class: SmallInteger }"
8032
af9606171d86 string match for 16bit characters (do not use #== to compare characters)
Claus Gittinger <cg@exept.de>
parents: 8027
diff changeset
  3728
     realMatchString lcChar ucChar|
328
claus
parents: 327
diff changeset
  3729
claus
parents: 327
diff changeset
  3730
    matchSize := matchString size.
claus
parents: 327
diff changeset
  3731
    matchSize == 0 ifTrue:[^ index]. "empty string matches"
claus
parents: 327
diff changeset
  3732
claus
parents: 327
diff changeset
  3733
    realMatchString := matchString.
claus
parents: 327
diff changeset
  3734
    (realMatchString endsWith:$*) ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3735
	realMatchString := realMatchString , '*'.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3736
	matchSize := matchSize + 1
328
claus
parents: 327
diff changeset
  3737
    ].
claus
parents: 327
diff changeset
  3738
claus
parents: 327
diff changeset
  3739
    mySize := self size.
claus
parents: 327
diff changeset
  3740
    firstChar := realMatchString at:1.
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  3741
    firstChar == self class matchEscapeCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3742
	firstChar := realMatchString at:2.
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  3743
    ].
328
claus
parents: 327
diff changeset
  3744
claus
parents: 327
diff changeset
  3745
    firstChar asString includesMatchCharacters ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3746
	index to:mySize do:[:col |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3747
	    (realMatchString match:self from:col to:mySize ignoreCase:ignoreCase)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3748
	    ifTrue:[^ col]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3749
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3750
	^ exceptionBlock value.
328
claus
parents: 327
diff changeset
  3751
    ].
8032
af9606171d86 string match for 16bit characters (do not use #== to compare characters)
Claus Gittinger <cg@exept.de>
parents: 8027
diff changeset
  3752
af9606171d86 string match for 16bit characters (do not use #== to compare characters)
Claus Gittinger <cg@exept.de>
parents: 8027
diff changeset
  3753
    lcChar := firstChar asLowercase.
af9606171d86 string match for 16bit characters (do not use #== to compare characters)
Claus Gittinger <cg@exept.de>
parents: 8027
diff changeset
  3754
    ucChar := firstChar asUppercase.
af9606171d86 string match for 16bit characters (do not use #== to compare characters)
Claus Gittinger <cg@exept.de>
parents: 8027
diff changeset
  3755
    (ignoreCase and:[ lcChar ~= ucChar]) ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3756
	firstSet := Array with:ucChar with:lcChar.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3757
	startIndex := self indexOfAny:firstSet startingAt:index.
2916
dd8672addeca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2833
diff changeset
  3758
    ] ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3759
	startIndex := self indexOf:firstChar startingAt:index.
2916
dd8672addeca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2833
diff changeset
  3760
    ].
328
claus
parents: 327
diff changeset
  3761
    [startIndex == 0] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3762
	(realMatchString match:self from:startIndex to:mySize ignoreCase:ignoreCase)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3763
	ifTrue:[^ startIndex].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3764
	firstSet notNil ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3765
	    startIndex := self indexOfAny:firstSet startingAt:(startIndex + 1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3766
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3767
	    startIndex := self indexOf:firstChar startingAt:(startIndex + 1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3768
	].
328
claus
parents: 327
diff changeset
  3769
    ].
claus
parents: 327
diff changeset
  3770
    ^ exceptionBlock value
claus
parents: 327
diff changeset
  3771
claus
parents: 327
diff changeset
  3772
    "
claus
parents: 327
diff changeset
  3773
     'one two three four' findMatchString:'o[nu]'
claus
parents: 327
diff changeset
  3774
     'one two three four' findMatchString:'o[nu]' startingAt:3
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3775
     'one two three four one' findMatchString:'ONE' startingAt:3 ignoreCase:true ifAbsent:0
328
claus
parents: 327
diff changeset
  3776
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  3777
2916
dd8672addeca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2833
diff changeset
  3778
    "Modified: 13.9.1997 / 06:31:22 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3779
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3780
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3781
includesMatchString:matchString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3782
    "like includesString, but allowing match patterns.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3783
     find matchstring; if found, return true, otherwise return false"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3784
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3785
    ^ (self findMatchString:matchString) ~~ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3786
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3787
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3788
     'hello world' includesMatchString:'h*'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3789
     'hello world' includesMatchString:'h[aeiou]llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3790
     'hello world' includesMatchString:'wor*'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3791
     'hello world' includesMatchString:'woR*'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3792
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3793
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3794
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3795
includesMatchString:matchString caseSensitive:caseSensitive
9058
222a3167a516 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9049
diff changeset
  3796
    "like includesString, but allowing match patterns.
222a3167a516 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9049
diff changeset
  3797
     find matchstring; if found, return true, otherwise return false"
222a3167a516 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9049
diff changeset
  3798
222a3167a516 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9049
diff changeset
  3799
    ^ (self findMatchString:matchString startingAt:1 ignoreCase:caseSensitive not ifAbsent:0) ~~ 0
222a3167a516 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9049
diff changeset
  3800
222a3167a516 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9049
diff changeset
  3801
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3802
     'hello world' includesMatchString:'h*' caseSensitive:true
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3803
     'hello world' includesMatchString:'h*' caseSensitive:false
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3804
     'Hello world' includesMatchString:'h*' caseSensitive:true
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3805
     'Hello world' includesMatchString:'h*' caseSensitive:false
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3806
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3807
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:true
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3808
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:false
9058
222a3167a516 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9049
diff changeset
  3809
222a3167a516 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9049
diff changeset
  3810
     'hello world' includesMatchString:'wor*' caseSensitive:true
222a3167a516 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9049
diff changeset
  3811
     'hello world' includesMatchString:'wor*' caseSensitive:false
222a3167a516 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9049
diff changeset
  3812
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3813
     'hello world' includesMatchString:'woR*' caseSensitive:true
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3814
     'hello world' includesMatchString:'woR*' caseSensitive:false
9058
222a3167a516 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9049
diff changeset
  3815
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3816
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3817
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3818
match:aString
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3819
    "return true if aString matches self, where self may contain meta-match
328
claus
parents: 327
diff changeset
  3820
     characters $* (to match any string) or $# (to match any character).
claus
parents: 327
diff changeset
  3821
     or [...] to match a set of characters.
345
claus
parents: 343
diff changeset
  3822
     Lower/uppercase are considered different.
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3823
     The escape character is the backQuaote.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3824
     NOTICE: match-meta character interpretation is like in unix-matching,
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3825
	     NOT the ST-80 meaning."
328
claus
parents: 327
diff changeset
  3826
claus
parents: 327
diff changeset
  3827
    ^ self match:aString from:1 to:aString size ignoreCase:false
claus
parents: 327
diff changeset
  3828
claus
parents: 327
diff changeset
  3829
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3830
     '\*f*' match:'f'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3831
     '\*f*' match:'*f'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3832
     '*\*f*' match:'*f'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3833
     '*f*' match:'*f'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3834
     '*ute*' match:'computer'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3835
     '*uter' match:'computer'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3836
     'uter*' match:'computer'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3837
     '*ute*' match:''
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3838
     '[abcd]*' match:'computer'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3839
     '[abcd]*' match:'komputer'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3840
     '*some*compl*ern*' match:'this is some more complicated pattern match'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3841
     '*some*compl*ern*' match:'this is another complicated pattern match'
3537
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
  3842
     '*-hh' match:'anton-h'
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
  3843
    "
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
  3844
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
  3845
    "Modified: / 9.6.1998 / 18:50:00 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3846
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3847
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3848
match:aString escapeCharacter:escape
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3849
    "return true if aString matches self, where self may contain meta-match
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3850
     characters $* (to match any string) or $# (to match any character).
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3851
     or [...] to match a set of characters.
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3852
     Lower/uppercase are considered different.
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3853
     NOTICE: match-meta character interpretation is like in unix-matching,
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3854
	     NOT the ST-80 meaning."
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3855
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3856
    ^ self match:aString from:1 to:aString size ignoreCase:false escapeCharacter:escape
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3857
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3858
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3859
     'a\b\c\*' match:'a\b\c\d'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3860
     'a\b\c\*' match:'a\b\c\d' escapeCharacter:nil
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3861
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3862
!
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3863
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3864
match:aString from:start to:stop ignoreCase:ignoreCase
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3865
    "return true if part of aString matches myself,
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3866
     where self may contain meta-match
328
claus
parents: 327
diff changeset
  3867
     characters $* (to match any string) or $# (to match any character)
claus
parents: 327
diff changeset
  3868
     or [...] to match a set of characters.
345
claus
parents: 343
diff changeset
  3869
     If ignoreCase is true, lower/uppercase are considered the same.
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3870
     The escape character is the backQuaote.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3871
     NOTICE: match-meta character interpretation is like in unix-matching,
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3872
	     NOT the ST-80 meaning."
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3873
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3874
    ^ self
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3875
	match:aString from:start to:stop ignoreCase:ignoreCase
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3876
	escapeCharacter:(self class matchEscapeCharacter)
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3877
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3878
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3879
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3880
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3881
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3882
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3883
    "Modified: / 10.11.1998 / 21:43:46 / cg"
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3884
!
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3885
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3886
match:aString from:start to:stop ignoreCase:ignoreCase escapeCharacter:escape
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3887
    "return true if part of aString matches myself,
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3888
     where self may contain meta-match
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3889
     characters $* (to match any string) or $# (to match any character)
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3890
     or [...] to match a set of characters.
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3891
     If ignoreCase is true, lower/uppercase are considered the same.
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3892
     NOTICE: match-meta character interpretation is like in unix-matching,
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3893
	     NOT the ST-80 meaning."
328
claus
parents: 327
diff changeset
  3894
claus
parents: 327
diff changeset
  3895
    |matchScanArray|
claus
parents: 327
diff changeset
  3896
claus
parents: 327
diff changeset
  3897
    "
claus
parents: 327
diff changeset
  3898
     keep the matchScanArray from the most recent match -
claus
parents: 327
diff changeset
  3899
     avoids parsing the pattern over-and over if multiple searches
claus
parents: 327
diff changeset
  3900
     are done with the same pattern.
claus
parents: 327
diff changeset
  3901
    "
claus
parents: 327
diff changeset
  3902
    (PreviousMatch notNil
claus
parents: 327
diff changeset
  3903
    and:[PreviousMatch key = self]) ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3904
	matchScanArray := PreviousMatch value
328
claus
parents: 327
diff changeset
  3905
    ] ifFalse:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3906
	matchScanArray := self class matchScanArrayFrom:self escapeCharacter:escape.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3907
	matchScanArray isNil ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3908
	    'CharacterArray [info]: invalid matchpattern:''' infoPrint. self infoPrint. ''' comparing for equality.' infoPrintCR.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3909
	    ^ self = aString
3926
4cc33691696a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3879
diff changeset
  3910
"/            ^ false
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3911
	].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3912
	PreviousMatch := self -> matchScanArray.
328
claus
parents: 327
diff changeset
  3913
    ].
claus
parents: 327
diff changeset
  3914
claus
parents: 327
diff changeset
  3915
    ^ self class
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3916
	matchScan:matchScanArray
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3917
	from:1 to:matchScanArray size
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3918
	with:aString
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3919
	from:start to:stop
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3920
	ignoreCase:ignoreCase
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3921
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3922
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3923
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3924
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
328
claus
parents: 327
diff changeset
  3925
    "
1429
5729275971ae printNL -> printCR
Claus Gittinger <cg@exept.de>
parents: 1423
diff changeset
  3926
3926
4cc33691696a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3879
diff changeset
  3927
    "Modified: / 10.11.1998 / 21:43:46 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3928
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3929
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3930
match:aString ignoreCase:ignoreCase
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3931
    "return true if aString matches self, where self may contain meta-match
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3932
     characters $* (to match any string) or $# (to match any character)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3933
     or [...] to match a set of characters.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3934
     If ignoreCase is true, lower/uppercase are considered the same.
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3935
     The escape character is the backQuaote.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3936
     NOTICE: match-meta character interpretation is like in unix-matching,
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3937
	     NOT the ST-80 meaning."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3938
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3939
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3940
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3941
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3942
     '*ute*' match:'COMPUTER' ignoreCase:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3943
     '*uter' match:'COMPUTER' ignoreCase:false
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3944
     '[abcd]*' match:'computer' ignoreCase:false
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3945
     '[abcd]*' match:'Computer' ignoreCase:false
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3946
     '[a-k]*' match:'komputer' ignoreCase:false
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3947
     '[a-k]*' match:'zomputer' ignoreCase:false
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3948
     '[a-k]*' match:'Komputer' ignoreCase:false
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3949
     '[a-k]*' match:'Komputer' ignoreCase:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3950
     '*some*compl*ern*' match:'this is some more complicated pattern match' ignoreCase:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3951
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3952
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3953
     Time millisecondsToRun:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3954
	Symbol allInstancesDo:[:sym |
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3955
	    '[ab]*' match:sym ignoreCase:false
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3956
	]
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3957
     ].
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  3958
     Time millisecondsToRun:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3959
	Symbol allInstancesDo:[:sym |
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3960
	    '*at:*' match:sym ignoreCase:false
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3961
	]
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3962
     ].
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3963
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3964
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3965
    "Modified: 2.4.1997 / 17:28:58 / cg"
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3966
!
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3967
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3968
match:aString ignoreCase:ignoreCase escapeCharacter:escape
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3969
    "return true if aString matches self, where self may contain meta-match
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3970
     characters $* (to match any string) or $# (to match any character)
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3971
     or [...] to match a set of characters.
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3972
     If ignoreCase is true, lower/uppercase are considered the same.
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3973
     NOTICE: match-meta character interpretation is like in unix-matching,
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3974
	     NOT the ST-80 meaning."
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3975
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3976
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase escapeCharacter:escape
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3977
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3978
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3979
     '*ute*' match:'COMPUTER' ignoreCase:true
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3980
     '*uter' match:'COMPUTER' ignoreCase:false
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3981
     '[abcd]*' match:'computer' ignoreCase:false
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3982
     '[abcd]*' match:'Computer' ignoreCase:false
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3983
     '[a-k]*' match:'komputer' ignoreCase:false
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3984
     '[a-k]*' match:'zomputer' ignoreCase:false
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3985
     '[a-k]*' match:'Komputer' ignoreCase:false
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3986
     '[a-k]*' match:'Komputer' ignoreCase:true
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3987
     '*some*compl*ern*' match:'this is some more complicated pattern match' ignoreCase:true
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3988
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3989
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3990
     Time millisecondsToRun:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3991
	Symbol allInstancesDo:[:sym |
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3992
	    '[ab]*' match:sym ignoreCase:false
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3993
	]
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3994
     ].
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
  3995
     Time millisecondsToRun:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3996
	Symbol allInstancesDo:[:sym |
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3997
	    '*at:*' match:sym ignoreCase:false
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3998
	]
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3999
     ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4000
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  4001
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  4002
    "Modified: 2.4.1997 / 17:28:58 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4003
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4004
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4005
matches:aPatternString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4006
    "return true if the receiver matches aString, where aPatternString may contain meta-match
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4007
     characters $* (to match any string) or $# (to match any character).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4008
     or [...] to match a set of characters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4009
     Lower/uppercase are considered different.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4010
     NOTICE: match-meta character interpretation is like in unix-matching,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4011
	     NOT the ST-80 meaning."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4012
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4013
    ^ aPatternString match:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4014
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4015
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4016
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4017
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4018
!CharacterArray methodsFor:'printing & storing'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4019
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4020
article
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4021
    "return an article string for the receiver."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4022
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4023
    |firstChar|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4024
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4025
    firstChar := (self at:1) asLowercase.
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4026
    ((firstChar isVowel and:[firstChar ~~ $u]) or:[firstChar == $x]) ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4027
	^ 'an'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4028
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4029
    ^ 'a'
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4030
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4031
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4032
	'uboot' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4033
	'xmas' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4034
	'alarm' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4035
	'baby' article.
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4036
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4037
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4038
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4039
basicStoreString
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4040
    "return a String for storing myself"
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4041
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4042
    |s n index|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4043
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4044
    n := self occurrencesOf:$'.
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4045
    n ~~ 0 ifTrue:[
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4046
        s := String new:(n + 2 + self size).
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4047
        s at:1 put:$'.
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4048
        index := 2.
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4049
        self do:[:thisChar |
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4050
            (thisChar == $') ifTrue:[
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4051
                s at:index put:thisChar.
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4052
                index := index + 1.
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4053
            ].
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4054
            s at:index put:thisChar.
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4055
            index := index + 1.
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4056
        ].
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4057
        s at:index put:$'.
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4058
        ^ s
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4059
    ].
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4060
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4061
    ^ '''' , self , ''''
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4062
!
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4063
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4064
displayString
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4065
    "return a string to display the receiver - use storeString to have quotes around."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4066
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4067
    ^ self storeString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4068
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4069
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4070
printOn:aStream
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4071
    "print the receiver on aStream"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4072
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4073
    aStream nextPutAll:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4074
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4075
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4076
printString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4077
    "return a string for printing - thats myself"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4078
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4079
    ^ self
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4080
!
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4081
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4082
printWithQuotesDoubledOn:aStream
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4083
    "put the raw storeString of myself on aStream"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4084
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4085
    self do:[:thisChar |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4086
	(thisChar == $') ifTrue:[aStream nextPut:thisChar].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4087
	aStream nextPut:thisChar
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4088
    ]
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4089
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4090
    "Modified: / 15.6.1998 / 17:21:17 / cg"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4091
    "Created: / 15.6.1998 / 17:22:13 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4092
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4093
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4094
!CharacterArray methodsFor:'queries'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4095
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4096
bitsPerCharacter
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4097
    "return the underlying strings bitsPerCharacter
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4098
     (i.e. is it a regular String or a TwoByteString)"
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4099
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4100
    |string max|
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4101
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4102
    (string := self string) ~~ self ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4103
	^ string bitsPerCharacter
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4104
    ].
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4105
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4106
    max := 8.
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4107
    self do:[:eachCharacter |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4108
	max := max max:(eachCharacter bitsPerCharacter)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4109
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4110
    ^ max
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4111
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4112
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4113
     'hello' bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4114
     'hello' asText allBold bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4115
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4116
!
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4117
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4118
contains8BitCharacters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4119
    "return true, if the underlying string contains 8BitCharacters (or widers)
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4120
     (i.e. if it is non-ascii)"
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4121
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4122
    |string|
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4123
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4124
    (string := self string) ~~ self ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4125
	^ string contains8BitCharacters
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4126
    ].
8900
8b669296f3eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8899
diff changeset
  4127
    ^ self contains:[:aCharacter | aCharacter codePoint > 16r7F ].
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4128
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4129
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4130
     'hello' contains8BitCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4131
     'hello' asText allBold contains8BitCharacters
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4132
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4133
!
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4134
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4135
continuesWith:aString startingAt:startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4136
    "return true, if the receiver beginning at startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4137
     contains the characters in aString."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4138
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4139
    |sz  "{Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4140
     idx "{Class: SmallInteger }"|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4141
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4142
    sz := aString size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4143
    idx := startIndex.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4144
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4145
    1 to:sz do:[:i |
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4146
	(self at:idx) ~~ (aString at:i) ifTrue:[^ false].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4147
	idx := idx + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4148
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4149
    ^ true
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4150
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4151
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4152
     'hello world' continuesWith:'world' startingAt:6
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4153
     'hello world' continuesWith:'world' startingAt:7
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4154
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4155
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4156
    "Created: 12.5.1996 / 15:46:40 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4157
    "Modified: 26.7.1996 / 19:08:36 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4158
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4159
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4160
countWords
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4161
    "return the number of words, which are separated by separators"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4162
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4163
    |tally "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4164
     start "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4165
     mySize "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4166
     stop ch|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4167
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4168
    tally := 0.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4169
    start := 1.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4170
    mySize := self size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4171
    [start <= mySize] whileTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4172
	ch := self at:start.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4173
	ch isSeparator ifTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4174
	    start := start + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4175
	] ifFalse:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4176
	    stop := self indexOfSeparatorStartingAt:start.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4177
	    (stop == 0) ifTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4178
		stop := mySize + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4179
	    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4180
	    tally := tally + 1.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4181
	    start := stop
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4182
	]
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4183
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4184
    ^ tally
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4185
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4186
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4187
     'hello world isnt this nice' countWords'
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4188
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4189
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4190
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4191
encoding
1311
367f740d21e7 commentary
Claus Gittinger <cg@exept.de>
parents: 1308
diff changeset
  4192
    "return the strings encoding, as a symbol.
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4193
     Here, by default, we assume unicode-encoding.
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4194
     Notice, that iso8859-1 is a true subset of unicode,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4195
     and that singleByteStrings are therefore both unicode AND
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4196
     8859-1 encoded."
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4197
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4198
    ^ #'unicode'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4199
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4200
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4201
hasChangeOfEmphasis
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4202
    ^ false
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4203
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4204
    "Created: 12.5.1996 / 12:31:39 / cg"
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4205
!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4206
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  4207
hasIcon
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4208
    "for LabelAndIcon compatibility"
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4209
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4210
    ^ false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4211
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4212
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4213
hasImage
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4214
    "for LabelAndIcon compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4215
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4216
    ^ false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4217
!
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  4218
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4219
heightOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4220
    "return the size of the recevier in device units if displayed on aGC"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4221
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  4222
    ^ (aGC font onDevice:aGC device) heightOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4223
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4224
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4225
     'hello world' heightOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4226
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4227
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4228
    "Created: 12.5.1996 / 20:09:29 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4229
    "Modified: 12.5.1996 / 20:32:05 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4230
!
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4231
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4232
knownAsSymbol
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4233
    "for now, only single character strings are allowed as symbols.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4234
     This method is redefined in String."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4235
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4236
    ^ false
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4237
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4238
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4239
leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4240
    "if the receiver starts with spaces, return the number of spaces
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4241
     at the left - otherwise, return 0.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4242
     If the receiver consists of spaces only, return the receivers size."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4243
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4244
    |index "{Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4245
     end   "{Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4246
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4247
    index := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4248
    end := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4249
    [index <= end] whileTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4250
	(self at:index) isSeparator ifFalse:[^ index - 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4251
	index := index + 1
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4252
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4253
    ^ end
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4254
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4255
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4256
     '    hello' leftIndent
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4257
     'foo      ' leftIndent
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4258
     '         ' leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4259
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4260
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4261
    "Modified: 20.4.1996 / 19:28:43 / cg"
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4262
!
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4263
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4264
nameSpaceSelectorParts
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4265
    "Answer the namespace and baseSelector parts of a namespace selector.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4266
     Namespace selectors are those generated by sends from a method in a different
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4267
     namespace; they are prefixed by ':'<ns>'::'.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4268
     You cannot easily change this algorithm here, as it is also known by the VM's lookup function.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4269
     Experimental"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4270
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4271
    |nsPart selPart idx|
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4272
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4273
    (self at:1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4274
    idx := self indexOf:$: startingAt:3.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4275
    idx == 0 ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4276
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4277
    (idx+2 > self size) ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4278
    (self at:idx+1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4279
    nsPart := self copyFrom:2 to:idx-1.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4280
    selPart := self copyFrom:idx+2.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4281
    ^ Array with:nsPart with:selPart
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4282
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4283
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4284
     self assert:('+' nameSpaceSelectorParts) = #('' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4285
     self assert:(':+' nameSpaceSelectorParts) = #('' ':+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4286
     self assert:(':Foo:+' nameSpaceSelectorParts) = #('' ':Foo:+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4287
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4288
     self assert:(':Foo::+' nameSpaceSelectorParts) = #('Foo' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4289
     self assert:(':Foo::bar:baz:' nameSpaceSelectorParts) = #('Foo' 'bar:baz:').
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4290
    "
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4291
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4292
    "Created: / 05-03-2007 / 17:16:58 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4293
    "Modified: / 06-03-2007 / 11:51:15 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4294
!
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4295
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4296
stringSpecies
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4297
    "return the underlying strings bitsPerCharacter
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4298
     (i.e. is it a regular String or a TwoByteString)"
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4299
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4300
    |string|
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4301
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4302
    (string := self string) == self ifTrue:[^ self class].
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4303
    ^ string stringSpecies
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4304
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4305
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4306
     'hello' stringSpecies
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4307
     'hello' asText allBold stringSpecies
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4308
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4309
!
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4310
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4311
widthFrom:startIndex to:endIndex on:aGC
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4312
    "return ths size of part of the recevier in device units if displayed on aGC"
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4313
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4314
    ^ (aGC font onDevice:aGC device) widthOf:self from:startIndex to:endIndex
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4315
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4316
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4317
     'hello world' widthFrom:1 to:5 on:(View new)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4318
     'hello' widthOn:(View new)
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4319
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4320
!
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4321
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4322
widthOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4323
    "return ths size of the recevier in device units if displayed on aGC"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4324
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  4325
    ^ (aGC font onDevice:aGC device) widthOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4326
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4327
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4328
     'hello world' widthOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4329
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4330
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4331
    "Created: 12.5.1996 / 20:09:29 / cg"
2554
309ee6707322 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2551
diff changeset
  4332
    "Modified: 17.4.1997 / 12:50:23 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4333
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4334
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  4335
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  4336
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4337
!CharacterArray methodsFor:'special string converting'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4338
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4339
expandPlaceholdersWith:argArrayOrDictionary
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4340
    "return a copy of the receiver, where all %i escapes are
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4341
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4342
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4343
     in the new string 'hello world; how is this'.
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4344
     As an extension, the argument may also be a dictionary, providing
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  4345
     values for symbolic keys.
4842
0086acd80497 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  4346
     In this case, %a .. %z and %(...) are also allowed.
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4347
     (%1..%9 require a numeric key in the dictionary, however)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4348
     To get a '%' character, use a '%%'-escape.
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  4349
     To get an integer-indexed placeHolder followed by another digit,
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  4350
     or an index > 9, you must use %(digit).
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4351
     See also bindWith:... for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4352
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4353
    |stream|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4354
11028
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  4355
    stream := TextStream on:(self species new:self size + 20).
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4356
    self expandPlaceholdersWith:argArrayOrDictionary on:stream.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4357
    ^ stream contents.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4358
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4359
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4360
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4361
     'hello %1' expandPlaceholdersWith:#('world')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4362
     'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4363
     'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4364
     '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4365
     '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4366
     '%%10 gives %10' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4367
     '%%(10) gives %(10)' expandPlaceholdersWith:#(123)
8938
860bbcbd3bd8 Fix #expandPlaceHoldersWith:, when a %a is encountered and and an Array
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4368
     '%test gives %1' expandPlaceholdersWith:#(123)
11028
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  4369
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' allBold }
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  4370
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' }
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4371
    "
1026
455c9f609f4d care for 16bit strings in expandPlaceHolders
Claus Gittinger <cg@exept.de>
parents: 1025
diff changeset
  4372
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4373
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4374
     |dict|
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4375
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4376
     dict := Dictionary new.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4377
     dict at:1 put:'one'.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4378
     dict at:$a put:'AAAAA'.
8794
a5df33935142 nindWith supports blocks in the value dictionary
Claus Gittinger <cg@exept.de>
parents: 8710
diff changeset
  4379
     dict at:$b put:[ Time now ].
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4380
     'hello %1 %a %b' expandPlaceholdersWith:dict
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4381
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4382
2737
9f29aecea39d care for % at end in expandPlaceHolders.
Claus Gittinger <cg@exept.de>
parents: 2736
diff changeset
  4383
    "Modified: 1.7.1997 / 00:53:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4384
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4385
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4386
expandPlaceholdersWith:argArrayOrDictionary on:aStream
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4387
    "write the receiver to aStream, where all %i escapes are
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4388
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4389
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4390
     in the new string 'hello world; how is this'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4391
     As an extension, the argument may also be a dictionary, providing
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4392
     values for symbolic keys.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4393
     In this case, %a .. %z and %(...) are also allowed.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4394
     (%1..%9 require a numeric key in the dictionary, however)
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4395
     To get a '%' character, use a '%%'-escape.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4396
     To get an integer-indexed placeHolder followed by another digit,
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4397
     or an index > 9, you must use %(digit).
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4398
     See also bindWith:... for VisualAge compatibility.
10939
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  4399
     Use %<cr> to insert a CR and %<tab> to insert a TAB."
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4400
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4401
    |next v key keyAsSymbol
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4402
     idx   "{ SmallInteger }"
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4403
     idx2  "{ SmallInteger }"
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4404
     start "{ SmallInteger }"
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4405
     stop  "{ SmallInteger }"|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4406
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4407
    stop := self size.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4408
    start := 1.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4409
    [start <= stop] whileTrue:[
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4410
        idx := self indexOf:$% startingAt:start.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4411
        (idx == 0 or:[idx == stop]) ifTrue:[
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4412
            aStream nextPutAll:self startingAt:start to:stop.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4413
            ^ self.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4414
        ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4415
        "found a %"
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4416
        aStream nextPutAll:self startingAt:start to:(idx - 1).
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4417
        next := self at:(idx + 1).
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4418
        (next == $%) ifTrue:[
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4419
            aStream nextPut:$%.
11292
d331195c0d2d do not convert u16 to utf8 when expanding a placeholder
Claus Gittinger <cg@exept.de>
parents: 11243
diff changeset
  4420
        ] ifFalse:[ 
d331195c0d2d do not convert u16 to utf8 when expanding a placeholder
Claus Gittinger <cg@exept.de>
parents: 11243
diff changeset
  4421
        next == $< ifTrue:[
10939
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  4422
            idx2 := self indexOf:$> startingAt:idx+2.
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  4423
            key := self copyFrom:idx+2 to:idx2-1.
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  4424
            idx := idx2 - 1.
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  4425
            key := key asSymbolIfInterned.
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  4426
            (#(cr tab nl return lf ff null) includesIdentical:key) ifTrue:[
10940
516744ea6f07 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10939
diff changeset
  4427
                aStream nextPut:(Character perform:key).
10939
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  4428
            ].
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4429
        ] ifFalse:[
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4430
            (next between:$1 and:$9) ifTrue:[
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4431
                v := argArrayOrDictionary at:(next digitValue) ifAbsent:nil
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4432
            ] ifFalse:[next == $( ifTrue:[
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4433
                idx2 := self indexOf:$) startingAt:idx+2.
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4434
                key := self copyFrom:idx+2 to:idx2-1.
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4435
                idx := idx2 - 1.
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4436
                key:= key asSymbolIfInterned ? key.
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4437
                (keyAsSymbol notNil and:[ argArrayOrDictionary includesKey:keyAsSymbol ]) ifTrue:[
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4438
                    v := argArrayOrDictionary at:keyAsSymbol
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4439
                ] ifFalse:[
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4440
                    key isNumeric ifTrue:[
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4441
                        key := Integer readFrom:key onError:nil.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4442
                    ].
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4443
                    v := argArrayOrDictionary at:key ifAbsent:nil
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4444
                ].
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4445
            ] ifFalse:[
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4446
                "so next is a non-numeric single character.
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4447
                 This would not work with Arrays, since they have integer indizes"
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4448
                argArrayOrDictionary isSequenceable ifFalse:[
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4449
                    v := argArrayOrDictionary at:next ifAbsent:[
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4450
                            "try symbol instead of character"
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4451
                            argArrayOrDictionary at:next asSymbol ifAbsent:[String with:$% with:next].
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4452
                         ].
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4453
                ] ifTrue:[
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4454
                    v := String with:$% with:next. "No match, keep original sequence"
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4455
                ].
10940
516744ea6f07 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10939
diff changeset
  4456
            ]].
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4457
            v notNil ifTrue:[
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4458
                v isBlock ifTrue:[
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4459
                    v := v value
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4460
                ].
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4461
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4462
                v printOn:aStream.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4463
            ].
10940
516744ea6f07 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10939
diff changeset
  4464
        ]].
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4465
        start := idx + 2
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4466
    ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4467
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4468
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4469
     String streamContents:[:s|
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4470
        'hello %1' expandPlaceholdersWith:#('world') on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4471
        s cr.    
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4472
        'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4473
        s cr.    
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4474
        'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this') on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4475
        s cr.    
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4476
        '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9) on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4477
        s cr.    
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4478
        '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123) on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4479
        s cr.    
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4480
        '%%10 gives %10' expandPlaceholdersWith:#(123) on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4481
        s cr.    
10939
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  4482
        '%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholdersWith:#(123) on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4483
        s cr.    
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4484
        '%test gives %1' expandPlaceholdersWith:#(123) on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4485
     ]
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4486
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4487
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4488
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4489
     |dict|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4490
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4491
     dict := Dictionary new.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4492
     dict at:1 put:'one'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4493
     dict at:$a put:'AAAAA'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4494
     dict at:$b put:[ Time now ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4495
     String streamContents:[:s|
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4496
         'hello %1 %a %b' expandPlaceholdersWith:dict on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4497
     ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4498
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4499
!
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4500
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4501
firstLine
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4502
    ^ self asCollectionOfSubCollectionsSeparatedBy:Character cr do:[:line | ^ line].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4503
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4504
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4505
     'hello' firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4506
     '1\2\3' withCRs firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4507
     '\1\2\3' withCRs firstLine
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4508
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4509
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4510
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4511
withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4512
    "return a new string consisting of receivers characters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4513
     with all \-characters replaced by cr-characters."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4514
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4515
    ^ self copyReplaceAll:$\ with:(Character cr)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4516
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4517
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4518
     'hello\world' withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4519
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4520
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4521
    "Modified: / 18.7.1998 / 22:53:02 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4522
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4523
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4524
withEscapes
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4525
    "return a new string consisting of receivers characters
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4526
     with all \X-character escapes replaced by corresponding-characters.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4527
     (similar to the way C-language Strings are converted).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4528
     The following escapes are supported:
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4529
	\r      return character
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4530
	\n      newline character
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4531
	\b      backspace character
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4532
	\f      formfeed character
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4533
	\t      tab character
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4534
	\e      escape character
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4535
	\\      the \ character itself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4536
	\nnn    three digit octal number defining the characters ascii value
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4537
	\other  other
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4538
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4539
     Notice, that \' is NOT a valid escape, since the general syntax of
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4540
     string constants is not affected by this method.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4541
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4542
     Although easily implementable, this is NOT done automatically
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4543
     by the compiler (due to a lack of a language standard for this).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4544
     However, the compiler may detect sends ot #withEscapes to string literals
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4545
     and place a modified string constant into the binary/byte-code.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4546
     Therefore, no runtime penalty will be payed for using these escapes.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4547
     (not in pre 2.11 versions)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4548
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4549
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4550
    |sz      "{ SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4551
     newSize "{ SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4552
     srcIdx  "{ SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4553
     dstIdx  "{ SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4554
     val     "{ SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4555
     newString next hasEmphasis e|
359
claus
parents: 357
diff changeset
  4556
claus
parents: 357
diff changeset
  4557
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4558
     first, count the number of escapes, to allow preallocation
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4559
     of the new string ...
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4560
     (it is faster to scan the string twice than to reallocate it multiple
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4561
      times in a WriteStream)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4562
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4563
    sz := newSize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4564
    srcIdx := 1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4565
    [(srcIdx := self indexOf:$\ startingAt:srcIdx) ~~ 0] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4566
	srcIdx == sz ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4567
	    newSize := newSize - 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4568
	    srcIdx := srcIdx + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4569
	    next := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4570
	    next == $0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4571
		[srcIdx < sz and:[next isDigit]] whileTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4572
		    newSize := newSize - 1. srcIdx := srcIdx + 1. next := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4573
		]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4574
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4575
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4576
	srcIdx := srcIdx + 1.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4577
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4578
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4579
    newSize == sz ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4580
	^ self
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4581
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4582
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4583
    newString := self species new:newSize.
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4584
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4585
    hasEmphasis := self hasChangeOfEmphasis.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4586
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4587
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4588
     copy over, replace escapes
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4589
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4590
    srcIdx := dstIdx := 1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4591
    [srcIdx <= sz] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4592
	next := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4593
	hasEmphasis ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4594
	    e := self emphasisAt:srcIdx
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4595
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4596
	srcIdx := srcIdx + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4597
	next == $\ ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4598
	    srcIdx <= sz ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4599
		next := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4600
		srcIdx := srcIdx + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4601
		next == $r ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4602
		    next := Character return
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4603
		] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4604
		    next == $n ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4605
			next := Character nl
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4606
		    ] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4607
			next == $b ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4608
			    next := Character backspace
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4609
			] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4610
			    next == $f ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4611
				next := Character newPage
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4612
			    ] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4613
				next == $t ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4614
				    next := Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4615
				] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4616
				    next == $e ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4617
					next := Character esc
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4618
				    ] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4619
					next == $0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4620
					    val := 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4621
					    [next notNil and:[next isDigit]] whileTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4622
						val := val * 8 + next digitValue.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4623
						srcIdx <= sz ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4624
						    next := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4625
						    srcIdx := srcIdx + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4626
						] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4627
						    next := nil
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4628
						]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4629
					    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4630
					    next := Character value:val.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4631
					]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4632
				    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4633
				]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4634
			    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4635
			]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4636
		    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4637
		].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4638
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4639
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4640
	newString at:dstIdx put:next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4641
	hasEmphasis ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4642
	    newString emphasisAt:dstIdx put:e
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4643
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4644
	dstIdx := dstIdx + 1.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4645
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4646
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4647
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4648
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4649
     'hello world' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4650
     'hello\world' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4651
     'hello\world\' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4652
     'hello world\' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4653
     'hello\tworld' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4654
     'hello\nworld\na\n\tnice\n\t\tstring' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4655
     'hello\tworld\n' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4656
     'hello\010world' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4657
     'hello\r\nworld' withEscapes
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4658
    "
1008
1bd95ea83cac add \e in #withEscapes
Claus Gittinger <cg@exept.de>
parents: 1006
diff changeset
  4659
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4660
    "Modified: 12.5.1996 / 12:53:34 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4661
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4662
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4663
withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4664
    "return a copy of the receiver with all match characters escaped
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4665
     by $\ characters (to be usable as a match string).
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4666
     Return the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4667
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  4668
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  4669
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  4670
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4671
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4672
    in := self readStream.
7986
715c72e62d58 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7982
diff changeset
  4673
    out := WriteStream on:(self species new:self size).
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4674
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4675
	c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4676
	(c == escape or:['*[#' includes:c]) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4677
	    out nextPut:$\.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4678
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4679
	out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4680
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4681
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4682
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4683
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4684
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4685
     '\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4686
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4687
     '\\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4688
     'foo*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4689
     'foo\*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4690
     'foo\' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4691
     'f*o*o' withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4692
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4693
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4694
    "Modified: 2.4.1997 / 18:13:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4695
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4696
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4697
withTabs
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  4698
    "return a string consisting of the receivers characters
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  4699
     where leading spaces are replaced by tabulator characters (assuming 8-col tabs).
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  4700
     Notice: if the receiver does not contain any tabs, it is returned unchanged;
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  4701
     otherwise a new string is returned.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4702
     Limitation: only the very first spaces are replaced
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4703
		 (i.e. if the receiver contains newLine characters,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4704
		  no tabs are inserted after those lineBreaks)"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4705
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4706
    |idx   "{ SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4707
     nTabs "{ SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4708
     newString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4709
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4710
    idx := self findFirst:[:c | (c ~~ Character space)].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4711
    nTabs := (idx-1) // 8.
5815
4acdd87a77d4 // can return negative numbers.
Stefan Vogel <sv@exept.de>
parents: 5795
diff changeset
  4712
    nTabs <= 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4713
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4714
    "any tabs"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4715
    newString := self class new:(self size - (nTabs * 7)).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4716
    newString atAll:(1 to:nTabs) put:(Character tab).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4717
    newString replaceFrom:(nTabs + 1) with:self startingAt:(nTabs * 8 + 1).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4718
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4719
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4720
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4721
     '12345678901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4722
     '       8901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4723
     '        901234567890' withTabs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4724
     '               67890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4725
     '                7890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4726
     '                 890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4727
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4728
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4729
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4730
withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  4731
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4732
     where all tabulator characters are expanded into spaces (assuming 8-col tabs).
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  4733
     Notice: if the receiver does not contain any tabs, it is returned unchanged;
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  4734
     otherwise a new string is returned.
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  4735
     This does handle multiline strings."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4736
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4737
    ^ self withTabsExpanded:8
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4738
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4739
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4740
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4741
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4742
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4743
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4744
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4745
     ('123456789' , Character tab asString , 'x') withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4746
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4747
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4748
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4749
	     with:$1) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4750
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4751
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4752
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4753
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4754
	     with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4755
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4756
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4757
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4758
	     with:Character cr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4759
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4760
	     with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4761
    "
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4762
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4763
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4764
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4765
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4766
withTabsExpanded:numSpaces
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4767
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4768
     where all tabulator characters are expanded into spaces (assuming numSpaces-col tabs).
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4769
     Notice: if the receiver does not contain any tabs, it is returned unchanged;
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4770
     otherwise a new string is returned.
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4771
     This does handle multiline strings."
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  4772
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4773
    |col    "{ SmallInteger }"
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4774
     str ch
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4775
     dstIdx "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4776
     newSz  "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4777
     sz "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4778
     hasEmphasis e|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4779
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4780
    (self includes:(Character tab)) ifFalse:[^ self].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4781
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4782
    sz := self size.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4783
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4784
    "/ count the new size first, instead of
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4785
    "/ multiple resizing (better for large strings)
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4786
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4787
    col := 1. newSz := 0.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4788
    1 to:sz do:[:srcIdx |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4789
	ch := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4790
	ch == Character tab ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4791
	    col := col + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4792
	    newSz := newSz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4793
	    ch == Character cr ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4794
		col := 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4795
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4796
	] ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4797
	    (col \\ numSpaces) to:numSpaces do:[:ii |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4798
		newSz := newSz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4799
		col := col + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4800
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4801
	]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4802
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4803
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4804
    str := self species new:newSz.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4805
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4806
    hasEmphasis := self hasChangeOfEmphasis.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4807
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4808
    col := 1. dstIdx := 1.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4809
    1 to:sz do:[:srcIdx |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4810
	ch := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4811
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4812
	ch == Character tab ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4813
	    col := col + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4814
	    ch == Character cr ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4815
		col := 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4816
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4817
	    hasEmphasis ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4818
		e := self emphasisAt:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4819
		str emphasisAt:dstIdx put:e
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4820
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4821
	    str at:dstIdx put:ch.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4822
	    dstIdx := dstIdx + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4823
	] ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4824
	    (col \\ numSpaces) to:numSpaces do:[:ii |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4825
		str at:dstIdx put:Character space.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4826
		dstIdx := dstIdx + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4827
		col := col + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4828
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4829
	]
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4830
    ].
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4831
    ^ str
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4832
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4833
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4834
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4835
     ('1' , Character tab asString , 'x') withTabsExpanded:4
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4836
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4837
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4838
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4839
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4840
     ('123456789' , Character tab asString , 'x') withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  4841
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4842
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4843
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4844
	     with:$1) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4845
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4846
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4847
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4848
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4849
	     with:$2) withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  4850
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  4851
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4852
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4853
	     with:Character cr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4854
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4855
	     with:$2) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4856
    "
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  4857
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4858
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4859
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4860
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4861
withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4862
    "return a new collection consisting of receivers elements
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4863
     with all cr-characters replaced by \-characters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4864
     This is the reverse operation of withCRs."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4865
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4866
    ^ self copyReplaceAll:(Character cr) with:$\
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4867
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4868
     'hello
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4869
world' withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4870
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4871
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4872
    "Modified: / 18.7.1998 / 22:53:08 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4873
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4874
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4875
withoutLeadingSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4876
    "return a copy of myself without leading separators.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4877
     Notice: this does remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4878
     Returns an empty string, if the receiver consist only of whitespace."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4879
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4880
    |index|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4881
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4882
    index := self indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4883
    index ~~ 0 ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4884
	index == 1 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4885
	    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4886
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4887
	^ self copyFrom:index
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4888
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4889
    ^ ''
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4890
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4891
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4892
     '    foo    ' withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4893
     'foo    '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4894
     '    foo'     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4895
     '       '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4896
     'foo'         withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4897
     ('  ' , Character tab asString , ' foo   ') withoutLeadingSeparators inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4898
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4899
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4900
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4901
withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4902
    "return a copy of the receiver with all $\ removed or
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4903
     the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4904
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  4905
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  4906
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  4907
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4908
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4909
    in := self readStream.
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  4910
    out := self species writeStream.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4911
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4912
	c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4913
	c == escape ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4914
	    in atEnd ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4915
		c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4916
	    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4917
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4918
	out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4919
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4920
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4921
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4922
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4923
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4924
     '\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4925
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4926
     '\\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4927
     'foo*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4928
     'foo\*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4929
     'foo\' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4930
     'f\*o\*o' withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4931
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4932
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  4933
    "Modified: 30.6.1997 / 13:40:23 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4934
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4935
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4936
withoutPrefix:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4937
    "if the receiver startsWith aPrefix, return a copy without it.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4938
     Otherwise return the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4939
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4940
    (self startsWith:aString) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4941
	^ self copyFrom:aString size + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4942
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4943
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4944
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4945
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4946
     'helloworld' withoutPrefix:'hello'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4947
     'helloworld' withoutPrefix:'foo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4948
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4949
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4950
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  4951
withoutQuotes
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  4952
    "remove quotes ("" and ') from the front and the end of myself"
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  4953
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  4954
    |result quote|
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  4955
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  4956
    result := self.
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  4957
    ((result startsWith:$") or:[(result startsWith:$')]) ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4958
	quote := result at:1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4959
	result := result copyFrom:2.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4960
	(result endsWith:quote) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4961
	    result := result copyWithoutLast:1
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4962
	].
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  4963
    ].
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  4964
    ^ result
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  4965
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4966
"/    '"hello"' withoutQuotes
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4967
"/    '''hello''' withoutQuotes
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4968
"/    'hello' withoutQuotes
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  4969
!
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  4970
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4971
withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4972
    "return a copy of myself without leading and trailing whitespace.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  4973
     (but whiteSpace in-between is preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4974
     Whitespace is space, tab, newline, formfeed.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4975
     Use withoutSpaces, if you want to remove spaces only."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4976
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4977
    |startIndex "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4978
     endIndex   "{ Class: SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4979
     sz|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4980
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4981
    sz := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4982
    startIndex := 1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4983
    endIndex := sz.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4984
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4985
    [(startIndex < endIndex) and:[(self at:startIndex) isSeparator]] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4986
	startIndex := startIndex + 1
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4987
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4988
    [(endIndex > 1) and:[(self at:endIndex) isSeparator]] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4989
	endIndex := endIndex - 1
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4990
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4991
    startIndex > endIndex ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4992
	^ ''
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4993
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4994
    ((startIndex == 1) and:[endIndex == sz]) ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4995
	^ self
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4996
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4997
    ^ self copyFrom:startIndex to:endIndex
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4998
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4999
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5000
     '    foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5001
     '    foo' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5002
     'foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5003
     '       ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5004
     ('  foo' , Character tab asString , '    ') withoutSeparators inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5005
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5006
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5007
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5008
withoutSpaces
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5009
    "return a copy of myself without leading and trailing spaces.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  5010
     (but spaces in-between are preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5011
     Notice: this does NOT remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5012
     Use withoutSeparators for this."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5013
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5014
    |startIndex "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5015
     endIndex   "{ Class: SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5016
     sz|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5017
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5018
    sz := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5019
    startIndex := 1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5020
    endIndex := sz.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5021
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5022
    [(startIndex < endIndex) and:[(self at:startIndex) == Character space]] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5023
	startIndex := startIndex + 1
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5024
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5025
    [(endIndex > 1) and:[(self at:endIndex) == Character space]] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5026
	endIndex := endIndex - 1
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5027
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5028
    startIndex > endIndex ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5029
	^ ''
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5030
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5031
    ((startIndex == 1) and:[endIndex == sz]) ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5032
	^ self
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5033
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5034
    ^ self copyFrom:startIndex to:endIndex
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5035
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5036
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5037
     '    foo    ' withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5038
     'foo    '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5039
     '    foo'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5040
     '       '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5041
     'a     b'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5042
     ('  foo' , Character tab asString , '    ') withoutSpaces inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5043
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5044
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5045
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5046
withoutTrailingSeparators
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5047
    "return a copy of myself without trailing separators.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5048
     Notice: this does remove tabs, newline or any other whitespace.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5049
     Returns an empty string, if the receiver consist only of whitespace."
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5050
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5051
    |index|
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5052
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5053
    index := self size.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5054
    [index ~~ 0] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5055
	(self at:index) isSeparator ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5056
	    ^ self copyTo:index
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5057
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5058
	index := index - 1
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5059
    ].
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5060
    ^ ''
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5061
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5062
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5063
     '    foo    ' withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5064
     'foo    '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5065
     '    foo'     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5066
     '       '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5067
     'foo'         withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5068
     ('  ' , Character tab asString , ' foo   ') withoutTrailingSeparators inspect
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5069
     ('   foo' , Character tab asString) withoutTrailingSeparators inspect
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5070
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5071
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5072
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5073
!CharacterArray methodsFor:'substring searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5074
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5075
findString:subString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5076
    "find a substring. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5077
     if not found, return 0."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5078
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5079
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5080
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5081
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5082
     'hello world' findString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5083
     'hello world' findString:'ole'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5084
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5085
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5086
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5087
findString:subString ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5088
    "find a substring. If found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5089
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5090
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5091
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5092
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5093
11018
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5094
findString:subString ignoreCase:ignoreCase
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5095
    "find a substring. if found, return the index;
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5096
     if not found, return 0."
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5097
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5098
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:ignoreCase not
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5099
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5100
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5101
     'hello world' findString:'LLo' ignoreCase:false
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5102
     'hello world' findString:'LLo' ignoreCase:true
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5103
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5104
!
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5105
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5106
findString:subString startingAt:index
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5107
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5108
     if not found, return 0."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5109
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5110
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:0 caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5111
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5112
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5113
     'hello yello' findString:'llo' startingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5114
     'hello yello' findString:'llo' startingAt:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5115
     'hello yello' findString:'llo' startingAt:15
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5116
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5117
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5118
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5119
findString:subString startingAt:index ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5120
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5121
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5122
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5123
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5124
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5125
10929
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5126
findString:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive 
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5127
    "find a substring, starting at index. if found, return the index;
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5128
     if not found, return the result of evaluating exceptionBlock."
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5129
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5130
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5131
!
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5132
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5133
includesString:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5134
    "return true, if a substring is contained in the receiver"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5135
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5136
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:true) ~~ 0
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5137
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5138
    "
11348
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5139
     'hello world' includesString:'hel'   
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5140
     'hello world' includesString:'rld'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5141
     'hello world' includesString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5142
     'hello world' includesString:'LLO'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5143
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5144
!
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5145
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5146
includesString:aString caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5147
    "return true, if a substring is contained in the receiver"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5148
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5149
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:caseSensitive) ~~ 0
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5150
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5151
    "
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5152
     'hello world' includesString:'hel' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5153
     'hello world' includesString:'HEL' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5154
     'hello world' includesString:'HEL' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5155
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5156
     'hello world' includesString:'wor' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5157
     'hello world' includesString:'WOR' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5158
     'hello world' includesString:'WOR' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5159
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5160
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5161
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5162
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5163
    "find a substring, starting at index. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5164
     if not found, return the result of evaluating exceptionBlock.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5165
     This is a q&d hack - not very efficient"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5166
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5167
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5168
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5169
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5170
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5171
    "find a substring, starting at index. if found, return the index;
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5172
     if not found, return the result of evaluating exceptionBlock.
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5173
     This is a q&d hack - not very efficient"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5174
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5175
    |firstChar found
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5176
     startIndex "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5177
     subSize    "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5178
     mySize     "{ Class: SmallInteger }"
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5179
     runIdx     "{ Class: SmallInteger }"
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5180
     tester|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5181
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5182
    subSize := subString size.
6122
a98958f1c85f handle non-string arg to indexOfSubString:
Claus Gittinger <cg@exept.de>
parents: 6119
diff changeset
  5183
    subSize == 0 ifTrue:[   "empty string matches"
11348
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5184
        subString isString ifFalse:[
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5185
           self error:'non string argument' mayProceed:true.
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5186
        ].
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5187
        ^ index
6122
a98958f1c85f handle non-string arg to indexOfSubString:
Claus Gittinger <cg@exept.de>
parents: 6119
diff changeset
  5188
    ].
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5189
    tester := caseSensitive ifTrue:[ [:c1 :c2 | c1 = c2 ] ] ifFalse:[ [:c1 :c2 | c1 sameAs: c2 ] ].
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5190
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5191
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5192
    firstChar := subString at:1.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5193
    caseSensitive ifTrue:[
11348
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5194
        startIndex := self indexOf:firstChar startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5195
    ] ifFalse:[
11348
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5196
        startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5197
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5198
    [startIndex == 0] whileFalse:[
11348
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5199
        runIdx := startIndex.
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5200
        found := true.
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5201
        1 to:subSize do:[:i |
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5202
            runIdx > mySize ifTrue:[
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5203
                found := false
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5204
            ] ifFalse:[
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5205
                (tester value:(subString at:i) value:(self at:runIdx)) ifFalse:[
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5206
                    found := false
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5207
                ]
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5208
            ].
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5209
            runIdx := runIdx + 1
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5210
        ].
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5211
        found ifTrue:[
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5212
            ^ startIndex
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5213
        ].
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5214
        caseSensitive ifTrue:[
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5215
            startIndex := self indexOf:firstChar startingAt:(startIndex + 1)
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5216
        ] ifFalse:[
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5217
            startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:(startIndex + 1).
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  5218
        ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5219
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5220
    ^ exceptionBlock value
1005
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  5221
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  5222
    "Modified: 23.2.1996 / 15:35:15 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5223
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5224
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5225
restAfter:keyword withoutSeparators:strip
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5226
    "compare the left of the receiver with keyword,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5227
     if it matches return the right.
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5228
     Finally, if strip is true, remove whiteSpace.
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5229
     This method is used to match and extract lines of the form:
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5230
	something: rest
759
908363ce8a32 interest is written with one 'r' (shame on me)
Claus Gittinger <cg@exept.de>
parents: 735
diff changeset
  5231
     where we are interested in rest, but only if the receiver string
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5232
     begins with something.
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5233
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5234
     You may wonder why such a specialized method exists here
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5235
     - this is so common when processing mailboxes,
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5236
     rcs files, nntp/pop3 responses, that is was considered worth
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5237
     a special method here to avoid having the code below a hundred
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5238
     times in variuos places."
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5239
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5240
    |rest|
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5241
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5242
    (self startsWith:keyword) ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5243
	rest := self copyFrom:(keyword size + 1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5244
	strip ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5245
	    rest := rest withoutSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5246
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5247
	^ rest
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5248
    ].
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5249
    ^ nil
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5250
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5251
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5252
     'foo: hello world' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5253
     'funny: something' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5254
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5255
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5256
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:false
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5257
    "
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5258
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5259
    "Created: 25.11.1995 / 11:04:18 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5260
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5261
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5262
!CharacterArray methodsFor:'testing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5263
7958
fba655ee2aa2 endsWith: fixed for character argument
Claus Gittinger <cg@exept.de>
parents: 7950
diff changeset
  5264
endsWith:aStringOrCharacter
fba655ee2aa2 endsWith: fixed for character argument
Claus Gittinger <cg@exept.de>
parents: 7950
diff changeset
  5265
    "return true, if the receiver ends with something, aStringOrCharacter."
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5266
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5267
    |s|
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5268
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5269
    (s := self string) ~~ self ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5270
	^ s endsWith:aStringOrCharacter
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5271
    ].
7958
fba655ee2aa2 endsWith: fixed for character argument
Claus Gittinger <cg@exept.de>
parents: 7950
diff changeset
  5272
    aStringOrCharacter isCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5273
	^ self last = aStringOrCharacter
7958
fba655ee2aa2 endsWith: fixed for character argument
Claus Gittinger <cg@exept.de>
parents: 7950
diff changeset
  5274
    ].
fba655ee2aa2 endsWith: fixed for character argument
Claus Gittinger <cg@exept.de>
parents: 7950
diff changeset
  5275
    ^ super endsWith:aStringOrCharacter
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5276
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5277
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5278
     'hello world' endsWith:'world'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5279
     'hello world' asText allBold endsWith:'world'
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5280
    "
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5281
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5282
    "Modified: 12.5.1996 / 15:49:18 / cg"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5283
!
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5284
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5285
isAlphaNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5286
    "return true, if the receiver is some alphanumeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5287
     i.e. consists of a letter followed by letters or digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5288
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5289
    self size == 0 ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5290
	"mhmh what is this ?"
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5291
	^ false
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5292
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5293
    (self at:1) isLetter ifFalse:[^ false].
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5294
    ^ self conform:[:char | char isLetterOrDigit].
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5295
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5296
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5297
     'helloWorld' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5298
     'foo1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5299
     'f1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5300
     '1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5301
     '+' isAlphaNumeric
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5302
    "
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5303
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5304
    "Modified: / 13-10-2006 / 12:53:49 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5305
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5306
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5307
isBinarySelector
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5308
    "treating the receiver as a message selector, return true if its a binary selector.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5309
     Notice, that st/x does not have a size <= 2 limit for unaries"
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5310
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5311
    |binopChars|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5312
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5313
    (self size > 3) ifTrue:[^ false].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5314
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5315
    binopChars := Scanner binarySelectorCharacters.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5316
    ^ (self conform:[:char | (binopChars includes:char)])
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5317
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5318
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5319
     'foo:bar:' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5320
     #foo:bar: isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5321
     'hello' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5322
     '+' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5323
     '|' isBinarySelector
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5324
     '?' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5325
     ':' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5326
     'a:' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5327
     '->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5328
     '<->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5329
     '::' isBinarySelector
7482
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  5330
    "
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  5331
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  5332
    "Modified: 4.1.1997 / 14:16:14 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5333
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5334
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5335
isBlank
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5336
    "return true, if the receiver contains spaces only"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5337
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5338
    ^ (self contains:[:char | char ~~ Character space]) not
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5339
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5340
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5341
     '' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5342
     '   a    ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5343
     '        ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5344
     '        ' asUnicode16String isBlank
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5345
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5346
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5347
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5348
isKeywordSelector
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5349
    "return true, iff there are only alphanumeric or underline characters separated by colons.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5350
     Must end with a colon."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5351
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5352
    |state|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5353
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5354
    state := #initial.   
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5355
    self do:[:char |
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5356
        (state == #initial or:[ state == #gotColon]) ifTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5357
            (char isLetter or:[ char == $_ ]) ifFalse:[^ false].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5358
            state := #gotCharacter.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5359
        ] ifFalse:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5360
            char == $: ifTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5361
                state := #gotColon.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5362
            ] ifFalse:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5363
                (char isLetterOrDigit or:[char == $_]) ifFalse:[^ false].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5364
            ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5365
        ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5366
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5367
    ^ state == #gotColon.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5368
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5369
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5370
     self assert:(':' isKeywordSelector not).      
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5371
     self assert:(':a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5372
     self assert:('1:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5373
     self assert:('a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5374
     self assert:('_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5375
     self assert:('_a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5376
     self assert:('_1:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5377
     self assert:('_1::' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5378
     self assert:('_:_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5379
     self assert:('a:b:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5380
     self assert:('aa:bb:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5381
     self assert:('aa:bb:a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5382
     self assert:('1:2:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5383
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5384
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5385
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5386
isNameSpaceSelector
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5387
    "Answer true if the receiver contains chars which form a nameSpace selector name.
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5388
     These are of the form ':<ns>::<sel>', where ns is the NameSpace and sel is the regular selector.
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5389
     For example, the #+ selector as seen by the Foo namespace would be actually #':Foo::+'.
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5390
     You cannot easily change this algorithm here, as it is also known by the VM's lookup function."
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5391
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5392
    |i|
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5393
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5394
    (self first == $:) ifFalse:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5395
    i := self indexOf:$: startingAt:2.
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5396
    i == 0 ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5397
    self size <= (i+1) ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5398
    (self at:i+1) == $: ifFalse:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5399
    (self at:i+2) == $: ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5400
    "/ could check if the rest after the ns-prefix and colons is a valid selector...
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5401
    ^ true
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5402
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5403
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5404
     self assert:('+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5405
     self assert:(':+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5406
     self assert:(':Foo:+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5407
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5408
     self assert:(':Foo::+' isNameSpaceSelector).
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5409
     self assert:(':Foo::bar:baz:' isNameSpaceSelector).
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5410
    "
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5411
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5412
    "Created: / 05-03-2007 / 11:35:31 / cg"
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5413
!
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5414
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5415
isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5416
    "return true, if the receiver is some numeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5417
     i.e. consists only of digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5418
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5419
    self size == 0 ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5420
	^ false
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5421
    ].
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5422
    ^ self conform:[:char | char isDigit]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5423
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5424
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5425
     'helloWorld' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5426
     'foo1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5427
     'f1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5428
     '1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5429
     '+' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5430
    "
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5431
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5432
    "Modified: / 13-10-2006 / 12:54:12 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5433
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5434
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5435
isString
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5436
    "return true, if the receiver is some kind of string;
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5437
     true is returned here - redefinition of Object>>isString."
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5438
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5439
    ^ true
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5440
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5441
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5442
isUnarySelector
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5443
    "Answer true if the receiver contains only chars in an ANSI unary method selector, false otherwise."
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5444
9471
7b1df2a2a2d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9425
diff changeset
  5445
    ^ (self first isLetter or:[ self first == $_ ])
9845
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  5446
      and:[ self conform: [ :chr | chr isLetterOrDigit or:[chr == $_] ]]
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  5447
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  5448
    "Modified: / 13-09-2006 / 11:35:15 / cg"
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5449
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5450
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5451
isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5452
    "return true, if the receivers characters make up a valid smalltalk identifier"
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5453
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5454
    |scanner tok|
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5455
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5456
    scanner := Compiler new.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5457
    scanner source:(self readStream).
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  5458
    Parser parseErrorSignal handle:[:ex |
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  5459
        tok := nil.
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  5460
    ] do:[
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  5461
        tok := scanner nextToken.
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  5462
    ].
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5463
    tok ~~ #Identifier ifTrue:[
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  5464
        ^ false
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5465
    ].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5466
    scanner tokenPosition == 1 ifFalse:[^ false].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5467
    ^ scanner sourceStream atEnd.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5468
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5469
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5470
     'foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5471
     '1foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5472
     '_foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5473
     '_foo_bar_' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5474
     'foo ' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5475
     ' foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5476
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5477
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5478
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5479
levenshteinTo:aString
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5480
    "return the levenshtein distance to the argument, aString;
7318
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5481
     this value corresponds to the number of replacements that have to be
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5482
     made to get aString from the receiver.
196
ab5727ae9e38 added asUppercaseFirst / asLowercaseFirst
claus
parents: 163
diff changeset
  5483
     See IEEE transactions on Computers 1976 Pg 172 ff."
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5484
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
  5485
    "
7318
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5486
     in the following, we assume that ommiting a character
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
  5487
     is less of an error than inserting an extra character.
7318
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5488
     Therefore the different insertion (i) and deletion (d) values.
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5489
     s: substitution weight
8646
5b40b09db73b Remove unused method #levenshteinTo:s:c:i:d:
Stefan Vogel <sv@exept.de>
parents: 8632
diff changeset
  5490
     k: keyboard weight (typing a nearby key)
7318
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5491
     c: case weight
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5492
     i: insertion of extra character weight
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5493
     d: delete of a character weight
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5494
    "
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5495
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5496
    ^ self levenshteinTo:aString s:4 k:2 c:1 i:2 d:6
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5497
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5498
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5499
     'computer' levenshteinTo:'computer'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5500
     'cOmputer' levenshteinTo:'computer'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5501
     'cOmpuTer' levenshteinTo:'computer'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5502
     'cimputer' levenshteinTo:'computer'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5503
     'cumputer' levenshteinTo:'computer'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5504
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5505
     'cmputer' levenshteinTo:'computer'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5506
     'coomputer' levenshteinTo:'computer'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5507
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5508
     'ocmprt' levenshteinTo:'computer'
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
  5509
     'computer' levenshteinTo:'computer'
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
  5510
     'ocmputer' levenshteinTo:'computer'
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
  5511
     'cmputer' levenshteinTo:'computer'
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
  5512
     'computer' levenshteinTo:'cmputer'
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
  5513
     'Computer' levenshteinTo:'computer'
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
  5514
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5515
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5516
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5517
levenshteinTo:aString s:substWeight k:kbdTypoWeight c:caseWeight i:insrtWeight d:deleteWeight
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5518
    "parametrized levenshtein.
7318
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5519
     return the levenshtein distance to the argument, aString;
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5520
     this value corrensponds to the number of replacements that have to be
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5521
     made to get aString from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5522
     The arguments are the costs for
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5523
	s:substitution,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5524
	k:keyboard type (substitution),
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5525
	c:case-change,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5526
	i:insertion
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5527
	d:deletion
7318
cc7a8f38f696 better levenshtein
Claus Gittinger <cg@exept.de>
parents: 7313
diff changeset
  5528
     of a character.
196
ab5727ae9e38 added asUppercaseFirst / asLowercaseFirst
claus
parents: 163
diff changeset
  5529
     See IEEE transactions on Computers 1976 Pg 172 ff"
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5530
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5531
    |d  "delta matrix"
196
ab5727ae9e38 added asUppercaseFirst / asLowercaseFirst
claus
parents: 163
diff changeset
  5532
     len1 "{ Class: SmallInteger }"
ab5727ae9e38 added asUppercaseFirst / asLowercaseFirst
claus
parents: 163
diff changeset
  5533
     len2 "{ Class: SmallInteger }"
ab5727ae9e38 added asUppercaseFirst / asLowercaseFirst
claus
parents: 163
diff changeset
  5534
     dim  "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5535
     prevRow row col
196
ab5727ae9e38 added asUppercaseFirst / asLowercaseFirst
claus
parents: 163
diff changeset
  5536
     dimPlus1 "{ Class: SmallInteger }"
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5537
     min pp c1 c2|
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5538
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5539
    len1 := self size.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5540
    len2 := aString size.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5541
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5542
    "create the help-matrix"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5543
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5544
    dim := len1 max:len2.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5545
    dimPlus1 := dim + 1.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5546
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5547
    d := Array new:dimPlus1.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5548
    1 to:dimPlus1 do:[:i |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5549
	d at:i put:(Array new:dimPlus1)
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5550
    ].
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5551
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5552
    "init help-matrix"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5553
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5554
    (d at:1) at:1 put:0.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5555
    row := d at:1.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5556
    1 to:dim do:[:j |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5557
	row at:(j + 1) put:( (row at:j) + insrtWeight )
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5558
    ].
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5559
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5560
    1 to:dim do:[:i |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5561
	 (d at:(i + 1)) at:1 put:(  ((d at:i) at:1) + deleteWeight )
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5562
    ].
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5563
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5564
    1 to:len1 do:[:i |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5565
	c1 := self at:i.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5566
	1 to:len2 do:[:j |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5567
	    c2 := aString at:j.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5568
	    (c1 == c2) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5569
		pp := 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5570
	    ] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5571
		(c1 asLowercase == c2 asLowercase) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5572
		    pp := caseWeight
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5573
		] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5574
		    pp := substWeight.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5575
		    substWeight ~~ kbdTypoWeight ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5576
			(DoWhatIMeanSupport isKey:c1 asLowercase nextTo:c2 asLowercase) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5577
			    pp := kbdTypoWeight.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5578
			].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5579
		    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5580
		]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5581
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5582
	    prevRow := d at:i.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5583
	    row := d at:(i + 1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5584
	    col := j + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5585
	    min := (prevRow at:j) + pp.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5586
	    min := min min:( (row at:j) + insrtWeight).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5587
	    min := min min:( (prevRow at:col) + deleteWeight).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5588
	    row at:col put: min
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5589
	]
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5590
    ].
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5591
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5592
    ^ (d at:(len1 + 1)) at:(len2 + 1)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5593
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5594
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5595
numArgs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5596
    "treating the receiver as a message selector, return how many arguments would it take"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5597
9038
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  5598
    |binopChars|
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  5599
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  5600
    (self size <= Scanner maxBinarySelectorSize) ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5601
	binopChars := Scanner binarySelectorCharacters.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5602
	(self conform:[:eachChar | (binopChars includes:eachChar)]) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5603
	    ^ 1
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5604
	].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5605
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5606
    ^ self occurrencesOf:$:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5607
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5608
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5609
     'foo:bar:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5610
     #foo:bar: numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5611
     'hello' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5612
     '+' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5613
     '++' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5614
     '+++' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5615
     '|' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5616
     '?' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5617
     '_' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5618
     '_:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5619
     '_:_:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5620
     '<->' numArgs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5621
    "
2051
08fd6a693ee3 ask Scanner for valid binarySelector characters in numArgs
Claus Gittinger <cg@exept.de>
parents: 1978
diff changeset
  5622
10088
b8e69093ca13 code cleanup
Claus Gittinger <cg@exept.de>
parents: 10061
diff changeset
  5623
    "Modified: / 13-10-2006 / 11:52:33 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5624
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5625
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5626
partsIfSelector
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5627
    "treat the receiver as a message selector, return a collection of parts."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5628
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5629
    |idx1 "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5630
     coll idx2 sz|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5631
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5632
    coll := OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5633
    idx1 := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5634
    sz := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5635
    [true] whileTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5636
	idx2 := self indexOf:$: startingAt:idx1 + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5637
	(idx2 == 0 or:[idx2 == sz]) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5638
	    coll add:(self copyFrom:idx1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5639
	    ^ coll
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5640
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5641
	coll add:(self copyFrom:idx1 to:idx2).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5642
	idx1 := idx2 + 1
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5643
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5644
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5645
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5646
     'foo:bar:' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5647
     #foo:bar: partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5648
     'hello' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5649
     '+' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5650
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5651
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5652
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5653
spellAgainst: aString
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5654
    "return an integer between 0 and 100 indicating how similar
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
  5655
     the argument is to the receiver.  No case conversion is done.
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
  5656
     This algorithm is much simpler (but also less exact) than the
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
  5657
     levenshtein distance. Experiment which is better for your
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
  5658
     application."
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5659
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5660
    | i1     "{ Class: SmallInteger }"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5661
      i2     "{ Class: SmallInteger }"
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
  5662
      next1  "{ Class: SmallInteger }"
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
  5663
      next2  "{ Class: SmallInteger }"
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5664
      size1  "{ Class: SmallInteger }"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5665
      size2  "{ Class: SmallInteger }"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5666
      score  "{ Class: SmallInteger }"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5667
      maxLen "{ Class: SmallInteger }" |
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5668
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5669
    size1 := self size.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5670
    size2 := aString size.
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
  5671
    maxLen := size1 max:size2.
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5672
    score := 0.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5673
    i1 := i2 := 1.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5674
    [i1 <= size1 and: [i2 <= size2]] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5675
	next1 := i1 + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5676
	next2 := i2 + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5677
	(self at:i1) == (aString at:i2) ifTrue: [
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5678
	    score := score+1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5679
	    i1 := next1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5680
	    i2 := next2
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5681
	] ifFalse: [
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5682
	    (i2 < size2 and: [(self at:i1) == (aString at:next2)]) ifTrue: [
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5683
		i2 := next2
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5684
	    ] ifFalse: [
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5685
		(i1 < size1 and: [(self at:next1) == (aString at:i2)]) ifTrue: [
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5686
		    i1 := next1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5687
		] ifFalse: [
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5688
		    i1 := next1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5689
		    i2 := next2
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5690
		]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5691
	    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5692
	]
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5693
    ].
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5694
1124
53f6970d9d7d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1059
diff changeset
  5695
    score == maxLen ifTrue: [^ 100].
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
  5696
    ^ 100 * score // maxLen
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5697
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5698
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5699
     'Smalltalk' spellAgainst: 'Smalltlak'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5700
     'Smalltalk' spellAgainst: 'smalltlak'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5701
     'Smalltalk' spellAgainst: 'smalltalk'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5702
     'Smalltalk' spellAgainst: 'smalltlk'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5703
     'Smalltalk' spellAgainst: 'Smalltolk'
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
  5704
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5705
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5706
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5707
startsWith:aString
4389
3655a0fea430 definite (true) return for zero-length arg in #startsWith:
Claus Gittinger <cg@exept.de>
parents: 4294
diff changeset
  5708
    "return true, if the receiver starts with something, aString.
3655a0fea430 definite (true) return for zero-length arg in #startsWith:
Claus Gittinger <cg@exept.de>
parents: 4294
diff changeset
  5709
     If the argument is empty, true is returned."
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5710
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5711
    |s|
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5712
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5713
    (s := self string) ~~ self ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5714
	^ s startsWith:aString
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5715
    ].
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5716
    ^ super startsWith:aString
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5717
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5718
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5719
     'hello world' startsWith:'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5720
     'hello world' asText allBold startsWith:'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5721
     'hello world' asText allBold startsWith:''
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5722
    "
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5723
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5724
    "Created: 12.5.1996 / 15:46:40 / cg"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5725
    "Modified: 12.5.1996 / 15:49:24 / cg"
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5726
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5727
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5728
!CharacterArray methodsFor:'tracing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5729
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5730
traceInto:aRequestor level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5731
    "double dispatch into tracer, passing my type implicitely in the selector"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5732
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5733
    ^ aRequestor traceCharacterArray:self level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5734
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5735
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5736
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5737
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5738
!CharacterArray methodsFor:'visiting'!
8395
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5739
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5740
acceptVisitor:aVisitor with:aParameter
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5741
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5742
    ^ aVisitor visitString:self with:aParameter
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5743
! !
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5744
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
  5745
!CharacterArray class methodsFor:'documentation'!
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  5746
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  5747
version
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  5748
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.394 2009-03-16 15:16:39 stefan Exp $'
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  5749
! !
6809
72fee17c14b1 utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6743
diff changeset
  5750
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
  5751
CharacterArray initialize!